Можно ли использовать цикл for в C, чтобы определить, какое значение является наименьшим среди введенных пользователем без использования массивов?

#c #for-loop #integer

#c #for-loop #целое число

Вопрос:

Я нахожусь в процессе написания программы на C, которая в какой-то момент просит пользователя ввести 10 положительных целых чисел (целых чисел) и выводит наименьшее число из этих 10. Этот раздел программы не может включать использование массивов и должен включать использование цикла for. Я застрял, потому что, насколько я знаю, невозможно динамически изменять имена переменных в C. Вот что у меня есть на данный момент:

 int main()
{
    int value1, value2, value3, value4, value5, value6, value7, value8, value9, value10;
    
    printf("Enter 10 positive integers.n");
    scanf("%i %i %i %i %i %i %i %i %i %i", amp;value1, amp;value2, amp;value3, amp;value4, amp;value5, amp;value6, amp;value7, amp;value8, amp;value9, amp;value10);

    return 0;
}
  

Я новичок в C, поэтому буду признателен за любую помощь с остальной частью кода.

Комментарии:

1. Попробуйте получить элемент в цикле, например int min=1L<<31-1;for (int i=0;i<10; i) {char s[80];int elem;fgets(stdin,s);sscanf(s,"%i",amp;elem);if (min>elem) {min=elem};};printf("%d",min);

Ответ №1:

Простой пример

 #include <stdio.h>
#include <stdlib.h>
int main(void) {
    int minimum;
    printf("Input 10 space separated integersn");
    if (scanf("%d", amp;minimum) != 1) exit(EXIT_FAILURE);
    for (int j = 0; j < 9; j  ) {
        int value;
        if (scanf("%d", amp;value) != 1) exit(EXIT_FAILURE);
        if (value < minimum) minimum = value;
    }
    printf("minimum value entered was %d.n", minimum);
}
  

Ответ №2:

Не так, как вы это написали.

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

Ответ №3:

Да, это возможно, используя тот факт, что между массивами и указателями на массивы в C. По сути, вы получаете указатель на первую переменную, а затем перебираете их, как если бы это был массив. Единственное, на что следует обратить внимание, — это гарантировать известное выравнивание ваших переменных. Чтобы добиться этого, вы должны поместить их в структуру.

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

 #include <stdio.h>

int main()
{
    struct {
        int v1, v2, v3, v4, v5, v6, v7, v8, v9, v10;
    } inputs;
    
    
    printf("Enter 10 positive integers.n");
    scanf("%i %i %i %i %i %i %i %i %i %i", amp;inputs.v1, amp;inputs.v2, amp;inputs.v3, amp;inputs.v4, amp;inputs.v5, amp;inputs.v6, amp;inputs.v7, amp;inputs.v8, amp;inputs.v9, amp;inputs.v10);

    const int numItems = 10;    // how many inputs do we have
    int *ptr = amp;inputs.v1;      // get pointer to first input
    int smallest = *ptr;        // initialize our result before calculation
      ptr;                      // increment pointer to second element
    for (int i = 1; i < numItems;   i)  // we start from the second element so we start start counting from 1
    {
        // Smallest element calculation
        if (*ptr < smallest)
            smallest = *ptr;

          ptr;
    }

    printf("Smallest number: %i.n", smallest);

    return 0;
}
  

Вот более приятная версия с синтаксисом массива (но все еще не использующая массивы):

 #include <stdio.h>

int main()
{
    struct {
        int v1, v2, v3, v4, v5, v6, v7, v8, v9, v10;
    } inputs;


    printf("Enter 10 positive integers.n");
    scanf("%i %i %i %i %i %i %i %i %i %i", amp;inputs.v1, amp;inputs.v2, amp;inputs.v3, amp;inputs.v4, amp;inputs.v5, amp;inputs.v6, amp;inputs.v7, amp;inputs.v8, amp;inputs.v9, amp;inputs.v10);

    const int numItems = 10;    // how many inputs do we have
    int* ptr = amp;inputs.v1;      // get pointer to first input
    int smallest = ptr[0];      // initialize our result before calculation
    for (int i = 1; i < numItems;   i)  // we start from the second element so we start start counting from 1
    {
        // Smallest element calculation
        if (ptr[i] < smallest)
            smallest = ptr[i];
    }

    printf("Smallest number: %i.n", smallest);

    return 0;
}