冲刺必看!名师讲解二级C真题之程序题
技术与开发
很多考生都害怕上机考试,担心那些程序题(包括改错以及编程)会很难,心中没有底。如果你也是他们中的一员,不妨听听专家是如何求解的(全部程序题的解析请到http://www.cpcw.com/bzsoft下载),快速掌握程序题的解法。
改错题:下列给定程序中,函数fun()的功能是从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如输入8名学生的成绩:80.5 60 72 90.5 98 51.5 88 64,则低于平均分的学生人数为4(平均分为75.5625)。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main( )函数,不得增加或者删行,也不得改变程序的结构。
#include
#include
#include
#define N 20
int fun(float *s, int n, float *aver)
{
float ave ,t=0.0;
int count=0,k,i;
for(k=0;k /*********found********/ t=s[k]; ave=t/n; for(i=0;i if (s[i] /********found*******/ *aver=&ave; return count; } void main( ) { float s[30],aver; int m,i; system("cls"); printf("\n please enter m:"); scanf("%d",&m); printf("\n please enter %d mark:\n",m); for(i=0;i printf("\n the number of students: %d\n",fun(s,m,&aver)); printf("ave=%f\n",aver); } 本题难度:中等 涉及知识:循环语句与条件选择语句的结合使用 专家解析:本题是上机常见的数值操作类题型,主要考查数组运用及指针编程。根据题目要求,可利用循环语句,累计计算n个学生的总分;求得平均成绩后,再利用循环语句与条件选择语句。 若小于平均值,则将该值存放于aver存储单元中。错误1:循环叠加出错,没有实现累加效果;错误2:语法错误,正确语法为:*指针变量=值(不能将地址存入指针变量所指向的地址中)。 编程题:学生的记录由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun( ),它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 #include #define N 8 typedef struct { char num[10]; double s; }STREC; double fun(STREC *a, STREC *b, int *n) { } void main( ) { STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}}; STREC h[N]; int i,n; double ave; ave=fun(s,h,&n); printf("the %d student data which is lower than %7.3f:\n",n,ave); for(i=0;i /*输出成绩低于平均值的学生记录*/ printf("%s %4.1f\n",h[i].num, h[i].s); printf("\n"); } 本题难度:难 涉及知识:结构体应用 专家解析:本题是上机编程中最为典型的考题,也是考题中考生最为疏忽的知识点(结构体应用)。答题时,考生首先要注意所编写函数的形参与主函数实参之间传递数据内容,只有清楚每个参数数据表示含义,才能进行下一步编程。 其次,找出答题的主干(本题主干为求和、求平均后判断),故而可以得到二个循环体(第一个循环——求和,第二个循环——求出低于平均分的值并存入指定的结构体数组。最后,注意函数的返回值要求。特别注意,答题结束后,一定要运行所编写的程序,若没有运行,则系统不予给分。 改错题答案: (1)错误:t=s[k] 正确为:t+=s[k] (2)错误:*aver=&ave; 正确为:*aver=ave; 编程题答案: double fun(STREC *a, STREC *b, int *n) { int i,j=0; double av=0.0; for(i=0;i av=av+a[i].s; av=av/N; for(i=0;i if(a[i].s *n=j; return av; } 2007年9月的二级C语言考试名师点评结束了,大家是不是觉得受益匪浅?从这次考试我们可以看出指针的考核要求非常高,而且多个知识点的融合题也多了,大家在这次4月的考试复习中要注意这两点。总结