题10.6:将第5题stud文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入一个新文件stu_ sort 中。

题目

本题是谭浩强《C程序设计课后习题》题10.6。
题目:
将第5题stud文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入一个新文件stu_ sort 中。


以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj

一、解题思路

思路:
1,定义函数readdate(stu); //从stud.txt中读入数据。
2,定义函数sort(stu);//使用冒泡排序结构体,数据替换方面使用内存拷贝函数memcpy(&1,&2,拷贝大小)。
3,定义函数writedate(stu);//将数据写入到新文件stu_ sort 中。
4,本题主要思想就是这3步,功能实现部分请查看下面的详细代码。

二、代码部分

1.引入库

代码如下(示例):

#include<stdio.h>

2.主函数部分

代码如下(示例):

int i, j;
typedef struct student
{
	int num;
	char name[20];
	int score[3];
	float avg;
}student;
void readdate(student stu[])
{
	FILE* fp = fopen("stud.txt", "r");
	if (fp == NULL)
	{
		printf("read stud file error!");
		return -1;
	}
	for (i = 0; i < 5; i++)//从文件中读入数据
	{
		fscanf(fp, "%d %s %d %d %d %f", &stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2], &stu[i].avg);
	}
	fclose(fp);
}
void sort(student stu[])
{
	student tmp;
	int size = sizeof(tmp);
	for(i=0;i<5;i++)
		for (j = i + 1; j < 5; j++)
		{
			if (stu[i].avg > stu[j].avg)
			{
				memcpy(&tmp, &stu[i], size);//内存拷贝函数,交换整个结构体
				memcpy(&stu[i], &stu[j], size);
				memcpy( &stu[j], &tmp, size);
			}
		}
	printf("拍完序的结果为:\n");
	for (i = 0; i < 5; i++)
	{
		printf("%d %s %d %d %d %f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].avg);
	}
}
void writedate(student* stu)
{
	FILE* fp = fopen("stu_ sort.txt", "w");
	if (fp == NULL)
	{
		printf("write file error!");
		return -1;
	}
	for (i = 0; i < 5; i++)//使用fprint函数将结构体数组stu中的数据写入fp
	{
		fprintf(fp,"%d %s %d %d %d %f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].avg);
	}
	fclose(fp);
}
int main()
{
	student stu[5];
	readdate(stu);	//从stud.txt中读入数据。
	sort(stu);//使用冒泡排序结构体,数据替换方面使用内存拷贝函数memcpy(&1,&2,拷贝大小)。
	writedate(stu);//将数据写入到新文件stu_ sort 中。
	return 0;
}

三、执行结果

在这里插入图片描述
输入:

1 李文杰 88 98 100 95.333336
2 葛新龙 99 89 60 82.666664
3 皮梦通 100 20 60 60.000000
4 李瑞龙 7 60 90 52.333332
5 王炯杰 50 69 88 69.000000

输出:

4 李瑞龙 7 60 90 52.333332
3 皮梦通 100 20 60 60.000000
5 王炯杰 50 69 88 69.000000
2 葛新龙 99 89 60 82.666664
1 李文杰 88 98 100 95.333336

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

立志冲海大

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

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

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

打赏作者

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

抵扣说明:

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

余额充值