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

该文介绍了C语言中文件操作的重要性和使用,包括从键盘输入学生数据,计算平均成绩,将数据写入文件并进行验证。文章详细阐述了实现步骤,如定义结构体、处理输入输出错误,并提供了代码示例。通过这个习题,读者能掌握文件操作函数和错误处理技巧。
摘要由CSDN通过智能技术生成

题为c程序设计(第五版)谭浩强 课后习题第10章第5题


前言

        上一篇文章中,我们主要介绍了c语言中有关链表的一系列重要操作,接下来,我将带领大家一起学习c语言的另外一个重要部分,那就是文件操作!

        C语言中的文件操作是一项重要的编程技术,它允许我们读取、写入和管理计算机上的文件。通过文件操作,我们可以实现数据的存储、读取和共享,以及处理日志和配置文件等任务。在接下来的内容中,我们将深入研究文件操作函数和技巧,以帮助您更好地处理文件操作,并有效地开发各种应用程序。


一、题目复现

二、实现步骤

1.思路分析

1. 定义结构体:
   - 使用`struct Student`定义了一个包含学生信息的结构体。每个学生具有学号、姓名、3门课成绩和平均成绩的数据成员。

2. 主函数逻辑:
   - 声明了一个包含5个学生的数组`students`,用于存储学生数据。
   - 通过`scanf`函数从键盘输入每个学生的学号、姓名和3门课成绩。输入的数据通过循环逐个存储到对应的结构体成员中。
   - 使用循环计算每个学生的平均成绩,并将结果存储在结构体的`average`成员中。
   - 打开名为"stud"的文件,并进行错误检查。如果无法打开文件,则输出错误消息并终止程序。
   - 使用循环将学生数据以特定格式写入文件。在写入过程中,使用`fprintf`函数,并检查返回值,如果返回值小于0,则表示写入文件时发生了错误,输出错误消息并终止程序。
   - 关闭文件。
   - 再次打开文件进行验证,并进行错误检查。如果无法打开文件,则输出错误消息并终止程序。
   - 使用循环从文件中读取学生数据,并以特定格式输出到控制台进行验证。

3. 错误处理:
   - 在从键盘输入学生数据时,使用`scanf`函数的返回值判断是否成功读取了5个数据项。如果返回值不等于5,表示输入错误,输出错误消息并终止程序。
   - 在将数据写入文件时,使用`fprintf`函数的返回值判断是否成功写入文件。如果返回值小于0,表示写入文件时发生了错误,输出错误消息并终止程序。
   - 在验证文件内容时,使用文件打开操作和`fscanf`函数的返回值判断文件是否成功打开和读取数据。如果无法打开文件,则输出错误消息并终止程序。

最终实现了从键盘输入学生数据,计算平均成绩,并将数据写入文件。然后,再从文件中读取数据进行验证。通过添加错误处理机制,可以检测和处理可能发生的错误情况,提高代码的健壮性和可靠性。

2.具体实现

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

struct Student {
    int id;
    char name[20];
    float scores[3];
    float average;
};

int main() {
    struct Student students[5];

    // 从键盘输入学生数据
    printf("请输入5名学生的学号、姓名和3门课成绩:\n");
    for (int i = 0; i < 5; i++) {
        printf("学生%d:\n", i + 1);
        if (scanf("%d %s %f %f %f", &students[i].id, students[i].name,
            &students[i].scores[0], &students[i].scores[1], &students[i].scores[2]) != 5) {
            printf("输入错误,请重新输入学生数据。\n");
            return 1;
        }

        // 计算平均成绩
        students[i].average = (students[i].scores[0] + students[i].scores[1] + students[i].scores[2]) / 3.0;
    }

    // 将数据写入文件
    FILE* file = fopen("stud", "w");
    if (file == NULL) {
        printf("无法打开文件。\n");
        return 1;
    }

    for (int i = 0; i < 5; i++) {
        if (fprintf(file, "%d %s %.1f %.1f %.1f %.1f\n", students[i].id, students[i].name,
            students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average) < 0) {
            printf("写入文件时发生错误。\n");
            fclose(file);
            return 1;
        }
    }

    fclose(file);

    // 验证文件内容
    file = fopen("stud", "r");
    if (file == NULL) {
        printf("无法打开文件。\n");
        return 1;
    }

    printf("\n验证 stud 文件中的内容:\n");
    int id;
    char name[20];
    float score1, score2, score3, average;

    while (fscanf(file, "%d %s %f %f %f %f", &id, name, &score1, &score2, &score3, &average) != EOF) {
        printf("学号:%d\n姓名:%s\n成绩1:%.1f\n成绩2:%.1f\n成绩3:%.1f\n平均成绩:%.1f\n\n",
            id, name, score1, score2, score3, average);
    }

    fclose(file);

    return 0;
}

实验结果(示例):


 

总结

        在这个习题的解决方案中,我使用了C语言的文件操作技术,实现了从键盘输入学生数据、计算平均成绩,并将数据存储到磁盘文件中的功能。代码中包含了错误处理机制,用于检测和处理可能的错误情况,提高程序的稳健性和可靠性。

        通过这个习题,我们不仅掌握了文件操作函数的使用方法,还学会了如何读写文件和验证文件内容。这个练习对于加深对C语言文件操作的理解以及提升编程技能都非常有帮助。(尤其是错误处理机制,可以反复的学习和钻研)。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fashia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值