#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;
}