1、国家二级 C语言机试(操作题)模拟试卷 511及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:将形参 n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。 例如,从主函数输入一个整数:27638496,函数返回值为:26846。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! #include unsigned long fun (unsigned long
2、 n) unsigned long x=0, s, i; int t; s=n; /* found*/ i=【l】; /* found*/ while (【2】) t=s%10; if(t%2=0) /* found*/ x=x+t*i; i=【3】; s=s/10; return x; main () unsigned long n=-l; while(n99999999|n_二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:输出 M行 M列整数方阵,然后求两条对角线上元素之和,返回此和数。 请改正程序中的错误,使它能得出正确的结果。 注意:不要
3、改动 main函数,不得增行或删行,也不得更改程序的结构! #include #define M 5 /* found*/ int fun(int n, int xx) int i, j, sum=0; printf(“/nThe %d x %d matrix:/n“, M, M) ; for(i =0; i 99999999|n_正确答案:(正确答案:(1)1 (2)s (3)i*10)解析:解析:函数 fun的功能是将形参 n中,各位上为偶数的数取出,组成新数。 第一空:由“if(t2=0)x=x+t*i;i=【3】;”可知,如果 t是偶数,那么 t添加到返回值里面,比如第一次得到t=2,
4、那么 x=0+2*1;下一次得到了 t=4,那么,此时 x的值应该是 2+2*10;再下一次得到 t=-2,那,么x=22+2*100,即 x的值是在上一次值的基础上加上新得到的值乘以其权值,因此 i是代表权值。第一空处是初始化 i,第一次进入 if语句时,x 是个 1位数,此时权值 i应为 1,故第一空处应为“1”。 第二空:第二空处是填循环的终止条件,在循环体内,s 每次缩小 10倍,在最后一次进入循环的时候,s 是一个一位数,s10 之后 s变成 0,下次就不应该进入 while循环,因此,while 循环的终止条件是 s不为 0,故第二空处为“s”或“s!=0”。 第三空:由第一空的分
5、析可知权值 i是在上一次的基础上增加 10倍,故第三空处应为“i*10”。二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:输出 M行 M列整数方阵,然后求两条对角线上元素之和,返回此和数。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! #include #define M 5 /* found*/ int fun(int n, int xx) int i, j, sum=0; printf(“/nThe %d x %d matrix:/n“, M, M) ; for(i =0; i 分解两位数的正整数 n的个位和十位数,可用 n10 和 n/10实现。 (2)设x0、x1、x2、x3 为一位数,则 x0、x110、x2100、x31000,可以分别使 x0、x1、x2、x3 构成个、十、百、千带权数,而 x0+x110+x2100+x31000构成四位数。本题最多只考虑四位数。