统计成绩不及格学生信息

请编写函数,从文件中读取成绩不及格的学生信息,将结果写入另一个文件。

函数接口定义:

 

void FailStudent(FILE* in, FILE* out);

说明:
(1)参数in和out为指示两个文件的指针。函数从in所指文件中读出数据,将结果写入out所指的文件中。
(2)in所指文件中有很多行(不超过100行),每行对应一名学生的多个信息,以空格间隔,这些信息包括:学号(12位),姓名(不超过10个字符,且其中不含空格),三科成绩:数学,英语,C语言(均是<=100的非负整数)。
(3)函数要求,某科成绩不及格(<60)的学生,需要将其“学号 姓名 该科课程名”三部分内容写入out文件中,每行一个结果。其中,三门课程的课程名分别为:"Math","English","C"。

裁判测试程序样例:

#include<stdio.h>
#define MAXN 100
struct student
{
    long long id;
    char name[MAXN];
    int score[3];
};

void FailStudent(FILE* in, FILE* out);

int main()
{
    FILE *in, *out;

    in = fopen("in.txt", "r");
    out = fopen("out.txt", "w");

    if (in && out)
    {
        FailStudent(in, out);
    }
    else
    {
        puts("文件无法打开!");
    }

    if (in)
    {
        fclose(in);
    }
    if (out)
    {
        fclose(out);
        puts("文件保存成功!");
    }
    return 0;
}
/* 请在这里填写答案 */

输入样例:

“in.txt”文件中保存的数据样例为:

202018010102 zhangsan 50 50 50
202026070420 hanmeimei 90 90 90
202116050331 lilei 50 90 100
202128060211 wangmazi 70 70 59

输出样例:

程序运行结束后,打开“out.txt”文件,查看文件内容。

202018010102 zhangsan Math
202018010102 zhangsan English
202018010102 zhangsan C
202116050331 lilei Math
202128060211 wangmazi C

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C程序如下:

void FailStudent(FILE* in, FILE* out) {  
    // 定义学生结构体变量s和课程名称数组  
    struct student s;  
    char course[3][10] = {"Math", "English", "C"};
    char line[100];  
    while (fgets(line, sizeof(line), in) != NULL) {  
        // 解析学生信息  
        if (sscanf(line, "%lld %s %d %d %d", &s.id, s.name, &s.score[0], &s.score[1], &s.score[2]) == 5) {  
            // 检查每门课程的成绩是否不及格  
            for (int i = 0; i < 3; i++) {  
                if (s.score[i] < 60) {  
                    // 如果不及格,则将学生信息写入输出文件  
                    fprintf(out, "%lld %s %s\n", s.id, s.name, course[i]);  
                }  
            }  
        } 
    }  
}

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值