讲义
课程
作业
真题
竞赛
课时
模板
  • 2023天津CSP-J组 第一轮 成绩
  • 2023天津CSP-S组 第一轮 成绩
  • 2023天津CSP第二轮晋级名单(J&S)
  • 2023竞赛大纲
  • 2023机试环境(禁止使用手机下载,镜像文件过大)
课程
作业
真题
竞赛
课时
模板
  • 2023天津CSP-J组 第一轮 成绩
  • 2023天津CSP-S组 第一轮 成绩
  • 2023天津CSP第二轮晋级名单(J&S)
  • 2023竞赛大纲
  • 2023机试环境(禁止使用手机下载,镜像文件过大)
  • 作业
    • 第一课
    • 第二课
    • 第三课
    • 第四课
    • 第五课
    • 第六s课
    • 第七课
    • 阶段小测
    • 第八课
    • 第九课
    • 第十课
    • 第十一课
    • 第十二课
    • 第十三课
    • 第十四课
    • 阶段复习
    • 第十五课
    • 第十六课
    • 第十七课
    • 第十八课
    • 阶段复习
    • 第十九课
    • 第二十课
    • 第二十一课
    • 第二十二课
    • 第二十三课
    • 第二十四课
    • 第二十五课
    • 第二十六课
    • 第二十七课
    • 第二十八课
    • 第二十九课
    • 第三十课
    • 第三十一课
    • 第三十二课
    • 第三十三课
    • 第三十四课
    • 第三十五课
    • 第三十六课

课后作业

chao_smile2024/2/03

第十四课

1. 编写一个程序,从名为 "data.txt" 的文件中读取一系列整数,将其中大于等于10且小于等于100的整数写入名为 "output.txt" 的文件中。每个符合条件的整数占一行。然后,计算 "output.txt" 中的整数个数并输出到屏幕上

//  data.txt 内容: 0到300内的随机整数,且每个整数都会单独占用一行,具体求解时自定义 data.txt 满足其条件即可
  • ✅
  • 历史解析
    • 题解思路正确,本题主要考查对三种文件操作方法的使用判断,以及获取文件数据后的过滤操作,没有问题💯

2. 编写一个程序,从名为 "input.txt" 的文件中读取一系列整数,将其中所有奇数整数的平方写入名为 "output.txt" 的文件中。每个平方数占一行。然后,输出 "output.txt" 中的平方数个数到屏幕上

//  input.txt 内容: 0到300内的随机整数,且每个整数都会单独占用一行,具体求解时自定义 input.txt 满足其条件即可
  • ✅
  • 历史解析
    • 题解思路正确,本题主要考查对三种文件操作方法的使用判断,以及获取文件数据后的过滤操作,没有问题💯

3. 编写一个程序,从键盘读取一系列整数,直到遇到一个负数为止。然后,将这些整数按照升序排序,并写入名为 "output.txt" 的文件中

  • ✅
  • 历史解析
    • 题解思路正确,本题主要考查在键盘以及文件操作相互交叉下的使用判断,以及排序操作,题解使用了标准库函数,本意是建议使用已学习的冒泡排序来求解,总体没有问题💯

4. 编写一个程序,从名为 "input.txt" 的文件中读取一对整数,每行一个整数,读取第3行与第5行的数字。然后,使用递归方式实现欧几里得算法来计算它们的最大公约数,并将结果输出到名为 "gcd_output.txt" 的文件中

//  input.txt 内容: 0到300内的随机正整数,且每个正整数都会单独占用一行,文件内容不少于5行,具体求解时自定义 input.txt 满足其条件即可
  • ❌

  • 历史解析

    • 首先不建议使用if (++lineCount == 3|| lineCount == 5)的方式累加lineCount同时判断
    • string line; line >> thirdLine字符串>>非标准方法,编译不会通过
    • lineCount == 3 // 保留第3行的整数,你每次读取的行数据都是line,你没有赋值操作
    • else下,及lineCount==5时,同样没有对应赋值操作且入参错误
    • 对于同变量嵌套判断,推荐使用if-else if-else来处理
  • 参考答案

#include <iostream>
#include <fstream>
using namespace std;

int gcd(int a, int b) {
    if (b == 0){
        return a;
    }
    return gcd(b, a % b);
}

int main() {
    ifstream inputFile("input.txt");
    if (!inputFile) {
        cerr << "无法打开 input.txt 文件\n";
        return 1;
    }
    int lineNumber = 0;
    int number, number1, number2;
    while (inputFile >> number) {
        lineNumber++;
        if (lineNumber == 3)
            number1 = number;
        else if (lineNumber == 5) {
            number2 = number;
            break; // 在读取第五行后停止循环
        }
    }
    int result = gcd(number1, number2);
    ofstream outputFile("gcd_output.txt");
    if (!outputFile) {
        cerr << "无法打开 gcd_output.txt 文件\n";
        return 1;
    }
    outputFile << "最大公约数为 " << number1 << " 和 " << number2 << " 的最大公约数是: " << result << endl;
    inputFile.close();
    outputFile.close();
    cout << "最大公约数已计算并写入 gcd_output.txt 文件\n";
    return 0;
}

5. 假设有一个包含整数的文件 "data.txt",每行一个整数。编写一个程序,读取 "data.txt" 中的所有整数,并计算它们的总和。然后,将这个总和写入一个新文件 "sum.txt"。接着,将 "sum.txt" 中的数字作为输入,假设接收变量为 "n" ,那么计算斐波那契数列的第 "n" 个数字的结果,并输出到屏幕上

//  data.txt 内容: 0到100内的随机整数,且每个整数都会单独占用一行,具体求解时自定义 data.txt 满足其条件即可
  • ✅
  • 历史解析
    • 题解思路正确,本题主要考查对不同文件多操作的使用,以及斐波那契数列的理解,没有问题💯
Prev
第十三课
Next
阶段复习
津ICP备2020007982号-2