1、全国计算机二级 C 语言上机试题 37+2015 年及答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中,查找含有形参 substr 所指子串的所有字符串并输出,若没找到则输出相应信息。ss 所指字符串数组中共有 N 个字符串,且串长小于 M。程序中库函数 strstr(s1, s2)的功能是在 s1 串中查找 s2 子串,若没有,函数值为 0,若有,为非 0。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。不得增行或删行,也不得更改程序的结
2、构! 给定源程序: #include #include #define N 5 #define M 15 void fun(char (*ss)M, char *substr) int i,find=0; /*found*/ for(i=0; i _1_ ; i+) /*found*/ if( strstr(ssi, _2_) != NULL ) find=1; puts(ssi); printf(“/n“); /*found*/ if (find=_3_) printf(“/nDont found!/n“); main() char xNM=“BASIC“,“C langwage“,“Jav
3、a“,“QBASIC“,“Access“,strM; int i; printf(“/nThe original string/n/n“); for(i=0;i printf(“/nEnter a string for search : “); gets(str); fun(x,str); (分数:10.00)_2.给定程序 MODI1.C 中函数 fun 的功能是:求三个数的最小公倍数。 例如,给主函数中的变量x1、x2、x3 分别输入 15 11 2,则输出结果应当是:330。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。
4、 给定源程序: #include /*found*/ fun(int x, y, z ) int j,t ,n ,m; j = 1 ; t=j%x; m=j%y ; n=j%z; while(t!=0|m!=0|n!=0) j = j+1; t=j%x; m=j%y; n=j%z; /*found*/ return i; main( ) int x1,x2,x3,j ; printf(“Input x1 x2 x3: “); scanf(“%d%d%d“, printf(“x1=%d, x2=%d, x3=%d /n“,x1,x2,x3); j=fun(x1,x2,x3); printf(“T
5、he minimal common multiple is : %d/n“,j); (分数:10.00)_3.假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参 n 给出了字符串的长度, 形参 h 给出了字符串中前导*号的个数,形参 e给出了字符串中最后*号的个数。在编写函数时,不得使用 C 语言提供的字符串函数。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后,字符串中的内容应当是:A*BC*DEF*G。 注意: 部分源程序在文件 PROG1.C 文件中。请勿改动主函数 main 和其它函数中的任何内容
6、,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include void fun( char *a, int n,int h,int e ) main() char s81,*t,*f; int m=0, tn=0, fn=0; printf(“Enter a string:/n“);gets(s); t=f=s; while(*t)t+;m+; t-; while(*t=*)t-;tn+; while(*f=*)f+;fn+; fun( s , m,fn,tn ); printf(“The string after deleted:/n“);puts(s); NONO(
7、); (分数:10.00)_全国计算机二级 C 语言上机试题 37+2015 年答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中,查找含有形参 substr 所指子串的所有字符串并输出,若没找到则输出相应信息。ss 所指字符串数组中共有 N 个字符串,且串长小于 M。程序中库函数 strstr(s1, s2)的功能是在 s1 串中查找 s2 子串,若没有,函数值为 0,若有,为非 0。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。不得增行
8、或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 5 #define M 15 void fun(char (*ss)M, char *substr) int i,find=0; /*found*/ for(i=0; i _1_ ; i+) /*found*/ if( strstr(ssi, _2_) != NULL ) find=1; puts(ssi); printf(“/n“); /*found*/ if (find=_3_) printf(“/nDont found!/n“); main() char xNM=“BASIC“,“C l
9、angwage“,“Java“,“QBASIC“,“Access“,strM; int i; printf(“/nThe original string/n/n“); for(i=0;i printf(“/nEnter a string for search : “); gets(str); fun(x,str); (分数:10.00)_正确答案:(第一处:利用 for 循环,从几个字符串中进行查找,程序中已经给定了 N 个字符串,所以应填:N。 第二处:查找子串,子串由形参 substr 传递,所以应填:substr。 第三处:试题要求,若没有找到,函数值为 0,所以应填:0。)解析:2.给
10、定程序 MODI1.C 中函数 fun 的功能是:求三个数的最小公倍数。 例如,给主函数中的变量x1、x2、x3 分别输入 15 11 2,则输出结果应当是:330。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include /*found*/ fun(int x, y, z ) int j,t ,n ,m; j = 1 ; t=j%x; m=j%y ; n=j%z; while(t!=0|m!=0|n!=0) j = j+1; t=j%x; m=j%y; n=j%z; /*found*/ return i
11、; main( ) int x1,x2,x3,j ; printf(“Input x1 x2 x3: “); scanf(“%d%d%d“, printf(“x1=%d, x2=%d, x3=%d /n“,x1,x2,x3); j=fun(x1,x2,x3); printf(“The minimal common multiple is : %d/n“,j); (分数:10.00)_正确答案:(第一处: 函数中形参的定义不正确,应改为:fun(int x,int y, int z)。 第二处: 程序中三个数的最小公倍数是用 j 处理的,所以应返回 j 的值。)解析:3.假定输入的字符串中只包含
12、字母和*号。请编写函数 fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参 n 给出了字符串的长度, 形参 h 给出了字符串中前导*号的个数,形参 e给出了字符串中最后*号的个数。在编写函数时,不得使用 C 语言提供的字符串函数。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后,字符串中的内容应当是:A*BC*DEF*G。 注意: 部分源程序在文件 PROG1.C 文件中。请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include void fun( char *a, int n
13、,int h,int e ) main() char s81,*t,*f; int m=0, tn=0, fn=0; printf(“Enter a string:/n“);gets(s); t=f=s; while(*t)t+;m+; t-; while(*t=*)t-;tn+; while(*f=*)f+;fn+; fun( s , m,fn,tn ); printf(“The string after deleted:/n“);puts(s); NONO(); (分数:10.00)_正确答案:(void fun( char *a, int n,int h,int e ) char *p=a ; int j=0,len=0; while(*p) p+; len+; while(j aj=ah+j; j+; aj=0; )解析: