解释这些条件运算符如何帮助计算数组中的负数和正数?

时间:2017-07-04 07:35:59

标签: c

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

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();

4 个答案:

答案 0 :(得分:1)

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

此处,如果数字小于零,则条件变为true并计算负数数字,如果数字不小于零然后条件变为false并计算数字。

答案 1 :(得分:1)

该行

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

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

希望这会有所帮助

答案 2 :(得分:0)

因为,大多数答案都解释了三元运算符,我不需要再做了。 neg ++ 后递增 neg 变量的先前值。 pos ++也是如此。 这是发布/预增量的link

答案 3 :(得分:0)

用作表达式语句的三元运算符的求值类似于if语句:

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

相当于

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

这种编码不被认为是好的风格,并且在发布的代码片段中还有其他问题:

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

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

  • 输出行应以换行符结束,而不是以换行符结束。

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