全国计算机等级考试二级c语言上机精选题库共50套.docx
《全国计算机等级考试二级c语言上机精选题库共50套.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级c语言上机精选题库共50套.docx(237页珍藏版)》请在冰豆网上搜索。
![全国计算机等级考试二级c语言上机精选题库共50套.docx](https://file1.bdocx.com/fileroot1/2023-4/20/8af4eea0-1abe-475c-aacc-69f37118ad95/8af4eea0-1abe-475c-aacc-69f37118ad951.gif)
全国计算机等级考试二级c语言上机精选题库共50套
2020年全国计算机等级考试二级c语言上机精选题库(共50套)
第1套题
一、填空题
请补充main函数,该函数的功能是:
计算每个学生科目的平均分,并把结果保存在数组bb中。
例如,当score[N][M]={{78.5,84,83,65,63},{88,91.5,89,93,95},{72.5,65,56,75,77}}时,三个学生的平均分为:
74.791.369.1。
仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其他任何内容。
#include
#defineN3
#defineM5
main()
{
inti,j;
staticfloatscore[N][M]=
{
{78.5,84,83,65,63},
{88,91.5,89,93,95},
{72.5,65,56,75,77}
};
floatbb[N];
for(i=0;i___1___;
for(i=0;i{
for(j=0;j___2___;
bb[i]/=M;
}
for(i=0;iprintf("\nstudent%d\taverage=%5.1f",i+1,bb[i]);
}
二、改错题
下列给定程序中,函数fun的功能是:
根据整型行参m,计算如下公式的值。
y=
例如,若m=2000,则应该输出:
0.000160。
请改正程序中的错误,使它能得出正确的结果。
#include
#include
/********found********/
fun(intm)
{
doubley=0,d;
inti;
/********found********/
for(i=100,i<=m,i+=100)
{
d=(double)i*(double)i;
y+=1.0/d;
}
return(y);
}
main()
{
intn=2000;
printf("\nTheresultis%lf\n",fun(n));
}
三、编程题
请编写函数fun,该函数的功能是:
统计个年龄段的人数。
N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄段的人数放在d[2]中,其余依此类推,把100岁(含100)以上年龄的人数都放在d[10]中。
结果在主函数中输出。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
#defineN50
#defineM11
voidfun(int*a,int*b)
{
}
doublernd()
{
statict=29,c=217,m=1024,r=0;
r=(r*t+c)%m;
return((double)r/m);
}
main()
{
intage[N],i,d[M];
FILE*out;
for(i=0;iage[i]=(int)(115*rnd());
printf("Theoriginaldata:
\n");
for(i=0;iprintf((i+1)%10==0?
"%4d\n":
"%4d",age[i]);
printf("\n\n");
fun(age,d);
out=fopen("out.dat","w");
for(i=0;i<10;i++)
{
printf("%4d---%4d:
%4d\n",i*10,i*10+9,d[i]);
fprintf(out,"%4d---%4d:
%4d\n",i*10,i*10+9,d[i]);
}
printf("Over100:
%4d\n",d[10]);
fprintf(out,"Over100:
%4d\n",d[10]);
fclose(out);
}
答案:
一、1、bb[i]=0或*(bb+i)=0
2、bb[i]+=score[i][j]或bb[i]=b[i]+score[i][j]或bb[i]=score[i][j]+bb[i]
二、1、fun(intm)应改为doublefun(intm)
2、for(i=100,i<=m,i+=100)应改为for(i=100;i<=m;i+=100)
三、
voidfun(int*a,int*b)
{
inti,j;
for(j=0;jb[j]=0;
for(i=0;iif(a[i]>=0&&a[i]<=9)
b[0]+=1;
elseif(a[i]>=10&&a[i]<=19)
b[1]+=1;
elseif(a[i>=20&&a[i]<=29)
b[2]+=1;
elseif(a[i]>=30&&a[i]<=39)
b[3]+=1;
elseif(a[i>=40&&a[i]<=49])
b[4]+=1;
elseif(a[i]>=50&&a[i]<=59)
b[5]+=1;
elseif(a[i]>=60&&a[i]<=69)
b[6]+=1;
elseif(a[i]>=70&&a[i]<=79)
b[7]+=1;
elseif(a[i]>=80&&a[i]<=89)
b[8]+=1;
elseif(a[i]>=90&&a[i]<=99)
b[9]+=1;
else
b[10]+=1;
}
第2套
:
填空题
请补充main函数,该函数的功能是:
从键盘输入一组字符串,以’*’结束输入,并显示出这个字符串。
例如,输入abcdef*,结果显示abcdef。
仅在横线上添入所编写的若干表达式或语句,勿改动函数中的其他任何内容。
#include
#defineN80
main()
{
inti=-1,j=0;
charstr[N];
printf("\nInputastring\n");
do
{
i++;
scanf(_1_);
}while(_2_);
printf("\n*******displaythestring*******\n");
while(j
{
printf(_3_);
j++;
}
}
答案:
(1)“%c”,&str[i]
(2)str[i]!
=’*’
(3)”%c”,str[j]
改错题:
下列给定程序中,函数fun的功能是:
计算并输出high以内最大的10个素数之和。
High由主函数传给fun函数。
若high的值为100,则函数的值为732。
#include
#include
#include
intfun(inthigh)
{
intsum=0,n=0,j,yes;
while((high>=2)&&(n<10))
{
yes=1;
for(j=2;j<=high/2;j++)
/********found********/
if(high%j==0)
{
yes=0;
break
}
if(yes)
{
sum+=high;
n++;
}
high--;
}
returnsum;
}
main()
{
printf("%d\n",fun(100));
}
答案:
break改为break;
程序设计:
请编写函数fun,该函数的功能是:
统计一行字符串中单词的个数,作为函数值返回。
一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始和结束都没有空格。
#include
#include
#defineN80
intfun(char*s)
{
}
main()
{
charline[N];
intnum=0;
FILE*out;
char*test[]={"HelloWorld!
","Thisisateststring.","ab","cdefg,sfl"};
printf("Enterastring:
\n");
gets(line);
num=fun(line);
printf("Thenumberofwordis:
%d\n\n",num);
out=fopen("out.dat","w");
for(num=0;num<4;num++)
printf(out,"%d\n",fun(test[num]));
fclose(out);
}
第3套
第一题:
已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体中,给定程序的功能是找出成绩最低的学生记录,通过形参返回函数。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
#include
#defineN10
typedefstructss
{
charnum[10];
ints;
}STU;
fun(STUa[],STU*s)
{
stuh;
inti;
h=a[0];
for(i=1;iif(a[i].sh=a[i];
*s=h;
}
main()
{
STUa[N]=
{
{"A01",81},{"A02",89},{"A03",66},{"A04",87},
{"A05",77},{"A06",90},{"A07",79},{"A08",61},
{"A09",80},{"A10",71}
},m;
inti;
printf("*****Theoriginaldata*****\n");
for(i=0;iprintf("No=%sMark=%d\n",a[i].num,a[i].s);
fun(a,&m);
printf("*****THERESULT*****\n");
printf("Thelowest:
%s,%d\n",m.num,m.s);
}
第二题:
下列给定程序中,函数fun的功能是:
将字符串p中的所有字符复制到字符串b中,要求每复制三个字符之后插入一个空格。
例如,在调用fun函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串之后,字符串b中的内容则为ABCDEFGHIJK。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
voidfun(char*p,char*b)
{
inti,k=0;
while(*p)
{
/********found********/
i=0;
/********found********/
while(i<3&&*p)
{
b[k]=*p;
k++;
p++;
i++;
}
/********found********/
if(*p)
b[k++]='';
}
b[k]='\0';
}
main()
{
chara[80],b[80];
printf("Enterastring:
");
gets(a);
printf("Theoriginalstring:
");
puts(a);
fun(a,b);
printf("\nThestringafterinsertspace:
");
puts(b);
printf("\n\n");
}
第三题:
请编写一个函数fun,它的功能是:
计算并输出给定整数n的所有因子(不包括1与自身)之和。
规定n的值不大于1000。
例如,若主函数从键盘给n输入的值为856,则输出为sum=763。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
intfun(intn)
{
}
main()
{
intn,sum;
FILE*out;
printf("Inputn:
");
scanf("%d",&n);
sum=fun(n);
printf("sum=%d\n",sum);
out=fopen("out.dat","w");
fprintf(out,"%d\n",fun(123));
fprintf(out,"%d\n",fun(456));
fprintf(out,"%d\n",fun(789));
fprintf(out,"%d\n",fun(147));
fprintf(out,"%d",fun(258));
fclose(out);
}
intfun(intn)
{
ints=0,i;
for(i=2;i<=n-1;i++)
if(n%i==0)
s+=i;
returns;
}
第4套
填空题
请补充main函数,该函数的功能是:
把字符串str1中的非空格字符拷贝到字符串str2中.
例如,若str1=”nicetomeetyou!
”,则str2=”nicetomeetyou!
”
仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其他任何内容.
#include
#defineN80
main()
{
staticcharstr1[N]="nicetomeetyou!
";
charstr2[N];
inti=0,j=0;
printf("\n******str1******\n");
puts(str1);
while(str1[i])
{
if(___1___)
str2[j++]=str1[i];
___2___;
}
printf("\n******str2******\n");
for(i=0;iprintf("%c",str2[i]);
}
改错题
下列给定程序中,函数fun的功能是:
将大写字母转换为对应小写字母之后的第五个字母;若小写字母为v~z,使小写字母的值减21.转换后的小写字母作为函数值返回.例如,若形参是字母A,则转换字母为小写字母f;若形参是字母W,则转换为小写字母b.
请改正函数fun中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
charfun(charc)
{
/********found********/
if(c>='A'&&c<='Z')
c=c-32;
/********found********/
if(c>='a'&&c<='u')
c=c-5;
elseif(c>='v'&&c<='z')
c=c-21;
returnc;
}
main()
{
charc1,c2;
printf("\nEnteraletter(A-Z):
");
c1=getchar();
if(isupper(c1))
{
c2=fun(c1);
printf("\n\nTheletter%cchangeto%c\n",c1,c2);
}
else
{
printf("\nEnter(A-Z)!
\n");
}
}
编程题
请编写函数fun,其功能是:
将s所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为ABCDEFG12345,其中字符A的ASCII码值为奇数、……、
字符1的ASCII码值也为奇数、……都应当删除,其他依次类推。
最后t所指的叔祖中的内容应是BDF24。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
#include
#include
voidfun(char*s,chart[])
{
}
main()
{
chars[100],t[100],Msg[]="PleaseenterstringS:
";
FILE*out;
printf(Msg);
scanf("%s",s);
fun(s,t);
printf("\nTheresultis:
%s\n",t);
out=fopen("out.dat","w");
fun(Msg,t);
fprintf(out,"%s",t);
fclose(out);
}
答案:
第一题:
第1处填空str1[i]!
=’’或’’!
=str1[i]
第2处填空i++或++i或i+=1或i=i+1
第二题:
第1处:
c=c-32;应改为c=c+32;
第2处:
c=c-5;应改为c=c+5;
第三题:
voidfun(char*s,chart[])
{
intI,j=0,n;
n=strlen(s);
for(i=0;iif(s[i]%2==0)
{
t[j]=s[i];
j++;
}
t[j]=’\0’
}
第5套
填空题
请补充main函数,该函数的功能是:
输出一个N*N矩阵,要求非周边元素赋值0,周边元素赋值1。
仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其他内容。
#include
#defineN10
main()
{
intbb[N][N];
inti,j,n;
printf("\nInputn:
\n");
scanf("%d",&n);
for(i=0;ifor(j=0;j{
if(i==0||i==n-1||j==0||j==n-1)
___1___;
else
___2___;
}
printf("\n*****theresult*******\n");
for(i=0;i{
printf("\n\n");
for(j=0;jprintf("%4d",bb[i][j]);
}
}
改错题
下列给定程序中函数fun的功能是:
从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中,例如,当s中的数为7654321时,t中的数为7531。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
/********found********/
voidfun(longs,longt)
{
longs1=10;
*t=s%10;
while(s>0)
{
s=s/100;
*t=s%10*s1+*t;
/********found********/
s1=s1*100;
}
}
main()
{
longs,t;
printf("\nPleaseenters:
");
scanf("%ld",&s);
fun(s,&t);
printf("Theresultis:
%ld\n",t);
}
编程题
请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。
例如,当a=45,b=12,调用该函数后,c=2415。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
#include
voidfun(inta,intb,long*c)
{
}
main()
{
inta,b;
longc;
FILE*out;
printf("Inputa,b;");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("Theresultis:
%ld\n",c);
out=fopen("out.dat","w");
for(a=20;a<50;a+=3)
{
fun(a,109-a,&c);
fprintf(out,"%ld\n",c);
}
fclose(out);
}
答案
第一题(填空题)
第1处填空:
bb[i][j]=1
第2处填空:
bb[i][j]=0
第二题(改错题)
第1处:
voidfun(longs,longt)应改为voidfun(longs,long*t)
第2处:
s1=s1*100;应改为s1=s1*10;
第三题(编程题)
voidfun(inta,