国家二级C语言机试(程序填空题)模拟试卷2(共45题)_第1页
国家二级C语言机试(程序填空题)模拟试卷2(共45题)_第2页
国家二级C语言机试(程序填空题)模拟试卷2(共45题)_第3页
国家二级C语言机试(程序填空题)模拟试卷2(共45题)_第4页
国家二级C语言机试(程序填空题)模拟试卷2(共45题)_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家二级C语言机试(程序填空题)模拟试卷2(共9套)(共45题)国家二级C语言机试(程序填空题)模拟试卷第1套一、程序填空题(本题共5题,每题1.0分,共5分。)1、给定程序中,函数fun的功能足建立一个N×N的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,……依此类推。例如,若N=5,生成的矩阵为:1111112221123211222111111请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BI。ANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#iriolude<Stdio.h>#defitieN7/*********found*********/voidfun(int(*a)【1】)(inti,j,k,m;if(N%2==0)m=N/2;elsem=N/2+1;for(i=0;i<m;i++){/*********found*********/for(j=【2】;j<N—i;j++)a[i][j]=a[N—i一1][j=i+1;for(k=i+1;k<N—i;k++)/*********found*********/a[k][i]=a[k][N—i一1]=【3】;}}main(){intx[N][N]={0),i,j;fun(x);printf("\nTheresultis:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%3d",x[i][j]);printf("\n");}}标准答案:(1)[N](2)i(3)i+1知识点解析:填空1:本题考查了形参的确定。参数传递时将实参的值赋给形参,实参和形参是一一对应的,因此该空应该填写[N]。填空2:第二重for循环中a[i][j]和a[N-i-1][j]表示第一行和最后一行数组a[N][N]的值,因而此空应该填写i。填空3:第三重for循环代表的是arN][N]中每一列的值,因此此空应该填写i+1。2、给定程序中,函数fun的功能是:将a所指4×3矩阵中第k行的元素与第0行元素交换。例如,有下列矩阵:123456789101112若k为2,程序执行结果为:789456123101112请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#inClude<stdio.h>#defineN3#defineM4/*********found*********/voidfun(int(*a)[N],int【1】){inti,temp;/*********found*********/for(i=0;i<【2】;i++){temp=a[0][i];/*********found*********/a[0][i]=【3】;a[k][i]=temp;}}main(){intX[M][N]={{1,2,3},{4,5,6},{7,8,9),{10,11,12)},i,j;printf("Thearraybeforemoving:\n\n");for(i=0,i<M,i++){for(j=0,j<N;j++)printf("%3d",x[i][j]),printf("\n\n");}fun(x,2),printf("Thearrayaftermoving:\n\n");for(i=0;i<M,i++){for(j=0;j<N;j++)printf("%3d",x[i][j]);printf("\n\n");}}标准答案:(1)k(2)N(3)a[k][i]知识点解析:填空1:变量k在函数体fun中已经使用,但在函数体中没有定义,肯定是在函数的形参中定义的,所以应填k。填空2:数组共N列,所以应填N。填空3:这部分语句实现的功能是变量值的交换,所以应填a[k][i]。3、给定程序中,函数fun的功能是将带头结点的单向链表逆置,即若原链表中从头至尾结点数据域依次为2、4、6、8、10,逆置后,从头至尾结点数据域依次为10、8、6、4、2。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#defineN5typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*P,*q,*r;/*********found*********/P=h一>【1】;/*********found*********/if(p==【2】)return;q=p一>next;P一>next=NULL;while(q){r=q一>next;q一>next=p;/*********found*********/p=q;q=【3】;}h一>next=p;}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h一>next=NULL;for(i=0;i<N;i++){q=(NODE*)malloc(s~zeof(NODE));q一>data=a[i];q一>next=NULL;if(h一>next==NULL)h一>next=p=q;else{p一>next=q;p=q;}}returnh;}voidoutlist(NODE*h){NODE*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");}}main(){NODE*head;inta[N]={2,4,6,8,10);head=creatliSt(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistafterin-verting:\n");outlist(head);}标准答案:(1)next(2)NULL(3)r知识点解析:填空1:本空考查了为p赋初值,根据题目的要求是将带头结点的单向链表逆置可知,p的初值应该为h一>next。填空2:if判断语句表明当p等于什么时就要返回,因此只能当p等于NuLL时返回,不用做后面的链表的逆置了。填空3:把q的指针向后移动,才能实现将带头结点的单向链表逆置。因此本空填写r。4、给定程序的主函数中,已给出由结构体构成的链表结点a、b、c,各结点的数据域中均存入字符,函数fun()的作用是:将a、b、c三个结点链接成一个单向链表,并输出链表结点中的数据。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>typedefstructlist{chardata;structlist*next;}Q;voidfun(Q*pa,Q*pb,Q*pc){Q*p;/******found******/pa—>next=___1___;pb—>next=pc:p=pa;while(P){/******found******/printf(″%c″,___2___);/******found******/p=___3___;}printf(″\n″);}main(){Qa,b,c;a.data=′E′:b.data=′F′;c.data=′G′:c.next=NULL;fun(&a,&b,&c);}标准答案:(1)pb(2)p—>data(3)p—>next知识点解析:填空1:将三个结点连接起来,即将pa的指针域指向pb,pb的指针域指向pc。填空2:输出链表结点中的数据,表示为p—>data。填空3:指针后移,指向下一个结点,即p=p—>next。5、下列给定程序中,函数fun的功能是:从形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回剩余字符串的个数。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#defineN5#defineM10intfun(char(*ss)[M],intk)(inti,j=0,len;/*********found*********/for(i=0;i<【1】;i++){len=strlen(ss[i]);/*********found*********/if(fen<=【2】)/*********found*********/strcpy(ss[j++],【3】);}returnj;}voidmain(){charx[N][M]={"Beijing","Shanghai","Tianjin","Nanjing","Wuhan");inti,f;printf("\nTheoriginalstring\n\n");for(i=0;i<N;i++)puts(x[i]);printf("\n");f=fun(x,7);printf("ThestringwitchlengthislesSthanorequalto7:\n");for(i=0;i<f;i++)puts(x[i]);printf("\n");}标准答案:(1)N(2)k(3)ss[i]知识点解析:本题考查:for循环语句;if语句条件表达式;字符串复制函数strcpy的使用。填空1:for循环语句的作用是遍历字符串数组中的每一个字符串,所以循环变量i的循环条件是i<N。填空2:题目要求删除串长度大于k的字符串,所以if条件语句的条件表达式是len<=k。填空3:通过字符串复制函数将串长不大于k的字符串另存,并记录个数。字符串复制函数strcpy,其格式为:strcpy(字符数组名1,字符数组名2)功能:把字符数组2中的字符串复制到字符数组l中。字符串结束标识‘\0’也一同复制。字符数组名2,也可以是一个字符串常量,这时相当于把一个字符串赋予一个字符数组。国家二级C语言机试(程序填空题)模拟试卷第2套一、程序填空题(本题共5题,每题1.0分,共5分。)1、甲乙丙丁四人同时开始放鞭炮,甲每隔t1秒放一次,乙每隔t2秒放一次,丙每隔t3秒放一次,丁每隔t4秒放一次,每人各放n次。函数fun的功能是根据形参提供的值,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时炸响,只算一次响声,第一次响声是在第0秒。例如,若t1=7,t2=5,t3=6,t4=4,n=10,则总共可听到28次鞭炮声。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#inolude/**********found**********/#defineOK(i,t,n)((___1___%t==0)&&(i/t标准答案:(1)i(2)t++(3)count知识点解析:第一空:由“if(OK(t,t1,n)‖OK(t,t2,n)‖OK(t,t3,n)‖OK(t:t4,n))count++;”可知count计数听到的鞭炮声,在满足if条件时,计数加1。t时刻,至少有一个人放了一个鞭炮才能听得到声音,故t%t1==0、t%t2==0、t%t3=0、t%t4==0这四个当中至少一个成立,四者是或的关系。第一个标识下是宏OK的定义,由前面的分析可知,OK宏的作用就是判断t%i(i等于1、2、3和4)是否等于0且i/t2、给定程序的主函数中,已给出由结构体构成的链表结点a、b、c,各结点的数据域中均存入字符,函数fun()的作用是:将a、b、c三个结点链接成一个单向链表,并输出链表结点中的数据。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>typedefstruerlist{chardata;struetlist*next;}Q;voidfun(Q*pa,Q*pb,Q*pc){Q*p;/******found******/pa->next=___1___;pb->next=pc;p=pa;while(p){/******found******/pfinff("%c",___2___);/******found******/p=___3___;}pfinff("\n");}main(){Qa,b,c;a.data=’E’;b.data=’F’;c.data=’G’;c.next=NULL;fun(&a,&b,&c);}标准答案:(1)pb(2)p->data(3)p->next知识点解析:填空1:将三个结点连接起来,即将pa的指针域指向pb,pb的指针域指向pc。填空2:输出链表结点中的数据,表示为p->data。填空3:指针后移,指向下一个结点,即p=p->next。3、给定程序中,函数fun的功能是:计算下式前n项的和,并作为函数值返回。例如,当形参n的值为10时,函数返回一0.204491。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>doublefun(intn){inti,k;doubles,t;s=0;/*********found*********/k=【1】;for(i=1;i<=n;i++){/*********found*********/t=【2】;s=s+k*(2*i一1)*(2*i+1)/(t*t);/*********found*********/k=k*【3】;}returns;}main(){intn=一1;while(n<0){printf("pleaseinput(n>0):");scar1f("%d",&n);)printf("\nTheresultis:%f\n",fun(n));}标准答案:(1)1(2)2*i(3)(一1)知识点解析:填空1:由fun函数整体结构可以看出k的作用是赋值,并累加各项前边的正负号,由于第一项是正的,因此赋给k的值为1。填空2:此空下一行的表达式k*(2*1一1)*(2*1+1)/(t*t)累加的通项,k为正负号,由题目中的公式可知t=2*i。填空3:由于通项前边的正负号每次都要发生变化,因此k=k*(一1)。4、给定程序中,函数fun的功能是:对形参ss所指字符串数组中的M个字符串按长度由短到长进行排序。SS所指字符串数组中共有M个字符串,且串长#include#defineM5#defineN20voidfun(char(*ss)[N]){inti,j,k,n[M];chart[N];for(i=0;in[j])___2___;if(k!=i){strcpy(t,ss[i]);strcpy(ss[i],ss[k]);/**********found**********/strcpy(ss[k],___3___);n[k]=n[i];}}}main(){charss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing");inti;printf("\nTheorignalstringsare:\n");for(i=0;i标准答案:(1)i+1(2)k=j<3)t知识点解析:函数fun的功能是用是选择排序对M个字符串由短到长进行排序。第一空:由审题分析可知,外循环i=0时,内循环变量从i+1到M-1(下标从0开始),从M-1个字符串中再挑出一个最短的字符串,故第一空处应为“i+1”。第二空:k记录最短字符串的下标,内循环开始前k赋初值i,内循环从剩下的M-i个字符串里面找最短的,比较k字符串和j字符串的长度大小,如果n[k]>n[j],则把j赋给k,即第二空处应为“k=j”。第三空:if(k!=i)说明找到了新的更短的字符串,那么把它和第i个字符串交换,因此第三空处应为“t”。5、函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0],a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后a所指数组中的数据为:4、2、6、8,返回值为4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#defineN9intfun(inta[],intn){inti,j;j=0;for(i=0;i标准答案:(1)a[i]%2(2)a[j](3)j知识点解析:奇数和偶数的判断可用取余的方法来实现,a[i]%2等于0,那么a[i]是偶数,否则是奇数。函数fun的功能是把形参a所指数组中的偶数按原顺序依次存放到a,把奇数从数组中删除。第一空:由“____2____=a[i];j++;”是将偶数元素保存起来并且计数变量加1,可知j记录了偶数元素的个数,第一空处是判断a[i]是否是偶数,因此第一空处应为“a[i]%2”。第二空:a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]…,j初始化为0,a[j]就可以将偶数元素存放在a中,故第二空处应为“a[j]”。第三空:fun函数的返回值是偶数个数,故第三空处应为“j”。国家二级C语言机试(程序填空题)模拟试卷第3套一、程序填空题(本题共5题,每题1.0分,共5分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后将新字符串的首地址作为函数值返回。例如,若s所指字符串为“asd123fgh543df”,处理后新字符串为“asdfghdf123543”。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#include<string.h>char*fun(char*s){inti,j,k,n;char*p,*t;n=strlen(s)+1;t=(char*)malloc(n*sizeof(char));p=(char*)malloc(n*sizeof(char));j=0;k=0;for(i=0;i<n;i++){if(((s[i]>=’a’)&&(s[i]<=’z’))||((s[i]>=’A’)&&(s[i]<=’Z’))){/*********found*********/t[j]=【1】;j++;}else{p[k]=s[i];k++;}}/*********found*********/for(i=0;i<【2】;i++)t[j+i]=p[i];/*********found*********/t[j+k]=【3】;returnt;}main(){chars[80];printf("Pleaseinput:");scanf("%s",s);printf("\nTheresultis:%s\n",fun(s));}标准答案:(1)s[i](2)k(3)’\0’或0知识点解析:填空1:将字符串s中所有字母元素赋给数组t。填空2:字符串中所有非字母元素放到字母元素后面,所以i的取值范围是0~k。填空3:最后给字符串加入结束标识‘\0’。2、下列给定程序中,函数fun的功能是计算下式直到≤10-3,并将计算结果作为函数值返回。例如,若形参e的值为1e一3,函数的返回值为2.985678。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<Stdio.h>doublefun(doublee){inti;doubles,x;/*********found*********/s=0;i=【1】;x=1.0;while(x>e){/*********found*********/【2】;/*********found*********/x=(2.0*i一1)/((【3】)*(2.0*i));s=s+x;}returns;}main(){doublee=1e一3;printf("\nTheresultis:%f\n",fun(e));}标准答案:(1)0(2)i++或++i或i+=1或i=i+1(3)2.0*i知识点解析:填空1:循环变量i从1开始参加运算,但是在每次循环的开始i都进行自加1操作,故i应赋初值为0。填空2:循环变量i自增1运算。填空3:根据公式确定表达式通项。注意x为double型,故应将i变为double型再进行运算。3、函数fun的功能是:将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9、5、l、2、3、4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#defineN9voidfun(inta[l,intn){inti,t,p;/***********found***********/p=(n%2==0)?n/2:n/2+____1____;for(i=0;i标准答案:(1)1(2)i(3)a[p+i]知识点解析:函数fun的功能是将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。第一空:“p=n%2=0)?n/2:n/2+____1____;”和“a[i]=a[p+____2____j:”“n%2==0”判断是否是偶数,a[i]和a[p+____2____]交换,如果n是偶数,a[0]和a[n/2]交换,如果n是奇数,那么a[0]和a[n/2+1]交换,依此类推,故n为偶数时a[i]和a[i+n/2]交换,n为奇数时a[i]和a[i+n/2+1]交换。因此如果n是奇数的话,p应该等于n/2+1,故第一空处应为“1”。第二空:由上分析可知,a[i]和a[i+p]交换,故第二空应为“i”。第三空:“t=a[i];a[i]=a[p+i];”,故第三处应该是把a[i]赋值给a[p+i],a[i]保存在t中,故第三空应为“a[p+i]”。4、给定程序中,函数fun的功能是:统计中带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN8typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creallist(int*a);voidoutlist(SLTST*);voidfun(SLIST*h,int*n){SLIST*p;/************found************/_____1_____=0;p=h->next;while(p){(*n)++;/**********found**********/p=p->_____2_____;}}main(){SLTST*head;inta[N]={12,87,45,32,91,16,20,48),num;head=creatlist:(a);out;1ist(head);/**********found**********/fun(_____3_____,&num);printf(”\nnumber=%d\n”,hum);}SLIST*crearlist(inta[I){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=a[i]jP->next=q;p=q;}p->next=0;returnh;}voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf("The1istisNULL!\n");else{printf("\nHead");do{printf("->%d",P->data);p=p->next;}while(P!=NULL);printf("->End\n");}}标准答案:(1)*n(2)next(3)head知识点解析:函数fun的功能是统计出带有头结点的单向链表中结点的个数。第一空:*n保存返回值链表长度,在开始计数之前,应该将*n清零,故第一空处应为“*n=0;”。第二空:*n在循环while(p)中计数,p不断指向下一个结点,因此第二空处应该为“p=p->next;”。第三空:fun函数的声明为:voidfun(SLIST*,int*n),第一个参数是头结点地址,第二个参数要存放链表长度的整型变量地址,故第三空处应为“fun(head,&num);”。5、人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#defineN8typedefstruct{intnum;intyear,month,day}STU;intfun(STU*std,STU*k,intyear){inti,n=0;if(____1____==year)return(____3____);}main(){STUstd[N]={{1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15},{5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984f8,19}};STUk[N];inti,n,year;printf("Enterayear:");scanfn=fun(std,k,year);printf("\nNopersonwasbornin%d\n",year);else{printf("\nThesepersonswerebornin%d\n",year);printf("%d%d—%d—%d\n",k[i].num,k[i].year,k[i].month,k[i].day);}}标准答案:(1)std[i].year(2)std[i](3)n知识点解析:fun函数的功能是在结构体数组std中找出指定出生年份的人员将其数据放在形参k所指的数组中。第一空:比较结构体的出生年份是否等于year,std是结构体指针,指向结构体数组的首地址,因此访问一个结构体的year成员是“std[i].year”.因此第一空处应为“if(std[i].yeaI==year)”。第二空:这里是将找到的数据放在形参k所指的数组中,k是指针变量,k指向结构体数组的首地址,std[i]是结构体的地址,因此等号左边也应该是地址,故第二空处应为“k[n++]=std[i];”。第三空:fun函数的返回值是满足指定条件的人数n,故第三空处是“return(n),”。国家二级C语言机试(程序填空题)模拟试卷第4套一、程序填空题(本题共5题,每题1.0分,共5分。)1、下列给定程序中,函数fun的功能是:将N×N矩阵主对角线元素的值与反向对角线对应位置上元素的值进行交换。例如,若N=3,有下列矩阵:123456789交换后为:321456987请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN4/******found******/voidfun(int___1___,intn){inti,s;/******found******/for(___2___;i++){s=t[i][i];t[i][i]=t[i][n-i-1];/******found******/t[i][n-1-i]=___3___;}}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<N;i++){for(j=0;j<N;j++)printf("%d",t[i][j]);printf("\n");}fun(t,N);printf("\nTheresultis:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%d",t[i][j]);printf("\n");}}标准答案:(1)t[][N](2)i=0;i<N(3)s知识点解析:本题考查:函数定义;for循环语句;数组元素的引用和赋值;变量值交换算法。填空1:根据main函数中的函数调用语句,可以填写fun函数定义中的形参内容。填空2:由于是N×N矩阵,所以for语句中循环变量i的取值范围是0到N。填空3:for循环体中是变量值交换算法。2、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是将a和b所指的两个字符串分别转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含9个以下数字字符。例如,主函数中输入字符串"32486"和"12345",在主函数中输出的函数值为44831。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#include<ctype.h>#defineN9longctod(char*s){longd=0;while(*s)if(isdigit(*s)){/*********found*********/d=d*10+*s﹣【1】;/*********found*********/【2】;}returnd;}longfun(char*a,char*b){/*********found*********/return【3】;}main(){chars1[N],s2[N];do{printf("Inputstrings1:");gets(s1);}while(Strlen(s1)>N);do{printf("Inputstrings2:");gets(s2);}while(strlen(s2)>N);printf("Theresultis:%id\n",fun(s1,s2));}标准答案:(1)’0’(2)s++或++s(3)ctod(a)+ctod(b)知识点解析:填空1:isdigt(*s)这个函数表示检查*s是否是数字(0~9),d=d*1010+*s﹣?表示的是要把字符串分别转换成面值相同的整数,因此本空应该填写’0’。填空2:*s所代表的字符串中字符需要一个一个的字符进行转换成整数,因此此空应该填写s++或++s。填空3:题目要求把转换后的字符进行相加后作为函数的返回值,因此本空应该填写ctod(a)+ctod(b)。3、给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2#include<Stdlib.h>3#defineN84typedefstructlist5{intdata;6struct1ist*next;7}SLIST;8voidfun(SLIST*p)9{SLIST*t,*e;10t=p->next;s=p;11while(t->next!=NULL)12{s=t;13/**********found**********/14t=t->___1___;15}16/**********found**********/17printf(’’%d’’,___2____);18s->next=NULL;19/**********found**********/20free(___3____);21}22SLIST*creatlist(int*a)23{SLIST*h,*p,*q;iti;24h=p=(SLIST*)malloc(sizeof(SLIST));25for(i=0;i<N;i++)26{q=(SLIST*)malloc(sizeof(SLIST));27q->data=a[i];p->next=q;p=q;28}29p->next=0;30returnh;31}32voidoutlist(SLIST*h)33{SLIST*p;34p=h->next;35if(p==NULL)printf(’’\nThelistisNULL!\n’’);36else37{printf(’’\nnead’’);38do{printf(’’->%d’’,p->data);p=p->next;}while(p!=NULL);39printf(’’->End\n’’);40}41}42main()43{SLIST*head;44inta[N]={11,12,15,18,19,22,25,29};45head=creatlist(a);46printf(’’\nOutputfromhead:\n’’);outlist(head);47printf(’’\nOutputfromtail:\n’’);48while(head->next!=NULL){49fun(head);50printf(’’\n\n’’);51printf(’’\nOutputfromheadagain:\n’’);outlistIhead);52}53}标准答案:(1)next(2)t->data(3)t知识点解析:fun函数的功能是输出链表尾部结点中的数据,并释放该结点,使链表缩短。由于链表是单向的,找到链表尾部结点需要利用循环从头结点开始查找,直至找到最后一个,找到之后输出尾部结点的数据,然后删除尾结点。第一空:fun函数中的循环目的是找到尾结点“while(t->next!=NULL)”,利用结点变量s和t,s指向当前节点,t不断指向下一个结点,因此,第一空处应该是“t=t->next;”。第二空:这里是输出尾结点中的数据,已经利用循环找到了尾结点t,t的数据是t->data,因此,第二空处应该为“printf(’’%d’’,t->data),”。第三空输出尾结点数据之后删除尾结点,使用free,又因为尾结点是t,因此,第三空处应该为“flee(t);”。4、下列给定程序中,函数fun的功能是:将N×N矩阵中元素的值按列向右移动1个位置,右边被移出矩阵的元素绕回左边第1列。例如,N=3,有下列矩阵123456789计算结果为:312645978请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN4voidfun(int(*t)[N]){inti,j,x;for(i=0;i<【1】;i++){x=t[i][【2】];for(j=N一1;j>0;j一一)t[i][j]=t[i][j一1];t[i][【3】]=x;}}main(){inti,j,t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10};printf("Theorriginalarray:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%2d",t[i][j]);printf("\n");}fun(t);printf("\nTheresultis:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%2d",t[i][j]);printf("\n");}}标准答案:(1)N(2)N一1(3)0知识点解析:填空1:因为是N×N的矩阵,所以行列数是相同的。第一个for循环用来循环行,因此填入一个循环界限N。填空2:此语句将移出矩阵的元素暂存,移出矩阵的元素的列下标为N—1,因此填入N—1。填空3:此语句将移出矩阵的元素放入最左边,也就是第一列,第一列元素的列下标为0,因此填入0。5、给定程序中,函数fun的功能是将带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN5typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q,*r;/**********found**********/P=h->【1】;/**********found**********/if(p==【2】__)return;q=p->next;p->next=NULL;while(q){r=q->next;q->next=p;/**********found**********/p=q;q=【3】;}h->next=p;}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h->next=NULL;for(i=0;idata=a[i];q->next=NULL;if(h->next==NULL)h->next=p=q;else{p->next=q;p=q;}}returnh;}voidoutlist(NODE*h){NODE*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");}}main(){NODE*head;inta[N]={2,4,6,8,10};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistafterinverting:\n");outlist(head);}标准答案:(1)next(2)0或NULL(3)r知识点解析:函数fun的功能是将带头结点的单向链表逆置。第一空:“p=h->1;”对结点p进行初始化,由审题分析可知,p初始化为链表的第二个结点,即p->next,故第一空处应为“next”。第二空:“if(p==【2】)return;”如果链表只有一个结点,无需逆置,即第二空处为“0”或“\0”或“NULL”。第三空:循环内完成结点的指针指向前一个结点,“r=q一>next;”r已经指向q的下一个结点,“q->next=p;”将q结点指向链表的前一个结点,“p=q;”是将p结点往后移动一个结点位置,第三空处是q结点往后移动一个结点位置,即第三空处为“r”。国家二级C语言机试(程序填空题)模拟试卷第5套一、程序填空题(本题共5题,每题1.0分,共5分。)1、给定程序中,函数fun的功能是:有NxN矩阵,根据给定的m(m<=N)值,将每行元素中的值均右移m个位置,左边置为0。例如,N=3,m=2,有下列矩阵123456789程序执行结果为001004007请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#defineN4voidfun(int(*t)[N],intm){inti,j;/**********found**********/for(i=0;i=0;j==)/**********found**********/t[i][j+___2___]=t[i][j];/**********found**********/for(j=0;j<___3___;j++)t[i][j]=0;}}main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j,m;printf("\nTheoriginalarray:\n");for(i=0;i标准答案:(1)i++(2)m(3)m知识点解析:函数fun的功能是将每行元素中的值均右移m个位置。第一空:题目要求对每行元素中的值均右移m个位置,故第一空处循环变量每次增1,共循环N次,完成对N行的移位操作,因此第一空处应为“i++”。第二空:循环“for([j=N-1-m;j>=0;j--)”是进行行元素中的值右移m个位置,即把t[i][j]元素放置在t[i][j+m]上,因此第二空应为“m”。第三空:循环“for(j=0;j<__3__;j++)”是对空出来的位置补0,每行元素的前m位数据已经移动到后面,每行空处m个元素,因此第三空为“m”。2、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:在带头节点的单向链表中,查找数据域中值为ch的节点。找到后通过函数值返回该节点在链表中所处的顺序号;若不存在值为ch的节点,函数返回0值。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#defineN8typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creatlist(char*);Vvoidoutlist(SLIST*);intfun(SLIST*h,charch){SLIST*p;intn=0;p=h﹣>next;/*********found*********/while(p!=【1】){n++;/*********found*********/if(p﹣>data==ch)reLurn【2】1;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*creaLlist(char*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;i<N;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",Pp﹣>data);p=p﹣>nexL;}while(P!=NULL);printf("﹣>End\n");}}标准答案:(1)NULL(2)n(3)head,ch知识点解析:填空1:while循环语句用来判断是否到达链表结尾,链表结尾节点指针域是NULL。填空2:若找到指定字符,则通过return语句将该节点在链表的顺序号返回给main函数。填空3:函数调用语句,其形式是:函数名(实际参数表),因此根据函数定义语句,填入head,ch。3、给定程序中,函数fun的功能是:判断形参s所指字符串是否是”回文”(Palindrome),若是,函数返回值为1;不是,函数返回值为0。”回文”是正读和反读都~样的字符串(不区分大小写字母)。例如,LEVEL和Level是“回文”,而LEVLEV不是。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#include#includeintfun(char*s){char*lp,*rp;rp=s+strlen(s)—1;while((toupper(*lp)==toupperif(lp标准答案:(1)s(2)—N(3)return0知识点解析:函数fun的功能是:判断形参s所指字符串是否是“回文”,即比较第一个字符和最后一个字符是否相同,第二个字符和倒数第二个字符是否相同,依此类推,可以用循环来实现。第一空:“rp=s+strlen(s)—1;”可知rp指向最后一个元素,因此lp是指向第一个元素,因此第一空应为“s”。第二空:“lpH;rp____2____;”lp往后移动,rp应该往前移动,故第二空处应为“——”。第三空:“if(lp4、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。例如:b所指变量t中的学号、姓名、和三门课的成绩依次是:10002、"ZhangQi"、93、85、87,修改后输出t中的数据应为:10004、"LiJie"、93、85、87。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#includestructstudent{longsno;charname[10];floatscore[3];};voidfun(structstudent*b){/**********found**********/b【1】=10004;/**********found**********/strcpy(b【2】,"LiJie");}main(){structstudentt={10002,"ZhangQi",93,85,87};inti;printf("\n\nTheoriginaldata:\n");printf("\nNo:%ldName:%s\nScores:",t.sno,);for(i=0;i<3;i++)printf("%6.2f",t.score[i]);printf("\n");/**********found**********/fun(【3】);printf("\nThedataaftermodified:\n");printf("\nNo:%ldName:%s\nScores:",t.sno,);for(i=0;i<3;i++)printf("%6.2f",t.score[i]);printf("\n");}标准答案:(1)一>sno(2)一>name(3)&t知识点解析:函数fun的功能是对形参b所指结构体变量中的数据进行修改。第一空:“b【1】=10004;”等号右边是整型值,故这里是修改结构体成员sno的值,b是结构体指针,访问结构体数据成员时使用“->”运算符,因此,第一空为“b->sno”。第二空:“strcpy(b【2】,”LiJie”);”,strcpy是字符串拷贝函数,因此,这里是修改结构体的name成员值,故第二空处为“b一>name”。第三空:fun函数的定义形式是:voidfun(structstudent*b),可知fun的参数是指针,因此,主函数内调用fun函数时传入的参数是结构体t的地址,故第三空处为“&t”。5、函数fun的功能是进行数字字符转换。若形参ch中是数字字符’0’~’9’,则’0’转换成’9’,’1’转换成’8’,’2’转换成’7’,……,’9’转换成’0’;若是其他字符则保持不变;并将转换后的结果作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2/**********found**********/3__1___fun(charch)4{5/**********found**********/6if(ch>=’0’&&__2__)7/**********found**********/8return’9’-(oh-__3___);9returnch;10}11main()12{charc1,c2;13printf(’’\nTheresult:\n’’);14c1=’2’;c2=fun(c1);15printf(’’c1=%cc2=%c\n’’,c1,c2);16c1=’8’;c2=fun(c1);17printf(’’c1=%cc2=%c\n’’,c1,c2);18c1=’a’;c2=fun(c1);19printf(’’cl=%cc2=%c\n’’,c1,c2);20}标准答案:(1)char(2)ch<=’9’(3)’0’知识点解析:函数fun的功能是进行数字字符转换。第一空:由主函数内fun函数的调用“c1=’2’;c2=fun(c1);”,而c1和c2是char变量,可知fun函数的返回值类型是char,故第一空处补充返回值类型应为“char”。第二空:数字字符是“’0’~’9’”,因此,数字字符必须“ch>=’0’”且“ch<=’9’”,故第二空处应为“ch<=’9’”。第三空:数字字符转换规则是:“’0’”转换成“’9’”,“’1’”,转换成“’8’”,“’2’”转换成“’7’,……,’9’”转换成“’0’”,即返回值为“’9’-(ch-’0’)”,故第三空处应为“’0’”。国家二级C语言机试(程序填空题)模拟试卷第6套一、程序填空题(本题共5题,每题1.0分,共5分。)1、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。例如,有10个正数:4630324061745154826,平均值为:30.500000移动后的输出为:3061715264632404548请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN10doublefun(double*x){inti,j;doubleav,y[N];av=0;/**********found**********/for(i=0;i标准答案:(1)x[i]/N(2)j++或j=j+1(3)i++或i=i+1知识点解析:第一空:“for(i=0;i2、函数fun的功能是:在有n个元素的结构体数组std中,查找有不及格科目的学生,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。例如,主函数中给出了4名学生的数据,则程序运行的结果为:学号:N1002学号:N1006共有2位学生有不及格科目请在程序的下画线处填入正确的内容,并把下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>typedefstruct{charnum[8];doublescore[2];/******found******/}___1___;intfun(STUstd[],intn){inti,k=0;for(i=0;i<n;i++)/******found******/if(std[i].score[0]<60___2___std[i].score[1]<60){k++;pfinff("学号:%s",std[i].num);}/******found******/return___3___;}main(){STUstd[4]={"N1001",76.5,82.0,"N1002",53.5,73.0,"N1005",80.5,66.0,"N1006",81.0,56.0};pfinff("\n共有%d位学生有不及格科目\n"fun(std,4));}标准答案:(1)STU(2)||(3)k知识点解析:本题考查:对结构体的定义和使用,以及逻辑运算符的使用。填空1:STU结构体别名,通过main()中的语句可知。填空2:||只要学生两门课成绩有不及格的,就算不及格,因此使用或运算。填空3:k返回的是不及格的学生个数,有题意可知k是累计个数的。3、下列给定程序中,函数fun的功能是:在形参s所指字符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则不做任何处理。例如,若s所指字符串为”baacda”,c中的字符为a,执行后s所指字符串为”baaaacdaa”。请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>voidfun(char*s,charc){inti,j,n;/******found******/for(i=0;s[i]=____1____;i++)if(s[i]==(c){/******found******/n=____2____;while(s[i+1+n]!=′\0′)n+;for(j=i+n+1;j>i;j——)s[j+1]=s[j];/******found******/s[j+1]=____3____;i=i+1;}}main(){chars[80]=″baacda″,c;printf(″\nThestring:%s\n″,s);printf(″\nInputacharacter:″);scanf(″%c″,&c);fun(s,c);printf(″\nTheresultis:%s\n″,s);}标准答案:(1)′\0′(2)0(3)c知识点解析:本题考查:字符串结束标识′\0′;变量赋初值操作;数组元素赋值。填空1:for语句循环条件是判断是否到达字符串结尾,即当前字符是否为′\0′。填空2:while语句用于确定字符串的长度,所以变量n赋初值为0。填空3:题目要求如果找到与参数c相同的字符,就在后面插入一个相同的字符,所以找到后,应该给数组元素赋值,该题目给出参数为c。4、下列给定程序中,函数fun的功能是:在带头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#defineN8typedefstructlist{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(si。zeof(SLIST));for(i=0;i<N;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");}}标准答案:(1)NULL(2)n(3)head,ch知识点解析:填空1:while循环语句用来判断是否到达链表结尾,链表结尾结点指针域是NULL。填空2:若找到指定字符,则通过return语句将该结点在链表的顺序号返回给main函数。填空3:函数调用语句,其形式是:函数名(实际参数表),因此根据函数定义语句,填入head,ch。5、人员

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论