1、国家二级 C语言机试(操作题)模拟试卷 661及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:在形参 ss所指字符串数组中,将所有串长超过 k的字符串中后面的字符删除,只保留前面的 k个字符。 ss所指字符串数组中共有 N个字符串,且串长小于 M。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include st
2、ring h #define N5 #define M10 *found* void fun(char(*ss)【 1】 , int k) int i=0; *found* while(i 【 2】 ) *found* ssik=【 3】 ; i+; main() char xNM=“Create“, “Modify“, “Sort“, “skip“, “Delete“; int i; printf(“ nThe original string n n“); for(i=0; i N; i+)puts(xi); printf(“ n“); fun(x, 4); printf(“ nThe st
3、ring after deleted: n n“); for(i=0; i N; i+) puts(xi); printf(“ n“); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:将 s所指字符串中的字母转换为按字母序列的后续字母 (如 “Z”转化为 “A”, “Z”转化为 “a”),其他字符不变。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #in
4、clude stdio h #include ctype h #include conio h void fun(char*s) *found* while(*s!=) if(*s: A&*s =Z|*s =a&*s =z) if(*s=Z)*s=A; else if(*s=z)*s=a; else*s+=1; *found* (*s)+; void main() char s80; system(“CLS“); printf(“ n Enter a string with length 80: n n“); gets(s); printf(“ n The string: n n“); put
5、s(s); fun(s); printf(“ n n The Cords: n n“); puts(s); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,编写函数 fun,其功能是:实现B=A+A,即将矩阵 A加上 A的转置,存放在矩阵 B中。计算结果在 main函数中输出。 例如, 输入下面的矩阵: 1 2 3 4 5 6 7 8 9 其转置矩阵为: 1 4 7 2 5 8 3 6 9 程序输出: 2 6 10 6 10 14 10 14 18 注意:部分源程序给出如下。 请勿改动主函数 m
6、ain和其他 函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #include conio h #include stdlib h void fun(int a33, int b33) void main() int a33=1, 2, 3, 4, 5, 6, 7, 8, 9, t33; inti, j; system(“CLS“); fun(a, t); for(i=0; i 3; i+) for(j=0; j 3; j+) printf(“ 7d“, tij); printf(“ n“); 国家二级 C语言机试(操作题)模拟
7、试卷 661答案与解析 一、程序填空题 1 【正确答案】 (1)M (2)N (3) 0 【试题解析】 填空 1:根据 main函数中的函数调用语句,确定函数定义时的形式参数,所以填入 M。 填空 2: while循环语句需要对所有字符串进行操作,因此循环条件是 i N。 填空 3:字符串结尾加入字符串结束标识 0。 二、程序修改题 2 【正确答案】 (1)while(*s)或 while(*s!= 0) (2)s+; 【试题解析】 (1)通过 while语句可对字符串所有字符进行遍历,循环条件是对当前字符进行判断,若当前字符不是字符串结尾,则对其进行其他操作。 (2)因为该循环通过指针 s的移动遍历字符串,所以每循环一次要使指针向后移动一个位置,而不是将指针所指的元素加 1。 三、程序设计题 3 【正确答案】 void fun(int a33, int b33) int i, j; for(i=0; i 3; i+) for(j=0; j 3; j+) bij=aij+aji; *把矩阵 a加上 a的转置,存放在矩阵 b中 * 【试题解析】 行列数相等的二维数组的转置就是行列互换,即转置后的第 i行第j列正好对应原矩阵的第 j行第 i列。本题使用双层循环实现矩阵的转置,并将计算结果存入矩阵 b中,外层循环控制矩阵的行下标,内层循环控制矩阵的列下标。