C语言填空题.docx
《C语言填空题.docx》由会员分享,可在线阅读,更多相关《C语言填空题.docx(61页珍藏版)》请在冰豆网上搜索。
C语言填空题
C语言填空题
第1套
给定程序中,函数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;*np=h->next;
while(p)
{(*n)++;
/**********found**********/p=p->___2___;next}
}
main()
{SLIST*head;
inta[N]={12,87,45,32,91,16,20,48},num;
head=creatlist(a);outlist(head);/**********found**********/fun(___3___,&num);headprintf("\nnumber=%d\n",num);}
SLIST*creatlist(inta[]){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("ThelistisNULL!
\n");
else
{printf("\nHead");
do
{printf("->%d",p->data);p=p->next;}
while(p!
=NULL);
printf("->End\n");
}
}
解题思路:
本题是要求统计出带有头结点的单向链表中结点的个数。
第一处:
对n所指的存储单元进行初始化,所以应填:
*n。
第二处:
指向p的下一个结点,所以应填:
next。
第三处:
函数调用,在主函数中已经给出了head,所以应填:
head。
第2套给定程序中,函数fun的功能是:
将N×N矩阵中元素的值按列右移1个位置,右边被移出
矩阵的元素绕回左边。
例如,N=3,有下列矩阵123
456
789
计算结果为
312
645
978
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构~
给定源程序:
#include
#defineN4
voidfun(int(*t)[N]){inti,j,x;
/**********found**********/for(i=0;i<___1___;i++)N{
/**********found**********/x=t[i][___2___];N-1for(j=N-1;j>=1;j--)t[i][j]=t[i][j-1];
/**********found**********/
t[i][___3___]=x;0
}
}
main()
{intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;
printf("Theoriginalarray:
\n");for(i=0;i{for(j=0;jprintf("\n");
}
fun(t);
printf("\nTheresultis:
\n");for(i=0;i{for(j=0;jprintf("\n");
}
}
解题思路:
第一处:
函数fun是对N×N矩阵进行操作,for循环的终止值为N。
第二处:
把最后一列的元素值赋值给临时变量x保存用来交换,所以应填:
N-1。
第三处:
第1列元素值使用x替换,由于C语言的下标是从0开始的,所以应填:
0。
第3套
给定程序中,函数fun的功能是:
将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。
例如,形参s所指的字符串为:
def35adh3kjsdf7。
执行结果为:
defadhkjsdf3537。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构~
给定源程序:
#include
voidfun(char*s)
{inti,j=0,k=0;chart1[80],t2[80];for(i=0;s[i]!
='\0';i++)
if(s[i]>='0'&&s[i]<='9')
{
/**********found**********/
t2[j]=s[i];___1___;j++
}
elset1[k++]=s[i];
t2[j]=0;t1[k]=0;
/**********found**********/
for(i=0;i/**********found**********/
for(i=0;i<___3___;i++)s[k+i]=t2[i];j
}
main()
{chars[80]="ba3a54j7sd567sdffs";printf("\nTheoriginalstringis:
%s\n",s);
fun(s);
printf("\nTheresultis:
%s\n",s);}
解题思路:
t2是存放数字字符串,t1是存放非数字字符串。
第一处:
t2存放数字字符串的位置是由j来控制的,每添加一个,j必须加1,所以应填:
j++。
第二处:
利用for循环把t1字符串添加到原字符串s中,所以应填:
s[i]=t1[i]。
第三处:
利用for循环把t2字符串添加到原字符串s的尾部,其中数字字符串的长度为j,所以应填:
j。
第4套
给定程序中,函数fun的功能是:
有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。
例如,若N=3,有下列矩阵:
123
456
789
计算结果为
100
650
10149
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构~
给定源程序:
#include
#defineN4
/**********found**********/
voidfun(int(*t)___1___)[N]{inti,j;
for(i=1;i{for(j=0;j
{
/**********found**********/
___2___=t[i][j]+t[j][i];t[i][j]/**********found**********/
___3___=0;t[j][i]}
}
}
main()
{intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;
printf("\nTheoriginalarray:
\n");for(i=0;i{for(j=0;jprintf("\n");
}
fun(t);
printf("\nTheresultis:
\n");for(i=0;i{for(j=0;jprintf("\n");
}
}
解题思路:
第一处:
形参t的定义,整数数组其宽度为N,所以应填:
[N]。
第二处:
对称元素相加,其结果仍存放在左下三角元素中,所以应填:
t[i][j]。
第三处:
右上三角元素置为0,所以应填:
t[j][i]。
第5套
给定程序中,函数fun的功能是:
对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。
例如,形参s所指的字符串为:
baawrskjghzlicda,执行后p所指字符数组中的字符串应为:
aachjlsw。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构~
给定源程序:
#include
voidfun(char*s,char*p)
{inti,j,n,x,t;
n=0;
for(i=0;s[i]!
='\0';i++)n++;for(i=1;i/**********found**********/
___1___;t=i/**********found**********/
for(j=___2___+2;js[j])t=j;
if(t!
=i)
{x=s[i];s[i]=s[t];s[t]=x;}}
for(i=1,j=0;i/**********found**********/p[j]=___3___;'\0'}
main()
{chars[80]="baawrskjghzlicda",p[50];
printf("\nTheoriginalstringis:
%s\n",s);
fun(s,p);
printf("\nTheresultis:
%s\n",p);}
解题思路:
第一处:
取外循环的控制变量,所以应填:
t=i。
第二处:
内循环的起始变量,应该是i+2,所以应填:
i。
第三处:
新字符串处理完后应添加字符串结束符,所以应填:
'\0'。
第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___;next}
/**********found**********/printf("%d",___2___);t->datas->next=NULL;
/**********found**********/free(___3___);t}
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);
}
}
解题思路:
本题是对已经建立的链表,通过调用一次函数就输出链表尾部的数据。
程序中共有三处要填上适当的内容,使程序能运行出正确的结果。
第一处:
由于本题要求输出链表尾部的数据,函数是利用while循环语句找出链表尾部的指针并存入临时变量s中,那么每循环一次就要判断链表是否已结束位置,如果是,则退出循环,进行输出,由于是通过t指针变量进行操作的,因此,都要取t的next指针重新赋给t来实现,所以本处应填next。
第二处:
输出最后一个结点的数据,所以应填t->data或(*t).data。
第三处:
输出出最后一个结点数据后,并把此结点删除了,程序要求释放内存,所以应填t。
第7套
给定程序中,函数fun的功能是:
计算N×N矩阵的主对角线元素和反向对角线元素之和,并作为函数值返回。
注意:
要求先累加主对角线元素中的值,然后累加反向对角线元素中
的值。
例如,若N=3,有下列矩阵:
123
456
789
fun函数首先累加1、5、9,然后累加3、5、7,函数的返回值为30。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构~
给定源程序:
#include
#defineN4
fun(intt[][N],intn)
{inti,sum;
/**********found**********/
___1___;sum=0for(i=0;i/**********found**********/
sum+=___2___;t[i][i]for(i=0;i/**********found**********/
sum+=t[i][n-i-___3___];1
returnsum;
}
main()
{intt[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10},i,j;
printf("\nTheoriginaldata:
\n");for(i=0;i{for(j=0;j}
printf("Theresultis:
%d",fun(t,N));}
解题思路:
第一处:
变量sum是用来存放主对角线元素和反向对角线元素之和,要对其进行初始化,所以应填:
sum=0。
第二处:
对主对角线元素值累加,所以应填:
t[i][i]。
第三处:
对反向对角线元素值累加,所以应填:
1。
第8套
给定程序中,函数fun的功能是:
找出100,999之间(含100和999)所有整数中各位上数字之和为x(x为一正整数)的整数,然后输出;符合条件的整数个数作为函数值返回。
例如,当x值为5时,100,999之间各位上数字之和为5的整数有:
104、113、122、131、140、203、212、221、230、302、311、320、401、410、500。
共有15个。
当x值为27时,各位数字之和为27的整数是:
999。
只有1个。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构~
给定源程序:
#include
fun(intx)
{intn,s1,s2,s3,t;
n=0;
t=100;
/**********found**********/while(t<=__1__){999/**********found**********/s1=t%10;s2=(__2__)%10;s3=t/100;t/10/**********found**********/if(s1+s2+s3==__3__)x{printf("%d",t);
n++;
}
t++;
}
returnn;
}
main()
{intx=-1;
while(x<0)
{printf("Pleaseinput(x>0):
");scanf("%d",&x);}
printf("\nTheresultis:
%d\n",fun(x));
}
解题思路:
第一处:
使用while循环找出100,999之间所有整数,所以应填:
999。
第二处:
s2是求十位数字,所以应填:
t/10。
第三处:
各位数字之和为x,所以应填:
x。
第9套
给定程序中,函数fun的功能是:
将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。
例如,输入一个数:
27638496,新的数:
为739。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构~
给定源程序:
#include
voidfun(unsignedlong*n)
{unsignedlongx=0,i;intt;i=1;
while(*n)
/**********found**********/{t=*n%__1__;10/**********found**********/if(t%2!
=__2__)0{x=x+t*i;i=i*10;}
*n=*n/10;
}
/**********found**********/*n=__3__;x}
main()
{unsignedlongn=-1;
while(n>99999999||n<0)
{printf("Pleaseinput(0");scanf("%ld",&n);}
fun(&n);
printf("\nTheresultis:
%ld\n",n);}
解题思路:
第一处:
t是通过取模的方式来得到*n的个位数字,所以应填:
10。
第二处:
判断是否是奇数,所以应填:
0。
第三处:
最后通形参n来返回新数x,所以应填:
x。
第10套
给定程序中,函数fun的功能是:
将形参n中,各位上为偶数的数取出,并按原来从高位
到低位相反的顺序组成一个新的数,并作为函数值返回。
例如,输入一个整数:
27638496,函数返回值为:
64862。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构~
给定源程序:
#include
unsignedlongfun(unsignedlongn){unsignedlongx=0;intt;while(n)
{t=n%10;
/**********found**********/if(t%2==__1__)0/**********found**********/x=__2__+t;10*x/**********found**********/n=__3__;n/10
}
returnx;
}
main()
{unsignedlongn=-1;
while(n>99999999||n<0)
{printf("Pleaseinput(0");scanf("%ld",&n);}
printf("\nTheresultis:
%ld\n",fun(n));}
解题思路:
第一处:
判断t是否是偶数,所以应填:
0。
第二处:
每操作一次,x必须乘以10,再加t,所以应填:
10*x。
第三处:
每循环一次n的值缩小10倍,所以应填:
n/10。
第11套
函数fun的功能是:
把形参a所指数组中的奇数按原顺序依次存放到a[0]、a[1]、a[2]、„„中,把偶数从数组中删除,奇数个数通过函数值返回。
例如:
若a所指数组中的数据最初排列为:
9、1、4、2、3、6、5、8、7,删除偶数后a所指数组中的数