问题 填空题

[说明]

某数据文件students.txt的内容为100名学生的学号和成绩,下面的程序将文件中的数据全部读入对象数组,按分数从高到低进行排序后选出排名前30%的学生。

[C++代码]

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

class Student

private:

string sNO; //学号

int credit; //分数

public:

Student(string a,int b) sNO=a; credit=b;

Student ()

int getCredit ();

void out ();

;

(1) ::getCredit ()

return credit;

(2) ::out ()

cout << "SNO: " << sNO << ", Credit=" << credit << end1;

class SortStudent

public:

void sort(Student *s, int n);

SortStudent ()

;

void SortStudent::sort(Student *s, int n)

for (int i=0; i<n-1; i++)

for (int j=i+1; J<n; j++)

if(s[i]. (3) < s[j]. (4) )

Student temp=s[i]; s[i]=s[j]; s[j]=temp;

int main(int argc, char* argv[])

const int number=100; //学生总数

ifstream Students;

Students.open("students.txt");

if(!students.is_open())

throw 0;

Student *testStudent= (5) [number];

int k=0;

string s;

while (getline(students,s,’\n’)) //每次读取一个学生的学号和成绩

Student student(s.substr(0,s.find(’,’)), atoi(s.substr(s.find

(’,’)+1).c_str()));

testStudent[k++] = student;

students.colse();

(6) ;

ss.sort(testStudent,k);

cout <<"top 30%: "<<end1;

for(k=0; k<number * 0.3; k++)

testStudent[k].out();

delete []testStudent;

return 0;

(6)处应填()。

答案

参考答案:SortStudent ss

解析:

本题考查C++语言程序设计的能力,涉及类、对象、函数、访问控制、对象数组的定义和相关操作,以及对象数组的排序算法。要求考生根据给出的案例和执行过程说明,认真阅读理清程序思路,然后完成题目。

首先分析程序的整体结构。本题中定义了两个类:student和SortStudent,分别用于定义学生和进行排序。类Student的定义中,第一部分为private访问权限的成员,要对其进行访问,需要通过具有相应访问权限的成员函数。在第二部分的接口定义为public。C++用类名约束机制允许将成员函数定义在类接口定义之外。类SortStudent中定义了成员函数sort,其功能是对参数为Student对象数组根据分数进行排序。考查main函数的代码,理清程序的行为:打开学生文件,创建对象数组,将学生的学号和成绩读入,创建Student对象并加入对象数组,将对象数组排序,然后输出top30%的学生信息。

Student类的成员函数的定义在类外,需要用类名约束机制,因此空(1)和(2)需要补充函数的返回类型和类名。函数getCredit和out在接口定义时已经分别给出int和void类型,所以空(1)处即为int Student,空(2)处为void Student。

SortStudent类中的成员函数sort对Student类的对象所构成的对象数组根据分数进行排序,而由于在Student类中学号和分数为private访问权限,不可从外部直接访问,所以需要通过getCredit而得到。因此,空(3)和空(4)处均为getCredit函数调用获得分数。

main函数中需要将学生信息读入,并根据学生信息创建对象并加入对象数组。空(5)处为创建对象数组。C++中对象数组的创建方式为采用new关键字,而且从所在语句的赋值号左侧的Student*testStudent可知,要创建的对象为Student,因此空(5)处为new Student。空(6)为单独语句,但是从其后续语句ss.sort的函数调用可知,使用了SortStudent的函数sort,使用前需要创建SortStudent类的对象,所以空(6)处为SortStudent ss。

单项选择题
单项选择题