1、国家二级 C语言机试(操作题)模拟试卷 263及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.下列给定程序中,函数 fun的功能是:把形参 a所指数组中的偶数按原顺序依次存放到 a0、a1、a2中,把奇数从数组中删除,偶数的个数通过函数值返回。 例如,若 a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后,a 所指数组中的数据为:4、2、6、8,返回值为 4。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #inc
2、ludestdioh #define N 9 int fun(int a,int n) int i,j; j=0; for(i=0;in;i+) *found* if( 【1】 =0) *found* 【2】 =ai;j+; *found* return 【3】 ; main() int bN=9,1,4,2,3,6,5,8,7),i,n; printf(“nThe original data:n“); for(i=0;iN;i+) printf(“4 d“,bi); printf(“n“); n=fun(b,N); printf(“nThe number of even dn“,n); pr
3、intf(“nThe even:n“); for(i=0;in;i+) printf(“4d“,bi); printf(“n“); (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,fun 函数的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符串s输入:AAaaBBbb123CCcccd,则应输出:upper=6,lower=8。请改正程序中的错误,使它得出正确的结果。注意:部分源程序在文件 MODI1C 中,不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:1 #includestdioh2 *found*3 void f
4、un(char*s,int a,int b)4 5 while(*S)6 if(*S=A*s=z)7 *found*8 * a=a+1;9 if(*s=a*s=z)10 *found*11 *b=b+1;12 s+;13 14 15 main()16 char S100;int upper=0,17 lower=0;18 printf(“nPlease a string:“);19 gets(S);20 fun(S,upper,&lower);21 printf(“n upper=d lower=dn“,upper,lower);22 (分数:2.00)_三、程序设计题(总题数:1,分数:2.
5、00)3.请编写函数 fun,其功能是:将放在字符串数组中的 M个字符串(每串的长度不超过 N),按顺序合并组成一个新的字符串。例如,若字符串数组中的 M个字符串为“AAAA“,“BBBBBBB“,“CC“,则合并后的字符串内容应该是“AAAABBBBBBBCC”。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includestdioh#includeconioh#define M 3#define N 20void fun(char aMN,char*b)void main() char wMN=“AAA
6、A“,“BBBBBBB“,“CC“; char a100=“#“); int i; printf(“The string:n“); for(i=0;iM;i+) puts(wi); printf(“n“); fun(w,a); printf(“The A string:n“); printf(“s“,a); printf(“nn“);(分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 263答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.下列给定程序中,函数 fun的功能是:把形参 a所指数组中的偶数按原顺序依次存放到 a0、a1、a2中
7、,把奇数从数组中删除,偶数的个数通过函数值返回。 例如,若 a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后,a 所指数组中的数据为:4、2、6、8,返回值为 4。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh #define N 9 int fun(int a,int n) int i,j; j=0; for(i=0;in;i+) *found* if( 【1】 =0) *found* 【2】 =ai;j+; *found* re
8、turn 【3】 ; main() int bN=9,1,4,2,3,6,5,8,7),i,n; printf(“nThe original data:n“); for(i=0;iN;i+) printf(“4 d“,bi); printf(“n“); n=fun(b,N); printf(“nThe number of even dn“,n); printf(“nThe even:n“); for(i=0;in;i+) printf(“4d“,bi); printf(“n“); (分数:2.00)_正确答案:(正确答案:(1)ai2 (2)aj (3)j)解析:解析:填空 1:if 语句条件
9、表达式,判断数组元素是否为偶数,对 2求余,结果为 0,则为偶数;结果为 1则为奇数。 填空 2:如果该数组元素是偶数,则将其值保存。 填空 3:最后按要求将偶数个数通过 return语句返回给 main函数。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,fun 函数的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符串s输入:AAaaBBbb123CCcccd,则应输出:upper=6,lower=8。请改正程序中的错误,使它得出正确的结果。注意:部分源程序在文件 MODI1C 中,不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:1 #i
10、ncludestdioh2 *found*3 void fun(char*s,int a,int b)4 5 while(*S)6 if(*S=A*s=z)7 *found*8 * a=a+1;9 if(*s=a*s=z)10 *found*11 *b=b+1;12 s+;13 14 15 main()16 char S100;int upper=0,17 lower=0;18 printf(“nPlease a string:“);19 gets(S);20 fun(S,upper,&lower);21 printf(“n upper=d lower=dn“,upper,lower);22
11、(分数:2.00)_正确答案:(正确答案:(1)void fun(char*s,int*a,int*b) (2)*a=*a+1; (3)*b=*b+1;)解析:解析:(1)由主函数中调用 fun函数的语句 fun(s,&upper,&lower)可知,函数的后两个变量为指针的形式,所以用*a 和*b。 (2)*a 的作用是用来记录大写字母的个数,此处的作用是对*a 累加 1,所以此处应改为*a=*a+1。 (3)*b 的作用是用来记录小写字母的个数,此处的作用是对*b 累加 1,所以此处应改为*b=*b+1。三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,其功能是:将放在字
12、符串数组中的 M个字符串(每串的长度不超过 N),按顺序合并组成一个新的字符串。例如,若字符串数组中的 M个字符串为“AAAA“,“BBBBBBB“,“CC“,则合并后的字符串内容应该是“AAAABBBBBBBCC”。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includestdioh#includeconioh#define M 3#define N 20void fun(char aMN,char*b)void main() char wMN=“AAAA“,“BBBBBBB“,“CC“; char
13、a100=“#“); int i; printf(“The string:n“); for(i=0;iM;i+) puts(wi); printf(“n“); fun(w,a); printf(“The A string:n“); printf(“s“,a); printf(“nn“);(分数:2.00)_正确答案:(正确答案:void fun(char aMN,char*b) int i,j,k=0; for(i=0;iM;i+) *将字符串数组中的 M个字符串,按顺序存入一个新的字符串* for(j=0;aij!=0;j+) bk+=aij; bk=0; *在字符串最后加上字符串结束标记符* )解析:解析:本题考查:字符串连接操作。本程序中第 1个 for循环的作用是对二维数组行的控制,第 2个循环的作用是从同一行中取出字符并存放到一维数组 b中,语句是 bk+=aij;。