1、国家二级 C语言机试(操作题)模拟试卷 559及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是: 在形参 s所指字符串中的每个数字字符之后插入一个 *号。例如,形参 s所指的字符串为 “det35adh3kjsdf7”,执行后结果为 “des*5*adh3 * kjsdf7*”。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h void fun(char*s) int i , j, n; for(i=0; si!= 0; i+) *f
2、ound* if(si =0【 1】 si =9) n=0; *found* while(si+1+n!=【 2】 ) n+; for(j=i+n+1; j i; j一一 ) *found* Sj+1=【 3】 ; Sj+1=*; i=i+1; main() char s60=“def35adh3kjsdf7“; printf(“ nThe original string is: s n“, s); fun(s); printf(“ nThe result is: s n“, s); 二、程序修改题 2 下列给定程序中函数 fun的功能是:根据整型形参 m,计算如下公式的值:例如,若 m的值为
3、 5,则应输出 1 463611。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conio h #includestdio h double fun(int m) double y=1 0; int i; *found* for(i=2; i m; i+) *found* Y+=1 (i, Ic i); return(y); main() int n=5; printf(“ nThe result is 1f n“, fun(n); 三、程序设计题 3 编写函数 fun,其功能是:实现 B=A
4、+A,即将矩阵 A加上 A的转置,存放在矩阵 B中。计算结果在 main函数中输出。 例如, 输入下面的矩阵: 其转置矩阵为: 1 2 3 1 4 7 4 5 6 2 5 8 7 8 9 3 6 9 程序输出: 2 6 10 6 10 14 10 14 18 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #include conio h #include stdlib h void fun(int a33, int b33) void main() int e33=1,
5、 2, 3, 4, 5, 6), 7, 8, 9), t33; int i, j; system(“CLS“); fun(a, t); for(i=0; i 3; i+) for(j=0; j 3; j+) printf(“ 7 d“, tij); printf(“ n“); 国家二级 C语言机试(操作题)模拟试卷 559答案与解析 一、程序填空题 1 【正确答案】 (1)& (2)0或 0 (3)sj或 *(s+j) 【试题解析】 填空 1: if语句中的条件是判断是否为数字字 符,数字字符的条件是大于等于 “0”,同时小于等于 “9”,因此需要使用逻辑与 “&”来连接。 填空 2: whi
6、le语句判断是否到达字符串的结尾,因此填入 0(字符串结束标识 0)。 填空 3: for语句使数字后的字符全都向后移一个单位,因此要使 sj+1=sj;。 二、程序修改题 2 【正确答案】 (1)for(i=2; i =m; i+) (2)y+: 1 0 (i*i);或 y+=(double)1 (i*i); 【试题解析】 (1)根据公式可以知道 for循环语句中变量 i的取值范围应该包括m。 (2)变量 y是一个 double型变量,而 i是整型变量,所以要进行类型转换,改为y+=1 0 (i*i);或 y+= (dLouble)1 (i*i);。 三、程序设计题 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中,外层循环控制矩阵的行下标,内层循环控制矩阵的列下标。