想家了吗~ 2023-01-02 15:47 采纳率: 100%
浏览 40
已结题

情况大致如下,怎么读取有用的信息?

img


用结构体写的…
4.将上题“stud.dat”文件中的学生数据按平均分进行降序排序处理,将已排序的学生数据存人 个新文件“stu sort.dat”中。

  • 写回答

1条回答 默认 最新

  • |__WhoAmI__| 2023-01-02 20:46
    关注

    首先,需要读取文件中的学生信息。建议使用结构体存储学生信息,这样方便后续进行排序。

    例如:

    struct student{
      int num; // 学号
      char name[10]; // 姓名
      double score[3]; // 三门课的成绩
      double avg; // 平均分
    }stu[5];
    

    然后可以使用 fopen 函数打开文件,使用 fscanf 函数读取文件中的学生信息,并存储到结构体数组中。

    FILE *fp = fopen("stud.dat", "r");
    int i = 0;
    while(fscanf(fp, "%d %s %lf %lf %lf %lf", &stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2], &stu[i].avg) == 6){
      i++;
    }
    fclose(fp);
    

    接下来,可以使用冒泡排序或者快速排序对学生信息进行排序。冒泡排序是稳定排序算法,快速排序是不稳定排序算法,可以根据自己的需要选择使用。

    例如使用冒泡排序进行排序:

    for(int i = 0; i < 5; i++){
      for(int j = 0; j < 5-i-1; j++){
        if(stu[j].avg < stu[j+1].avg){
          // 交换两个学生信息
          struct student temp = stu[j];
          stu[j] = stu[j+1];
          stu[j+1] = temp;
        }
      }
    }
    

    使用 fopen 函数打开新文件,使用 fprintf 函数将已排序的学生信息写入文件。最后使用 fclose 函数关闭文件。

    FILE *fp = fopen("stu_sort.dat", "w");
    for(int i = 0; i < 5; i++){
      fprintf(fp, "学号:%d\t姓名:%s\t三课:%.6f %.6f %.6f\t平均分:%.6f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].avg);
    }
    fclose(fp);
    

    仅供参考,望采纳,谢谢。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月11日
  • 已采纳回答 1月3日
  • 创建了问题 1月2日

悬赏问题

  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表