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

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

2012-03-08 18:36 218 查看
 
数据依然来自score.txt,在程序中建立一个动态链表:每读入一个同学的数据,计算

总分,分配结点的存储空间并赋值,并建立起前后相链的关系。在建立链表的同时,要进行统

计,以便于求出所有同学总分的平均成绩。动态链表建立后,从头结点开始,依次输出所有总

分高于平均总分且没有挂科的同学的学号、姓名、总分。

下面给出任务 2 的参考程序,能够由键盘输入数据,建立起如图的链表。显然任务2 要复杂

一些:(1)结构体中的成员多些;(2)从文件中读入数据;(3)一边读数据一边得计算总分,

为计算总分的平均值也得做些准备;(4)并不是输出所有的节点。不过,淡定,这些工作都见

识过,你能的。

#include <fstream>

#include<iostream>

#include"iomanip"

#include "string"

using namespace std;

void show_score(int num);//输出成绩;

void cin_score(int num);//从文件得到成绩;

//定义结构体;

struct Student

{

 char num[12];

 string name;

 float grade[4];

 struct Student *next;

};

Student *head=NULL,*p,*q;//定义Student类型的有关指针变量;

double add_score=0;

int main( )

{

 int num=180;

 cin_score(num);//从文件读入成绩;

 cout<<"总分高于平均总分且没有挂科的同学:"<<endl;

 show_score(num);

 return 0;

}

//定义从文件输入成绩函数;

void cin_score(int num)

{

 int i;

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

 if(!infile)

 {

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

  exit(1);

 }

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

 {

  p = new Student;

  infile>>p->num>>p->name>>p->grade[0]>>p->grade[1]>>p->grade[2];

  p->grade[3]=p->grade[0]+p->grade[1]+p->grade[2];

  add_score=add_score+p->grade[3];

  p->next=NULL;

  if (i==0)

   head=p;

  else

   q->next=p;

  q=p;

 }

 

 infile.close();

}

//定义输出函数;

void show_score(int num)

{

 double average_score=add_score/num;

 cout<<setiosflags(ios::left)<<setw(13)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"总分"<<endl;

 p=head;

 while(p!=NULL)

 {

  if(p->grade[3]>average_score)

   if(p->grade[1]>=60)

    if(p->grade[2]>=60)

     if(p->grade[3]>=60)

     {

      cout<<p->num<<" "<<setw(8)<<p->name<<setw(8)<<p->grade[3]<<endl;

     }

     p=p->next;

 }

 cout<<endl;

}

 

 

运行结果

 







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