【问题标题】:explain these how the conditional operator helps in counting the negative and positive numbers in an array? [duplicate]解释这些条件运算符如何帮助计算数组中的负数和正数? [复制]
【发布时间】:2017-12-07 13:25:23
【问题描述】:

我的困惑是,如何在程序中通过编写显示的那段代码来计算正数和负数的数量。 请解释一下这些代码!

int num[5], i, neg = 0, pos = 0;

printf("enter any 5 numbers");
for (i = 0; i <= 4; i++)
    scanf("%d", &num[i]);
for (i = 0; i <= 4; i++) {
    num[i] < 0 ? neg++ : (pos++);
}
printf("\nnegative elements=%d", neg);
printf("\npositive elements=%d", pos);
getch();

【问题讨论】:

  • 至于你的问题,你确实知道ternary (conditional) expression是如何工作的吗?
  • 编译器不计算任何东西,仅供参考。
  • 也许我不太清楚!
  • 三元运算符的工作原理如下:condition ? execute if true : execute if false.
  • num[i]&lt;0?neg++:(pos++); ---> if (num[i]&lt;0) neg++; else pos++;

标签: c


【解决方案1】:

用作表达式语句的三元运算符的计算结果类似于if 语句:

num[i] < 0 ? neg++ : (pos++);

等价于

if (num[i] < 0)
    neg++;
else
    pos++;

这种编码方式不算好,贴出的代码片段还有其他问题:

  • 如果输入无法转换为int,则应检查scanf() 的返回值以避免未定义的行为。

  • 应使用i &lt; 5 将循环索引与数组大小进行比较,而不是使用&lt;= 运算符和一个接近但不同的常量。

  • 输出行应该用换行符结束,而不是用一个开始。

  • getch() 是一个非标准函数。其目的是在程序退出之前强制暂停。修复程序内部环境的缺点是一个可悲的解决方法。打开终端窗口来执行程序是更好的选择:它允许程序员观察所有程序输出,包括程序终止时发生的任何额外运行时消息。

【讨论】:

  • 感谢这些宝贵的提示,我对如何检查 scanf() 返回值以及如何打开终端窗口执行程序有点困惑。
  • scanf() 返回成功转化的次数。在您的情况下,如果将整数存储到num[i] 中,它应该返回1。要打开终端窗口,请在 Windows 中使用开始菜单,运行 cmd.exe
【解决方案2】:

由于大多数答案已经解释了三元运算符,我不需要再做一次了。 neg++ post-increments neg 变量的前一个值。 pos++ 也是如此。 这是一个 link 后/前增量。

【讨论】:

    【解决方案3】:

    线

    num[i]<0?neg++:(pos++);
    

    表示- 比较 num[i] 与 0,如果较低,则增加变量 neg。否则(num[i] >= 0),增加变量pos。

    希望对你有帮助

    【讨论】:

      【解决方案4】:
       num[i]<0?neg++:(pos++);
      

      这里,如果数字 小于零,则条件变为 true 并计算 数字,如果数字 不小于零,则条件变为false 并计算正数个数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 2011-06-14
        • 2019-04-29
        • 1970-01-01
        • 1970-01-01
        • 2020-02-16
        相关资源
        最近更新 更多