1、国家二级 C语言机试(操作题)模拟试卷 619及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:将形参 s所指字符串中下标为奇数的字符按 ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入 形参 p所指字符数组中,形成一个新串。 例如,形参 S所指的字符为 “baawrskjghzlieda”,执行后 P所指字符数组中的字符串应为 “aachjlsw”。 请在程序的下画线处填入 正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给
2、出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #lnclude stdio h void fun(char*s, char*p) int i, j, n, x, t; n=0; for(i=0; si!= 0; i+)n+; for(i=1; i n-2; i=i+2) *found* 【 1】 ; *found* for(j=【 2】 +2; j n; j=j+2) if(st sj)t=j; if(t!=i) x=si; si=st; sit=x; for(i=1, j=0; i n; i=i+2, j+) pj=si; *found* pj=【 3】 ; main()
3、char s80=“baawrskjghzlicda“, p50; printf(“ nThe original string is: s n“, s); fun(s, p); prLntf(“ nThe result is: s n“, p); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:将 s所指字符串的正序和反序进行连接,形成的新串放在 t所指的数组中。 例如,当 s所指字符串为 “ABCD”时, t所指字符串中的内容应为 “ABCDDCBA”。 请改正程序中的错
4、误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序 : #include conio h #include stdio h #include string h *found* void fun(char s, char t) int i, d; d=strlen(s); for(i=0; i d; i+) ti=si; for(i=0; i d; i+) td+i=sd-1-i; *found* t2*d-1= 0; main() char s100, t100; printf(“ nPlease enter string s: “);
5、 scanf(“ s“, s); fun(s, t); printf(“ nThe result is: s n“, t); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,学生的记录由学号和成绩组成, N名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun,其功能是:把低于平均分的学生数据放人 b所指的数组中,低于平均分的学生人数通过形参 n传回,平均分通过函数值返回。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写
6、的若干语句。 试题程序: #include stdio h #define N8 typedef struct char num10; double s; STREC; double fun(STREC*a, STREC*b, int*n) void main() STREC sN=“GA05“, 85, “GA03“, 76), “GA02“, 69), “GA04“, 85,“GA01“, 91, “GA07“, 72, “GA08“, 64, “GA06“, 87; STREC hN; int i, n; double ave; ave=fun(s, h, &n); printf(“Th
7、e d student data which is lower than 7 3f: n“, n, ave); for(i=0; i n; i+) *输出成绩低于平均值的学生记录 * printf(“ s 4 1f n“, h i num, hi s); printf(“ n“); 国家二级 C语言机试(操作题)模拟试卷 619答案与解析 一、程序填空题 1 【正确答案】 (1)t=i (2)i或 t (3) 0或 0 【试题解析】 本题中第 1个 for循环的作用是得到字符串的长度,第 2个 for循环的作用是对下标为奇数的字符按 ASCII码大小排序,最后将排好序的字符取出。 填空 1:取
8、出字符串中下标为奇数的字符,所以将下标 i赋值给中间变量 t。 填空 2:此处 for循环语句的作用是实现对下标为奇数的元素进行排序操作,所以循环变量初值应填入 i或 t;。 填空 3:将下标为奇数的字符取出后,存入 p所指的数组中,最后不要忘记在数组最后加入字符串结束标识 0。 二、程序修改题 2 【正确答案】 (1)void fun(char*s, char*t) (2)t2*d= 0;或 td+i= 0;或 t2*d=0;或 td+i=0; 【试题解析】 (1)从调用函数来看,函数传递的是数组,所以函数的形参应为指针。 (2)循环结束后回文字符的个数为 2*d个,因为数组下标是从 0开始
9、的,所以最后一个字符的下标为 2*d-1,在最后一个字符的后面加上结束符 0,因此为t2*d= 0;。 三、程序设计题 3 【正确答案】 double fun(STREC*a, STREC*b, int*n) int i, j=0; double av=0 0; for(i=0; i N; i+) av=av+ai s; av=av N; *求平均值 * for(i=0; i N; i+) if(ai s av) bj+=ai; *将低于平均值的学生记录存入结构体数组 b中 * *n=j; *指针传回低于平均值的学生人数 * return av; *返回平均值 * 【试题解析】 本题使用循环语句和条件判断语句来实现程序操作,第 1个循环语句的作用是求出总分,然后求出平均分 av。第 2个循环的作用是将分数低于平均分的学生记录存入结构体数组 b中。