国家二级C语言机试(操作题)模拟试卷486 (题后含答案及解析)
全部题型 2. 程序填空题 3. 程序修改题 4. 程序设计题
程序填空题
1. 给定程序中,函数fun的作用是:不断从终端读入整数,由变量a统计大于0的个数,用变量e来统计小于0的个数,当输入0时结束输入,并通过形参pa和pb把统计的数据传回主函数进行输出。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序存放在BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#inclucle < stdio.h >void fun(int*px,int:*py){/*********found*********/int【1】;scar1f(“%d”,&k);/*********found*********/while【2】{if(k >0)a++;if(k < 0)b++;/*********found*********/【3】;}*px=a;*py=b;}main( ){int x,y;fun(&x,&y);print:f(“x=%d y=%d\n”,x,y);}
正确答案:(1)a=0,b=0,k(2)(k!=0)(3)scanf(“%d”,&k)
解析:填空1:下面的scanf函数用到变量k,需要提前定义,在while循环中使用了临时存放正
、负数个数的变量a,b,因此也要提前定义。填空2:根据题意,输入0时结束程序,因此当k!=0时进入循环记录正负数的个数。填空3处:需要不断从终端输入整数,因此在循环体内添加输入操作。
程序修改题printf函数的作用是向终端
2. 给定程序modil.c的主函数中,将a、b、c三个结点链成一个单向链表,并给各结点的数据域赋值,函数fun( )的作用是:累加链表结点数据域中的数据作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < stdio.h >typedef struct list{int data;struct list*next;}LTST;int fun(LTST*h){LIST*p;/*********found*********/int t;P=h;/*********found*********/while*p){/*********found*********/t=t+p.data;p=(*p).next;}return t;}main( ){LIST a,b,c,*h;a.data=34;b.data=51;c.data=87;c.next=‘\0’;h=&a;a.next;=&b;b.next;=&c;printf(“总和=%d\n”,fun(h));}
正确答案:(1)int t=0;(2)while(p)或while(p!=NULL)(3)t=t+p一>data;
解析:(1)题目中变量t是用来存放累加和的,因此必须初始化。(2)题目中*p是结构体,不能转化为bool型。(3)p是指针,只能用p一 >,不能用p.。
程序设计题
3. 请编写函数fun,其功能是分别统计形参t所指二维数组中字母A和C的个数。注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include < stdio.h >#include < stdlib.h >#define M 1 4void NONO( );void fun(char(*t)[M],int*a,int,*c){}void get:(char(* s)[M]){int i,j;for(i=0;i < M; i++){ for(j=0;j < M;J++){s[i][j]=65+rand( )%12;print:f(“%c”,s[i][j]);}printf(“\n”);}}main( ){char a[M][M];int x,y;get(a);fun(a,&x,&y);print:f(“A=%d c=%d\n”,x,y);NONO( );}void NONO( ){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,* wf;int i,j,x,y;char a[M][M];fp=fopen(“c:\test\in.ctat”,’fr”);wf=fopen(“c:\test\out.dat”,”w”);for(i=0;i < M;i++){for(j=0 ;j < M;j++){ fscanf(fp,”%c”,&a[i][j]);)}fun(a,&x,&y);fprintf(wf,”A=%d\n”,x);fprintf(wf,”C=%d\n”,y);fclose(fp);fclose(wf);}
正确答案:int i=0,j=0;//循环统计的下标*a=0;//初始化a字符统计的个数*c=0;//初始化c字符统计的个数for(i=0;i < M;i++)//行{for(j=0;j < M;j++)//列{if(t[i][j]==‘A’)//字符是a,计数(* a)++;if(t[i][j]==‘c’)//字符是c,计数(*c)++;}}
解析:对二维数组的行列分别循环,行优先,查数组中元素为A或者C,分别对其进行计数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论