二级C语言上机题库内部资料.docx
《二级C语言上机题库内部资料.docx》由会员分享,可在线阅读,更多相关《二级C语言上机题库内部资料.docx(426页珍藏版)》请在冰豆网上搜索。
![二级C语言上机题库内部资料.docx](https://file1.bdocx.com/fileroot1/2023-3/1/9966c25c-0e63-4c1f-8fd7-6f327772ea90/9966c25c-0e63-4c1f-8fd7-6f327772ea901.gif)
二级C语言上机题库内部资料
2011年3月最新计算机二级C语言题库
(根据等考通最新版本自己整理)
第一套
1.程序填空题
在主函数中从键盘输入若干个数放入数组a中,用0结束输入但不计入数组。
下列给定程序中,函数fun的功能是:
输出数组元素中小于平均值的元素。
例如,数组中元素的值依次为34、54、675、456、453、121,则程序的运行结果为34、54、121。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
#include
voidfun(___1___,intn)
{
doublecount=0.0;
doubleaverage=0.0;
inti=0;
for(i=0;i___2___;
average=___3___;
for(i=0;iif(a[i]{
if(i%5==0)
printf("\n");
printf("%d,",a[i]);
}
}
main()
{
inta[1000];
inti=0;
printf("\nPleaseenterdatas(endwith0):
");
do
{
scanf("%d",&a[i]);
}while(a[i++]!
=0);
fun(a,i-1);
}【答案】
(1)inta[]
(2)count+=a[i]或count=count+a[i](3)count/n
2.程序修改题
给定程序中,函数fun的功能是:
根据整型形参m,计算如下公式的值:
y=1+1/(2*2)+1/(3*3)+1/(4*4)+…+1/(m*m)
例如:
若m中的值为5,则应输出1.463611。
请改正程序中的错误,使其能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
doublefun(intm)
{
doubley=1.0;
intI;
/**********found**********/
for(i=2;i/**********found**********/
y+=1/(i*i);
return(y);
}
main()
{
intn=5;
printf("\nTheresultis%lf\n",fun(n));
}【答案】
(1)将for(i=2;ifor(i=2;i<=m;i++)
(2)将y+=1/(i*i);改为:
y+=1.0/(i*i);
3.程序设计题
函数fun的功能是:
将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为“ABCDEFG123456”,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。
最后,t所指的数组中的内容应是“246”。
注意:
部分源程序已给出。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
#include
voidfun(char*s,chart[])
{
}
main()
{
chars[100],t[100];
printf("\nPleaseenterstringS:
");
scanf("%s",s);
fun(s,t);
printf("\nTheresultis:
%s\n",t);
}【答案】
voidfun(char*s,chart[])
{
intk,n=0;
for(k=0;kif(k%2==0&&s[k]%2==0)
t[n++]=s[k];
t[n]='\0';
}
第二套
1.程序填空题
给定程序中,函数fun的功能是:
找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
#defineN4
voidfun(int(*a)[N],int*b)
{
intI,j;
for(i=0;i{
/**********found**********/
b[i]=___1___;
for(j=1;j/**********found**********/
if(b[i]___2___a[j][i])
b[i]=a[j][i];
}
}
main()
{
intx[N][N]={{12,5,8,7},{6,1,9,3},{1,2,3,4},{2,8,4,3}},y[N],I,j;
printf("\nThematrix:
\n");
for(i=0;i{
for(j=0;jprintf("%4d",x[i][j]);
printf("\n");
}
/**********found**********/
fun(___3___);
printf("\nTheresultis:
");
for(i=0;iprintf("\n");
}【答案】
(1)a[0][i]
(2)<=或<(3)x,y
2.程序修改题
给定程序中,函数fun的功能是:
求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。
例如,当字符串中的内容为“abcdabfabcdx”、t中的内容为“ab”时,输出结果应是abcdx。
当字符串中的内容为“abcdabfabcdx”、t中的内容为“abd”时,则程序输出未找到信息notbefound!
。
请改正程序中的错误,使其能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
char*fun(char*s,char*t)
{
char*p,*r,*a;
/**********found**********/
a=Null;
while(*s)
{
p=s;r=t;
while(*r)
/**********found**********/
if(r==p)
{r++;p++;}
elsebreak;
if(*r=='\0')a=s;
s++;
}
returna;
}
main()
{
chars[100],t[100],*p;
printf("\nPleaseenterstringS:
");
scanf("%s",s);
printf("\nPleaseentersubstringt:
");
scanf("%s",t);
p=fun(s,t);
if(p)printf("\nTheresultis:
%s\n",p);
elseprintf("\nNotfound!
\n");
}【答案】
(1)将a=Null;改为:
a=NULL;
(2)将if(r==p)改为:
if(*r==*p)
3.程序设计题
编写函数fun,它的功能是:
利用以下所示的简单迭代方法求方程cos(y)-y=0的一个实根。
Yn+1=cos(yn)
迭代步骤如下:
(1)取y1初值为0.0。
(2)y0=y1,把y1的值赋给y0。
(3)y1=cos(y0),求出一个新的y1。
(4)若y0-y1的绝对值小于0.000001,则执行步骤(5),否则执行步骤
(2)。
(5)所求y1就是方程cos(x)-y=0的一个实根,作为函数值返回。
程序将输出结果Result=0.739085。
注意:
部分源程序已给出。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。
#include
#include
#include
floatfun()
{
}
main()
{
FILE*out;
floatcos=fun();
printf("Result=%f\n",cos);
out=fopen("outfile.dat","w");
fprintf(out,"%f",cos);
fclose(out);
}【答案】
floaty1=0.0,y0;
do
{
y0=y1;
y1=cos(y0);
}
while(fabs(y0-y1)>=1e-6);
returny1;
第三套
1.程序填空题
程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
所有学生数据均以二进制方式输出到student.dat文件中。
函数fun的功能是从指定文件中找出指定学号的学生数据,读入此学生数据,对该生的分数进行修改,使每门课的分数加3分,修改后重写文件中该学生的数据,即用该学生的新数据覆盖原数据,其他学生数据不变;若找不到,则什么都不做。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
#defineN5
typedefstructstudent
{longsno;
charname[10];
floatscore[3];
}STU;
voidfun(char*filename,longsno)
{
FILE*fp;
STUn;intI;
fp=fopen(filename,"rb+");
/**********found**********/
while(!
___1___)
{
fread(&n,sizeof(STU),1,fp);
/**********found**********/
if(n.sno___2___)break;
}
if(!
feof(fp))
{
for(i=0;i<3;i++)n.score[i]+=3;
/**********found**********/
fseek(fp,1L*___3___,SEEK_CUR);
fwrite(&n,sizeof(STU),1,fp);
}
fclose(fp);
}
main()
{
STUt[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},{10005,"ZhangSan",95,80,88}},ss[N];
intI,j;FILE*fp;
fp=fopen("student.dat","wb");
fwrite(t,sizeof(STU),N,fp);
fclose(fp);
printf("\nTheoriginaldata:
\n");
fp=fopen("student.dat","rb");
fread(ss,sizeof(STU),N,fp);
fclose(fp);
for(j=0;j{
printf("\nNo:
%ldName:
%-8sScores:
",
ss[j].sno,ss[j].name);
for(i=0;i<3;i++)
printf("%6.2f",ss[j].score[i]);
printf("\n");
}
fun("student.dat",10003);
fp=fopen("student.dat","rb");
fread(ss,sizeof(STU),N,fp);
fclose(fp);
printf("\nThedataaftermodifying:
\n");
for(j=0;j{
printf("\nNo:
%ldName:
%-8sScores:
",
ss[j].sno,ss[j].name);
for(i=0;i<3;i++)
printf("%6.2f",ss[j].score[i]);
printf("\n");
}
}【答案】
(1)feof(fp)
(2)==sno(3)sizeof(STU)
2.程序修改题
给定程序中,函数fun的功能是:
计算正整数num的各位上的数字之积。
例如,若输入252,则输出应该是20;若输入202,则输出应该是0。
请改正程序中的错误,使其能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
longfun(longnum)
{【答案】
(1)将longk;改为:
longk=1;或longk;k=1;
(2)将num\=10;改为:
num/=10;3.程序设计题
程序定义了N×N的二维数组,并在主函数中自动赋值。
请编写函数fun(inta[][N],intn),函数的功能是:
使N×N的二维数组左下三角元素中的值乘以n。
例如:
若n的值为3,a数组中的值为:
197
238
456
则返回主程序后a数组中的值应为:
397
698
121518
注意:
部分源程序已给出。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
#include
#defineN5
intfun(inta[][N],intn)
{
}
main()
{
inta[N][N],n,I,j;
printf("***Thearray***\n");
for(i=0;i{
for(j=0;j{
a[i][j]=rand()%10;
printf("%4d",a[i][j]);}
printf("\n");
}
don=rand()%10;while(n>=3);
printf("n=%4d\n",n);
fun(a,n);
printf("***THERESULT***\n");
for(i=0;i{
for(j=0;jprintf("%4d",a[i][j]);
printf("\n");
}
}【答案】
intfun(inta[][N],intn)
{
intj,k;
for(j=0;jfor(k=0;ka[j][k]*=n;
}
第四套
1.程序填空题
请补充函数fun,该函数的功能是:
统计所有小于等于x(x>2)的素数的个数,素数的个数作为函数值返回。
例如,输入x=20,结果:
2,3,5,7,11,13,17,19。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
intfun(intx)
{
intI,j,count=0;
printf("\nTheprimenumberbetween2to%d\n",x);
for(i=2;i<=x;i++)
{
for(___1___;j
if(___2___%j==0)
break;
if(___3___>=i)
{
count++;
printf(count%15?
"%5d":
"\n%5d",i);
}
}
returncount;
}
main()
{
intx=20,result;
result=fun(x);
printf("\nThenumberofprimeis:
%d\n",result);
}【答案】
(1)j=2
(2)i(3)j
2.程序修改题
给定程序中,函数fun的功能是:
依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。
请改正程序中的错误,使其能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
voidfun(char*s)
{
intI,j;
for(i=0,j=0;s[i]!
='\0';i++)
if(s[i]>='0'&&s[i]<='9')
/**********found**********/
s[j]=s[i];
/**********found**********/
s[j]="\0";
}
main()
{
charitem[80];
printf("\nEnterastring:
");
gets(item);
printf("Thestringis:
%s\n",item);
fun(item);
printf("Thestringofchangingis:
%s\n",item);
}【答案】
(1)将s[j]=s[i];改为:
s[j++]=s[i];
(2)将s[j]="\0";改为:
s[j]='\0';3.程序设计题
请编写函数fun,它的功能是:
计算n门课程的平均分,计算结果作为函数值返回。
例如,若有5门课程的成绩是90.5、72、80、61.5、55,则函数的值为:
71.80。
注意:
部分源程序已给出。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
floatfun(float*a,intn)
{
}
main()
{
floatscore[30]={90.5,72,80,61.5,55},
aver;
aver=fun(score,5);
printf("Averagescoreis:
%5.2f\n",
aver);
}【答案】
floatfun(float*a,intn)
{
floats=0.0;
intI;
for(i=0;is+=a[i];
returns/n;
}
第五套
1.程序填空题
给定程序中,函数fun的功能是:
计算下式前n项的和作为函数值返回:
S=1*3/2*2+3*5/4*4+5*7/6*6+…+(2n-1)*(2n+2)/
(2n)*(2n)
例如:
当行参n的值为10时,函数返回9.612558。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
部分源程序已给出。
不得增行或删行,也不得更改程序的结构!
#include
doublefun(intn)
{
intI;doubles,t;
/**********found**********/
s=___1___;
/**********found**********/
for(i=1;i<=___2___;i++)
{
t=2.0*I;
/**********found**********/
s=s+(2.0*i-1)*(2.0*i+1)/___3___;
}
returns;
}
main()
{
intn=-1;
while(n<0)
{
printf("Pleaseinput(n>0):
");
scanf("%d",&n);
}
printf("Theresultis:
%f\n",fun(n));
}【答案】
(1)0
(2)n(3)(t*t)
2.程序修改题
在给定程序中,fun函数的功能是:
将n个无序整数从小到大排序。
请改正程序中的错误,使其能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
fun(intn,int*a)
{
intI,j,p,t;
for(j=0;j{
p=j;
/**********found**********/
for(i=j+1;iif(a[p]>a[i])
/**********found**********/
t=I;
if(p!
=j)
{t=a[j];a[j]=a[p];a[p]=t;}
}
}
putarr(intn,int*z)
{
intI;
for(i=1;i<=n;i++,z++)
{
printf("%4d",*z);
if(!
(i%10))printf("\n");
}
printf("\n");
}
main()
{
intaa[20]={9,3,0,4,1,2,5,6,8,10,7},
n=11;
printf("Beforesorting%dnumbers:
\n",n);
putarr(n,aa);
fun(n,aa);
printf("Aftersorting%dnumbers:
\n",n);
putarr(n,aa);
}【答案】
(1)将for(i=j+1;ifor(i=j+1;i(2)将t=i;改为:
p=i;3.程序设计题
请编写一个函数unsignedfun(unsignedn),n是一个大于10的无符号整数,若n是m(m≥2)位的整数,则函数求出n的后m-1位的数作为函数值返回。
例如,若n的值为1234,则fun()函数值为234。
注意:
部分源程序已给出。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。
#include