【问题标题】:Display smallest even and odd number from six integers without using loops and arrays显示六个整数中最小的偶数和奇数,而不使用循环和数组
【发布时间】:2018-01-26 23:52:59
【问题描述】:

所以我正在尝试为我的班级做作业,但由于某种原因,我无法让输出与我需要的匹配。我必须制作一个要求 6 个整数并显示最小的偶数和奇数的程序。将输入 3 个偶数和 3 个奇数,但顺序未知,我们不能使用循环或数组。这个示例正是我目前所拥有的,但我似乎无法理解为什么 a 和 b 不起作用。

int a, b, c, d, e, f, smallEven=0, smallOdd=0;
cout<<"Enter a number:\n";
cin>>a;

if (a%2==0)
    smallEven=a;
else if (a%2==1)
    smallOdd=a;

cout<<"Enter a number:\n";
cin>>b;

if (b%2==0)
    if (smallEven=0)
        smallEven=b;
    else if (b<smallEven)
        smallEven=b;
else if (b%2==1)
    if (smallOdd=0)
        smallOdd=b;
    else if (b<smallOdd)
        smallOdd=b;

cout<<smallEven;
cout<<smallOdd;

【问题讨论】:

  • 这里:if (smallEven=0) 您必须使用比较,而不是分配。即:if (smallEven==0)if (smallOdd=0) 相同
  • 你真的应该在编译时发出警告,当你写=而不是==时会告诉你。尝试添加命令行开关-Wall -Wextra -Wpedantic -Wconversion。如果由于某种原因不能,缓解措施包括:始终将常量放在等式的 left 上(0=smallEven 将被视为错误。)或声明一系列 const 变量只初始化一次并且永远不会改变。然后编译器会意识到你是否错误地分配了第二次。或者你可以用尾递归替换循环。
  • 您还可以通过使用最大可能值 (std::numeric_limits&lt;int&gt;::max()) 初始化 smallEvensmallOdd 来简化代码。那么你就不需要测试0了。你可以使用同一段代码六次。
  • 您的代码逻辑不起作用,因为您使用的是= 而不是==。效果是截然不同的。除此之外,复制代码(通过复制和粘贴并每次更新变量名)是解决问题的一个糟糕的解决方案 - 如果标记练习的人完全可信,那么这种方法即使它也值得不超过一半的分数作品。考虑将重复的逻辑放入一个函数中,并根据需要多次调用该函数。

标签: c++ logic


【解决方案1】:

这没有达到您的预期的原因是您在两个地方使用了赋值运算符 (=) 而不是相等的比较运算符 (==):

if (b%2==0)
    if (smallEven=0)   // should be == here
        smallEven=b;
    else if (b<smallEven)
        smallEven=b;
else if (b%2==1)
    if (smallOdd=0)    // should be == here
        smallOdd=b;
    else if (b<smallOdd)
        smallOdd=b;

【讨论】:

    猜你喜欢
    • 2019-01-10
    • 1970-01-01
    • 2020-03-22
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2022-11-25
    • 1970-01-01
    相关资源
    最近更新 更多