问答题 [说明] 以下程序的功能是统计学生成绩,包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前百分之七十的学生定为合格(PASS),而后百分之三十的学生定为不合格(FAIL)。例如,当输入4名学生的姓名和成绩“Alice 67 Mary 90 Tom 56 John 88”后,程序的执行结果如下: 姓名 成绩 合格否 Mary 90 PASS John 88 PASS Alice 67 FAIL Tom 56 FAIL [C++程序] #include <stdio.h> #include <string.h> #define N 10 class student { protected: char name[10]; int deg; public: void setname(charna[]) {strcpy(name,na);} char * getname() {return name;} void setdeg(int d) {deg= d;} int getdeg(){return deg;} }; class compute { int ns; student na[N]; public: void getdata(); void sort(); void disp(); }; void compute::getdata() { int i,tdeg; char tname[10]; printf("输入学生人数:"); scanf("%d",&ns); printf("输入学生姓名和成绩:/n"); for(i=0;i<ns;i+ +){ scanf("%s%d",tname,&tdeg); {{U}}(1) {{/U}}; na[i].setdeg(tdeg); } } void compute::sort() { int i,j,pick; {{U}} (2) {{/U}}; for(i=0;i<ns-1;i+ +){ pick=i; for(j=i+1;j<ns;j+ +) if(na[j].getdeg()>na[pick].getdeg()){{U}} (3) {{/U}}; temp=na[i]; na[i]=na[pick]; na[pick]=temp; } } void compute::disp() { int cutoff,i; printf("RESULT/n"); printf("姓名 成绩 合格否/n"); cutoff=ns*7/10-1; for(i=0;i<ns;i+ +) { printf("%-6s%3d",{{U}} (4) {{/U}}); if({{U}} (5) {{/U}}) printf("/tPASS/n"); else printf("/tFAIL/n"); void main() { compute obj; obj.getdata(); obj.sort(); obj.disp(); }
【正确答案】
【答案解析】(1) na[i].setname(tname) (2) student temp (3) pick=j (4) na[i].getname(),na[i].getdeg() (5) i<=cutoff [考点分析] 考查C++语言程序设计,主要是类的使用。 [解析] 本程序定义了两个类student和compute,另有三个公共成员函数getdata()、sort()和disp(),它们分别用于获取数据、按成绩排序和输出数据。 (1)此处获取扑更新学生对象na[i]的姓名属性; (2)sort()函数后半部分使用了student类型的变量 temp,应该在此处声明; (3)sort()函数的功能是将数组na[]按成绩降序排列,这里使用的是简单选择排序算法,pick和i都是数组下标,且pick记录了自第i个位置起最大元素的下标; (4)根据程序输出的示例,此处应依次输出na[i]的姓名和成绩,分别需使用getname()和getdeg()方法获得; (5)cutoff是前百分之七十学生的序号。