1、国家二级( C语言)机试模拟试卷 296及答案与解析 一、程序填空题( 30分) 1 函数 fun的功能是:从三个形参 a, b, c中找出中间的那个数,作为函数值返回。 例如,当 a=3, b=5, c=4时,中数为 4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include int fun(int a, int b, int c) int t; *found* t= (ab) ? (bc?b : (ac?C: 【 1】 ): (aC)? 【 2】: (bc)
2、? c: 【 3】 ); return t; main() int a1=3, a2=5, a3=4, r; r=fun(a1, a2, a3); printf (“ nThe middle number is: d n“, r); 二、程序修改题( 30分) 2 给定程序 MODll C中函数 fun的功能是:将 s所指字符串中的字母转换为按字母序列的后续字母 (但 Z转换为 A, z转换为 a),其他字符不变。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include #include void f
3、un(char*s) *found* while(*s!=) if(*s=A&s=a &*sb)?(bc?“表示 abc,根据题目要求,则中间值为 b,若只是满足第一个 “?“前面的条件,而 cb,则选择执行 “(ac?c:【 1】 )“,当 ac时取值 c,所以 ac)?“是对 a、 c的比较选择,第三空处的 “(bc)?c“根据 b、 c的判断,题目已经给出了 c,所以这里应该是 a。 第三空:第三空中对于 b、 c的判断选择缺少 b,所以这里填 “b“。 二、程序修改题( 30分) 2 【正确答案】 (1)while(*s)或 while(*s!=0)或 while(*s!=0) (2)s+j 【试题解析】 (1)第一个错误标识下的 “while(*s!=)“语句原意是 s不指向字符串尾就进入下面的循环,所以对于指针判断不为尾符的语句应该是 “while(*s)“或者 “while(*s!=0)“或者 “while(*s!=0)“。 (2)第二个标识下 “(*s)+; “是对字符内容加 1,而原题是对字符位置加 1,所以将其改为 “s+; “。