1.定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩
2.从键盘输入10个学生的以上内容,存入文件stud.txt,关闭文件
3.打开stud.txt文件,将数据读出,查看是否正确写入,关闭文件。
4.打开文件stud.txt文件,读出数据,将10个学生按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件studsort.txt中。
1.定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩
2.从键盘输入10个学生的以上内容,存入文件stud.txt,关闭文件
3.打开stud.txt文件,将数据读出,查看是否正确写入,关闭文件。
4.打开文件stud.txt文件,读出数据,将10个学生按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件studsort.txt中。
代码如下,如有帮助,请采纳一下,谢谢。
#include <stdio.h>
struct Student
{
int nmb;
char name[20];
int score[3];
};
//录入数据
void inputinfo(struct Student a[])
{
int i;
printf("输入10个学生的学号,姓名,三门课的成绩:\n");
for (i = 0;i< 10;i++)
{
scanf("%d %s %d %d %d",&a[i].nmb,a[i].name,&a[i].score[0],&a[i].score[1],&a[i].score[2]);
}
}
//写文件
void Write2File(const char* file,struct Student a[],int n)
{
FILE* fp;
int i;
if (!(fp = fopen(file,"w")))
{
printf("文件打开失败");
return ;
}
for (i = 0;i< n;i++)
{
fprintf(fp,"%d\t%s\t%d\t%d\t%d\n",a[i].nmb,a[i].name,a[i].score[0],a[i].score[1],a[i].score[2]);
}
fclose(fp);
}
//读文件
void ReadFile(const char* file,struct Student a[],int *n)
{
FILE* fp;
int i = 0,res =-1;
if (!(fp = fopen(file,"r")))
{
printf("文件打开失败");
return ;
}
while(!feof(fp))
{
res = fscanf(fp,"%d\t%s\t%d\t%d\t%d\n",&a[i].nmb,a[i].name,&a[i].score[0],&a[i].score[1],&a[i].score[2]);
if(res > 0)
i++;
}
fclose(fp);
*n = i;
}
//按平均分从高到低排序
void Sort(struct Student a[],int n)
{
int i,j;
float avg1,avg2;
struct Student tmp;
for (i = 0;i< n-1;i++)
{
for (j = 0;j< n-1-i;j++)
{
avg1 = (a[j].score[0] + a[j].score[1]+a[j].score[2])/3.0;
avg2 = (a[j+1].score[0] + a[j+1].score[1]+a[j+1].score[2])/3.0;
if(avg1 < avg2)
{
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
printf("number name math Chinese English average\n");
for (i = 0;i<10;i++)
{
avg1 = (a[i].score[0] + a[i].score[1]+a[i].score[2])/3.0;
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n",a[i].nmb,a[i].name,a[i].score[0],a[i].score[1],a[i].score[2],avg1);
}
}
int main()
{
struct Student a[10];
struct Student b[10];
int nmb = 0;
inputinfo(a);
Write2File("stud.txt",a,10);
//
ReadFile("stud.txt",b,&nmb);
printf("nmb=%d\n",nmb);
Sort(b,nmb);
Write2File("studsort.txt",b,nmb);
return 0;
}