1、二级 C语言分类模拟题 271及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun的功能是:找出 100999 之间(含 100和 999)所有整数中各位上数字之和为 x(x为一正整数)的整数,然后输出;符合条件的整数个数作为函数值返回。 例如,当 x值为 5时,100999 之间各位上数字之和为 5的整数有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500。共有 15个。当 x值为 27时,各位数字之和为 27的整数是:999。只有 1个。 请在程
2、序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在 下的 BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #includestdio.h int fun(int x) int n, s1, s2, s3, t; n=0; t=100; /*found*/ while(t=1 1) /*found*/ s1=t%10; s2= 2)%10; s3=t/100; /*found*/ if(s1+s2+s3= 3) printf(“%d“, t); n+; t+; return n; main() int x=-1; while(x0)
3、printf(“Please input(x0):“); scanf(“%d“, printf(“/nThe result is:%d/n“, fun(x); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.给定程序 MODI1.C中函数 fun的功能是:从低位开始取出长整型变量 s中偶数位上的数,依次构成一个新数放在 t中。高位仍在高位,低位仍在低位。 例如,当 s中的数为:7654321 时,t 中的数为:642。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #includestdio
4、.h /*found*/ void fun(long s, long t) long sl=10; s/=10; *t=s%10; /*found*/ while(s0) s=s/100; *t=s%10*sl+*t; sl=sl*10; main 1 long s, t; printf(“/nPlease enter s:“); scand(“%ld“, fun(s, printf(“The result is:%ld/n“, t); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s中,请编写函数
5、 fun,它的功能是:按分数的高低排列学生的记录,高分在前。 注意:部分源程序存在文件 PROG1.C中。 请勿改动主函数 main和其它函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #includestdio.h #define N 16 typedef struct char num10; int s; STREC; void fun(STREC a) STREC tmp; int i, j; for(i=0; iN; i+) for(j=i+1; jN; j+) /*请按题目要求完成以下代码*/ main() STREC sN=“GA005“, 85,
6、 “GA003“, 76, “GA002“, 69, “GA004“, 85, “GA001“, 91), “GA007“, 72, “GA008“, 64, “GA006“, 87, “GA015“, 85, “GA013“, 91, “GA012“, 64), “GA014“, 91, “GA011“, 66, “GA017“, 64, “GA018“, 64, “GA016“, 72; int i; FILE*out; fun(s); printf(“The data after sorted:/n“); for(i=0; iN; i+) if(i)%4=0)printf(“/n“);
7、printf(“%s %4d“, si.num, si.s); printf(“/n“); out=fopen(“c:/test/out.dat“, “w“); for(i=0; iN; i+) if(i)%4=0 fprintf(out, “%4d“, si.s); fprintf(out, “/n“); fclose(out); (分数:40.00)_二级 C语言分类模拟题 271答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun的功能是:找出 100999 之间(含 100和 999)所有整数中各位上数字之和为
8、x(x为一正整数)的整数,然后输出;符合条件的整数个数作为函数值返回。 例如,当 x值为 5时,100999 之间各位上数字之和为 5的整数有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500。共有 15个。当 x值为 27时,各位数字之和为 27的整数是:999。只有 1个。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在 下的 BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #includestdio.h int fun(int x) int n,
9、s1, s2, s3, t; n=0; t=100; /*found*/ while(t=1 1) /*found*/ s1=t%10; s2= 2)%10; s3=t/100; /*found*/ if(s1+s2+s3= 3) printf(“%d“, t); n+; t+; return n; main() int x=-1; while(x0) printf(“Please input(x0):“); scanf(“%d“, printf(“/nThe result is:%d/n“, fun(x); (分数:30.00)解析:(1)999 (2)t/10 (3)x 答案考生文件夹 解
10、析 填空 1:题目要求找出 100999 之间符合要求的数,所以 while语句的循环条件是 t=999。 填空 2:变量 s2存放三位数的十位,取出三位数十位数值的方法为 s2=(t/10)%10。 填空 3:题目需要判断各位上数字之和是否为 x,所以 if语句条件表达式是 s1+s2+s3=x。二、程序改错题(总题数:1,分数:30.00)2.给定程序 MODI1.C中函数 fun的功能是:从低位开始取出长整型变量 s中偶数位上的数,依次构成一个新数放在 t中。高位仍在高位,低位仍在低位。 例如,当 s中的数为:7654321 时,t 中的数为:642。 请改正程序中的错误,使它能得出正确
11、的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #includestdio.h /*found*/ void fun(long s, long t) long sl=10; s/=10; *t=s%10; /*found*/ while(s0) s=s/100; *t=s%10*sl+*t; sl=sl*10; main 1 long s, t; printf(“/nPlease enter s:“); scand(“%ld“, fun(s, printf(“The result is:%ld/n“, t); (分数:30.00)解析:(1)voi
12、d fun(long s, long *t) (2)while(s0) 答案考生文件夹 解析 函数的形参类型应与实参类型相同,主函数中函数 fun(-)的调用方式说明其参数应为指针类型,所以形参 t应定义为 long *t。 while循环的功能是,每循环一次就从 s中的数上取出一位进行运算,直到取完为止,所以循环条件为s0。三、程序设计题(总题数:1,分数:40.00)3.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun,它的功能是:按分数的高低排列学生的记录,高分在前。 注意:部分源程序存在文件 PROG1.C中。 请勿改动主函数 main和
13、其它函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #includestdio.h #define N 16 typedef struct char num10; int s; STREC; void fun(STREC a) STREC tmp; int i, j; for(i=0; iN; i+) for(j=i+1; jN; j+) /*请按题目要求完成以下代码*/ main() STREC sN=“GA005“, 85, “GA003“, 76, “GA002“, 69, “GA004“, 85, “GA001“, 91), “GA007“, 72,
14、“GA008“, 64, “GA006“, 87, “GA015“, 85, “GA013“, 91, “GA012“, 64), “GA014“, 91, “GA011“, 66, “GA017“, 64, “GA018“, 64, “GA016“, 72; int i; FILE*out; fun(s); printf(“The data after sorted:/n“); for(i=0; iN; i+) if(i)%4=0)printf(“/n“); printf(“%s %4d“, si.num, si.s); printf(“/n“); out=fopen(“c:/test/out.dat“, “w“); for(i=0; iN; i+) if(i)%4=0 fprintf(out, “%4d“, si.s); fprintf(out, “/n“); fclose(out); (分数:40.00)_正确答案:()解析:if(ai.saj.s) tmp=aj; aj=ai; ai=tmp; 答案考生文件夹 解析 对 N个数进行排序的算法很多,其中最简单的排序算法是冒泡算法。利用双层for循环嵌套和一个 if判断语句来实现,外层循环用来控制需比较的轮数,内层循环用来控制两两比较。