C++第2周项目4——动态链表初试

本文详细介绍了如何使用动态链表结构处理学生成绩数据,包括读取文件、计算总分、建立链表及统计平均成绩的过程。重点展示了如何筛选并输出总分高于平均且未挂科的学生信息。

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

【项目4-动态链表初试】数据依然来自score.txt,在程序中建立一个动态链表:每读入一个同学的数据,计算总分,分配结点的存储空间并赋值,并建立起前后相链的关系。在建立链表的同时,要进行统计,以便于求出所有同学总分的平均成绩。动态链表建立后,从头结点开始,依次输出所有总分高于平均总分且没有挂科的同学的学号、姓名、总分。

参考解答:

 

#include  <iostream>
#include  <fstream>
#include <cstdlib>  //在codeblocks下,exit(1)需要这个头文件
using namespace std;
struct Student
{
    char num[13]; //尽管都是由数字构成,但看作为字符更合适。
    char name[10]; //每个汉字占两个字节,中国人的名字,5个汉字够用
    int cpp;
    int math;
    int english;
    int grade;
    struct Student *next;   //指向下一节点的指针
};

int main( )
{
    Student *head=NULL,*p,*q;
    int stuNum=0,i;
    int sum=0,ave;   //用于求平均
    ifstream infile("score.txt",ios::in); 	//以输入的方式打开文件
    if(!infile)   				//测试是否成功打开
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    //下面从文件中读取数据,同时建立动态链表,并为求总分之和
    stuNum=0;
    while(!infile.eof())
    {
        p = new Student;
        infile>>p->num>>p->name>>p->cpp>>p->math>>p->english;
        p->grade = p->cpp + p->math + p->english;
        sum+=p->grade;
        p->next=NULL;
        if (stuNum==0)
            head=p;   //是第一个节点
        else
            q->next=p;   //用q记录刚刚产生的结点,如果有下一个,需要q将之连起来
        ++stuNum;
        q=p;
    }
    infile.close();

    //求平均成绩
    ave=sum/stuNum;
    cout<<"总分平均为:"<<ave<<endl;

    //依次输出所有总分高于平均总分且没有挂科的同学的学号、姓名、总分。
    cout<<"总分高于平均总分且没有挂科的同学有:"<<endl;
    p=head;
    i=1;
    while(p!=NULL)
    {
        if(p->grade>=ave&&p->cpp>=60&&p->math>=60&&p->english>=60)
        {
            cout<<i<<" "<<p->num<<" "<<p->name<<" "<<p->grade<<endl;
            i++;
        }
        p=p->next;
    }
    return 0;
}

 score.txt下的:

201190609112	zxl	99	90	98
201190609113	xxx	56	56	45
201190609114	zzz	65	76	43
201190609115	lll	99	90	98
201190609116	ccc	64	34	64




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值