1、国家二级 C语言机试(操作题)模拟试卷 622及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:输出 a所指数组中的前 n个数据,要求每行输出 5个数。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stctio h #include stdlib h void fun(int*a, int n) int i
2、; for(i=0; i n; i+) *found* if(【 1】 =0) *found* printf(“【 2】 “); *found* printf(“ d“, 【 3】 ); main() int a100=0), i, n; n=22; for(i=0; i n; i+) ai=rand() 21; fun(a, n); printf(“ n“); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:计算 s所指字符串中含有 t所指字符串的数目,并作为函数值返回。
3、 请改正程序中的错误或在下画线处填上正确的内容并把下画线删除,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #include string h #include stdio h #define N80 int fun(char*s, char*t) int; n; char*p, *r; n=0; *found* *r=t; while(*s) p=s; while(*r) if(*r=*p) r+; p+; else break; if(*r= 0) n+; *
4、found* 【 1】 s+; return n; void main() char aN, bN; int m; printf(“ nPlease enter string a: “); gets(a); printf(“ nPlease enter substring b: “); gets(b); m=fun(a, b); printf(“ nThe result is: m= d n“, m); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,请编写函数 fun,该函数的功能是:将s所指
5、字符串中 ASCII码值为偶数的字符删除,串中剩余字符形成一个新串放在 t所指的数组中。 例如,若 s所指字符串中的内容为 “ABCDEFG12345”,其中字符 B的 ASCII码值为偶数,字符 2的 ASCII码值为偶数,都应当删除,其他依此类推。最后 t所指的数组中的内容应是 “ACEC135”。 注意:部分源程序给出如下。 请勿改动主函数 main和其 他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdlib h #include stdio h #include string h #include COnio h voidfun
6、(char*s, chart) void main() char s100, t100; system(“CLS“); printf(“ nPlease enter string s: “); scanf(“ s“, s); fun(s, t); printf: f( nThe result is: s n“, t); 国家二级 C语言机试(操作题)模拟试卷 622答案与解析 一、程序填空题 1 【正确答案】 (1)i 5 (2) n (3)ai 【试题解析】 填空 1:每行输出 5个数,即当下标值能整除 5时换行。 填空 2:输出换行符 n。 填空 3:输出数组元素。 二、程序修改题 2 【
7、正确答案】 (1)r=t; (2)r=t;或 r=&t0; 【试题解析】 从字符串 s中找出子字符串的方法是:从第一个字符开始,对字符串进行遍历 ,若 s串的当前字符等于 t串的第一个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串 t的末尾,则跳出循环;若 s串的字符与 t串的字符不对应相同,则继续对 s串的下一个字符进行处理。 三、程序设计题 3 【正确答案】 void fun(char*s, char t) int i=0; for(; *s!= 0; s+) *找出 Asc工工值为奇数的字符依次存入数组 t中 * if(*s 2=1) ti+=木 s; ti= 0; *在字符串的末尾加上串结束符 * 【试 题解析】 要删除 ASCII码值为偶数的字符,也就是要留下 ASCII码值为奇数的字符。由于最终是要求出剩余字符 (即 ASCII码值为奇数 )形成的新串,所以本题程序的算法是对原字符串从头到尾扫描,并找出 ASCII码值为奇数的字符并将其依次存入数组 t中。此外,还要注意数组 t的下标变化和下标的初值 (初值必须为 0,即 i=0), ti+的作用是先使用 ti,然后再使 i自增 1。