gpt4 book ai didi

c - 意外输出 - 编程练习 (C)

转载 作者:行者123 更新时间:2023-11-30 14:28:18 25 4
gpt4 key购买 nike

来自 C Primer Plus 第 5 版:“编写一个程序,创建两个八元素 double 组,并使用循环让用户输入第一个数组的八个元素的值。让程序将第二个数组的元素设置为例如,第二个数组的第四个元素应等于第一个数组的前四个元素的总和,第二个数组的第五个元素应等于第一个数组的前五个元素的总和。 (可以使用嵌套循环来做到这一点,但是通过使用第二个数组的第五个元素等于第二个数组的第四个元素加上第一个数组的第五个元素这一事实,您可以避免嵌套并仅使用单个循环)最后,使用循环显示两个数组的内容,第一个数组显示在一行上,第二个数组的每个元素显示在第一个数组的相应元素下方。”

我写过:

#include <stdio.h>

int main(void)
{
double first[8];
double second[8];
int i;
printf("Enter 8 'doubles':\n");
i = 0;
scanf("%lf", &first[i]);
second[i] = first[i];
i = 1;
while(i < 8)
{
scanf("%lf", &first[i]);
second[i] = first[i] + first[i-1];
i++;
}
for(i = 0; i < 8; i++)
{
printf("%.2lf ", first[i]);
}
printf("\n");
for(i = 0; i < 8; i++)
{
printf("%.2lf ", second[i]);
}
}

我的输出是:

Enter 8 'doubles':
1
1
1
1
1
1
1
1
1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
1.00 2.00 2.00 2.00 2.00 2.00 2.00 2.00 Press any key to continue . . .

预期输出在底行为 1 2 3 6 12 24 48 96。我一生都无法弄清楚为什么它只适用于第一次迭代。我错过了什么?

提前致谢。

编辑:不知道为什么它被列为“家庭作业”,我将其标记为练习......好吧。

编辑2:

这段代码:

#include <stdio.h>

int main(void)
{
double first[8];
double second[8];
int i;
printf("Enter 8 'doubles':\n");
i = 0;
scanf("%lf", &first[i]);
second[i] = first[i];
i = 1;
while(i < 8)
{
scanf("%lf", &first[i]);
second[i - 1] = first[i] + first[i-1];
i++;
}
for(i = 0; i < 8; i++)
{
printf("%.2lf ", first[i]);
}
printf("\n");
for(i = 0; i < 8; i++)
{
printf("%.2lf ", second[i]);
}
}

此输出:

1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 
2.00 2.00 2.00 2.00 2.00 2.00 2.00 -925596313493178310000... etc

最佳答案

这里有一个问题:

while(i < 8)
{
scanf("%lf", &first[i]);
second[i] = first[i] + first[i-1];
i++;
}

当 i 为零时会发生什么?

您的新代码在以下位置有一个差一错误:

second[i - 1] = first[i] + first[i-1];

如果你仔细想想,第二个元素永远不会被写入。

关于c - 意外输出 - 编程练习 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6329515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com