1、国家二级 C语言机试(操作题)模拟试卷 306及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:判断形参 s所指字符串是否是 “回文“(Palindrome),若是,函数返回值为 1;不是,函数返回值为 0。 “回文 是正读和反读都一样的字符串 (不区分大小写字母 )。 例如, LEVEL和 Level是 回文 “,而 LEVLEV不是 “回文 “。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include st
2、ring h #include ctype h int fun(char*s) char*lp, *rp; *found* lp=【 1】 ; rp=s+strlen(s) 1; while(toupper(*ip)=toupper (*rp) (lp rp) *found* lp+; rp【 2】 ; *found* if(lp rp)【 3】 ; else return 1; main() char s81; printf(“Enter a string: “); scanf(“ s“, s); if(fun(s) printf(“ n “ s is a Palindrome n n”,
3、s); else printf(“ n “ s “isnt a Palindrome n n“, s); 二、程序修改题 2 下 列给定程序中,函数 fun的功能是:找出一个大于给定整数 m且紧随 m的素数,并作为函数值返回。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #include stdio h int fun(int m) int i, k; for(i=m+1; i+) for(k=2; k i
4、; k+) *found* if(i k!=0) break; *found* if(k i) return(i); void main() int n; system(“CLS“); printf(“ nPlease enter n: “); scanf(“ d“, n); print; f( d n, fun(n); 三、程序设计题 3 学生的记录由学号和成绩组成, N名学生的数据已放入主 函数中的结构体数组 s中,请编写函数 fun,其功能是:把分数最高的学生数据放在 b所指的数组中。注意:分数最高的学生可能不止一个,函数返回分数最高的学生人数。 注意:部分源程序给出如下。 请勿改动主函
5、数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #define N 16 typedef struct char num10; int s; STREC; int fun(STREC*a, STREC*b) void main() STREC SN=“GA005“, 85, “GA003“, 76, “GA002“, 69, “GA004“,85, “GA001“, 91, “GA007“, 72, “GA008“, 64, “GA006“, 87,“GA015“, 85, “GA013“, 91, “GA01
6、2“, 64, “GA014“, 91,“GA011“, 77, “GA017“, 64, “GA018“, 64, “GA016“, 72; STREC hN; int i, n; n=fun(s, h); printf(“The d highest score: n“, n); for(i=0 ; i n; i+) printf(“ s 4d n“, hi num, hi s); *输出最高分学生的学号和成绩 * printf(“ n“); 国家二级 C语言机试(操作题)模拟试卷 306答案与解析 一、程序填空题 1 【正确答案】 (1)s (2)- (3)retum 0 【试题解析】 填
7、空 1:根据函数体 fun中,对变量 lp和 rp的使用可知, lp应指向形参 s的起始地址, rp指向 s的结尾地址,所以应填 s。 填空 2: rp是指向字符串的尾指针,当每做一次循环 rp向前移动一个位置,所以应填: -。 填空 3:当 lp和 rp相等时,表示字符串是回文并返回 1,否则就返回 0,所以应填 return 0。 二、程序修改题 2 【正确答案】 (1)if(i k=0) (2)if(k=i) 【试题解析】 (1)判断当前数是否为素数,若存在一个数 (除 1和其自身 )能整除当前数,则跳出本次循环,所以 if条件应为 i k=0。 (2)如果 i是素数,则循环结束时 k=
8、i,将该值返回。 三、程序设计题 3 【正确答案】 int fun(STREC*a, STREC*b) int i, j=0, max=a0 s; for(i=0; i N; i+) if(maxai s) *找出最大值 * max=ai s; for(i=0; i N; i+) if(max=ai s) bj+=ai; *找出成绩与 max相等的学生的记录,存入结构体 b中 * return j; *返回最高成绩的学生人数 * 【试题解析】 本题考查:结构体数组操作;用循环判断结构查找数组中的最大值。 该程序使用两个循环判断语句,第 1个循环判断语句的作用是找出最大值;第 2个循环判断语句的作用是找出与 max相等的成绩 (即最高成绩 )的学生记录,并存入 b中。 对于如何找出数组中最大值 (多个相等 )的方法,我们已经不陌生。如何对结构体数组进行类似操作呢 ? 掌握以下语句: for(i=0; i N; i+) if(max ai s)max=ai s;
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1