為大家收集整理了《2013計(jì)算機(jī)二級C語言上機(jī)題庫及答案解析(4)》供大家參考,希望對大家有所幫助?。?!
填空題
用篩選法可得到2~n(n<10000)之間的所有素?cái)?shù),方法是:首先從素?cái)?shù)2開始,將所有2的倍數(shù)的數(shù)從數(shù)表中刪去(把數(shù)表中相應(yīng)位置的值置成0);接著從數(shù)
表中找下一個(gè)非0數(shù),并從數(shù)表中刪去該數(shù)的所有倍數(shù);依此類推,直到所找的下一個(gè)數(shù)等于n為止。這樣會得到一個(gè)序列:
2,3,5,7,11,13,17,19,23,…… 函數(shù)fun用篩選法找出所有小于等于n的素?cái)?shù),并統(tǒng)計(jì)素?cái)?shù)的個(gè)數(shù)作為函數(shù)值返回。
請?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include
int fun(int n)
{ int a[10000], i,j, count=0;
for (i=2; i<=n; i++) a[i] = i;
i = 2;
while (i
for (j=a[i]*2; j<=n; j+=___1___)
a[j] = 0;
i++;
while (___2___==0)
i++;
}
printf("\nThe prime number between 2 to %d\n", n);
for (i=2; i<=n; i++)
if (a[i]!=___3___)
{ count++; printf( count%15?"%5d":"\n%5d",a[i]); }
return count;
}
main()
{ int n=20, r;
r = fun(n);
printf("\nThe number of prime is : %d\n", r);
}
解題思路:
第一處:所有2的倍數(shù)的數(shù)從數(shù)表中刪去,所以應(yīng)填:a[i]。
第二處:找出下一個(gè)不是的a[i],所以應(yīng)填:a[i]。
第三處:輸出素?cái)?shù),只要判斷a[i]不是0就是素?cái)?shù),所以應(yīng)填:0。
改錯(cuò)題
給定程序MODI1.C中函數(shù)fun的功能是: 為一個(gè)偶數(shù)尋找兩個(gè)素?cái)?shù), 這兩個(gè)素?cái)?shù)之和等于該偶數(shù),并將這兩個(gè)素?cái)?shù)通過形參指針傳回主函數(shù)。
請改正函數(shù)fun中指定部位的錯(cuò)誤, 使它能得出正確的結(jié)果。
注意: 不要改動(dòng)main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include
#include
void fun(int a,int *b,int *c)
{ int i,j,d,y;
for(i=3;i<=a/2;i=i+2) {
Y=1;
for(j=2;j<=sqrt((double)i);j++)
if(i%j==0) y=0;
if(y==1) {
d==a-i;
for(j=2;j<=sqrt((double)d);j++)
if(d%j==0) y=0;
if(y==1)
{ *b=i; *c=d; }
}
}
}
main()
{ int a,b,c;
do
{ printf("\nInput a: "); scanf("%d",&a); }
while(a%2);
fun(a,&b,&c);
printf("\n\n%d = %d + %d\n",a,b,c);
}
解題思路:
第一處:變量y錯(cuò)寫成Y。
第二處:給變量d進(jìn)行賦值,所以應(yīng)改為:d=a-i;。
編程題
請編寫函數(shù)fun, 它的功能是:計(jì)算并輸出n(包括n)以內(nèi)能被5或9整除的所有自然數(shù)的倒數(shù)之和。
例如,在主函數(shù)中從鍵盤給n輸入20后, 輸出為: s=0.583333。
注意: 要求n的值不大于100。
部分源程序在文件PROG1.C中。
請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號中填入你編寫的若干語句。
給定源程序:
#include
double fun(int n)
{
}
main()
{ int n; double s;
printf("\nInput n: "); scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n",s);
NONO();
}
解題思路:
本題是計(jì)算n(包括n)以內(nèi)能被5或9整除的所有自然數(shù)的倒數(shù)之和。
參考答案:
double fun(int n)
{
int i;
double sum=0.0;
for(i=1; i<=n; i++)
if(i%5 == 0 || i%9 == 0) /* 被5或9整除 */
sum+=1.0/i;
return sum;
}
填空題
用篩選法可得到2~n(n<10000)之間的所有素?cái)?shù),方法是:首先從素?cái)?shù)2開始,將所有2的倍數(shù)的數(shù)從數(shù)表中刪去(把數(shù)表中相應(yīng)位置的值置成0);接著從數(shù)
表中找下一個(gè)非0數(shù),并從數(shù)表中刪去該數(shù)的所有倍數(shù);依此類推,直到所找的下一個(gè)數(shù)等于n為止。這樣會得到一個(gè)序列:
2,3,5,7,11,13,17,19,23,…… 函數(shù)fun用篩選法找出所有小于等于n的素?cái)?shù),并統(tǒng)計(jì)素?cái)?shù)的個(gè)數(shù)作為函數(shù)值返回。
請?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include
int fun(int n)
{ int a[10000], i,j, count=0;
for (i=2; i<=n; i++) a[i] = i;
i = 2;
while (i
for (j=a[i]*2; j<=n; j+=___1___)
a[j] = 0;
i++;
while (___2___==0)
i++;
}
printf("\nThe prime number between 2 to %d\n", n);
for (i=2; i<=n; i++)
if (a[i]!=___3___)
{ count++; printf( count%15?"%5d":"\n%5d",a[i]); }
return count;
}
main()
{ int n=20, r;
r = fun(n);
printf("\nThe number of prime is : %d\n", r);
}
解題思路:
第一處:所有2的倍數(shù)的數(shù)從數(shù)表中刪去,所以應(yīng)填:a[i]。
第二處:找出下一個(gè)不是的a[i],所以應(yīng)填:a[i]。
第三處:輸出素?cái)?shù),只要判斷a[i]不是0就是素?cái)?shù),所以應(yīng)填:0。
改錯(cuò)題
給定程序MODI1.C中函數(shù)fun的功能是: 為一個(gè)偶數(shù)尋找兩個(gè)素?cái)?shù), 這兩個(gè)素?cái)?shù)之和等于該偶數(shù),并將這兩個(gè)素?cái)?shù)通過形參指針傳回主函數(shù)。
請改正函數(shù)fun中指定部位的錯(cuò)誤, 使它能得出正確的結(jié)果。
注意: 不要改動(dòng)main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include
#include
void fun(int a,int *b,int *c)
{ int i,j,d,y;
for(i=3;i<=a/2;i=i+2) {
Y=1;
for(j=2;j<=sqrt((double)i);j++)
if(i%j==0) y=0;
if(y==1) {
d==a-i;
for(j=2;j<=sqrt((double)d);j++)
if(d%j==0) y=0;
if(y==1)
{ *b=i; *c=d; }
}
}
}
main()
{ int a,b,c;
do
{ printf("\nInput a: "); scanf("%d",&a); }
while(a%2);
fun(a,&b,&c);
printf("\n\n%d = %d + %d\n",a,b,c);
}
解題思路:
第一處:變量y錯(cuò)寫成Y。
第二處:給變量d進(jìn)行賦值,所以應(yīng)改為:d=a-i;。
編程題
請編寫函數(shù)fun, 它的功能是:計(jì)算并輸出n(包括n)以內(nèi)能被5或9整除的所有自然數(shù)的倒數(shù)之和。
例如,在主函數(shù)中從鍵盤給n輸入20后, 輸出為: s=0.583333。
注意: 要求n的值不大于100。
部分源程序在文件PROG1.C中。
請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號中填入你編寫的若干語句。
給定源程序:
#include
double fun(int n)
{
}
main()
{ int n; double s;
printf("\nInput n: "); scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n",s);
NONO();
}
解題思路:
本題是計(jì)算n(包括n)以內(nèi)能被5或9整除的所有自然數(shù)的倒數(shù)之和。
參考答案:
double fun(int n)
{
int i;
double sum=0.0;
for(i=1; i<=n; i++)
if(i%5 == 0 || i%9 == 0) /* 被5或9整除 */
sum+=1.0/i;
return sum;
}