1、国家二级( C语言)机试模拟试卷 320及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:在形参 ss所指字符串数组中查找与形参 t所指字符串相同的串,找到后返回该串在字符串数组中的位置 (下标值 ),未找到则返回 -1。 ss所指字符串数组中共有 N个内容不同的字符串,且串长小于 M。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 5 #define M 8 int fun(char
2、【 1】 (*ss)M, char * t) int i; *found* for(i=0; i *found* void fun(int n) int a, b, c, k; double s; s=0 0; a=2; b=1; for(k=1, k #include void fun(char*s, char t) main() char s100, t100; void NONO(); printf(“ nPlease enter string S: “), scanf(“ s“, S); fun(s, t); printf(“ nThe result is: s n“, t); NON
3、O(); void NONO() *本函数用于打开文件,输入数据,调用函 数,输出数据,关闭文件。 * char s100, t100; FILE*rf, *wf; int i; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i10; i+) fscanf(rf, “ s“, s); fun(s, t); fprintf(wf, “ s n“, t); fclose(rf); fclose(wf); 国家二级( C语言)机试模拟试卷 320答案与解析 一、程序填空题( 30分) 1 【正确答案】 (1)N (2)i (3
4、)一 1 【试题解析】 第一空: “for(i=0; i1 ; i+)“补充循环的结束条件, fun的参数(*ss)M是指向 N行 M列的字符串数组,循环是逐行查找是否存在 t所指的字符串,因此循环次数是 N次,故第一空处应为 “N“。 第二空: “if(strcmp(ssi, t)=0)return【 2】; “说明两个字符串相同,按照题干要求,应返回该串在字符串数组中的位置 i,故第二空处为 “i“。 第三空: “if(n=【 3】 )ptintf(“nDont found!n“); “, fun函数未找到则返回 -1,因此这里是判断 n是否等于 -1,如果 n等于 -1标识没有找到,在屏
5、幕上输出 “Dont found!“,因此第三空处为 “-1“。 二、程序修改题( 30分) 2 【正确答案】 (1)double fun(int n) (2)s=s+(double)a/b; 【试题解析】 (1)fun函数中的语句 “double s; “以及 “return s; “说明 fun函数具有 double返回值,所以应将 “fun(int n)“改为 “double fun(int n)“。 (2)第二标识下 “s=s+(Double)a b; “对 s进行累加, a和 b均是 int变量,计算结果也是 int会丢失精度,需要强制类型转换,将 a或 b转换成 double型。“
6、(Double)a“强制类型转换是错误的, C语言中不存在 “Double关键字,第二标识下应改成 “s=s+(double)a b; “。 三、程序设计题( 40分) 3 【正确答案】 int i, j=0; for(i=0; istrlen(s); i+=2) if(si 2=0)tj+=si; tj= 0; 【试题解析】 (1)判断一个字符串中的某一字符下标 i是否为 偶数,可用 “i2=0“来判断;也可以从下标 0开始,每次增 2。判断字符中的 ASCII码值是否为偶数,则可用 “si 2=0“来判定。 (2)对串 s中下标为偶数的字符进行考查,满足 ASC 码值是偶数条件的字符就顺序放在新串 s中,否则就不存放。 (3)所有字符处理完后,记得在新串 s的末尾加上结束符 “ 0“。