是否可以在C中使用for循环来确定用户输入的值中哪一个值最小而不使用数组?
我正在编写一个C程序,在某一点上,要求用户输入10个正整数,然后打印出这10个整数中最小的一个。程序的这一部分不能包括数组的使用,必须包括for循环的使用。我被卡住了,因为据我所知,在C中不可能动态更改变量名。以下是我迄今为止所做的:是否可以在C中使用for循环来确定用户输入的值中哪一个值最小而不使用数组?,c,for-loop,integer,C,For Loop,Integer,我正在编写一个C程序,在某一点上,要求用户输入10个正整数,然后打印出这10个整数中最小的一个。程序的这一部分不能包括数组的使用,必须包括for循环的使用。我被卡住了,因为据我所知,在C中不可能动态更改变量名。以下是我迄今为止所做的: int main() { int value1, value2, value3, value4, value5, value6, value7, value8, value9, value10; printf("Enter 10
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中数组和指向数组的指针之间几乎没有区别的事实。基本上,你得到指向第一个变量的指针,然后遍历它们,就像它是一个数组一样。唯一需要注意的是确保变量的已知对齐。要实现这一点,必须将它们放在结构中 我不确定您的要求是只避免声明数组还是完全避免数组语法,因此我在下面的示例中避免了数组语法:
#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;
}
尝试在循环中获取元素,如int min=1L