课后作业
chao_smile 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 满足其条件即可
- ✅
- 历史解析
- 题解思路正确,本题主要考查对不同文件多操作的使用,以及斐波那契数列的理解,没有问题💯