我是C语言和计算机编程的初学者。我一直在努力解决小问题,以增强我的技能。最近,我试图解决一个问题,即输入将决定它将具有的系列数量,并添加一个系列的第一个和最后一个数字。我的代码无效,我已经试了几个小时。任何人都可以帮我解决吗?
这是我到目前为止所尝试的内容。
#include<stdio.h>
int main()
{
int a[4];
int x, y, z, num;
scanf("%d", &num);
for (x = 1; x <= num; x++) {
scanf("%d", &a[x]);
int add = a[0] + a[4];
printf("%d\n", a[x]);
}
return 0;
}
答案 0 :(得分:7)
从你的描述中可以清楚地看出,你应该不关心中间数字第一个和最后一个。
由于你只想添加第一个和最后一个,你应该先从输入中获取第一个,然后等待最后一个数字,然后保存第一个。这意味着您不需要数组来保存其余数字,因为您无论如何都不会使用它们。
我们甚至可以在不知道系列的长度的情况下完成这项工作,但由于提供了它,我们将使用它。
#include<stdio.h>
int main()
{
int first, last, num, x = 0;
scanf("%d", &num);
scanf("%d", &first);
last = first; //for the case of num=1
for (x = 1; x < num; x++) {
scanf("%d", &last);
}
int add = first + last;
printf("%d\n", add);
return 0;
}
这里发生的是,在我们从num读取值后,我们立即扫描第一个数字。然后,我们扫描剩余的num-1数字(注意for循环如何从1运行到num-1)。
在每次迭代中,我们覆盖我们读取的“最后”数字,当for循环结束时,系列中的最后一个实际上是我们读到的最后一个。
所以这个输入:
4 1 5 5 1
我们得到输出:
2
一些注意事项:请注意我在读完第一个数字后如何添加last = first。这是因为在num为1的情况下,for循环将永远不会迭代(即使它确实没有任何东西可以读取)。因此,在num为1的情况下,合理地假设第一个数字也是最后一个。
另外,我注意到您的代码存在一些误解:请记住,C中的数组从0开始,不是 1.因此,声明为[4]的数组的位置为[0],a [1],a [2]和[3] ]。访问[4],如果有效,将导致未定义的行为(例如,添加不在输入中的数字)。
值得注意的是(正如评论中所指出的),你从一开始就声明你的数组大小为4,所以你最终假装输入是4个数字而不管它实际是什么。只有当你已经知道输入大小为4时才有意义。既然你没有,你应该在读完大小后声明它。
此外,有些人试图在for循环中添加结果。这意味着你试图在你的结果中添加[0] + a [3] 4次,在阅读[3]之前添加3,在阅读之后添加1 [3]。这里正确的方法当然是在完成循环输入后尝试添加(正如评论中指出的那样)。
答案 1 :(得分:0)
我知道你的意思,根据要求,这是我在完成任务时所做的尝试。希望这会有所帮助:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int first, last, num, x=0;
int add=0;
printf("What is the num value?\n");//num value asked (basically the
index value)
scanf("%d", &num);//value for num is stored
printf("What is the first number?\n");
scanf("%d", &first);
if (num==1)
{
last=first;
}
else
{
for (x=1;x<num;x++)
{
printf("Enter number %d in the sequence:\n", x);
scanf("%d", &last);
}
add=(first+last);
printf("Sum of numbers equals:%d\n", add);
}
return 0;
}