是否可以在C中使用for循环来确定用户输入的值中最小的值而不使用数组?

Is it possible to use a for-loop in C to determine which value is the smallest among those inputted by user without using arrays?

我正在编写一个 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", &value1, &value2, &value3, &value4, &value5, &value6, &value7, &value8, &value9, &value10);

    return 0;
}

我是 C 语言的新手,所以对于其余代码的任何帮助将不胜感激。

不是你写的那样。

如果您要一个一个地输入,那么您可以 运行 跟踪您目前看到的最小值是多少。

简单示例

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

是的,这是可能的,利用 C 中数组和指向数组的指针之间存在 little-to-no 差异这一事实。基本上,您获得指向第一个变量的指针,然后遍历它们,就像就好像它是一个数组。唯一需要注意的是保证变量的已知对齐。为此,您必须将它们放在一个结构中。

我不确定你的要求是只避免声明数组还是完全避免数组语法,所以我在下面的例子中避免了数组语法:

#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", &inputs.v1, &inputs.v2, &inputs.v3, &inputs.v4, &inputs.v5, &inputs.v6, &inputs.v7, &inputs.v8, &inputs.v9, &inputs.v10);

    const int numItems = 10;    // how many inputs do we have
    int *ptr = &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", &inputs.v1, &inputs.v2, &inputs.v3, &inputs.v4, &inputs.v5, &inputs.v6, &inputs.v7, &inputs.v8, &inputs.v9, &inputs.v10);

    const int numItems = 10;    // how many inputs do we have
    int* ptr = &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;
}