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

#include<stdio.h>
#include<stdlib.h>
#define MAX 2

struct Stu{
	char cno[10];
	char name[20];
	float score[3];
	float aver;
}stu[MAX];


void save()
{
	int i;
	FILE *fp;
	if((fp=fopen("stud.txt","wb"))==NULL)
	{
		printf("open error\n");
		exit(0);
	}
	for(i=0;i<MAX;i++)
	{
		if(fwrite(&stu[i],sizeof(struct Stu),1,fp)!=1)
		{
			printf("write error\n");
		}
		fclose(fp);
	}
}


int main()
{
	int i,j,sum;
	//struct Stu stu[MAX];
	FILE *fp;
	for(i=0;i<MAX;i++)
	{
		printf("请输入第%d个学生的信息:\n",i);
		printf("学号:");
		scanf("%s",stu[i].cno);
		printf("姓名:");
		scanf("%s",stu[i].name);
		sum=0;
		for(j=0;j<3;j++)
		{
			printf("第%d个成绩:",j);
			scanf("%d",&stu[i].score[j]);
			sum+=stu[i].score[j];
		}
		stu[i].aver=sum/3.0;
	}
	save();
	/*FILE *fp;
	if((fp=fopen("stud","rb"))==NULL)
	{
		printf("cannot open\n");
		exit(0);
	}*/

	return 0;
}

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,这是一个完成你要求的C程序: ```c #include <stdio.h> #include <string.h> struct Student { int id; char name[20]; int score1; int score2; int score3; float avg_score; }; int main() { struct Student students[5]; // 从键盘输入学生数据 for (int i = 0; i < 5; i++) { printf("Enter student %d data (id name score1 score2 score3): ", i + 1); scanf("%d %s %d %d %d", &students[i].id, students[i].name, &students[i].score1, &students[i].score2, &students[i].score3); students[i].avg_score = (float)(students[i].score1 + students[i].score2 + students[i].score3) / 3.0; } // 输成绩报表 printf("成绩报表:\n"); printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n"); for (int i = 0; i < 5; i++) { printf("%d\t%s\t%d\t%d\t%d\t%.2f\n", students[i].id, students[i].name, students[i].score1, students[i].score2, students[i].score3, students[i].avg_score); } // 找到平均成绩最高的三个学生 struct Student top_students[3]; memcpy(top_students, students, sizeof(struct Student) * 3); for (int i = 3; i < 5; i++) { for (int j = 0; j < 3; j++) { if (students[i].avg_score > top_students[j].avg_score) { memcpy(&top_students[j], &students[i], sizeof(struct Student)); break; } } } // 输平均成绩在前三名的学生成绩榜 printf("\n前三名的成绩榜:\n"); printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n"); for (int i = 2; i >= 0; i--) { printf("%d\t%s\t%d\t%d\t%d\t%.2f\n", top_students[i].id, top_students[i].name, top_students[i].score1, top_students[i].score2, top_students[i].score3, top_students[i].avg_score); } return 0; } ``` 该程序首先定义了一个结构体`Student`,用于存储每个学生数据。然后,程序从键盘输入了所有学生数据,并计算每个学生平均成绩。接着,程序输成绩报表,包括每个学生学号姓名、三成绩平均分。最后,程序找到了平均成绩在前三名的学生,并输了这三个学生成绩榜,包括学号姓名、三成绩平均分

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

火花怪怪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值