Ввод значений в массив с помощью цикла for - PullRequest
0 голосов
/ 24 декабря 2018

Я только что узнал, как работают массивы, и я пытаюсь найти максимальный элемент в массиве, но я не могу получить все нужные значения в массиве.Я пробовал так:

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 голосов
/ 25 декабря 2018

Проще говоря, вы объявили массив из 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. Надеюсь, это поможет. </p>

0 голосов
/ 24 декабря 2018

Сначала индекс массива начинается с 0 в C .Поэтому, когда вы объявляете 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];
}
0 голосов
/ 24 декабря 2018

В 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 и max.

Собираем все вместе:

#include <stdio.h>

int main()
{
    int i, max, min, x[10];

    for(i=0; i<10; i++)
    {
        printf("Please enter a number: ");
        scanf_s("%d", &x[i]);
        printf("You entered %d\n", x[i]);
    }

    min = max = x[0];

    for(i=1; i<10; i++)
    {
        if(x[i] < min)
            min = x[i];
        if(x[i] > max)
            max = x[i];
    }

    printf("min = %d, max = %d\n", min, max);

    return 0;
}
0 голосов
/ 24 декабря 2018
  1. scraf должен передать ref.
  2. max и min могут писать более элегантно.

    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;
    

    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...