c语言50个学生3课成绩平均成绩,C语言:有5个学生,每个学生有3门课的成绩,从键盘输入学生数据,计算平均成绩...

该博客介绍了一段C语言代码,用于输入5个学生每人的3门课程成绩,计算平均分,并将原始数据及平均分保存到文件。代码还实现了对学生数据按平均分进行排序,以及插入新学生数据的功能。

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

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

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

在输入3门课成绩以获得平均成绩时,要注意在c语言中,三门成绩要单独输入,不能和学号、姓名一起输入。如果这样输入,程序不会报错,但始终运行不出来。

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",&stu[i].num,stu[i].name);

printf("请输入三门课成绩\n");

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

读取插入后新的学生数据

//读取插入后文件

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值