课后作业

2024/2/3

# 第十四课

# 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 满足其条件即可
  • 历史解析
    • 题解思路正确,本题主要考查对不同文件多操作的使用,以及斐波那契数列的理解,没有问题💯
上次更新: 2024-10-19 10:01:51