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

学生成绩文件管理的程序

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 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog