有10个学生,每个学生的数据包括学号、姓名、3门功课的成绩。从键盘输入10个学生的数据,要求按平均成绩降序显示出所有学生的数据(包括学号、姓名、3门课成绩、平均成绩),并将其写入文本文件result.txt中。
#include<stdio.h>
#include<stdlib.h>
#define n 10
struct Student
{
int num;
char name[20];
float score[3];
float aver;
};
void input(struct Student stu[])//输入学生数据
{
printf("please input student's number , name ,score\n");
for (int i = 0; i < n; i++)
{
scanf_s("%d %s %f %f %f", &stu[i].num, &stu[i].name,20, &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;
}
}
void print(struct Student stu)//输出函数
{
printf("student number:%d\nname:%s\nscore:%f %f %f\naver:%f\n ", stu.num, stu.name, stu.score[0], stu.score[1], stu.score[2], stu.aver);
}
void swap(struct Student* a, struct Student* b)//结构体数组交换位置
{
struct Student temp;
temp = *a;
*a = *b;
*b = temp;
return;
}
void sort(struct Student stu[])//冒泡排序生成降序
{
int b = 0;
for (int i = 0; i < n; i++)
{
for (int a = 0; a < n - 1 - i; a++)
{
if (stu[a].aver < stu[a + 1].aver)
{
swap(&stu[a], &stu[a + 1]);//调用swap函数
}
}
}
}
int main(void)
{
int x;
struct Student stu[n], * p = stu;
input(p);
sort(p);
for (int i = 0; i < n; i++)
{
printf("\n");
print(stu[i]);
}
FILE* fpwrite = fopen("result.txt", "w");
if (fpwrite == NULL)
{
return 0;
}
for (int x = 0; x < n; x++);
{
fprintf(fpwrite, "student number:%d\nname:%s\nscore:%f %f %f\naver:%f\n ", stu.num, stu.name, stu.score[0], stu.score[1], stu.score[2], stu.aver);
}
return 0;
}
修改如下,供参考:
#include<stdio.h>
#include<stdlib.h>
#define n 10
struct Student
{
int num;
char name[20];
float score[3];
float aver;
};
void input(struct Student stu[])//输入学生数据
{
printf("please input student's number , name ,score\n");
for (int i = 0; i < n; i++)
{
//scanf_s("%d %s %f %f %f", &stu[i].num, &stu[i].name,20,
//&stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
scanf_s("%d %s %f %f %f", &stu[i].num, stu[i].name,20,
&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;
}
}
void print(struct Student stu)//输出函数
{
printf("student number:%d\nname:%s\nscore:%f %f %f\naver:%f\n ",
stu.num, stu.name, stu.score[0], stu.score[1], stu.score[2], stu.aver);
}
void swap(struct Student* a, struct Student* b)//结构体数组交换位置
{
struct Student temp;
temp = *a;
*a = *b;
*b = temp;
return;
}
void sort(struct Student stu[])//冒泡排序生成降序
{
int b = 0;
for (int i = 0; i < n - 1; i++) //for (int i = 0; i < n; i++)
{
for (int a = 0; a < n - 1 - i; a++)
{
if (stu[a].aver < stu[a + 1].aver)
{
swap(&stu[a], &stu[a + 1]);//调用swap函数
}
}
}
}
int main(void)
{
int x;
struct Student stu[n], * p = stu;
input(p);
sort(p);
for (int i = 0; i < n; i++)
{
printf("\n");
print(stu[i]);
}
FILE* fpwrite = fopen("result.txt", "w");
if (fpwrite == NULL)
{
return 0;
}
for (x = 0; x < n; x++) //for (int x = 0; x < n; x++); 修改
{
//fprintf(fpwrite, "student number:%d\nname:%s\nscore:%f %f %f\naver:%f\n ",
//stu.num, stu.name, stu.score[0], stu.score[1], stu.score[2], stu.aver);
fprintf(fpwrite, "%d %s %f %f %f %f\n", stu[x].num, stu[x].name,stu[x].score[0],
stu[x].score[1], stu[x].score[2], stu[x].aver);
}
fclose(fpwrite);
return 0;
}