1、国家二级 C语言机试(操作题)模拟试卷 302及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.下列给定程序中,函数 fun的功能是:将形参 s所指字符串中下标为奇数的字符按 ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参 P所指字符数组中,形成一个新串。 例如,形参 s所指的字符为“baawrskjghzlicda”,执行后 P所指字符数组中的字符串应为“aachjlsw”。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序:
2、 #includestdioh void fun(char*s,char*p) int i,j,n,x,t; n=0; for(i=0;si!=0;i+)n+; for(i=1;in-2;i=i+2) *found* 【1】 ; *found* for(j= 【2】 +2;jn;j=j+2) if(stsj)t=j; if(t!=i) x=si;si=st;st=x; for(i=1,j=0;in;i=i+2,j+) Pj=Si; *found* Pj= 【3】 ; main() char s80=“baawrskj ghzlicda“,P50; printf(“nThe original s
3、tring is:sn“,s); fun(s,P); printf(“nThe result is:sn“,p); (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:删除指针 P所指字符串中的所有空白字符(包括制表符、回车符及换行符)。输入字符串时用“#”结束输入。请改正程序中的错误,使它能输出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#includeestringh#includeestdioh#includeectypehfun(char*P) int i,t;char c80;*fou
4、nd* For(i=0,t=0;Pi;i+) if(!isspace(*(p+i) ct+=Pi;*found* ct=“0“; strcpy(p,c); void main() char c,s80, int i=0; printf(“Input a string:“); c=getchar(); while(c!=#) si=c;i+;c=getchar();) Si=0; fun(s); puts(s),(分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.下列程序定义了 NN的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN),该函数的功能是:将数组左下半
5、三角元素中的值全部置成 0。例如 a数组中的值为:1 9 72 3 84 5 6 则返回主程序后 a数组中的值应为:0 9 70 0 80 0 0 注意:部分源程序给出如下。 请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#includeconioh#includestdioh#includestdlibh#define N 5 void fun(int aN)void main() int aNN,i,j; system(“CLS“); printf(“*The array*n“); for(i=0;iN;i+) *产生一个随机的
6、5*5矩阵* for(j=0;jN;j+) aij=rand()10; printf(“4d“,aij); printf(“n“); fun(a); printf(“THE RESULTn“); for(i=0;iN;i+) for(j=0;jN;j+) printf(“4d“,aij); printf(“n“); (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 302答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.下列给定程序中,函数 fun的功能是:将形参 s所指字符串中下标为奇数的字符按 ASCII码大小递增排序,并将排序后下标
7、为奇数的字符取出,存入形参 P所指字符数组中,形成一个新串。 例如,形参 s所指的字符为“baawrskjghzlicda”,执行后 P所指字符数组中的字符串应为“aachjlsw”。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh void fun(char*s,char*p) int i,j,n,x,t; n=0; for(i=0;si!=0;i+)n+; for(i=1;in-2;i=i+2) *found* 【1】 ; *found* for(j= 【2
8、】 +2;jn;j=j+2) if(stsj)t=j; if(t!=i) x=si;si=st;st=x; for(i=1,j=0;in;i=i+2,j+) Pj=Si; *found* Pj= 【3】 ; main() char s80=“baawrskj ghzlicda“,P50; printf(“nThe original string is:sn“,s); fun(s,P); printf(“nThe result is:sn“,p); (分数:2.00)_正确答案:(正确答案:(1)t=i (2)i 或 t (3)0或 0)解析:解析:本题中第 1个 for循环的作用是得到字符串的
9、长度,第 2个 for循环的作用是对下标为奇数的字符按 ASCII码大小排序,最后将排好序的字符取出。 填空 1:取出字符串中下标为奇数的字符,所以将下标 i赋值给中间变量 t。 填空 2:此处 for循环语句的作用是实现对下标为奇数的元素进行排序操作,所以循环变量初值应填入 i或 t;。 填空 3:将下标为奇数的字符取出后,存入 p所指的数组中,最后不要忘记在数组最后加入字符串结束标识0。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:删除指针 P所指字符串中的所有空白字符(包括制表符、回车符及换行符)。输入字符串时用“#”结束输入。请改正程序中的错误,
10、使它能输出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#includeestringh#includeestdioh#includeectypehfun(char*P) int i,t;char c80;*found* For(i=0,t=0;Pi;i+) if(!isspace(*(p+i) ct+=Pi;*found* ct=“0“; strcpy(p,c); void main() char c,s80, int i=0; printf(“Input a string:“); c=getchar(); while(c!=#) si=c;i+;
11、c=getchar();) Si=0; fun(s); puts(s),(分数:2.00)_正确答案:(正确答案:(1)for(i=0,t=0;pi;i+) (2)ct=0;)解析:解析:该题目考查 C语言关键字的书写,C 语言中关键字是区分大小写的。另外为字符串结尾添加结束符时应书写为0,而非“0”,“0”表示一个字符串。该程序的 if条件中应用了 isspace函数,该函数的功能是检查 ch是否为空格、跳格符(制表符)或换行符。三、程序设计题(总题数:1,分数:2.00)3.下列程序定义了 NN的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN),该函数的功能是:将数组左下
12、半三角元素中的值全部置成 0。例如 a数组中的值为:1 9 72 3 84 5 6 则返回主程序后 a数组中的值应为:0 9 70 0 80 0 0 注意:部分源程序给出如下。 请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#includeconioh#includestdioh#includestdlibh#define N 5 void fun(int aN)void main() int aNN,i,j; system(“CLS“); printf(“*The array*n“); for(i=0;iN;i+) *产生一个随机的
13、 5*5矩阵* for(j=0;jN;j+) aij=rand()10; printf(“4d“,aij); printf(“n“); fun(a); printf(“THE RESULTn“); for(i=0;iN;i+) for(j=0;jN;j+) printf(“4d“,aij); printf(“n“); (分数:2.00)_正确答案:(正确答案:void fun(int aN) int i,j; for(i=0;iN;i+) for(j=0;j=i;j+) aij=0; *将数组左下半三角元素中的值全部置成 0* )解析:解析:对于 NN二维数组,如何表示其左下半三角元素,可以通过以下语句实现。 for(i=0 ;in;i+) for(j=0;j=i;j+) 外层循环用来控制矩阵的行下标,内层循环控制矩阵的列下标。注意列下标的取值范围,因为要表示下三角元素,所以 j的范围是 0i。