【问题标题】:Why isn't it adding my numbers correctly为什么它不能正确添加我的号码
【发布时间】:2016-02-02 22:57:27
【问题描述】:

我正在尝试将 100 个数字添加到一个数组中,这是我的代码: 从 17 到 117 的数字加起来应该更多。

#include <stdio.h>
#include <stdlib.h>

int main(){
int* number = malloc(101*sizeof(int));
int num = 0;    

while (num != 101){
    number[num] = 17 + num;
    num = num + 1;
};


num = 0;

while(num != 101){
    printf(" %d \n", number[num]);
    num = num + 1;
}

num = 0;
int sum = 0;
while (num != 101){
    number[num] = 17;
    sum = sum + number[num];
    num = num + 1;

}

printf(" %d \n ", sum );

return 0;
}

底部打印语句给我的值是 1717

【问题讨论】:

  • 你认为结果应该是什么?
  • 101 乘以 17 等于 1717,你觉得这有什么问题?
  • 明确number[num] = 17; 会覆盖之前设置的值。
  • 你为什么还要为此使用数组?

标签: c loops while-loop


【解决方案1】:
while (num != 101){
    number[num] = 17;
    sum = sum + number[num];

删除将所有内容重置为 17 的第二行

【讨论】:

    【解决方案2】:

    您添加的是 101 个数字,而不是 100:

    想象一下,而不是:

    int num = 0;
    while (num != 101)
    

    你写:

    int num = 0;
    while (num != 11)
    

    您将添加 0,1,2,3,4,5,6,7,8,9,10。总共有 10 个数字。

    在 C 中,习惯上用 &lt; LIMIT 写入上限来解决此问题:

    int num = 0;
    while (num < 100)
    

    请注意,同样习惯上,第一个值是数字 0。

    也许您有 VisualBasic 背景,这就是为什么您觉得需要创建一个包含 101 个元素的数组来添加 100 个数字。在 C 中,您不需要这样的废话。编写此循环的 C 方法是:

    int* number = malloc(100*sizeof(int));
    for (num = 0; num < 100; ++num)
    {
        number[num] = ...;
    }
    

    【讨论】:

      【解决方案3】:

      错误出现在这一行:

      number[num] = 17;
      

      它无条件地将数组中的正确数字替换为 17。删除该行以解决您的问题。

      当然,您不需要数组或循环来执行此操作,因为它是 arithmetic progression 的总和:

      int sum = (start - end)(start + end) / 2;
      

      另外,在分配语句中将void* 转换为int* 更正确:

      int* number = (int*)malloc(101*sizeof(int));
      

      事实上,使用 gcc,它甚至无法在没有强制转换的情况下编译。

      【讨论】:

        猜你喜欢
        • 2015-01-03
        • 1970-01-01
        • 2016-10-27
        • 2022-07-19
        • 2012-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多