1、二级 C 语言-135 及答案解析(总分:73.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充函数 proc(),该函数的功能是:分类统计一个字符串中元音字母和其他字符的个数(不区分大小写)。 例如,输入 imnIaeouOWC,结果为:A:1 E:1 1:2 O:2U:1 other:4。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdlib.h #includestdio.h #includeconio.h #define M
2、 100 void proc(char *str,int bb) char *p=str; int i=0; for(i=0; i6; i+) 1; while(*p) switch(*p) case “A“: case “a“: bb0+; break; case “E“: case “e“: bb1+; break; case “I“: case “i“: bb2+; break; case “O“: case “o“: bb3+; break; case “U“: case “u“: bb4+; break; default: 2; 3 void main() char strM,ss6
3、=“AEIOU“; int i; int bb6; system(“CLS“); printf(“Input a string:/n“); gets(str); printf(“the string is:/n“); puts(str); proc(str, bb); for(i=0; i5; i+) printf(“/n%c: %d“, ssi, bbi); printf(“/nother: %d“, bbi); (分数:30.00)二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 proc()的功能是:用递归算法计算斐波拉契级数列中第 n 项的值。从第一项起,斐波拉契
4、级数序列为 1,1,2,3,5,8,13,21, 例如,若给 n 输入 8,该项的斐波拉契级数值为 21。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h long proc(int g) /*found* switch(g); case 0: return 0; /*found* case 1; case 2: return 1; return(proc(g-1)+proc(g-2); void main() long fib; int n; printf(“Input n:“)
5、; scanf(“%d“, printf(“n=%d/n“, n); fib=proc(n); printf(“fib=%d/n/n“, fib); (分数:40.00)_三、程序设计题(总题数:1,分数:3.00)3.学生的记录由学号和成绩组成,M 名学生的数据已在主函数中放入结构体数组 stu 中,请编写函数proc(),它的功能是:把指定分数范围之外的学生数据放在 b 所指的数组中,分数范围之外的学生人数由函数值返回。 例如,输入的分数是 70 和 79,则应当把分数低于 70 和高于 79 的学生数据输出,不包含 70 分和 79 分的学生数据。主函数中把 70 放在 low 中,把
6、79 放在 heigh 中。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdio.h #define M 16 typedef struct char num10; int s; STREC; int proc(STREC*a, STREC*b, int 1, int h) void main() STREC stuM=“GA005“, 55, “GA003“, 96, “GA002“, 80, “GA004“, 68, “GA001“, 88, “GA007“, 74,
7、“GA008“, 85, “GA006“, 89, “GA015“, 90, “GA013“, 53, “GA012“, 66, “GA014“, 82, “GA011“, 73, “GA017“, 69, “GA018“, 64, “GA016“, 86; STREC hM; int i, n, low, heigh, t; printf(“Enter 2 integer number low scanf(“%d%d“, if(heighlow) t=heigh; heigh=low; low=t; n=proc(stu, h, low, heigh); printf(“The studen
8、t“s data out %d-%d:/n“, low, heigh); for(i=0; in; i+) printf(“%s %4d/n“, hi.num, hi.s); /输出指定分数范围内的学生记录 printf(“n“); (分数:3.00)_二级 C 语言-135 答案解析(总分:73.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充函数 proc(),该函数的功能是:分类统计一个字符串中元音字母和其他字符的个数(不区分大小写)。 例如,输入 imnIaeouOWC,结果为:A:1 E:1 1:2 O:2U:1 other:4。 注意:部分源程序
9、给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdlib.h #includestdio.h #includeconio.h #define M 100 void proc(char *str,int bb) char *p=str; int i=0; for(i=0; i6; i+) 1; while(*p) switch(*p) case “A“: case “a“: bb0+; break; case “E“: case “e“: bb1+; break; case “I“: ca
10、se “i“: bb2+; break; case “O“: case “o“: bb3+; break; case “U“: case “u“: bb4+; break; default: 2; 3 void main() char strM,ss6=“AEIOU“; int i; int bb6; system(“CLS“); printf(“Input a string:/n“); gets(str); printf(“the string is:/n“); puts(str); proc(str, bb); for(i=0; i5; i+) printf(“/n%c: %d“, ssi
11、, bbi); printf(“/nother: %d“, bbi); (分数:30.00)解析:bbi=0 bb5+ p+解析 由函数 proc()可知,数组 b 中存放的是各个元音字母和其他字符的个数,其初始化为 0。因此,第一处填“bbi=0”;由 switch 语句可知,b5中存放的是其他字符的个数,每检查到一个元音以外的其他字符,b5加 1,因此,第二处填“bb5+”;指针变量 p 指向字符串中的字符,每检查完一个字符,指针 p 要向后移动一个位置,因此,第三处填“p+”。二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 proc()的功能是:用递归算法计算斐波
12、拉契级数列中第 n 项的值。从第一项起,斐波拉契级数序列为 1,1,2,3,5,8,13,21, 例如,若给 n 输入 8,该项的斐波拉契级数值为 21。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h long proc(int g) /*found* switch(g); case 0: return 0; /*found* case 1; case 2: return 1; return(proc(g-1)+proc(g-2); void main() long fib; i
13、nt n; printf(“Input n:“); scanf(“%d“, printf(“n=%d/n“, n); fib=proc(n); printf(“fib=%d/n/n“, fib); (分数:40.00)_正确答案:()解析:(1)错误:switch(g); 正确:switch(g) (2)错误:case 1; case 2: return 1; 正确:case 1: return 1; case2: return 1; 解析 由 C 语言的语法规则可知,switch 语句后面是没有分号的,因此,“switch(g);”要把后面的分号去掉;在 C 语言中,case 语句后面是冒号
14、而不是分号,因此,“case 1; case 2: return 1;”应改为“case 1: return 1; case2: return 1;”。三、程序设计题(总题数:1,分数:3.00)3.学生的记录由学号和成绩组成,M 名学生的数据已在主函数中放入结构体数组 stu 中,请编写函数proc(),它的功能是:把指定分数范围之外的学生数据放在 b 所指的数组中,分数范围之外的学生人数由函数值返回。 例如,输入的分数是 70 和 79,则应当把分数低于 70 和高于 79 的学生数据输出,不包含 70 分和 79 分的学生数据。主函数中把 70 放在 low 中,把 79 放在 heig
15、h 中。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdio.h #define M 16 typedef struct char num10; int s; STREC; int proc(STREC*a, STREC*b, int 1, int h) void main() STREC stuM=“GA005“, 55, “GA003“, 96, “GA002“, 80, “GA004“, 68, “GA001“, 88, “GA007“, 74, “GA008“, 8
16、5, “GA006“, 89, “GA015“, 90, “GA013“, 53, “GA012“, 66, “GA014“, 82, “GA011“, 73, “GA017“, 69, “GA018“, 64, “GA016“, 86; STREC hM; int i, n, low, heigh, t; printf(“Enter 2 integer number low scanf(“%d%d“, if(heighlow) t=heigh; heigh=low; low=t; n=proc(stu, h, low, heigh); printf(“The student“s data o
17、ut %d-%d:/n“, low, heigh); for(i=0; in; i+) printf(“%s %4d/n“, hi.num, hi.s); /输出指定分数范围内的学生记录 printf(“n“); (分数:3.00)_正确答案:()解析:int proc(STREC*a, STREC*b, int 1, int h) int i, j=0; for(i=0; iM; i+) if(ai.s=0 /放到 b 数组中 return j; /最后把其个数返回到主函数中 解析 题目要求把指定范围之外的数放到 b 中,将每一个学生的成绩与指定的成绩相比较,将符合条件的学生成绩放在数组 b 中,并将符合要求的学生个数返回给主函数。