问答题
[说明]
以下程序的功能是统计学生成绩,包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前百分之七十的学生定为合格(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);
(1) ;
na[i].setdeg(tdeg);
void compute::sort()
int i,j,pick;
(2) ;
for(i=0;i<ns-1;i+ +)
pick=i;
for(j=i+1;j<ns;j+ +)
if(na[j].getdeg()>na[pick].getdeg()) (3) ;
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", (4) );
if( (5) ) 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是前百分之七十学生的序号。