1、二级 C 语言分类模拟题 235 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。函数 fun 的功能是对形参 b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。 例如:b 所指变量 t 中的学号、姓名、和三门课的成绩依次是:10002、“ZhangQi“、93、85、87,修改后输出 t 中的数据应为:10004、“LiJie“、93、85、87。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在 下的 BLA
2、NK1.C 中。 不得增行或删行,也不得更改程序的结构! #include stdio.h #include string.h struct student long sno; char name10; float score3; ; void fun(struct student *b) /*found*/ b_=10004; /*found*/ strcpy(b_,“LiJie“); main() struct student t=10002,“ZhangQi“,93,85,87; int i; printf(“/n/nThe original data:/n“); printf(“/nN
3、o:%ld Name:%s/nScores:“,t.sno,t.name); for(i=0;i3;i+) printf(“%6.2f“,t.scorei); printf(“/n“); /*found*/ fun(_); printf(“/nThe data after modified:/n“); printf(“/nNo:%ld Name:%s/nScores:“,t.sno,t.name); for(i=0;i3;i+) printf(“%6.2f“,t.scorei); printf(“/n“); (分数:30.00)_二、程序修改题(总题数:1,分数:30.00)2.给定程序 MO
4、DI1.C 中函数 fun 的功能是:应用递归算法求形参 a 的平方根。求平方根的迭代公式如下: (分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s 中,请编写函数 fun,它的功能是:把高于等于平均分的学生数据放在 b 所指的数组中,高于等于平均分的学生人数通过形参 n 传回,平均分通过函数值返回。 注意:部分源程序在文件 PROG1.C 文件中。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 #include stdio.h #define
5、 N 12 typedef struct char num10; double s; STREC; double fun(STREC *a,STREC *b,int *n) main() STREC sN=“GA05“,85,“GA03“,76,“GA02“,69,“GA04“,85,“GA01“,91,“GA07“,72,“GA08“,64,“GA06“,87,“GA09“,60,“GA11“,79,“GA12“,73,“GA10“,90; STREC hN,t;FILE *out; int i,j,n;double ave; ave=fun(s,h, printf(“The %d stud
6、ent data which is higher than %7.3f:/n“,n,ave); for(i=0;in;i+) printf(“%s %4.1f/n“,hi.num,hi.s); printf(“/n“); out=fopen(“out.dat“,“w“); fprintf(out,“%d/n%7.3f/n“,n,ave); for(i=0;in-1;i+) for(j=i+1;jn;j+) if(hi.shj.s) t=hi;hi=hj;hj=t; for(i=0;in;i+) fprintf(out,“%4.1f/n“,hi.s); fclose(out); (分数:40.0
7、0)_二级 C 语言分类模拟题 235 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。函数 fun 的功能是对形参 b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。 例如:b 所指变量 t 中的学号、姓名、和三门课的成绩依次是:10002、“ZhangQi“、93、85、87,修改后输出 t 中的数据应为:10004、“LiJie“、93、85、87。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在 下的 B
8、LANK1.C 中。 不得增行或删行,也不得更改程序的结构! #include stdio.h #include string.h struct student long sno; char name10; float score3; ; void fun(struct student *b) /*found*/ b_=10004; /*found*/ strcpy(b_,“LiJie“); main() struct student t=10002,“ZhangQi“,93,85,87; int i; printf(“/n/nThe original data:/n“); printf(“/
9、nNo:%ld Name:%s/nScores:“,t.sno,t.name); for(i=0;i3;i+) printf(“%6.2f“,t.scorei); printf(“/n“); /*found*/ fun(_); printf(“/nThe data after modified:/n“); printf(“/nNo:%ld Name:%s/nScores:“,t.sno,t.name); for(i=0;i3;i+) printf(“%6.2f“,t.scorei); printf(“/n“); (分数:30.00)_正确答案:()解析:(1)-sno (2)-name (3)
10、”等号右边是整型值,故这里是修改结构体成员 sno 的值,b 是结构体指针,访问结构体数据成员时使用“-”运算符,因此第一空为“b-sno”。 第二空:“strcpy(b_,“LiJie“);”,strcpy 是字符串拷贝函数,因此这里是修改结构体的 name 成员值,故第二空处为“b-name”。 第三空:fun 函数的定义形式是:void fun(struct student*b),可知 fun 的参数是指针,因此主函数内调用 fun 函数时传入的参数是结构体 t 的地址,故第三空处为“ double s; STREC; double fun(STREC *a,STREC *b,int *
11、n) main() STREC sN=“GA05“,85,“GA03“,76,“GA02“,69,“GA04“,85,“GA01“,91,“GA07“,72,“GA08“,64,“GA06“,87,“GA09“,60,“GA11“,79,“GA12“,73,“GA10“,90; STREC hN,t;FILE *out; int i,j,n;double ave; ave=fun(s,h, printf(“The %d student data which is higher than %7.3f:/n“,n,ave); for(i=0;in;i+) printf(“%s %4.1f/n“,h
12、i.num,hi.s); printf(“/n“); out=fopen(“out.dat“,“w“); fprintf(out,“%d/n%7.3f/n“,n,ave); for(i=0;in-1;i+) for(j=i+1;jn;j+) if(hi.shj.s) t=hi;hi=hj;hj=t; for(i=0;in;i+) fprintf(out,“%4.1f/n“,hi.s); fclose(out); (分数:40.00)_正确答案:()解析:double t=0; int i; *n=0; for(i=0;iN;i+) t=t+ai.s; t=t/N; for(i=0;iN;i+if(ai.st)b(*n)+=ai; return t; 答案考生文件夹 解析 该程序功能是把高于或等于平均分的学生数据放在 b 所指的数组中,高于等于平均分的学生人数通过形参 n 传回,平均分通过函数返回值返回。解题过程首先求得平均分,然后将所有成绩与平均分进行比较,如果大于或等于平均分,存入指定数组。 考点 结构体数组、for 循环结构。