文件编程题救急:6-1首字母大写;6-2 统计成绩不及格学生信息

发布时间:2023年12月28日

6-1首字母大写

从一个文件中读取一篇英文文章,请将文章中所有单词首字母大写并存入另一个文件中。“单词”是指一串连续的字母。

函数接口定义:

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

说明:参数 in 和 out 为指示两个文件的指针。函数从 in 所指文件中的读出数据,将结果写入 out 所指的文件中。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

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

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

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

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

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

输入样例:

Spring Morning

translated by Xu Yuanchong

This spring morning in bed I am lying,

not awake till birds are crying.

After one night of wind and showers,

how many are the fallen flowers.

输出样例:

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

Spring Morning

Translated By Xu Yuanchong

This Spring Morning In Bed I Am Lying,

Not Awake Till Birds Are Crying.

After One Night Of Wind And Showers,

How Many Are The Fallen Flowers.

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB


解题代码

void CapitalizeTheFirstLetter(FILE* in, FILE* out) {
    char ch;
    int flag = 0;
    while ((ch = fgetc(in)) != EOF) {
        if (flag == 0 && (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
            if (islower(ch))
                ch = toupper(ch);
            flag = 1;
        }
        else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
            flag = 1;
        else
            flag = 0;
        fputc(ch, out);
    }
}

6-2 统计成绩不及格学生信息

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

函数接口定义:

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


解题代码

void FailStudent(FILE* in, FILE* out)
{
    struct student stu;
    char course_names[3][10] = {"Math", "English", "C"};
    
    while (fscanf(in, "%lld %s %d %d %d", &stu.id, stu.name, &stu.score[0], &stu.score[1], &stu.score[2]) != EOF)
    {
        for (int i = 0; i < 3; ++i)
        {
            if (stu.score[i] < 60)
            {
                fprintf(out, "%lld %s %s\n", stu.id, stu.name, course_names[i]);
            }
        }
    }
}


最后致歉:没有什么思路提示,因为期末不考文件编程,我打算等2月初再写下思路,这篇文章,希望能帮到仅仅是需要救急的同学吧。如果有思路或者能看懂的,欢迎在评论区补充,谢谢大家

文章来源:https://blog.csdn.net/etamaos/article/details/135267667
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。