阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。 [说明] 以下程序的功能是统计学生成绩,包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前百分之七十的学生定为合格(PASS),而后百分之三十的学生定为不合格(FAIL)。例如,

admin2009-02-15  12

问题 阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。
[说明]
   以下程序的功能是统计学生成绩,包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前百分之七十的学生定为合格(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.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;
        na=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

解析 本程序定义了两个类student和compute,另有三个公共成员函数getdata()、sort()和disp(),它们分别用于获取数据、按成绩排序和输出数据。
(1)此处获取扑更新学生对象na的姓名属性;
(2)sort()函数后半部分使用了student类型的变量 temp,应该在此处声明;
(3)sort()函数的功能是将数组na[]按成绩降序排列,这里使用的是简单选择排序算法,pick和i都是数组下标,且pick记录了自第i个位置起最大元素的下标;
(4)根据程序输出的示例,此处应依次输出na的姓名和成绩,分别需使用getname()和getdeg()方法获得;
(5)cutoff是前百分之七十学生的序号。
转载请注明原文地址:https://jikaoti.com/ti/vvW7FFFM
0

最新回复(0)