是否可以在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;
}
我正在编写一个 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;
}