一、程序填空题1.
考生文件夹 给定程序中,函数fun的作用是:不断从终端读入整数,由变量a统计大于0的个数,用变量c来统计小于0的个数,当输入0时结束输入,并通过形参pa和pb把统计的数据传回主函数进行输出。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:源程序存放在BLANK1.C中。不得增行或删行,也不得更改程序的结构!
试题程序:
1 #include<stdio.h>
2 void fun(int*px,int*PY)
3 {
4 /*********found*********/
5 int______
6 scanf("%d",&k);
7 /*********found*********/
8 while______
9 {if(k>0)a++;
10 if(k<0)b++;
11/*********found*********/
12 ______;
13 )
14 *px=a;*Py=b;
15 }
16 main()
17 {int x,y;
18 fun(&x,&y);
19 printf("x=%d y=%d\n",x,y);
20 }
(1)a=0,b=0,k
(2)(k!=0)
(3)scanf("%d",&k)
答案考生文件夹[解析] 填空1:下面的scanf函数用到变量k,需要提前定义,在while循环中使用了临时存放正、负数个数的变量a,b,因此也要提前定义。
填空2:根据题意,输入0时结束程序,因此当k!=0时进入循环记录正负数的个数。
填空3处:需要不断从终端输入整数,因此在循环体内添加输入操作。
二、程序修改题1.
考生文件夹 给定程序modil.c的主函数中,将a、b、c三个结点链成一个单向链表,并给各结点的数据域赋值,函数fun()的作用是:累加链表结点数据域中的数据作为函数值返回。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
1 #include<stdio.h>
2 typedef struct list
3 {int data;
4 struct list*next;
5 }LIST;
6 int fun(LIST*h)
7 {LIST*p;
8 /*********found*********/
9 int t;
10 p=h;
11 /*********found*********/
12 while(*p)
13 {
14 /*********found*********/
15 t=t+p.data;
16 p=(*p).next;
17 }
18 return t;
19 }
20 main()
21 (LIST a,b,c,h;
22 a.data=34;b.data=51;c.
data=87;c.next='\0';
23 h=&a;a.nexL=&b;b.next=&c;
24 printf("总和=%d\n",fun(h));
25 }
int t=0;
(2)while(p)或while(p!=NULL)
(3)t=t+p->data;
答案考生文件夹[解析] (1)题目中变量t是用来存放累加和的,因此必须初始化。
(2)题目中*p是结构体,不能转化为bool型。
(3)p是指针,只能用p->,不能用p.。
三、程序设计题1.
考生文件夹 请编写函数fun,其功能是分别统计形参t所指二维数组中字母A和C的个数。
注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
1 #include<stdio.h>
2 #include<stdlib.h>
3 #define M 14
4 void NONO;
5 void fun(char(*t)[M],int*a,int*c)
6 {
7
8 }
9 void get(char(*s)[M])
10 {int i,j;
11 for(i=0;i<M;i++)
12 { for(j=0;j<M;j++)
13 {s[i][j]=65+rand()%12;
14 printf("%c",s[i][j]);}
15 printf("\n");
16 }
17 }
18 main()
19 {char a[M][M];
20 int x,y;
21 get(a);
22 fun(a,&x,&y);
23 printf("A=%d C=%d\n",x,y);
24 NONO();
25 }
26 void NONO()
{/*本函数用于打开文件,输入数据,
27 调用函数,输出数据,关闭文件。*/
28 FILE*fp,*wf;
29 int i,j,x,y;
30 char a[M][M];
31 fp=fopen("c:\tedt\in.dat","r");
32 wf=fopen("c:\test\out.dat","w");
33 for(i=0; i<M; i++)
34 {for(j=0; j<M; j++)
35 {fscanf(fp,"%c",&a[i][j]);)
36 }
37 fun(a,&x,&y);
38 fprintf(wf,"A=%d\n",x);
39 fprintf(wf,"C=%d\n",y);
40 fclose(fp);
41 fclose(wf);
42 }
1 int i=0,j=0//循环统计的下标
2*a=0;//初始化a字符统计的个数
3 *c=0;//初始化c字符统计的个数
4 for(i=0;i<M;i++)//行
5 {
6 for(j=0;j<M;j++)//列
7 {
8 if(t[i][j]='A')//字符
是a,计数
9 (*a)++;
10 if(t[i][j]='c')//字
符是c,计数
11 (*c)++;
12 }
13 }
答案考生文件夹[解析] 对二维数组的行列分别循环,行优先,查找数组中元素为A或者C,分别对其进行计数。