1、国家二级 C语言机试(操作题)模拟试卷 200及答案与解析 一、程序填空题 1 给定程序中,函数 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(2=0; i #inolude void fun(char*s) *found* while(*s!=) if(*s=A *s=a *s #incl
2、ude #include void fun(char*s, int num) NONO() *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * char s10; FILE*rf, *wf; int i=0; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); while(i10) fgets(s, 10, rf); s7=0; fun(s, 7); fprintf(wf, “ s n“, s); i+ ; fclose(rf); fclose(wf); main() char s10; printf(“输入 7个
3、字符的字符串 “); gets(s); fun(s, 7); printf(“ n s“, s); NONO(); 国家二级 C语言机试(操作题)模拟试卷 200答案与解析 一、程序填空题 1 【正确答案】 (1)M (2)(3)k 【试题解析】 第一空:循环的目的是在 M个字符串中寻找长度最短的字符串,因此循环变量 i从 0变化到 M-1,故第一空处应为 “M”。 第二空: *n记录最小字符串的长度,由审题分析可知,字符串 ssi长度比 min小,则交换最小长度值和下标位置,故第二空处应为 “”。 第三空:变量 k记录了最小字符串的下标位置,函数的返回值是最短的字符串所在的行下标,故第三空处
4、应为 “k”。 二、程序修改题 2 【正确答案】 (1)while(*s) 或 while(*s!= 0) 或 while (*s!=0) (2)s+; 【试题解析】 (1)第一个错误标识下的 “while(*s!=)”语句原意是 s不指 向字符串尾就进入下面的循环,所以对于指针判断不为尾符的语句应该是 “while(*s)”或者“while(*s!= 0)”或者 “while(*s!=0)”。 (2)第二个标识下 “(*s)+; ”是对字符内容加 1,而原题是对字符位置加 1,所以将其改为 “s+; ”。 三、程序设计题 3 【正确答案】 Char t; int i, j ; for(i=1 ; inum一 2; i+) 对 n个元素进行循环选择 for(j=i+1 ; jnum 1 ; j+) if(sisj) 将 stri设为最大值,和剩下的 j- num-1进行比较 t=si; si=sj; sj=t; 【试题解析】 进入 fun函数,根据前面的分析: 选择排序法中的降序排序,首先从数组中挑选一个最大的元素,把它和第一个元素交换,接着从剩下的 num-1个元素中再挑出一个最大的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。