1、国家二级 C语言机试(操作题)模拟试卷 386及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:计算形参 x所指数组中 N个数的平均值(规定所有数均为正数),作为函数值返回;并将大于平均值的数放在形参 y所指数组中,在主函数中输出。 例如,有 10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30500000 主函数中输出:46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1C 中。不得增行
2、或删行,也不得更改程序的结构!1 #includestdlibh2 #includestdioh3 #define N 104 double fun(double x,double *y)5 int i,j;double av;6 *found*7 av=_1_;8 *found*9 for(i=0; iN; i+) av = av+ _2_;10 for(i=j=0;iN;i+)11 *found*12 if(xiav)y_3_=xi;13 yj=-1;14 return av;15 16 main()17 int i;double xN,yN;18 for(i=0;iN;i+) xi=ra
3、nd()50; printf(40f,xi);19 printf(n);20 printf(nThe average is:fn, fun(x,y);21 for(i=0 ; yi=0;i+) printf(51f,yi);22 printf(n);23 (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:计算 S所指字符串中含有 t所指字符串的数目,并作为函数值返回。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!1 #includestdioh2
4、 #includestringh3 #define N 804 int fun(char *s,char *t)5 int n;6 char *p,*r;7 n=0;8 while(*s)9 p=s;10 *found*11 r=p;12 while(*r)13 if(*r=*p) r+; p+;14 else break;15 *found*16 if(*r=0)17 n+;18 s+;19 20 return 0;21 22 main()23 char aN,bN;int m;24 printf(nPlease enter stringa:);gets(a);25 printf(nPlea
5、se enter substring b:);gets(b);26 m=fun(a,b);27 printf(nThe result is :m=dn,m);28 (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。 例如:二维数组中的值为: 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 则函数值为 61。 注意:部分源程序存在文件 PROG1C 文件中。 请勿改动主函数 mare和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的
6、若干语句。l #includestdioh2 #define M 43 #define N 54 int fun(int aMN)5 67 8 main()9 Int aaMN=1,3,5,7,9,2,9,9,9,4,6,9,9,9,8,1,3,5,7,0;10 int i,j,y;void NONO();11 printf(The original data is:n);12 for(i=0;iM; i+)13 for(j=0;jN;j+)printf(6d,aaij);14 printf(n);15 16 y=fun(aa);17 printf(nThe sum:dn,y);18 prin
7、tf(n);19 NONO( );20 21 void NONO( )22 *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。*23 int i,j,y,k,aaMN;24 FILE *rf,*wf;25 rf=fopen(indat,r);26 wf=fopen(outdat,w);27 for(k=0;k10;k+)28 for(i=0;iM;i+)29 for(j=0;jN;j+)fscanf(rf,d,32 33 fclose(rf);34 fclose(wf);35 (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 386答案解析(总分:6.00,
8、做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:计算形参 x所指数组中 N个数的平均值(规定所有数均为正数),作为函数值返回;并将大于平均值的数放在形参 y所指数组中,在主函数中输出。 例如,有 10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30500000 主函数中输出:46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1C 中。不得增行或删行,也不得更改程序的结构!1 #includestdlibh2 #in
9、cludestdioh3 #define N 104 double fun(double x,double *y)5 int i,j;double av;6 *found*7 av=_1_;8 *found*9 for(i=0; iN; i+) av = av+ _2_;10 for(i=j=0;iN;i+)11 *found*12 if(xiav)y_3_=xi;13 yj=-1;14 return av;15 16 main()17 int i;double xN,yN;18 for(i=0;iN;i+) xi=rand()50; printf(40f,xi);19 printf(n);2
10、0 printf(nThe average is:fn, fun(x,y);21 for(i=0 ; yi=0;i+) printf(51f,yi);22 printf(n);23 (分数:2.00)_正确答案:(正确答案:(1)0 (2)xiN (3)j+)解析:解析:函数 fun的功能是计算形参 x所指数组中 N个数的平均值,同时利用传址参数传回平均值。 第一空:“return av;”可知变量 av保存了平均值,故第一空处 aV初始化应为 0,即第一空处应填“0”。第二空:“for(i=0;iN;i+) av=av+_2_;”后面的循环就是比较比平均值大的元素,因此这个循环结束后 av中
11、的值就是平均值。由“av=(x0+x1+xN-1)N=x0N+x1N+xN-1N”可知,第二空处应为“xiN”。第三空:“if(xiav)y_3_=xi;”是将 xi保存在 y所指的数组中,i 是循环变量,j 初始化为 0,故 y的计数变量为 j,故第三空处应为“j+”。二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:计算 S所指字符串中含有 t所指字符串的数目,并作为函数值返回。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #
12、includestringh3 #define N 804 int fun(char *s,char *t)5 int n;6 char *p,*r;7 n=0;8 while(*s)9 p=s;10 *found*11 r=p;12 while(*r)13 if(*r=*p) r+; p+;14 else break;15 *found*16 if(*r=0)17 n+;18 s+;19 20 return 0;21 22 main()23 char aN,bN;int m;24 printf(nPlease enter stringa:);gets(a);25 printf(nPlease
13、 enter substring b:);gets(b);26 m=fun(a,b);27 printf(nThe result is :m=dn,m);28 (分数:2.00)_正确答案:(正确答案:(1)r=t; (2)if(*r=0)解析:解析:函数的功能是计算字符串中含有某子串的数目。 (1)根据“while(*r)if(*r=*p)r+;p+;”可知该循环是比较 r和 p指向的字符串是否相等,本题的要求是计算字符串中含有某子串的数目,p 指向的源字符串 s,所以 r应指向的是字符串 t,故第一标识下应改成“r=t;”。 (2)根据题意第二标识下“if(*r=0)”应该是判断 r是否指
14、向字符串尾,在 C语言中,等于是用“=”标识,因此第二标识下应改成“if(*r=0)”。三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。 例如:二维数组中的值为: 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 则函数值为 61。 注意:部分源程序存在文件 PROG1C 文件中。 请勿改动主函数 mare和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。l #includestdioh2 #define M 43 #define N 54
15、 int fun(int aMN)5 67 8 main()9 Int aaMN=1,3,5,7,9,2,9,9,9,4,6,9,9,9,8,1,3,5,7,0;10 int i,j,y;void NONO();11 printf(The original data is:n);12 for(i=0;iM; i+)13 for(j=0;jN;j+)printf(6d,aaij);14 printf(n);15 16 y=fun(aa);17 printf(nThe sum:dn,y);18 printf(n);19 NONO( );20 21 void NONO( )22 *请在此函数内打开文
16、件,输入测试数据,调用 fun函数,输出数据,关闭文件。*23 int i,j,y,k,aaMN;24 FILE *rf,*wf;25 rf=fopen(indat,r);26 wf=fopen(outdat,w);27 for(k=0;k10;k+)28 for(i=0;iM;i+)29 for(j=0;jN;j+)fscanf(rf,d,32 33 fclose(rf);34 fclose(wf);35 (分数:2.00)_正确答案:(正确答案:1 int tot=0,i,j; 2 for(i=0; iN; i+) 3 tot+=a0i; 4 tot+=aM-1i; 5 6 for(i=1;iM-1; i+) 7 tot+=ai0; 8 tot+=aiN-1; 9 10 return tot;)解析:解析:进入 fun函数,根据前面的分析:求周边元素的和,可以采用两个循环分别把行元素和列元素相加。但要避免把周边元素重复相加。