1、国家二级( C语言)机试模拟试卷 291及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:在形参 ss所指字符串数组中,查找含有形参substr所指子串的所有字符串并输出,若没找到则输出相应信息。 ss所指字符串数组中共有 N个字符串,且串长小于 M。程序中库函数 substr(s1, s2)的功能是在 s1串中查找 s2子串,若没有,函数值为 0,若有,为非 0。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #inclu
2、de #define N 5 #define M 15 void fun(char(*ss)M, char*substr) int i, find=0; *found* for(i=0; i void fun(char*p, char*b) int i, k=0; while(*p) i=1; while(i=3&*p) *found* bk=p; k+; p+; i+; if(*p) *found* bk+=“; bk= 0; main() char a80, b80; printf(“Enter a string: “); gets(a); printf(“The original str
3、ing: “); puts(a); fun(a, b); printf(“ nThe string after insert space: “); puts(b); printf(“ n n“); 三、程序设计题( 40分) 3 请编写程序 fun,函数的功能是:实现 B=A+A,即把矩阵 A加上 A的转置,存放在矩阵 B中。计算结果在 main函数中输出。 例如,输入下面的矩阵: 其转置矩阵为: 程序输出: 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #includevoid fun(int a
4、33, int b33)main() *主程序 * int a33=(1, 2, 3, 4, 5, 6, 7, 8, 9, t33; int i, j; void NONO(); fun(a, t); for(i=0; i 国家二级( C语言)机试模拟试卷 291答案与解析 一、程序填空题( 30分) 1 【正确答案】 (1)N (2)substr (3)0 【试题解析】 第一空: “for(i=0; i【 1】; i+)“补充循环的结束条件, fun的参数 (*ss)M是指向 N行 M列的字符串数组,循环是逐 行字符串是否含有 substr所指的子串,因此循环次数是 N次,故第一空处应为 “
5、N“。 第二空: “if(strsr(ssi,【 2】 )!=NULL)“是判断字符串 ssi是否含有 substr所指的子串,故第二空处为 “substr“。 第三空: “if(find=【 3】 )printf(“nDont found!n“); “说明没有找到输出提示信息,如果找到了 “find=1; puts(ssi); printf(“n“); “可知 find会变成 1,在没有找到的情况下 find为初值 0。故第三空 处判断 find是否等于 0便可知是否找到了符合要求的字符串,因此第三空为 “0“。 二、程序修改题( 30分) 2 【正确答案】 (1)bk=*p; (2)bk+
6、=; 【试题解析】 (1)p是指针。 p存放的内容是地址值,第一标识下 “bk=p; “含义是将 p存放的地址内容赋给 bk,而不是把 p指向豹字符拷贝到 bk,显然不符合题意,应改成 “bk=*p; “, *p是取 p指向的字符的内容。 (2)第二个标识符下是复制三个字符后在 b中插入空格,原题中给出的“bk+=“; “,在 c语言中字符常量是由单引号括起的单个字符,即空格字符应为 “,而 “是表示字符串常量且该字符串中只有一个空格字符。第二标识下是将空格字符复制给 bk+,因此第二标识下应改为 “bk+=“; “。 三、程序设计题( 40分) 3 【正确答案】 int c33; int i, j; for(i=0; i3; i+) for(j=0; j3; j+) cij=aji; 矩阵的转置 bij=aij+cij; 【试题解析】 (1)首先,将 a所指数组元素中的值进行转置并放到 c所指数组中。 (2)矩阵相加是指把两个矩阵中下标相同的元素的值一一对应相加。