第十七周实验报告1

本文通过一个具体的程序实例,展示了如何使用结构体数组进行数据处理和排序,包括从文件读取数据、计算总分、排序并输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

实验目的:学会自定义结构体;

实验内容:学会自定义结构体

* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:   成绩处理                             
* 作    者:   徐嘉健                             
* 完成日期:   2011    年  12     月   19     
* 版本号:     number one        

* 对任务及求解方法的描述部分
* 输入描述:

(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


第十七周实验报告1

第十七周实验报告1

第十七周实验报告1

第十七周实验报告1

第十七周实验报告1


第十七周实验报告1

第十七周实验报告1

第十七周实验报告1

经验积累:
1.结构数组虽然好用,但是定义结构数组的一般格式一定要明确。

2.随着程序的由简到难,越是发现注释的重要,在这个程序中,我广泛的使用了注释,对于理解程序真的有很大的好处,既给读程序的人带来了方便,其实实际上也给自己带来了便利,毕竟有注释各个语句的作用便可以一目了然。

3.最后还是强调程序的分解,我始终坚持这一做法,毕竟人就是人,并非神灵,奢望一下子就解决很复杂的问题,的确很不现实,在没一小步的成功中积累自信,是很有效的方式。

上机感言:

首先奖励一下自己吧,好高兴又一次解决了难题。回归到程序中,不得不承认,结构体数组的优越性,成员中的类型可以不同,这真的是比数组要强大的太多了,所以,我要为结构体数组鼓掌。同时更让我觉得了不起的是,可以在结构体中调用结构体,综上所述,结构体数组真的是太太强大了!!!!!!!!!!恍然间发现,我快忘记数组,彻底的爱上结构体数组了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值