天天看點

題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.引入庫

代碼如下(示例):

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

三、執行結果

題10.6:将第5題stud檔案中的學生資料,按平均分進行排序處理,将已排序的學生資料存入一個新檔案stu_ sort 中。題目一、解題思路二、代碼部分三、執行結果

輸入:

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

           

繼續閱讀