使用for循环将值输入数组

时间:2018-12-24 01:56:08

标签: c arrays

我刚刚学习了数组的工作原理,并试图在数组中找到最大的元素,但是我无法将所需的所有值都放入数组中。 我尝试过这种方式:

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;
}

4 个答案:

答案 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)

  1. scraf必须通过裁判。
  2. 最大和最小可以写得更优雅。

    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 希望这会有所帮助。