C语言 有5个学生,每个学生有3门课的成绩

有5个学生,每个学生有3门课的成绩,从键盘输入学生数据(包括学生号、姓名、三门课成绩),计算平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中

  对于平均成绩的思路就是:把平均成绩当做结构体的一项

#include <stdio.h>
struct student//定义结构体
{
    int num;
    char name[10];
    int score[3];
    float ave;
 }stu[5];
int main(int argc, char *argv[]) {
    int i,j,sum,t;
    FILE *fp;
    struct student p,temp,re[6];
    for(i=0;i<5;i++)//结构体赋值
    {
        printf("输入第%d条记录\n",i+1);
        scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);

        //scanf("%d%d%d",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
        sum=0;
        sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
        stu[i].ave=sum/3.0;
    }
    if((fp=fopen("stud.txt","w"))==NULL)//写入文件
    {
        printf("cannot open stud.txt\n");
        exit(0);
    }
    for(i=0;i<5;i++)
    fwrite(&stu[i],sizeof(struct student),1,fp);
    fclose(fp);
    if((fp=fopen("stud.txt","r"))==NULL)//读取文件
    {
        printf("cannot open stud.txt\n");
        exit(0);
    }
    for(i=0;i<5;i++)
    {
        fread(&stu[i],sizeof(struct student),1,fp);
        printf("%d %s %d %d %d %6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
    }
    fclose(fp);
    printf("\n");
}
 

按照平均分进行排序

for(i=0;i<4;i++)//文件排序 
    for(j=i+1;j<5;j++)
    if(stu[i].ave>stu[j].ave)
       {
        temp=stu[i];
        stu[i]=stu[j];
        stu[j]=temp;
    }        
    if((fp=fopen("stu_sort.txt","w"))==NULL)
    {
        printf("cannot open stud.txt\n");
        exit(0);
    }
    for(i=0;i<5;i++)
     fwrite(&stu[i],sizeof(struct student),1,fp);    
    fclose(fp);    
    if((fp=fopen("stu_sort.txt","r"))==NULL)
    {
        printf("cannot open stud.txt\n");
        exit(0);
    }
        for(i=0;i<5;i++)
    {
        fread(&stu[i],sizeof(struct student),1,fp);    
        printf("%d,%s,%d,%d,%d,%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
    }    
    fclose(fp);

插入新的学生数据

printf("请输入插入学生数据:\n");
    scanf("%d,%s",&p.num,p.name);
    printf("请输入三门课成绩\n");
    scanf("%d,%d,%d",&p.score[0],&p.score[1],&p.score[2]);
    sum=0;
    sum=p.score[0]+p.score[1]+p.score[2];
    p.ave=sum/3.0;
    
    if((fp=fopen("stu_sort.txt","r"))==NULL)
    {
        printf("cannot open stud.txt\n");
        exit(0);
    }
    for(i=0;i<5;i++)
    {
        fread(&stu[i],sizeof(struct student),1,fp);    
         if(stu[i].ave>p.ave)
        {
            t=i;break;
        }
        else
        t=5;
    }
    fclose(fp);
    fp=fopen("sdent.txt","a");
    if(t==5)
    {
        for(i=0;i<5;i++)
        fwrite(&stu[i],sizeof(struct student),1,fp);
         fwrite(&p,sizeof(struct student),1,fp);
    }
    else if(t==0)
    {
        fwrite(&p,sizeof(struct student),1,fp);
        fwrite(&stu[i],sizeof(struct student),1,fp);
    }
    else
    {
        for(i=0;i<t;i++)
        fwrite(&stu[i],sizeof(struct student),1,fp);
        fwrite(&p,sizeof(struct student),1,fp);
        for(i=t;i<5;i++)
        fwrite(&stu[i],sizeof(struct student),1,fp);
    }
fclose(fp);

读取插入后新的学生数据

//读取插入后文件
    if((fp=fopen("sdent.txt","r"))==NULL)
    {
        printf("cannot open stud.txt\n");
        exit(0);
    }
        for(i=0;i<6;i++)
    {
        fread(&re[i],sizeof(struct student),1,fp);    
        printf("%d,%s,%d,%d,%d,%6.2f\n",re[i].num,re[i].name,re[i].score[0],re[i].score[1],re[i].score[2],re[i].ave);
    }    
    fclose(fp);

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个柚子有点甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值