您的位置:首页 > 编程语言 > C语言/C++

2011年 下半年 C++程序设计(二十六)

2012-03-08 18:36 295 查看
 
score.txt 中是一些同学的学号、姓名、C++、高数、英语成绩,定义一个学生成绩的

结构体数组,其中的成员包括学号(char num[12])、姓名(name)、三门课的成绩(grade)、总

分(score))。建议将某些功能设计成自定义函数。

(1)从文件中读出数据,存放到你定义的结构体数组中;

(2)求出每名同学的总分(可以读入过程中“顺便”计算);

(3)按总分排序(降序);

(4)输出排序后的成绩单;

(5)有30 名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金(我校就是这

样规定的)。请输出得奖学金同学的名单。

(6)选做:统计各门课及总分的平均成绩、最高和最低成绩、标准偏差,并输。

下面是数据文件中的部分数据。

#include <fstream>

#include <iostream>

#include <iomanip>

#include <string>

using namespace std;

void show_score(int num);

void cin_score(int num);

void find_maxscore(int num);

void array_sort(int num);

struct Student

{

 char num[12];

 string name;

 float grade[4];

};

Student score[180];

int main( )

{

 int num=180;

 cin_score(num);

 array_sort(num);

 cout<<"排序之后的成绩为:"<<endl;

 show_score(num);

 find_maxscore(30);

 return 0;

}

void cin_score(int num)

{

 int j;

 ifstream infile("score.txt",ios::in);

 if(!infile)

 {

  cerr<<"open error!"<<endl;

  exit(1);

 }

 for(j=0;j<num;j++)

 {

infile>>score[j].num>>score[j].name>>score[j].grade[0]>>score[j].grade[1]>>score[j].grade[2];

 score[j].grade[3]=score[j].grade[0]+score[j].grade[1]+score[j].grade[2];

 }

 infile.close();

}

void show_score(int num)

{

 int j;

 cout<<"学号"<<'t'<<'t'<<setiosflags(ios::left)<<setw(9)<<"姓名"<<setw(7)<<"C++"<<setw(8)<<"高数"<<setw(8)<<"英语"<<setw(8)<<"总分"<<endl;

 for(j=0;j<num;j++)

 { 

  cout<<score[j].num<<"   "<<setw(8)<<score[j].name<<": "<<score[j].grade[0]<<"t"<<score[j].grade[1]<<"t"<<score[j].grade[2]<<"t"<<score[j].grade[3]<<endl; 

 }

 cout<<endl;

}

void array_sort(int num)

{

 int i,j;

 Student store;

 for(i=0;i<num-1;i++)

for(j=0;j<num-i-1;j++)

{

if(score[j].grade[3]<=score[j+1].grade[3])

   {

    store=score[j];

    score[j]=score[j+1];

    score[j+1]=store;

   }

  }

}

void find_maxscore(int num)

{

 int count=0,j=0;

 cout<<"获得奖学金的同学是:"<<endl;

 do

 {

 

  if(score[j].grade[0]>=60)

   if(score[j].grade[1]>=60)

    if(score[j].grade[2]>=60)

    {

     cout<<setw(2)<<count+1<<setw(8)<<score[j].name;

     count++;

     if(count%5==0)

      cout<<endl;

    }

    j++;

 }while(count<num);

}

 

 运行结果

 









 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ struct ios string c