请求编写统计奇数、偶数与零数量的C++程序
修复统计整数奇偶及零数量的C++程序
嘿,我来帮你搞定这个统计整数奇偶和零数量的C++程序问题~原代码里藏着几个容易踩的坑,我给你一步步修正并讲清楚问题出在哪:
原代码的核心问题
- 循环计数器类型错误:用
float counter作为循环计数器不合适,浮点型可能因为精度问题导致循环次数出错,换成int才是正确选择。 - switch判断逻辑失效:
number / 2没法覆盖所有偶数情况,比如4/2=2、-4/2=-2,这些值不在现有case里,根本不会被统计成偶数;而且负数奇数的判断虽然碰巧能命中,但逻辑本质是错的,应该用**取模运算number % 2**来判断奇偶(奇数模2结果为1或-1,偶数/零模2结果为0)。 - 缺少break导致case贯穿:switch里的case执行完后没有
break,会直接跑到下一个case,比如统计零的时候,会同时把零也算进奇数里,导致统计结果完全错误。 - 赋值运算符误用:
if (number=0)是把0赋值给number,不是判断是否相等,正确的相等判断应该用==。
修正后的完整代码(直观版)
#include <iostream> using namespace std; const int LIMIT = 10; int main() { // 循环计数器改用int,避免浮点精度问题 int counter; int number = 0; int zeros = 0; int odds = 0; int evens = 0; cout << "Please enter " << LIMIT << " integers, positive, negative, or zeros." << endl; cout << "The numbers you entered are:" << endl; for (counter = 1; counter <= LIMIT; counter++) { cin >> number; // 先单独判断零,再区分奇偶 if (number == 0) { zeros++; } else if (number % 2 == 0) { evens++; } else { odds++; } } // 补充完整的结果输出 cout << "\n统计结果:" << endl; cout << "零的数量:" << zeros << endl; cout << "偶数的数量:" << evens << endl; cout << "奇数的数量:" << odds << endl; return 0; }
如果你偏好使用switch的版本
#include <iostream> using namespace std; const int LIMIT = 10; int main() { int counter; int number = 0; int zeros = 0; int odds = 0; int evens = 0; cout << "Please enter " << LIMIT << " integers, positive, negative, or zeros." << endl; cout << "The numbers you entered are:" << endl; for (counter = 1; counter <= LIMIT; counter++) { cin >> number; switch (number % 2) { case 0: // 模2为0时,区分零和非零偶数 number == 0 ? zeros++ : evens++; break; // 必须加break,防止case贯穿 case 1: case -1: odds++; break; } } cout << "\n统计结果:" << endl; cout << "零的数量:" << zeros << endl; cout << "偶数的数量:" << evens << endl; cout << "奇数的数量:" << odds << endl; return 0; }
这两个版本都能正确统计输入的10个整数中零、偶数、奇数的数量,不管输入的是正数、负数还是零都能准确判断~
内容的提问来源于stack exchange,提问作者user5648938
相关产品推荐
相关产品推荐

