m0_55657093 2021-06-17 21:33 采纳率: 83.3%
浏览 110
已采纳

学生成绩文件管理的程序

1.定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩

2.从键盘输入10个学生的以上内容,存入文件stud.txt,关闭文件

3.打开stud.txt文件,将数据读出,查看是否正确写入,关闭文件。

4.打开文件stud.txt文件,读出数据,将10个学生按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件studsort.txt中。

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-06-17 22:06
    关注

    代码如下,如有帮助,请采纳一下,谢谢。

    #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应