c语言文件有关的一个例子不会做

  1. 创建一个文本文件t1.txt,在其中输入10个学生的学号、姓名、3门课成绩;
  2. 编一个程序,读取文本文件t1.txt中的学生信息,求每个学生的平均分,并按平均分将学生信息进行排序;
  3. 将排序之后的学生信息输出到文本文件t2.txt中。
    学生信息定义如下:
    struct student
    {int num;
    char name[10];
    float cj[4]; //cj[3]表示平均分。
    }
    这个关于文件的程序怎么写?

对于你这个题目可以参考如下链接:

c语言程序:某班有10名同学,建立学生结构体类型,包括学号,姓名,3门课程的成绩,编写程序?_360问答 c语言程序:某班有10名同学,建立学生结构体类型,包括学号,姓名,3门课程的成绩,编写程序? 某班有10名同学,建立学生结构体类型,包括学号、姓名、3门课程的成绩,编写程序,读入已准备好的文本文件student1.txt,为结构体数组变量赋值,计算每名学生的平均成绩及名次。结果输... 某班有10名同学,建立学生结构体类型,包括学号、姓名、3门课程的成绩,编写程序,读入已准备好的文本文件student1.txt,为结构体数组变量赋值,计算每名学生的平均成绩及名次。结果输出到屏幕的同时保存到student2.txt文件中。 展开 #include #include... https://wenda.so.com/q/1623808188215011


#include <stdio.h>

#include"string.h"

#include <stdlib.h>

#define N 100000

struct st{

    char a[15];

    char b[20];

    int x,y,z;

};

int fun1(int *x,int *y)

{

    int t;

    t=*x;

    *x=*y;

    *y=t;

}

int fun2(char *x,char *y)

{

    char *t;

    strcpy(t,x);

    strcpy(x,y);

    strcpy(y,t);

}

int main() {

/*_________________________________________________*/

    FILE *fp,*ok;

    char b[N + 1];

    //判断文件是否打开

    if ( (fp = fopen("D:\\操作文件1号.txt", "r")) == NULL )/*这里D:\\操作文件1号.txt 是路径;读取D盘下,名为(操作文件1号)的文本文件*/ 

    {

        puts("操作文件1号读取失败!");

        exit(0);

    }

    else

    {

        puts("操作文件1号读取成功");

        puts("开始计算");

    }

/*__________________________________________*/

    struct st s[111];

    char t[20],str[N];

    int aver[111]={0};

    for(int i=0;i<5;i++)

    {

        fscanf(fp,"%s%s%d%d%d",s[i].a,s[i].b,&s[i].x,&s[i].y,&s[i].z);

        printf("%s %s %d %d %d\n",s[i].a,s[i].b,s[i].x,s[i].y,s[i].z);

    }

    printf("按平均成绩排序\n");  

    for(int i=0;i<5;i++)

    {

    aver[i]=(s[i].x+s[i].y+s[i].z)*1.0/3;

    }

    printf("\n");

    for(int i=0;i<5;i++)

    {

        for(int j=0;j<4-i;j++)

        {

            if(aver[j]<aver[j+1])

            {

                fun2(s[j].a,s[j+1].a);

                fun2(s[j].b,s[j+1].b);

                fun1(&aver[j],&aver[j+1]); 

                fun1(&s[j].x,&s[j+1].x);

                fun1(&s[j].y,&s[j+1].y);

                fun1(&s[j].z,&s[j+1].z);

            }

        }

    }

    if ( (ok = fopen("D:\\操作文件2号.txt", "w")) == NULL )/*D:\\操作文件2号.txt 是路径;写入D盘下,名为(操作文件2号)的文本文件*/ 

    {

        puts("操作文件2号写入失败!");

        exit(0);

    }

    else

    {

        puts("操作文件2号写入成功");

    }

    for(int i=0;i<5;i++)

    {

        

        fprintf(ok,"第%d名;%s %s %d %d %d\n",i+1,s[i].a,s[i].b,s[i].x,s[i].y,s[i].z);

        printf("第%d名;%s %s %d %d %d\n",i+1,s[i].a,s[i].b,s[i].x,s[i].y,s[i].z);

    }

/*___________________________________________*/   

    //结束关闭文件

    fclose(ok);

    fclose(fp);

    return 0;

}



如果对你有帮助,可以给我个采纳吗,谢谢!!

读入用fscanf之类的,排序用快排,写入用fprintf