实验目的:学会利用结构体
实验内容:所有同学的成绩表等用结构体做
* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者:郗福民
* 完成日期: 2011年 12 月 18日
* 版本号:
#include <iostream>
#include <fstream>
#include <iomanip> //右对齐
#include <string>
using namespace std;
struct student
{
char num[12];
string name;
double c; //要有类型
double m;
double e;
double score;
};
student stu[180];
int main ()
{
int i;
ifstream infile("score.txt",ios::in);
if(!infile)
{
cout<<"open error!"<<endl;
exit(1);
}
for(i=0;i<180;i++)
{
infile>>stu[i].num;//此句的含义是读入的数据放在stu[i].name的内存中,改变原来的理解。
infile>>stu[i].name;//不用考虑换行,度数的时候会自动换
infile>>stu[i].c;
infile>>stu[i].m;
infile>>stu[i].e;
}
infile.close();
for(i=0;i<180;i++)
{
stu[i].score=stu[i].c+stu[i].m+stu[i].e; } //要将程序和数据放在同一文件夹中,最好放在桌面。
int k;
student t; //存入的数据要尽量放到文本文档中
for (k=0;k<179;k++) //此数不宜过大,否则出现不必要的麻烦
{
for(i=0;i<179-k;i++)
{
if (stu[i].score<stu[i+1].score)
{
t=stu[i];
stu[i]=stu[i+1];
stu[i+1]=t;
}
}
}
cout<<"总分排序:"<<endl;
for(i=0;i<180;i++)
{
cout<<setiosflags(ios::right)<<stu[i].num<<" "<<stu[i].name<<" "<<stu[i].c<<" "<<stu[i].m<<" "<<stu[i].e<<" "<<stu[i].score<<endl;
}
cout<<"获奖学金的同学:"<<endl;
for(i=0;i<180;i++)
{
if( stu[i].c>=60 && stu[i].m>=60 && stu[i].e>=60)
{
while(i<30)
{
cout<<stu[i].name<<endl;
i++;
}
}
}
return 0;
}
感言:1:运行不出来,却不知哪错了,无从下口,经别人指教,如同仙人指路。
2:自己憋上1个多小时,难受啊!
3:对于一些问题不要想的过于复杂,如:读数据的换行。