计算机二级C语言题库.docx
《计算机二级C语言题库.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言题库.docx(79页珍藏版)》请在冰豆网上搜索。
![计算机二级C语言题库.docx](https://file1.bdocx.com/fileroot1/2023-4/17/c0faab9a-39b8-4eaa-9b4c-697cdc14ac0d/c0faab9a-39b8-4eaa-9b4c-697cdc14ac0d1.gif)
计算机二级C语言题库
二级C语言上机考试复习题库
一、考试题型:
1、程序填空题18分
2、程序改错题18分
3、编程题24分
二、考试时间:
90分钟
四、上机调试环境:
机试C语言的调试环境是VC++6.0。
五、题型类型
1、数值计算(阶乘、求和、求积、数的合并与分解)
2、求素数、偶数、奇数、公约数类型
3、函数调用(递归调用、函数类型等)
4、排序类型(换排序,选择排序、冒泡排序、插入排序)
5、字符串类型(数值转换、位置变换,排序)
6、结构链表类型
7、文件类型
五、上机典型例题
(一)填空题
1.填空题一般是两空或三空,切记!
填完空后,要将下画线删除,得到正确结果后,一定不要忘记把修改后将程序保存。
例1(常考题):
请补充fun函数,fun函数的功能是:
计算并输出n(包括n)以内能被3或7整除的所有自然数的倒数之和。
例如,在主函数中输入50,输出为:
s=1.425889。
注意:
部分源程序已给出。
不得增行或删行,也不得更改程序的结构!
仅在fun函数的横线上填入。
#include
doublefun(intn)
{
inti;
doublesum=0.0;
for(i=1;___1___;i++)
if(i%3==0___2___i%7==0)
sum+=___3___/i;
returnsum;}
main()
{intn;
doubles;
printf("\nInputn:
");
scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n",s);}
例2(常考题)给定程序中,函数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));
}
例3在主函数中从键盘输入若干个数放入数组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);}
例4.(常考题)给定程序中,函数的功能是计算并输出high以内最大的10个素数之和。
High由主函数传给fun函数。
若high的值为100,则函数的值为732。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
。
#include
#include
intfun(inthigh)
{intsum=0,n=0,j,yes;
/**********found**********/
while((high>=2)&&___1___)
{
yes=1;
for(j=2;j<=high/2;j++)
if(high%j==0)
{
/**********found**********/
yes=0;___2___;
}
if(yes){sum+=high;n++;}
/**********found**********/
___3___;
}
returnsum;
}
main()
{
printf("%d\n",fun(100));}
例5(常考题)请补充fun函数,fun函数的功能是:
寻找两个整数之间的所有素数(包括这两个整数),把结果保存在数组bb中,函数返回素数的个数。
例如,输入3和17,输出为:
3、5、7、11、13、17。
注意:
部分源程序已给出。
不得增行或删行,也不得更改程序的结构!
仅在fun函数的横线上填入。
(类似题目有15道)
#include
#include
#defineN1000
intfun(intn,intm,intbb[N])
{inti,j,k=0,flag;
for(j=n;j<=m;j++)
{
___1___;
for(i=2;iif(___2___)
{
flag=0;
break;
}
if(___3___)
bb[k++]=j;}
returnk;}
main()
{intn=0,m=0,i,k;
intbb[N];
printf("Inputn\n");
scanf("%d",&n);
printf("Inputm\n");
scanf("%d",&m);
for(i=0;ibb[i]=0;
k=fun(n,m,bb);
for(i=0;iprintf("%4d",bb[i]);
}
例6(常考题):
请在fun函数的横线上填写若干表达式,使从键盘输入一个整数n,输出斐纳契数列,斐纳契数列一种整数数列,其中每数等于前面两数之和,如01123813……。
注意:
部分源程序已给出。
不得增行或删行,也不得更改程序的结构!
仅在fun函数的横线上填入。
(类似题目有7道)
#include
intfun(intn);
main()
{inti,n=0;
scanf("%d",&n);
for(i=0;iprintf("%d",fun(i));}
intfun(intn)
{if(___1___)
return0;
elseif(___2___)
return1;
else
return___3___;}
例7(常考题):
给定程序中,函数fun的功能是:
将形参n中各位上为偶数的数取出,按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。
例如,从主函数输入一个整数27638496,函数返回值为26846。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
(此类题型有6道)
#include
unsignedlongfun(unsignedlongn)
{unsignedlongx=0,s,i;
intt;
s=n;
/**********found**********/
i=1;
/**********found**********/
while
(2)
{t=s%10;
if(t%2==0)
{/**********found**********/
x=x+t*i;i=3;}
s=s/10;}
returnx;}
main()
{unsignedlongn=-1;
while(n>99999999||n<0)
{printf("input(0");
scanf("%ld",&n);}
printf("\nTheresultis:
%ld\n",fun(n));}
例8(常考题):
给定程序的功能是十进制正整数m转换成k进制(2<=k<=9)数的数字输出,若输入8和2,则输出1000(即十进制8转换成二进制表示为1000)。
请在程序的下划中线填入正确内容并把下划线删除,使程序得出正确结果。
不得删行或减行,也不得更改程序结构。
(此类型有3道)
#include
voidfun(intm,intk)
{intaa[20],i;
for(i=0;m;i++){
/**********found**********/
aa[i]=___1___;
/**********found**********/
___2___;}
for(;i;i--)
/**********found**********/
printf("%d",___3___);}
main()
{intb,n;
printf("\nPleaseenteranumberandabase:
\n");
scanf("%d%d",&n,&b);
fun(n,b);}
9.给定程序中,函数fun的功能是:
把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]中,把奇数从数组中删除,偶数个数通过函数值返回。
例如a所指数组中数据最初排列为:
9、1、4、2、3、6、5、8、7,删除奇数后a所指数组的数据为:
2、4、6、8,返回值为4。
请在下划中线填入正确内容并把下划线删除,使程序得出正确结果。
不得删行或减行,也不得更改程序结构。
#include
#defineN9
intfun(inta[],intn)
{inti,j;
j=0;
for(i=0;i/**********found**********/
if(___1___==0){
/**********found**********/
___2___=a[i];j++;
}
/**********found**********/
return___3___;}
main()
{intb[N]={9,1,4,2,3,6,5,8,7},i,n;
printf("\nTheoriginaldata:
\n");
for(i=0;iprintf("\n");
n=fun(b,N);
printf("\nThenumberofeven:
%d\n",n);
printf("\nTheeven:
\n");
for(i=0;iprintf("\n");}
例10(常考题)程序填空题:
给定程序中,函数fun的功能是用函数指针指向要调用的函数,并进行调用。
规定在第2处使f指向函数f1,在第3处使f指向函数f2。
当调用正确时,程序输出:
x1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序已给出。
不得增行或删行,也不得更改程序的结构!
#include
doublef1(doublex)
{returnx*x;}
doublef2(doublex,doubley)
{returnx*y;}
doublefun(doublea,doubleb)
{
/**********found**********/
___1___(*f)();
doubler1,r2;
/**********found**********/
f=___2___;/*pointfountionf1*/
r1=f(a);
/**********found**********/
f=___3___;/*pointfountionf2*/
r2=(*f)(a,b);
returnr1+r2;
}
main()
{
doublex1=5,x2=3,r;
r=fun(x1,x2);
printf("x1=%f,x2=%f,x1*x1+x1*x2=%f\n",x1,x2,r);
}
例11(常考题):
给定程序的功能是:
将未在字符串s中出现,而在字符串t中出现的字符,构成一个新字符串放在u中,u中的字符按原字符串中字符顺序排列,去掉重复字符。
例如:
当s=“12345”,t=“24677”时,u中的字符串为:
“67”。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构.(此类型有15道)
#include
#include
voidfun(char*s,char*t,char*u)
{inti,j,sl,tl,k,ul=0;
sl=strlen(s);
tl=strlen(t);
for(i=0;i{for(j=0;jif(t[i]==s[j])
break;
if(j>=sl)
{for(k=0;k
if(t[i]==u[k])
___1___;
if(k>=ul)
u[ul++]=___2___;}}
__3___='\0';}
main()
{chars[100],t[100],u[100];
printf("\nPleaseenterstrings:
");
scanf("%s",s);
printf("\nPleaseenterstringt:
");
scanf("%s",t);
fun(s,t,u);
printf("Theresultis:
%s\n",u);}
例12(结构类常考题):
人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。
函数fun功能是:
找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定的编号不存在,返回数据中编号为空串。
请在程序的下划中线填入正确内容并把下划线删除,使程序得出正确结果。
不得删行或减行,也不得更改程序结构。
此类型有7道
#include
#include
#defineN8
typedefstruct
{charnum[10];
intyear,month,day;
}STU;
/**********found**********/
___1___fun(STU*std,char*num)
{inti;STUa={"",9999,99,99};
for(i=0;i/**********found**********/
if(strcmp(___2___,num)==0)
/**********found**********/
return___3____;
returna;}
main()
{STUstd[N]={{"111111",1984,2,15},{"222222",1983,9,21},{"333333",1984,9,1},{"444444",1983,7,15},{"555555",1984,9,28},{"666666",1983,11,15},{"777777",1983,6,22},{"888888",1984,8,19}};
STUp;charn[10]="666666";
p=fun(std,n);
if(p.num[0]==0)
printf("\nNotfound!
\n");
else
{printf("\nSucceed!
\n");
printf("%s%d-%d-%d\n",p.num,p.year,p.month,p.day);
}}
例13(常考题)程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
函数fun的功能是将形参a所指结构体变量s中的数据进行修改,并把a中地址作为函数值返回主函数,在主函数中输出修改后的数据。
例如:
a所指变量s中的学号、姓名、和三门课的成绩依次是:
10001、"ZhangSan"、95、80、88,修改后输出t中的数据应为:
10002、"LiSi"、96、81、89。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
#include
structstudent
{longsno;
charname[10];
floatscore[3];};
/**********found**********/
1fun(structstudent*a)
{inti;
a->sno=10002;
strcpy(a->name,"LiSi");
/**********found**********/
for(i=0;i<3;i++)2+=1;
/**********found**********/
return3;}
main()
{structstudents={10001,"ZhangSan",95,80,88},*t;
inti;
printf("Theoriginaldata:
\n");
printf("No:
%ldName:
%s\nScores:
",s.sno,s.name);
for(i=0;i<3;i++)
printf("%6.2f",s.score[i]);
printf("\n");
t=fun(&s);
printf("Thedataaftermodified:
\n");
printf("No:
%ldName:
%s\nScores:
",t->sno,t->name);
for(i=0;i<3;i++)
printf("%6.2f",t->score[i]);
printf("\n");}
例14(常考题)请补充main函数,该函数的功能是:
先以只读方式打开文件out.dat,再把字符串str中的字符保存到这个磁盘文件中。
在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构.(此类型有9道)
#include
#include
#defineN80
main()
{FILE*fp;
inti=0;
charch;
charstr[N]="I'mastudents!
";
if((fp=fopen(“out.dat”,”1”))==NULL)
{printf("cannotopenout52.dat\n");
exit(0);}
while(str[i])
{ch=str[i];
fputc(ch,2);
putchar(ch);
i++;}
3;}
15.程序填空题(常考题)函数的功能是:
把文本文件B中的内容追加到文本文件A的内容之后。
例如,文件B的内容为“I’mten.”,文件A的内容为“I’mastudent!
”,追加之后文件A的内容为“I’mastudent!
I’mten.”请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
#include
#include
#defineN80
main()
{
FILE*fp,*fp1,*fp2;
inti;
charc[N],t,ch;
system("cls");
if((fp=fopen("A.dat","r"))==NULL)
{printf("fileAcannotbeopened\n");
exit(0);}
printf("Acontentsare:
\n");
for(i=0;(ch=fgetc(fp))!
=EOF;i++)
{c[i]=ch;putchar(c[i]);}
fclose(fp);
if((fp=fopen("B.dat","r"))==NULL)
{printf("fileBcannotbeopened\n");
exit(0);
}
printf("Bcontentsare:
\n");
for(i=0;(ch=fgetc(fp))!
=EOF;i++)
{c[i]=ch;putchar(c[i]);}
fclose(fp);
/**********found