C语言填空题.docx
- 文档编号:6132423
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:61
- 大小:45.72KB
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;j printf("\n"); } fun(t); printf("\nTheresultis: \n");for(i=0;i {for(j=0;j printf("\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;j printf("\n"); } fun(t); printf("\nTheresultis: \n");for(i=0;i {for(j=0;j printf("\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;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所指数组中的数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 填空