实验目的:学会自定义结构体;
实验内容:学会自定义结构体
* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作
* 完成日期:
* 版本号:
* 对任务及求解方法的描述部分
* 输入描述:
(1)从文件中读出数据,存放到你定义的结构体数组中;
(2)求出每名同学的总分(可以读入过程中“顺便”计算);
(3)按总分排序(降序);
(4)输出排序后的成绩单;
(5)有30 名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金请输出得奖学金同学的名单.
* 程序输出:排序后的结果
* 程序头部的注释结束(此处也删除了斜杠)
//下面是程序
#include <fstream> //用于从文件中读入数据的头文件
#include <iomanip> //用于处理一定输出格式的头文件
#include <iostream>
#include <string> //此程序一定要将C++标准库中的string头文件包含进来
using namespace std;
struct Project //声明结构体类型Project
{
int c;
int m;
int e;
int sum; //定义整型变量sum用于求成绩的总和
};
struct Student //声明结构体类型Student
{
char num[12];
string name;
Project grade;
};
Student stu[180],stux; //定义Student类型的数组stu
int main()
{
int i;
ifstream infile("score.txt", ios::in); //开始从文件中读出数据,存放到结构体数组中
if(!infile)
{
cerr<< "open error!" << endl;
exit(1);
}
for(i = 0; i < 180; i++)
{
infile >> stu[i].num >> stu[i].name >> stu[i].grade.c >> stu[i].grade.m >> stu[i].grade.e;
stu[i].grade.sum = stu[i].grade.c + stu[i].grade.m + stu[i].grade.e;
}
for(int j = 0; j < 180; j++) //冒泡法给数据排序
{
for(i = 0; i < 180 - j; i++)
{
if(stu[i].grade.sum < stu[i + 1].grade.sum)
{
stux = stu[i], stu[i] = stu[i+1], stu[i + 1] = stux;
}
}
}
cout << "按总分高低排序的成绩单:" <<endl;
cout << setiosflags(ios::fixed);
cout << "学号"<< setw(14) << "姓名"<<setw(9) << "C++" << setw(11) << "数学" << setw(10) << "英语" << setw(10) << "总分" << endl;
for(i = 0; i < 180; i++) //用于将排好序的数据输出
{
cout << setiosflags(ios::fixed) << setiosflags(ios::left); //用于输出一定格式的数据
cout << stu[i].num << " " << setw(8) << stu[i].name << " " << setw(8) << stu[i].grade.c << " "
<< setw(8) << stu[i].grade.m << " " << setw(8) << stu[i].grade.e << " " << setw(8) << stu[i].grade.sum << endl;
}
cout << endl;
cout <<"获得奖学金的同学的成绩单:" << endl;
i = 0;
do //运用do,while循环体,直到获得奖学金的人数满30为止
{
if(60 <= stu[i].grade.c && 60 <= stu[i].grade.m && 60 <= stu[i].grade.e)
{
cout << setiosflags(ios::fixed) << setiosflags(ios::left); //用于输出一定格式的数据
cout << stu[i].num << " " << setw(8) << stu[i].name << " " << setw(8) << stu[i].grade.c << " "
<< setw(8) <<stu[i].grade.m << " " << setw(8) << stu[i].grade.e << " " << setw(8) << stu[i].grade.sum << endl;
}
i++;
}while(i <= 30);
infile.close();
return 0;
}
经验积累:
1.结构数组虽然好用,但是定义结构数组的一般格式一定要明确。
2.随着程序的由简到难,越是发现注释的重要,在这个程序中,我广泛的使用了注释,对于理解程序真的有很大的好处,既给读程序的人带来了方便,其实实际上也给自己带来了便利,毕竟有注释各个语句的作用便可以一目了然。
3.最后还是强调程序的分解,我始终坚持这一做法,毕竟人就是人,并非神灵,奢望一下子就解决很复杂的问题,的确很不现实,在没一小步的成功中积累自信,是很有效的方式。
上机感言:
首先奖励一下自己吧,好高兴又一次解决了难题。回归到程序中,不得不承认,结构体数组的优越性,成员中的类型可以不同,这真的是比数组要强大的太多了,所以,我要为结构体数组鼓掌。同时更让我觉得了不起的是,可以在结构体中调用结构体,综上所述,结构体数组真的是太太强大了!!!!!!!!!!恍然间发现,我快忘记数组,彻底的爱上结构体数组了。