我刚刚学习了数组的工作原理,并试图在数组中找到最大的元素,但是我无法将所需的所有值都放入数组中。 我尝试过这种方式:
int x[10];
for (i = 1; i <= 10; i++)
{
printf("please enter a number: ");
scanf_s("%d", x[i]);
}
下面是整个程序
#include <stdio.h>
int main(void)
{
int i = 1;
int max, min;
int x[10];
for (i = 1; i <= 10; i++)
{
printf("please enter a number: ");
scanf_s("%d", x[i]);
}
for (i = 1; i <= 10; i+2)
{
if (x[i] > x[i + 1])
max = x[i];
else
max = x[i + 1];
}
for (i = 1; i <= 10; i + 2)
{
if (x[i] < x[i + 1])
min = x[i];
else
min = x[i + 1];
}
printf("max = %d , min = %d", max, min);
return 0;
}
答案 0 :(得分:2)
在C中,像您一样,声明数组时使用其元素数,例如int x[10];
。不过,您可以从x[0]
开始访问其元素。由于存在10
个元素,所以最后一个元素是x[9]
。
因此,您的for
循环应如下所示:
for(i=0; i<10; i++)
此外,scanf_s()
要求提供地址以放置数据。如果将x[i]
传递给scanf_s()
,则意味着您传递的是int
,尽管它需要int *
(指向int
的指针)。
scanf_s("%d", &x[i]);
更进一步,for
循环中的第三个表达式是一条指令,它将在控件到达for
块的末尾时立即执行。也许i+2
是一个错字,但是您应该将其替换为i++
,以在每次迭代时增加i
的值。
最后,您只比较数组中的相邻元素。这不会给您最小和最大元素。您应该首先将这些变量初始化为数组中的第一个元素(x[0]
),然后循环遍历数组的其余部分,从i=1
开始,并更新min
和{仅在当前元素max
分别低于或高于x[i]
和min
的情况下,{1}}。
将所有内容放在一起:
max
答案 1 :(得分:1)
首先,数组索引从 C 中的0开始。因此,当您声明int x[10]
时,
而您想遍历此数组,则必须执行以下操作
for (i = 0; i < 10; i++)
{
x[i];
}
似乎scanf_s
出错了,尽管我不知道如何声明scanf_s
。
如果它与scanf
相同,则可能是
for (i = 0; i < 10; i++)
{
printf("please enter a number: ");
scanf("%d", &x[i]);
}
最后,找到最大元素和最小元素的算法无法按预期工作。应该是
for (max = x[0], i = 1; i < 10; i++)
{
if (x[i] > max)
max = x[i];
}
for (min = x[0], i = 1; i < 10; i++)
{
if (x[i] < min)
min = x[i];
}
答案 2 :(得分:0)
最大和最小可以写得更优雅。
int main(){
int i = 1;
int max, min;
int x[10];
for (i = 0; i < 10; i++) {
printf("please enter a number: ");
scanf("%d", &x[i]);
printf("%d\n", x[i]);
}
min = x[0];
max = x[0];
for (i = 1; i < 10; i++) {
if (max < x[i]) {
max = x[i];
}
if (min > x[i]) {
min = x[i];
}
}
printf("max = %d , min = %d", max, min);
return 0;
}
答案 3 :(得分:0)
简单来说, 您已经声明了一个由10个元素组成的数组,但是您的for循环仅迭代9次。 这是因为您的for循环从x = 1到x <= 10,即,当x值为1,2,3,... 8,9且因此仅9倍(小于1时,循环将运行并接受元素)你想要什么)。 您有两种解决方案 1)声明x范围从x = 1到x = 10 但是由于数组以0开头,所以更好的解决方案是 2)声明x范围从x = 0到x <= 10 希望这会有所帮助。