大一学生求助:C++简易计算器循环作业问题
你的C++简易计算器代码问题排查与修正
代码存在的核心问题:
- 数据类型错误:你用
int tab[100]存储输入数字,但题目输入包含浮点数(如3.1、3.3),int会直接截断小数部分,导致计算结果完全偏离预期。 - 运算逻辑错误:你在读取每个数字时就试图和下一个未读取的数字运算,这不仅会触发数组越界(比如j循环到最后一位时,j+1超出数组范围),还完全违背了累加/累乘的基本逻辑——应该先收集所有数字,再从初始值开始逐个运算。
- 输出时机错误:题目要求每个测试用例输出一个最终结果,但你的代码每读一个数字就输出一次,会产生多余输出,不符合示例格式。
- 数组越界风险:原代码中
tab[j] += tab[j+1],当j为k-1时,j+1等于k,超出数组有效索引范围,会导致未定义行为。
修正后的代码:
#include <iostream> using namespace std; int main() { int n, k; char op; cin >> n; for (int i = 0; i < n; i++) { cin >> op >> k; double result; // 根据操作类型初始化结果值 if (op == '+') { result = 0.0; } else if (op == '*') { result = 1.0; } // 读取数字并完成运算 for (int j = 0; j < k; j++) { double num; cin >> num; if (op == '+') { result += num; } else if (op == '*') { result *= num; } } // 输出当前测试用例的最终结果 cout << result << endl; } return 0; }
修正说明:
- 改用
double类型处理数字,完美支持浮点数的输入与运算,避免小数截断问题。 - 去掉固定大小数组,直接在读取数字时更新结果,既节省内存又彻底避免数组越界。
- 针对加法/乘法分别初始化结果:加法从0开始累加,乘法从1开始累乘,完全符合数学运算逻辑,同时兼容k=1的特殊情况(如示例中第三个测试用例)。
- 每个测试用例完成所有运算后才输出结果,严格匹配题目要求的输出格式。
内容的提问来源于stack exchange,提问作者yougotproblems
相关产品推荐
相关产品推荐

