当前位置: 首页 > article >正文

C语言练习(31)

有5个学生,每个学生有3门课程的成绩,从键盘输入以上数据(包括学号、姓名、3门课程成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。

设5名学生的学号、姓名和3门课程成绩如下:

99101   Wang   89,98,67.5

99103   Li     60,80,90

99106   Fun    75.5,91.5,99

99110   Ling   100,50,62.5

99113   Yuan   58,68,71

在向文件stud写入数据后,应检查验证stud文件中的内容是否正确。

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)

// 定义学生结构体
typedef struct Student {
    int id;
    char name[20];
    double scores[3];
    double average;
} Student;

// 计算平均成绩
void calculateAverage(Student* s) {
    s->average = (s->scores[0] + s->scores[1] + s->scores[2]) / 3;
}

// 将学生数据写入文件
void writeToFile(Student* students, int num) {
    FILE* fp;
    fp = fopen("stud", "w");
    if (fp == NULL) {
        perror("Error opening file");
        exit(1);
    }
    for (int i = 0; i < num; i++) {
        fprintf(fp, "%d %s %.1lf %.1lf %.1lf %.2lf\n", students[i].id, students[i].name,
            students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average);
    }
    fclose(fp);
}

// 从文件读取数据并验证
void readAndVerify() {
    FILE* fp;
    fp = fopen("stud", "r");
    if (fp == NULL) {
        perror("Error opening file");
        exit(1);
    }
    Student s;
    while (fscanf(fp, "%d %s %lf %lf %lf %lf", &s.id, s.name, &s.scores[0], &s.scores[1], &s.scores[2], &s.average) == 6) {
        double calculatedAverage = (s.scores[0] + s.scores[1] + s.scores[2]) / 3;
        if (calculatedAverage != s.average) {
            printf("Error: Incorrect average for student %s\n", s.name);
        }
        else {
            printf("Data for student %s is correct\n", s.name);
        }
    }
    fclose(fp);
}

int main() {
    Student students[5];
    // 输入学生数据
    for (int i = 0; i < 5; i++) {
        scanf_s("%d %s %lf %lf %lf", &students[i].id, students[i].name, &students[i].scores[0], &students[i].scores[1], &students[i].scores[2]);
        calculateAverage(&students[i]);
    }
    // 将数据写入文件
    writeToFile(students, 5);
    // 从文件读取并验证
    readAndVerify();
    return 0;
}


http://www.kler.cn/a/525969.html

相关文章:

  • https数字签名手动验签
  • 你好!这是我自己的CSDN博客!
  • python:斐索实验(Fizeau experiment)
  • Baklib揭示内容中台与人工智能技术的创新协同效应
  • 【Jave全栈】Java与JavaScript比较
  • WebSocket 详解:全双工通信的实现与应用
  • 9.进程间通信
  • 后端token校验流程
  • Mono里运行C#脚本37—mono_compile_create_vars函数
  • Spring Boot - 数据库集成07 - 数据库连接池
  • DeepSeek 云端部署,释放无限 AI 潜力!
  • ​‌马尔可夫决策过程-笔记
  • 基于微信小程序的医院预约挂号系统设计与实现(LW+源码+讲解)
  • Python中的函数(下)
  • Node.js 的底层原理
  • 【Node.js】Koa2 整合接口文档
  • 付费进群阿泽魔改源码 跳转不卡顿
  • 剑指 Offer II 009. 乘积小于 K 的子数组
  • HarmonyOS应用开发快速入门
  • 一种用于低成本水质监测的软传感器开源方法:以硝酸盐(NO3⁻)浓度为例
  • 知识管理系统塑造企业文化与学习型组织的变革之路
  • 再写最长上升子序列(简单dp)
  • Python 列表(组织列表)
  • linux——进程树的概念和示例
  • 力扣-数组-59 螺旋矩阵Ⅱ
  • 数据结构 队列