1、二级 C 语言机试 94 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充 main 函数,该函数的功能是:把一个整数插入到一个已经按从小到大排序的数组中。插入后,数组仍然有序。 例如,在数组 bbN=12,23,31,44,51,63,71,79,85,95中插入 93,结果为: bbN11,21,31,41,51,61,7l,79,8l,93,95 注意:部分源程序给出如下 请勿改动主函数main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。 试题程序: #includestd/o. h
2、#define N 10 main() int i,j; int n; int bb IN+l = t2,23, 31, 44, 51, 63, 71, 79,85,95; clrscr (); printf(“/nInput n /n“); scanf (“%d“, printf (“/nn=%d “,n); printf(“/n* original list *In“); for (i=0; iN; i+) printf (“%4d “,bb ii ); for (i=0; iN; i+) if (n=bb i ) for(j=N;U 【1】 /U;j-) U【2】/U; bb j =n;
3、 U【3】/U; if (i=N) bbi=n; printf(“/n* new list *In“); for (i=0;iN+l; i+) printf (“%4d “,bb i); (分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:删除字符串 s 中所有空白字符(包括 Tab 字符、回车符及换行符)。输入字符串时用#结束输入。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构 试题程序: #include string.h #include stdi
4、o.h #include ctype.h fun(char *p) int !i, t; char c80; for(i=0,t=0;pi;i+) if(!isspace(*(p+i) ct+=pi; /*/ ct=/0; strcpy(p,c); main() char c,s80; int i=0; printf(“Input a string: “); c=getchar(); while(c!=#) ( si=c;i+;c=getchar(); si=“/0“; fun(s); puts(s); (分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:40.00)3.已知
5、学生的记录由学号和学习成绩构成,N 名学生的数据已存入 a 结构体数组中。请编写函数 fun(),该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。己给出函数的首部,请完成该函数。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includestdio. h #includestring. h #includeaonio .h #define N 10 typedef struct ss char num10; iht s; STU; fun(STU ail, ST
6、U *s) main() STU aN= “A01“,81, “A02“,89, “A03“, 66 , “A04“, 87 , “A05“, 77 , “A06“, 90 , “A07“, 79, “A08“, 61 , “A09“, 80 ), “Al 0“, 71 , m; int i; clrscr 0; printf (“*The original data*“); for (i=0; iN; i+) printf (“No=%s Mark=%d/n“, ail .num, ai .s); fun (a, printf (“*THE RESULT*/n“); printf (“The
7、 lowest :%s, %d/n“,m.num, m.s); (分数:40.00)_二级 C 语言机试 94 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充 main 函数,该函数的功能是:把一个整数插入到一个已经按从小到大排序的数组中。插入后,数组仍然有序。 例如,在数组 bbN=12,23,31,44,51,63,71,79,85,95中插入 93,结果为: bbN11,21,31,41,51,61,7l,79,8l,93,95 注意:部分源程序给出如下 请勿改动主函数main 和其他函数中的任何内容,仅在 main 函数的
8、横线上填入所编写的若干表达式或语句。 试题程序: #includestd/o. h #define N 10 main() int i,j; int n; int bb IN+l = t2,23, 31, 44, 51, 63, 71, 79,85,95; clrscr (); printf(“/nInput n /n“); scanf (“%d“, printf (“/nn=%d “,n); printf(“/n* original list *In“); for (i=0; iN; i+) printf (“%4d “,bb ii ); for (i=0; iN; i+) if (n=bb
9、 i ) for(j=N;U 【1】 /U;j-) U【2】/U; bb j =n; U【3】/U; if (i=N) bbi=n; printf(“/n* new list *In“); for (i=0;iN+l; i+) printf (“%4d “,bb i); (分数:30.00)填空项 1:_ (正确答案:1 ji 2bbj=bbj-1 3break)解析:解析 填空 1:因为原数组是按从小到大排列,所以从第一个元素开始,遂一与待插入的元素进行比较,第一个大于待插入元素 n 的元素 bbi的下标 i 即为插入位置。所以,从 bbi到 bbN-1都要依次向后移动一个位置,使待插入元素
10、 n 存于 bbi。 这里,for 循环中 j 取值从 N 到 i+1。填空 i+1。为了实现从 bbi到 bbN-1依次向后移动一个位置,将当前元素赋给下一个元素,要注意,为了不覆盖未经处理的元素,应该从最后一个元素开始移动。填空 3:将整数 n 插入数组后,函数功能已经实现,应使用 break 语句跳出 for 循环。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:删除字符串 s 中所有空白字符(包括 Tab 字符、回车符及换行符)。输入字符串时用#结束输入。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main 函数,不得增行或
11、删行,也不得更改程序的结构 试题程序: #include string.h #include stdio.h #include ctype.h fun(char *p) int !i, t; char c80; for(i=0,t=0;pi;i+) if(!isspace(*(p+i) ct+=pi; /*/ ct=/0; strcpy(p,c); main() char c,s80; int i=0; printf(“Input a string: “); c=getchar(); while(c!=#) ( si=c;i+;c=getchar(); si=“/0“; fun(s); put
12、s(s); (分数:30.00)填空项 1:_ (正确答案:错误:ct=“/0“, 正确:ct=/0)解析:解析 注意,该程序的 if 条件中应用了 isspace 函数,该函数的功能是检查 ch 是否空格、跳格符(制表符)或换行符。三、B编程题/B(总题数:1,分数:40.00)3.已知学生的记录由学号和学习成绩构成,N 名学生的数据已存入 a 结构体数组中。请编写函数 fun(),该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。己给出函数的首部,请完成该函数。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun
13、的花括号中填入所编写的若干语句。 试题程序: #includestdio. h #includestring. h #includeaonio .h #define N 10 typedef struct ss char num10; iht s; STU; fun(STU ail, STU *s) main() STU aN= “A01“,81, “A02“,89, “A03“, 66 , “A04“, 87 , “A05“, 77 , “A06“, 90 , “A07“, 79, “A08“, 61 , “A09“, 80 ), “Al 0“, 71 , m; int i; clrscr
14、0; printf (“*The original data*“); for (i=0; iN; i+) printf (“No=%s Mark=%d/n“, ail .num, ai .s); fun (a, printf (“*THE RESULT*/n“); printf (“The lowest :%s, %d/n“,m.num, m.s); (分数:40.00)_正确答案:()解析:fun(STU a, STU *s) int i; *s=a 0; for (i=0; iN; i+) /*先认为第 1 个值最小*/ if (s-sa Ii . s) /*如果在循环的过程中再发现比第 1 个值更小的则赋给*s*/ *s=a i; 解析 我们先认为第 1 个值最小,即*s=a0语句,如果在循环的过程中再发现比第 1 个值更小的随即赋给该*s就可以了。另外,还涉及到结构体中的指向运算符,请学习者注意。若要找出最高成绩则 if()中的条件改成 s-sai.s 即可。