【问题标题】:C: Count positive/negative numbers and 0's in arrayC:计算数组中的正/负数和0
【发布时间】:2023-04-03 06:05:03
【问题描述】:

我正在尝试用 C 编写一个程序来计算数组中正数和负数的数量以及零的数量。

我写了以下代码:

int A[15], pos, neg, nul, i;

[...]

pos = 0;
neg = 0;
nul = 0;

for (i = 0; i <= 15; i++) {
    if (A[i] > 0) {
        pos++;
    }
    if (A[i] < 0) {
        neg++;
    }
    if (A[i] == 0) {
        nul++;
    }
}

但是,计数总是错误的。具体来说,posnul 的计数总是被1 关闭。包含 15 个正数和 1 个零的数组给出 pos = 16neg = 0,而包含 15 个零和 1 个正数的数组给出 pos = 0nul = 16

这里发生了什么以及如何处理它?

【问题讨论】:

  • 您是如何将 16 个项目放入 15 个数组中的? ("15 个正数和 1 的数组")
  • 您正在阅读缓冲区。您只有 15 个元素的空间,但您正在继续第 16 个元素
  • 标准的for 循环用于n 大小的数组是for (i=0; i&lt;n; i++)。在您的代码中,n 是 15,所以循环条件应该是 i&lt;15

标签: c count nul


【解决方案1】:

问题出在for (i=0; i&lt;=15; i++)。您正在通过数组的边界。

应该是for (i=0; i&lt;15; i++)

【讨论】:

    【解决方案2】:

    问题:

    您的数组大小为 15,但您遍历它 16 次,原因是:

    for (i=0; i&lt;=15; i++)

    i 的值:{0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15}:

    总共 16 个索引,其中 A[15] 是未定义的行为。

    解决方案:

    将该循环标题更改为:

    for (i = 0; i &lt; 15; i++)

    这将确保循环使用入站数组索引运行 15 次。

    奖励:

    n元素的数组一般遍历为:

    for (i = 0; i < n; ++i)
    {
        // process a[i] here
    }
    

    【讨论】:

      【解决方案3】:

      (i=0; i

      您的数组大小为 15,但由于您从 i 开始,您的循环将运行 16 次。

      解决办法是这样写:

      (i=0; i<15; i++)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-05
        • 2020-02-11
        • 1970-01-01
        相关资源
        最近更新 更多