题目
本题是谭浩强《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