1、国家二级 C语言机试(操作题)模拟试卷 445及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.下列给定程序中,函数 fun的功能是: 在形参 S所指字符串中的每个数字字符之后插入一个*号。例如,形参 S所指的字符串为“def35adh3kjsdf7”,执行后结果为“def3*5*adh3*kjsdf7*”。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdioh void fun(char*s) int i f J r
2、 n; for(i=0;si!=/0; i+) /*found*/ 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; msin() char s60=“def35adh3kjsdf7“; printf(“/nThe original string is:s/n“,s); fun(s); printf(“/nThe result is: s/n“,s); (分数:2.00)_二、程序修改题(总题数:1,分数:2
3、.00)2.下列给定程序中函数 fun的功能是:根据整型形参 m,计算如下公式的值: (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.编写函数 fun,其功能是:实现 B=A+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 s
4、tdioh #include conioh #include stdlibh void fun(int a33,int b33)void main() int e133=f1,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“); (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 445答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.下列给定程序中,函数
5、 fun的功能是: 在形参 S所指字符串中的每个数字字符之后插入一个*号。例如,形参 S所指的字符串为“def35adh3kjsdf7”,执行后结果为“def3*5*adh3*kjsdf7*”。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdioh void fun(char*s) int i f J r n; for(i=0;si!=/0; i+) /*found*/ if(si =0 【1】 si =9) n=0; /*found*/ while(si+1+n!
6、= 【2】 ) n+; for(j=i+n+1;j i;j 一一) /*found*/ sj+1= 【3】 ; sj+1=*; i=i+1; msin() char s60=“def35adh3kjsdf7“; printf(“/nThe original string is:s/n“,s); fun(s); printf(“/nThe result is: s/n“,s); (分数:2.00)_正确答案:(正确答案:(1)& (2)0 或/0 (3)sj或*(s+j)解析:解析:填空 1:if 语句中的条件是判断是否为数字字符,数字字符的条件是大于等于“0”,同时小于等于 “9”,因此需要使
7、用逻辑与“&”来连接。 填空 2:while 语句判断是否到达字符串的结尾,因此填入 0(字符串结束标识/0)。 填空 3:for 语句使数字后的字符全都向后移一个单位,因此要使 sj+1=sj;。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中函数 fun的功能是:根据整型形参 m,计算如下公式的值: (分数:2.00)_正确答案:(正确答案:(1)for(i =2;i =m;i+) (2)y+=10/(i*i);或 y+=(double)1/(i*i);)解析:解析:(1)根据公式可以知道 for循环语句中变量 i的取值范围应该包括 m。 (2)变量 y是一个double型变
8、量,而 i是整型变量,所以要进行类型转换,改为 y+=10/(i*i);或 y+=(double)1/(i*i);。三、程序设计题(总题数:1,分数:2.00)3.编写函数 fun,其功能是:实现 B=A+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的花括号中填入你编写的若干语句。试题程序:#incl
9、ude stdioh #include conioh #include stdlibh void fun(int a33,int b33)void main() int e133=f1,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“); (分数:2.00)_正确答案:(正确答案: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中,外层循环控制矩阵的行下标,内层循环控制矩阵的列下标。