1、国家二级(C 语言)机试-试卷 71 及答案解析(总分:12.00,做题时间:90 分钟)一、程序填空题(总题数:2,分数:4.00)1.程序填空题()(分数:2.00)_2.给定程序中,函数 fun 的功能是:求 ss 所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参 n 所指变量中。ss 所指字符串数组中共有 M 个字符串,且串长 #include #define M 5 #define N 20 int fun(char (*ss)N, int *n) int i, k=0, len= N; /*found*/ for(i=0; i_二、程序修改题(总题数
2、:2,分数:4.00)3.程序修改题()(分数:2.00)_4.由 N 个有序整数组成的数列已放在一维数组中,给定程序 MODllC 中函数 fun 的功能是:利用折半查找算法查找整数 m 在数组中的位置。若找到,返回其下标值;反之,返回-1。 折半查找的基本算法是:每次查找前先确定数组中待查的范围:low 和 high(10whigh,查找结束。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数。不得增行或删行,也不得更改程序的结构。 #include #define N 10 /*found*/ void fun(int a,int m) int low=0,hig
3、h=N-1,mid; while(lowamid)解析:解析:(1)根据主函数中“k=fun(a,m);”,知道函数 fun 应该是返回 int 型的函数,所以第一个标识下面定义的“void fun(int a,int m)”应该改为“int fun(int a,int m)”。 (2)第二个标识下的“else If(m amid)”是判断 m 是否比 amid大,在 while 循环中采用的是 if-else if-else语句,显然“else If”当中“If”应当小写,故第二标识下“else If(m amid)”应改为“else if(mamid)”。三、程序设计题(总题数:2,分数:
4、4.00)5.程序设计题()(分数:2.00)_解析:6.函数 fun 的功能是:将 s 所指字符串中 ASC值为奇数的字符删除,串中剩余字符形成一个新串放在 t所指的数组中。 例如。若 s 所指字符串中的内容为:”ABCDEFGl2345”,其中字符 A 的 ASC码值为奇数、字符 1 的 ASC码值也为奇数、都应当删除,其他依此类推。最后 t 所指的数组中的内容应是:”BDF24”。 注意:部分源程序存在文件 PROGlC 中。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 #include #include void fun(cha
5、r *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); NONO(); void NONO () /* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ char s100, t100 ; FILE *rf, *wf ; int i ; rf = fopen(“in.dat“,“r“); wf = fopen(“out.dat“,“w“); for(i = 0 ; i 10 ; i+) fscanf(rf, “%s“, s); fun(s, t); fprintf(wf, “%s/n“, t); fclose(rf); fclose(wf); (分数:2.00)_正确答案:(正确答案: int i, j=0; for(i=0; i解析:解析:(1)首先,求得字符串的长度。 (2)然后选择字符串中 ASCII 码为偶数的字符。 (3)最后将(2)中选择出的字符复制到指定的字符数组中。