计算机二级考试C语言模拟题五套.docx
《计算机二级考试C语言模拟题五套.docx》由会员分享,可在线阅读,更多相关《计算机二级考试C语言模拟题五套.docx(25页珍藏版)》请在冰豆网上搜索。
计算机二级考试C语言模拟题五套
题库6
一、填空题
给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#defineN8
typedefstructlist
{intdata;
structlist*next;
}SLIST;
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___);
}
SLIST*creatlist(int*a)
{SLIST*h,*p,*q;inti;
h=p=(SLIST*)malloc(sizeof(SLIST));
for(i=0;i
{q=(SLIST*)malloc(sizeof(SLIST));
q->data=a[i];p->next=q;p=q;
}
p->next=0;
returnh;
}
voidoutlist(SLIST*h)
{SLIST*p;
p=h->next;
if(p==NULL)printf("\nThelistisNULL!
\n");
else
{printf("\nHead");
do{printf("->%d",p->data);p=p->next;}while(p!
=NULL);
printf("->End\n");
}
}
main()
{SLIST*head;
inta[N]={11,12,15,18,19,22,25,29};
head=creatlist(a);
printf("\nOutputfromhead:
\n");outlist(head);
printf("\nOutputfromtail:
\n");
while(head->next!
=NULL){
fun(head);
printf("\n\n");
printf("\nOutputfromheadagain:
\n");outlist(head);
}
}
解题答案:
/**********第一空**********/
t=t->next;
/**********第二空**********/
printf("%d",t->data);
/**********第三空**********/
free(t);
******************************************
二、改错题:
给定程序MODI1.C中函数fun的功能是:
将字符串中的字符按逆序输出,但不改变字符串中的内容。
例如,若字符串为abcd,则应输出:
dcba。
请改正程序中的错误,使它能计算出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
/************found************/
fun(chara)
{if(*a)
{fun(a+1);
/************found************/
printf("%c"*a);
}
}
main()
{chars[10]="abcd";
printf("处理前字符串=%s\n处理后字符串=",s);
fun(s);printf("\n");
}
解题答案:
/************found************/
voidfun(char*a)
/************found************/
printf("%c",*a);
******************************************
三、程序题:
请编写一个函数fun,它的功能是:
比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。
若两个字符串长度相同,则返回第一个字符串。
例如,输入beijingshanghai(为回车键),函数将返回shanghai。
注意:
部分源程序存在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include
char*fun(char*s,char*t)
{
}
main()
{chara[20],b[20];
voidNONO();
printf("Input1thstring:
");
gets(a);
printf("Input2thstring:
");
gets(b);
printf("%s\n",fun(a,b));
NONO();
}
voidNONO()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。
*/
FILE*fp,*wf;
inti;
chara[20],b[20];
fp=fopen("in.dat","r");
wf=fopen("out.dat","w");
for(i=0;i<10;i++){
fscanf(fp,"%s%s",a,b);
fprintf(wf,"%s\n",fun(a,b));
}
fclose(fp);
fclose(wf);
参考答案:
{
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的功能是:
删除链表中数据域值相同的结点,使之只保留一个。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#defineN8
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___;
}
}
}
}
SLIST*creatlist(int*a)
{SLIST*h,*p,*q;inti;
h=p=(SLIST*)malloc(sizeof(SLIST));
for(i=0;i<>
{q=(SLIST*)malloc(sizeof(SLIST));
q->data=a[i];p->next=q;p=q;
}
p->next=0;
returnh;
}
voidoutlist(SLIST*h)
{SLIST*p;
p=h->next;
if(p==NULL)printf("\nThelistisNULL!
\n");
else
{printf("\nHead");
do{printf("->%d",p->data);p=p->next;}while(p!
=NULL);
printf("->End\n");
}
}
main()
{SLIST*head;inta[N]={1,2,2,3,4,4,4,5};
head=creatlist(a);
printf("\nThelistbeforedeleting:
\n");outlist(head);
fun(head);
printf("\nThelistafterdeleting:
\n");outlist(head);
}
解题答案:
/**********found**********/
free(q);
/**********found**********/
q=p->next;
/**********found**********/
q=q->next;
******************************************
二、改错题:
给定程序MODI1.C中函数fun的功能是:
用选择法对数组中的n个元素按从小到大的顺序进行排序。
请修改程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行和删行,也不得更改程序的结构!
给定源程序:
#include
#defineN20
voidfun(inta[],intn)
{inti,j,t,p;
for(j=0;j /************found************/
p=j
for(i=j;i if(a[i] /************found************/
p=j;
t=a[p];a[p]=a[j];a[j]=t;
}
}
main()
{
inta[N]={9,6,8,3,-1},i,m=5;
printf("排序前的数据:
");
for(i=0;i fun(a,m);
printf("排序后的数据:
");
for(i=0;i }
解题答案:
/************found************/
p=j;
/************found************/
p=i;
******************************************
三、程序题:
请编写一个函数fun,它的功能是:
求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。
例如,若传送给m的值为50,则程序输出:
711142122283335424449
注意:
部分源程序存在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#defineM100
voidfun(intm,int*a,int*n)
{
}
main()
{intaa[M],n,k;
voidNONO();
fun(50,aa,&n);
for(k=0;k if((k+1)%20==0)printf("\n");
elseprintf("%4d",aa[k]);
printf("\n");
NONO();
}
voidNONO()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。
*/
FILE*fp,*wf;
inti,n,j,k,aa[M],sum;
fp=fopen("in.dat","r");
wf=fopen("out.dat","w");
for(i=0;i<10;i++){
fscanf(fp,"%d,",&j);
fun(j,aa,&n);
sum=0;
for(k=0;k fprintf(wf,"%d\n",sum);
}
fclose(fp);
fclose(wf);
}
参考答案:
{
inti;
*n=0;
for(i=7;i<=m;i++)
if((i%7==0)||(i%11==0))a[(*n)++]=i;
}
题库8
一、填空题:
给定程序中,函数fun的功能是:
在带有头结点的单向链表中,查找数据域中值为ch的结点。
找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#defineN8
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;
}
main()
{SLIST*head;intk;charch;
chara[N]={'m','p','g','a','w','x','r','d'};
head=creatlist(a);
outlist(head);
printf("Enteraletter:
");
scanf("%c",&ch);
/**********found**********/
k=fun(___3___);
if(k==0)printf("\nNotfound!
\n");
elseprintf("Thesequencenumberis:
%d\n",k);
}
SLIST*creatlist(char*a)
{SLIST*h,*p,*q;inti;
h=p=(SLIST*)malloc(sizeof(SLIST));
for(i=0;i<>
{q=(SLIST*)malloc(sizeof(SLIST));
q->data=a[i];p->next=q;p=q;
}
p->next=0;
returnh;
}
voidoutlist(SLIST*h)
{SLIST*p;
p=h->next;
if(p==NULL)printf("\nThelistisNULL!
\n");
else
{printf("\nHead");
do
{printf("->%c",p->data);p=p->next;}
while(p!
=NULL);
printf("->End\n");
}
}
解题答案:
/**********第一空**********/
while(p!
=0)
/**********第二空**********/
if(p->data==ch)returnn;
/**********第三空**********/
k=fun(head,ch);
******************************************
二、改错题:
给定程序MODI1.C中函数fun的功能是:
删除p所指字符串中的所有空白字符(包括制表符、回车符及换行符)。
输入字符串时用'#'结束输入。
请改正程序中的错误,使它能输出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#include
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);
}
main()
{charc,s[80];
inti=0;
printf("Inputastring:
");
c=getchar();
while(c!
='#')
{s[i]=c;i++;c=getchar();}
s[i]='\0';
fun(s);
puts(s);
}
解题答案:
/************found************/
for(i=0,t=0;p[i];i++)
/************found************/
c[t]='\0';
******************************************
三、程序题:
请编写一个函数fun,它的功能是:
将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
例如,若输入"abc4EFg",则应输出"aBc4EFg"。
注意:
部分源程序存在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include
#include
voidfun(char*ss)
{
}
main()
{chartt[81];
voidNONO();
printf("\nPleaseenteranstringwithin80characters:
\n");gets(tt);
printf("\n\nAfterchanging,thestring\n\"%s\"",tt);
fun(tt);
printf("\nbecomes\n\"%s\"\n",tt);
NONO();
}
voidNONO()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。
*/
FILE*fp,*wf;
chartt[81];
inti;
fp=fopen("in.dat","r");
wf=fopen("out.dat","w");
for(i=0;i<10;i++){
fscanf(fp,"%s",tt);
fun(tt);
fprintf(wf,"%s\n",tt);
}
fclose(fp);
fclose(wf);
}
参考答案:
{
inti;
for(i=1;i if(ss[i]>='a'&&ss[i]<='z')ss[i]-=32;
}
}
题库9
一、填空题:
给定程序中,函数fun的功能是:
统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#defineN8
typedefstructlist
{intdata;
structlist*next;
}SLIST;
SLIST*creatlist(int*a);
voidoutlist(SLIST*);
voidfun(SLIST*h,int*n)
{SLIST*p;
/**********found**********/
___1___=0;
p=h->next;
while(p