1、国家二级 C语言机试(操作题)模拟试卷 385及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.函数 fun的功能是:将形参 a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参 n中存放数组中数据的个数,若 n为奇数,则中间的元素不动。 例如:若 a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9、5、1、2、3、4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。不得增行或删行,也不得更改程序的结构!1 #inclu
2、destdioh2 #define N 93 void fun(int a,int n)4 int i,t,p;5 *found*6 p=(n2=0)?n2:n2+_1_;7 for(i=0;in2;i+)8 9 t=ai;10 *found*11 ai=ap+_2_;12 *found*13 _3_=t;14 15 16 main()17 int bN=1,2,3,4,5,6,7,8,9,i;18 printf(nThe original data:n);19 for (i=0;iN;i+) printf(4d,bi);20 printf(n);21 fun(b,N);22 printf(n
3、The data after moving:n);23 for (i=0;iN;i+)printf(4d,bi);24 printf(n);25 (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:根据整型形参 m,计算如下公式的值。 (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,函数的功能是:将放在字符串数组中的 M个字符串(每串的长度不超过 N),按顺序合并组成一个新的字符串。 例如,字符串数组中的 M个字符串为 AAAA BBBBBBB CC 则合并后的字符串的内容应是:AAAABB
4、BBBBBCC。 提示:strcat(a,b)的功能是将字符串 b复制到字符串 a的串尾上,成为一个新串。 注意:部分源程序在文件 PROG1C 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。1 #includestdioh2 #includestringh3 #define M 34 #define N 205 void fun(char aMN,char *b)6 78 9 main()10 char wMN=AAAA,BBBBBBB,CC,a100;11 int i;void NONO();12 printf(The string:
5、n);13 for(i=0 ; iM;i+)puts(wi);14 printf(n);15 fun(w,a);16 printf(The A string:n);17 printf(s,a);printf(nn);18 NONO();19 20 void NONO()21 *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。*22 FILE *rf,*wf ;23 char wMN,a100;int i;24 rf=fopen(indat,r);25 wf=fopen(outdat,w);26 for(i=0;i10;i+) 27 fscanf(rf,sss,w 0,
6、w1, w 2);28 fun(w,a);29 fprintf(wf,sn,a);30 31 fclose(rf);fclose(wf);32 (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 385答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.函数 fun的功能是:将形参 a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参 n中存放数组中数据的个数,若 n为奇数,则中间的元素不动。 例如:若 a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9、5、1、2、3、4。 请在程序的下划线处
7、填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #define N 93 void fun(int a,int n)4 int i,t,p;5 *found*6 p=(n2=0)?n2:n2+_1_;7 for(i=0;in2;i+)8 9 t=ai;10 *found*11 ai=ap+_2_;12 *found*13 _3_=t;14 15 16 main()17 int bN=1,2,3,4,5,6,7,8,9,i;18 printf(nThe origi
8、nal data:n);19 for (i=0;iN;i+) printf(4d,bi);20 printf(n);21 fun(b,N);22 printf(nThe data after moving:n);23 for (i=0;iN;i+)printf(4d,bi);24 printf(n);25 (分数:2.00)_正确答案:(正确答案:(1)1 (2)i (3)ap+i)解析:解析:函数 fun的功能是将形参 a所指数组中的前半部分元素中的值和后半部分元素中的值对换。 第一空:“p=(n2=0)?n2:n2+_1_;”和“ai=ap+_2_;” “n2=0”判断是否是偶数,ai和
9、ap+_2_交换,如果 n是偶数,a0和 an2交换,如果 n是奇数,那么 a0和 an2+1交换,依此类推,故 n为偶数时 ai和 ai+n2交换,n 为奇数时 ai和 ai+n2+1交换。因此如果 n是奇数的话,p 应该等于 n2+1,故第一空处应为“1”。 第二空:由上分析可知,ai和 ai+p交换,故第二空应为“i”。 第三空:“t=ai;ai=ap+i;”,故第三处应该是把 ai赋值给 ap+i,ai保存在 t中,故第三空应为“ap+i”。二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:根据整型形参 m,计算如下公式的值。 (分数:2.
10、00)_正确答案:(正确答案:(1)double fun(int m) (2)for(i=100; i=m; i+=100)解析:解析:函数为累计相加,计算公式的值。 (1)第一个标识下的 fun函数的定义,根据题干中给出的公式中的分数部分,可知应该具有 double类型返回值。所以应将“fun(int m)”改为“double fun(int m)”。 (2)第二个标识下的 for循环过程是实现对公式的求解,C 语句中 for循环中的多个循环条件表达式是以分号为分隔符,所以第二个标识下“for(i=100,i=m,i+=100)” 改为 “for(i=100;i=m;i+=100)”。三、程
11、序设计题(总题数:1,分数:2.00)3.请编写函数 fun,函数的功能是:将放在字符串数组中的 M个字符串(每串的长度不超过 N),按顺序合并组成一个新的字符串。 例如,字符串数组中的 M个字符串为 AAAA BBBBBBB CC 则合并后的字符串的内容应是:AAAABBBBBBBCC。 提示:strcat(a,b)的功能是将字符串 b复制到字符串 a的串尾上,成为一个新串。 注意:部分源程序在文件 PROG1C 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。1 #includestdioh2 #includestringh3 #def
12、ine M 34 #define N 205 void fun(char aMN,char *b)6 78 9 main()10 char wMN=AAAA,BBBBBBB,CC,a100;11 int i;void NONO();12 printf(The string:n);13 for(i=0 ; iM;i+)puts(wi);14 printf(n);15 fun(w,a);16 printf(The A string:n);17 printf(s,a);printf(nn);18 NONO();19 20 void NONO()21 *请在此函数内打开文件,输入测试数据,调用 fun
13、函数,输出数据,关闭文件。*22 FILE *rf,*wf ;23 char wMN,a100;int i;24 rf=fopen(indat,r);25 wf=fopen(outdat,w);26 for(i=0;i10;i+) 27 fscanf(rf,sss,w 0,w1, w 2);28 fun(w,a);29 fprintf(wf,sn,a);30 31 fclose(rf);fclose(wf);32 (分数:2.00)_正确答案:(正确答案:1 int i,j,k=0; 2 for(i=0 ; iM ; i+) 3 for(j=0 ; jN; j+) 4 i f(*(*(a+i)+j) 5 如果不指向行的尾 6 bk=*(*(a+i)+j); 7 将行中的值赋值给数组 b 8 k+;数组下标加 1 9 else如果指向尾,则跳出这一行 10 break; 11 bk=0;数组加尾符)解析:解析:(1)二维字符数组第 i行 j列元素 aij,就是指针形式的“*(*(a+i)+j)”。因此,如果字符“*(*(a+i)+j)”是串的结束符,则说明该字符串已经结束。 (2)当一维字符数组存放完字符串中各字符后,必须在一维字符数组的尾字符处加一个结束符“0”,才能把字符数组变成字符串。否则,字符数组就只能是非字符串的一般字符数组。