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

//C程序设计第四版(谭浩强)
//章节:第十章 对文件的输入输出 
//题号:10.5
//题目:第5题:有5个学生,每个学生有3门课程的成绩,从键盘输入学生数据(包括学号,姓名,3门课程成绩),
//计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件"stud"中。 
#include <stdio.h>
#include <stdlib.h>
#define N 5
struct student
{
	int num;
	char name[20];
	float score[3];
	float aver;
}stu[N]; 
 void save()
 {
 	FILE *fp;
 	int i;
 	if((fp=fopen("stud","wb"))==NULL)
	{
		printf("cannot open the file stud!\n");
		exit(0);
	}
	for(i=0;i<N;i++)
	{
		if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
			printf("file write error\n");
	}
	fclose(fp);
 }
int main()
{
	int i;
	printf("请输入学生学号,姓名,3门课程成绩(以空格隔开)\n");
	for(i=0;i<N;i++)
	{
		scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
		stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
	}
	save();
	FILE *fp;
	if((fp=fopen("stud","rb"))==NULL)
	{
		printf("cannot open this file\n");
		exit(0);
	}
	printf("the data:\n");
	printf("num name score1 score2 score3 average\n");
	for(i=0;i<N;i++)
	{
		fread(&stu[i],sizeof(struct student),1,fp);
		printf("%-2d%5s%7.1f%7.1f%7.1f%7.1f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver);
	}
	fclose(fp);
	return 0;	
}
  • 12
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较典型的C语言编程目,需要对学生成绩进行统计和计算。这里给一个简单的解决方案,供参考。 实验目的:学习利用C语言进行简单的成绩统计和计算。 算法流程图: ``` 1. 定义10个同学的5课程成绩组 2. 输入每个同学的5课程成绩 3. 计算每一课程平均分 4. 找所有同学所有课程成绩最高教对应的学生课程 5. 计算平均分方差 6. 输出统计结果 ``` 运行结果图: ``` 请输入第1个学生的5课程成绩: 语文:80 学:90 英语:85 物理:78 化学:88 请输入第2个学生的5课程成绩: 语文:92 学:88 英语:86 物理:83 化学:90 ... 所有同学所有课程成绩最高为:第3个学生的英语成绩为96 平均分方差为:10.5 ``` 程序代码: ```c #include <stdio.h> #include <math.h> #define STUDENT_NUM 10 #define COURSE_NUM 5 int main() { int scores[STUDENT_NUM][COURSE_NUM]; int course_sum[COURSE_NUM] = {0}; int max_score = 0, max_student = 0, max_course = 0; double average_course[COURSE_NUM] = {0}; double sum = 0, average, variance = 0; // 输入每个同学的成绩 for (int i = 0; i < STUDENT_NUM; i++) { printf("请输入第%d个学生的%d课程成绩:\n", i + 1, COURSE_NUM); for (int j = 0; j < COURSE_NUM; j++) { printf("第%d课程:", j + 1); scanf("%d", &scores[i][j]); course_sum[j] += scores[i][j]; if (scores[i][j] > max_score) { max_score = scores[i][j]; max_student = i; max_course = j; } } } // 计算每一课程平均分 for (int i = 0; i < COURSE_NUM; i++) { average_course[i] = course_sum[i] / (double)STUDENT_NUM; } // 计算平均分方差 for (int i = 0; i < STUDENT_NUM; i++) { for (int j = 0; j < COURSE_NUM; j++) { sum += scores[i][j]; } } average = sum / (STUDENT_NUM * COURSE_NUM); for (int i = 0; i < STUDENT_NUM; i++) { for (int j = 0; j < COURSE_NUM; j++) { variance += pow(scores[i][j] - average, 2); } } variance /= (STUDENT_NUM * COURSE_NUM); // 输出统计结果 for (int i = 0; i < COURSE_NUM; i++) { printf("第%d课程平均分为:%.2f\n", i + 1, average_course[i]); } printf("所有同学所有课程成绩最高为:第%d个学生的第%d课程成绩为%d\n", max_student + 1, max_course + 1, max_score); printf("平均分方差为:%.1f\n", variance); return 0; } ``` 实验体会:本次实验主要是通过编写C语言程序实现对学生成绩的统计和计算,通过实践掌握了基本的C语言语法和组操作。同时,实验过程需要注意输入输出的格式,保证程序的可读性和易用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值