历年全国计算机等级考试二级C语言上机考试题库和答案.docx
《历年全国计算机等级考试二级C语言上机考试题库和答案.docx》由会员分享,可在线阅读,更多相关《历年全国计算机等级考试二级C语言上机考试题库和答案.docx(112页珍藏版)》请在冰豆网上搜索。
历年全国计算机等级考试二级C语言上机考试题库和答案
1.填空
给定程序的功能是调用fun函数建立班级通讯录。
通讯录中记录每位学生的编号,姓名和电话号码。
班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。
请在程序的下划线处填入正确的内容并把下划线删除,是程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.c中
不得增行或删行,也不得更改程序的结构!
voidcheck();
/**********found**********/
intfun(___1___*std)
{
/**********found**********/
___2___*fp;inti;
if((fp=fopen("myfile5.dat","wb"))==NULL)
return(0);
printf("\nOutputdatatofile!
\n");
for(i=0;i/**********found**********/
fwrite(&std[i],sizeof(STYPE),1,___3___);
fclose(fp);
return
(1);
}
修改
给定程序MODI1.C中函数fun的功能是:
先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串后面。
例如:
当s中的字符串为:
“ABCDE”时,
则他中的字符串应为:
“ABCDEEDCBA”。
请改正程序中的错误,使他能得出正确的结果。
注意:
不要改动main函数,不能增行或删行,也不得更改程序的结构!
voidfun(char*s,char*t)
{inti,sl;
sl=strlen(s);
/************found************/
for(i=0;i<=s1;i++)
t[i]=s[i];
for(i=0;it[sl+i]=s[sl-i-1];
/************found************/
t[sl]='\0';
}
程序
函数fun的功能是:
将两个两位数的正整数a,b合并成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。
例如:
a=45,b=12时,调用该函数后,c=4152.
注意:
部分源程序存在文件PROG1.C中。
数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
答案:
B:
STYPEFILEfp
M:
for(i=0;iP:
*c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10);
2.填空
给定程序的功能是:
从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标记。
然后将文件的内容读出显示在屏幕上。
文件的读写分别有自定义函数ReadText和WriteText实现。
请在程序的下划线处填入正确的内容并把下划线删除,是程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.c中
不得增行或删行,也不得更改程序的结构!
main()
{FILE*fp;
if((fp=fopen("myfile4.txt","w"))==NULL)
{printf("openfail!
!
\n");exit(0);}
WriteText(fp);
fclose(fp);
if((fp=fopen("myfile4.txt","r"))==NULL)
{printf("openfail!
!
\n");exit(0);}
ReadText(fp);
fclose(fp);
}
/**********found**********/
voidWriteText(FILE___1___)
{charstr[81];
printf("\nEnterstringwith-1toend:
\n");
gets(str);
while(strcmp(str,"-1")!
=0){
/**********found**********/
fputs(___2___,fw);fputs("\n",fw);
gets(str);
}
}
voidReadText(FILE*fr)
{charstr[81];
printf("\nReadfileandoutputtoscreen:
\n");
fgets(str,81,fr);
while(!
feof(fr)){
/**********found**********/
printf("%s",___3___);
fgets(str,81,fr);
}
}
修改
给定程序MODI1.c中函数fun的功能是:
从低位开始取出长整形变量s中的奇数位上的数,依次构成一个新数放在t中,高位仍放在高位,低位仍放在低位。
例如:
当s中的数为:
7654321时,t中的数为:
7531
请改正程序中的错误,使他能得出正确的结果。
注意:
不要改动main函数,不能增行或删行,也不得更改程序的结构!
#include
/************found************/
voidfun(longs,longt)
{longsl=10;
*t=s%10;
while(s>0)
{s=s/100;
*t=s%10*sl+*t;
/************found************/
sl=sl*100;
}
}
程序
函数fun的功能是:
将两个两位数的正整数a,b合并成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。
例如:
a=45,b=12时,调用该函数后,c=1524.
注意:
部分源程序存在文件PROG1.C中。
数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
2、B:
*fwstrstr
M:
long*tsl=sl*10;
P:
*c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10);
3.填空
给定程序中,函数fun的功能是:
将自然数1~10以及它们的平方根写到名为myfile3txt的文本文档中,然后再顺序读出显示在屏幕上。
请在程序的下划线处填入正确的内容并把下划线删除,是程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.c中
不得增行或删行,也不得更改程序的结构!
intfun(char*fname)
{FILE*fp;inti,n;floatx;
if((fp=fopen(fname,"w"))==NULL)return0;
for(i=1;i<=10;i++)
/**********found**********/
fprintf(___1___,"%d%f\n",i,sqrt((double)i));
printf("\nSucceed!
!
\n");
/**********found**********/
___2___;
printf("\nThedatainfile:
\n");
/**********found**********/
if((fp=fopen(___3___,"r"))==NULL)
return0;
fscanf(fp,"%d%f",&n,&x);
while(!
feof(fp))
{printf("%d%f\n",n,x);fscanf(fp,"%d%f",&n,&x);}
fclose(fp);
return1;
}
修改
给定程序MODI1.c中fun函数的功能是:
将n个无序整数从小到大排序。
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;}
}
}
程序
函数fun的功能是:
将两个两位数的正整数a,b合并成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。
例如:
a=45,b=12时,调用该函数后,c=2514
注意:
部分源程序存在文件PROG1.C中。
数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
3、B:
fpfclose(fp)fname
M:
iP:
*c=(b%10)*1000+(a%10)*100+(b/10)*10+(a/10);
4.填空
给定程序的功能是:
调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0,在复制的过程中,把复制的内容输出到终端屏幕。
主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中
intfun(char*source,char*target)
{FILE*fs,*ft;charch;
/**********found**********/
if((fs=fopen(source,___1___))==NULL)
return0;
if((ft=fopen(target,"w"))==NULL)
return0;
printf("\nThedatainfile:
\n");
ch=fgetc(fs);
/**********found**********/
while(!
feof(___2___))
{putchar(ch);
/**********found**********/
fputc(ch,___3___);
ch=fgetc(fs);
}
fclose(fs);fclose(ft);
printf("\n\n");
return1;
}
修改
给定程序MODI1.C中函数fun的功能是:
将长整形数中每一位上为偶数的数依次取出,构成一个新数放在t中。
高位仍在高位,低位仍在低位。
例如:
当s中的数为:
87653142时,t中的数为:
8642
voidfun(longs,long*t)
{intd;
longsl=1;
*t=0;
while(s>0)
{d=s%10;
/************found************/
if(d%2=0)
{*t=d*sl+*t;
sl*=10;
}
/************found************/
s\=10;
}
}
程序
函数fun的功能是:
将两个两位数的正整数a,b合并成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。
例如:
a=45,b=12时,调用该函数后,c=5142
注意:
部分源程序存在文件PROG1.C中。
数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
4、B:
“r”fsft
M:
(d%2==0)s/=10;
P:
*c=(a%10)*1000+(b/10)*100+(a/10)*10+(b%10);
5.填空
给定程序中已建立一个带有头结点的单向链表,链表中的各节点按结点数据域中的数据递增有序链表。
函数fun的功能是:
把形参x的值放入一个新结点并插入到链表中,插入后结点数据域的值仍保持递增有序。
typedefstructlist
{intdata;
structlist*next;
}SLIST;
voidfun(SLIST*h,intx)
{SLIST*p,*q,*s;
s=(SLIST*)malloc(sizeof(SLIST));
/**********found**********/
s->data=___1___;
q=h;
p=h->next;
while(p!
=NULL&&x>p->data){
/**********found**********/
q=___2___;
p=p->next;
}
s->next=p;
/**********found**********/
q->next=___3___;
}
修改
给定程序MODI1.C中函数fun的功能是:
计算正整数num的各位上的数字之积。
例如,若输入:
252,则输入应该是:
20.若输入:
202,则输出应该是:
0.
longfun(longnum)
{
/************found************/
longk;
do
{k*=num%10;
/************found************/
num\=10;
}while(num);
return(k);
}
请编写一个函数fun,它的功能是:
它的功能是:
计算n门课程的平均分,计算结果作为函数值返回。
例如:
若有5门课程的成绩是:
90.5,72,80,61.5,55
则函数的值为:
71.80
5、B:
xps
M:
longk=1;num/=10;
P:
inti;floatave=0.0;for(i=0;i6.填空
给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,没调用一次fun函数,输出链表尾部结点中的数据,并释放该节点,是链表缩短。
voidfun(SLIST*p)
{SLIST*t,*s;
t=p->next;s=p;
while(t->next!
=NULL)
{s=t;
/**********found**********/
t=t->___1___;
}
/**********found**********/
printf("%d",___2___);
s->next=NULL;
/**********found**********/
free(___3___);
}
修改
给定程序MODI1.C中函数fun的功能是:
将字符串中的字符按逆序输出,单补改变字符串中的内容。
例如,若字符串味abcd,则应输出:
dcba
/************found************/
fun(chara)
{if(*a)
{fun(a+1);
/************found************/
printf("%c"*a);
}
}
程序
请编写一个函数fun,他的功能是:
比较两个字符串的长度(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。
若两个字符串长度相同,则返回第一个字符串。
例如,输入beijingshanghai(为回车键),函数将返回shanghai
6、B:
nextt->datat
M:
fun(char*a)printf("%c",*a);
P:
inti;char*p=s,*q=t;
for(i=0;*p&&*q;i++)
{
p++;q++;
}
if(*p==0&&*q==0)returns;
if(*p)returns;elsereturnt;
7.填空
给定程序中建立一个带有头结点的单向链表,链表中的各节点按数据域递增有序连接。
函数fun的功能是:
删除链表中数据域值相同的结点,使之只保留一个
typedefstructlist
{intdata;
structlist*next;
}SLIST;
voidfun(SLIST*h)
{SLIST*p,*q;
p=h->next;
if(p!
=NULL)
{q=p->next;
while(q!
=NULL)
{if(p->data==q->data)
{p->next=q->next;
/**********found**********/
free(___1___);
/**********found**********/
q=p->___2___;
}
else
{p=q;
/**********found**********/
q=q->___3___;
}
}
}
}
修改
给定程序MODI1.C中函数fun的功能是:
用选择法对数组中的n个元素按从小到大的顺序进行排序。
voidfun(inta[],intn)
{inti,j,t,p;
for(j=0;j/************found************/
p=j
for(i=j;iif(a[i]/************found************/
p=j;
t=a[p];a[p]=a[j];a[j]=t;
}
}
请编写一个函数fun,它的功能是:
求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。
例如,若传3送给m的之位50,则程序输出:
711142122183335424449
答案:
7、B:
qnextnext
M:
p=j;p=i;
P:
inti;*n=0;
for(i=7;i<=m;i++)
if((i%7==0)||(i%11==0))a[(*n)++]=i;
8.填空
给定程序中,函数fun的gongn是:
在带有头结点的单向链表中,查找数据域中值为ch的结点。
找到后通过函数值返回改结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值
typedefstructlist
{intdata;
structlist*next;
}SLIST;
SLIST*creatlist(char*);
voidoutlist(SLIST*);
intfun(SLIST*h,charch)
{SLIST*p;intn=0;
p=h->next;
/**********found**********/
while(p!
=___1___)
{n++;
/**********found**********/
if(p->data==ch)return___2___;
elsep=p->next;
}
return0;
}
修改
给定程序MODI1.C中函数fun的功能是:
删除p所指字符串中的所有空白字符(包括制表符,回车符及换行符)
输入字符串是用“#”结束输入。
fun(char*p)
{inti,t;charc[80];
/************found************/
For(i=0,t=0;p[i];i++)
if(!
isspace(*(p+i)))c[t++]=p[i];
/************found************/
c[t]="\0";
strcpy(p,c);
}
程序
请编写一个函数fun,它的功能是:
将ss所指字符串中所有下标为奇数位置上的字母转换成大写(若该位置上不是字母,则不转换)
例如:
若输入“abc4EFg”,则应输出“aBc4Efg”。
答案:
8、B:
NULLnhead,ch
M:
forc[t]='\0';
P:
inti;for(i=1;i='a'&&ss[i]<='z')ss[i]-=32;
9.填空
给定程序中,函数fun的功能是:
统计出带有头结点的单向链表中的个数,存放在形参n所指的存储单元中。
voidfun(SLIST*h,int*n)
{SLIST*p;
/**********found**********/
___1___=0;
p=h->next;
while(p)
{(*n)++;
/**********found**********/
p=p->___2___;
}
}
main()
{SLIST*head;
inta[N]={12,87,45,32,91,16,20,48},num;
head=creatlist(a);outlist(head);
/**********found**********/
fun(___3___,&num);
printf("\nnumber=%d\n",num);
}
修改
给定程序MODI1.C中函数fun的功能是:
求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数返回值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL
例如:
当字符串中的内容为“abcdefabcdx”t中的内容为“ab”时,输出的结果应是:
abcdx
当字符串中的内容为“abcdefabcdx”t中的内容为“abd”时,则程序输出未找到信息notbefound
char*fun(char*s,char*t)
{
char*p,*r,*a;
/************found************/
a=Null;
while(*s)
{p=s;r=t;
whil