1、国家二级 C语言机试(操作题)模拟试卷 310及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:将形参 n所指变量中,各位上为偶数的数去掉,剩余的数按原来从高位到低位的顺序组成一个新数,并通过形参指针 n传回所指变量。 例如,若输入一个数 27638496,则新数为 739。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h vid fun(unsigned long*n) unsigned long x=0, i; int t; i=
2、1; while(*n) *found* t=*n 【 1】 ; *found* if(t 2!=【 2】 ) x=x+t*i; i=i*10; *n=*n 10; *found* *n=【 3】 ; main() unsigned long n= 1; while(n 99999999n 0) printf(“Please input(0 n 100000000): “); scanf(“ ld“, n); ) fun( n); printf(“ nThe result is: ld n“, n); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:输出 MM整数方阵,然后求两条对角
3、线上元素之和,并作为函数值返回。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #include stdio h #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 M; i+) for(j=0; j M; j+) *found* printf(“ f“, xxij); pri
4、ntf(“ n“); for(i=0; i n; i+) sum+=xxii+xxini一 1; return(sum); void main() int aaMM=1, 2, 3, 4, 5, 4, 3, 2, 1, 0, 6, 7, 8, 9, 0, 9, 8,7, 6, 5, 3, 4, 5, 6, 7); system(“CLS“); printf(“ nThe SLIm of all elements 013 2 diagnals is d“, fun(M, aa); 三、程序设计题 3 请编写函数 fun,该函数的功能是:将 s所指字符串中 ASCII码值为偶数的字符删除,串中剩余
5、字符形成一个新串放在 t所指的数组中。 例如,若 s所指字符串中的内容为 “ABCDEFGL2345”,其中字符 B的 ASCII码值为偶数,字符 2的 ASCII码值为偶数,都应当删除,其他依此类推。最后 t所指的数组中的内容应是 “ACEGl35”。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdlib h #include stclio h #include string h #include conio h void fun(char*s, char t) ) void
6、main() char s100, t100; system(“CLS“); printf(“ nPlease enter string S: “); scanf(“ s“, s), fun(s, t); printf(“ nThe result is: s n“, t); 国家二级 C语言机试(操作题)模拟试卷 310答案与解析 一、程序填空题 1 【正确答案】 (1)10 (2)0 (3)x 【试题 解析】 填空 1:通过 t对 10求余,取出该数值的各个位。 填空 2:通过 if条件语句实现奇偶数的判定。如果条件表达式对 2求余为 0即为偶数,反之则为奇数。 填空 3:最后将剩余的数赋给
7、 n所指向的元素。 二、程序修改题 2 【正确答案】 (1)int fun(int n, int)xxM) (2)prinff(“ d“, xxjj); 【试题解析】 本题考查:函数定义形式; printf格式输出函数,注意其函数形式。 (1)当用数组作为函数的形参时,可以不定义数组的行数,但一定要定义数组的列数。 (2)该处错误比较隐蔽,一般 C语言上机考试很少涉及 printf函数中的错误,此处只要明白 “d”和 “f”的区别就可以了。格式字符 d表示以带符号的十进制形式输出整数 (正整数不输出符号 );格式字符 f表示以小数形式输出单精度、双精度数据,隐含输出 6位小数。 printf函
8、数,其一般形式为: printf(“格式控制字符串 ”,输出表列 ),其中格式控制字符串用于指定输出格式。格式控制字符串是以开头的字符串,在后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。 例如: “ d”表示按十进制整型输出; “ ld”表示按十进制长整型输出; “ f”表示以小数形式输出; “ c”表示按字符型输出等。 非格式字符串在输出时原样输出,在显示中起提示作用。 三、程序设计题 3 【正确答案】 void fun(char*s, char t) int i=0; for(; *s!= 0; s+) *找出 ASC工工值为奇数的字符依次存入数组 t中 * if(*
9、s 2=1) ti+=*s; ti= 0; *在字符串的末尾加上串结束符 * 【试题解析】 本题要求将 s所指字符串中 ASCII码值为偶数的字符删除,因此本题要求采用一个 for循环来找出 ASCII码值为奇数的字符依次存入数组 t中,并使用 if条件句来判断 s所指字符串中 ASCII码值是否为奇数。用 0加在字符串的末尾来表示字符串的结束。 要删除 ASCII码值为偶数的字符,也就是要留下, ASCII码值为奇数的字符。由于最终是要求出剩余字符 (即 ASCII码值为奇数 )形成的新串,所以本题程序的算法是对原字符串从头到尾扫描,并找出 ASCII码值为奇数的字符并将其依次存入数组 t中。此 外,还要注意数组 t的下标变化和下标的初值 (初值必须为 0,即i=0), ti+的作用是先使用 ti,然后再使 i自增 1。