Вывести в обратном порядке наибольший элемент последовательности - C (СИ)
Формулировка задачи:
По форуму искал нашёл только вывод с массивами, а мне надо без, по этому прошу помощи тут
Имеется последовательность произвольных целых ненулевых чисел, завершающаяся числом 0(число 0 в последовательность не входит). Количество элементов в последовательности заранее неизвестно.Напечатать в обратном порядке наибольший элемент последовательности
Решение задачи: «Вывести в обратном порядке наибольший элемент последовательности»
textual
Листинг программы
#include <stdio.h>
int getMax(FILE* stream) {
int val, max = 0;
if ((fscanf(stream, "%d", &max) == 1) && max) {
while ((fscanf(stream, "%d", &val) == 1) && val) {
if (max < val) {
max = val;
}
}
}
return max;
}
void printRev(int val) {
printf("%d", val % 10);
if (9 < val) {
printRev(val / 10);
}
}
int main() {
printRev(getMax(stdin));
return 0;
}
Объяснение кода листинга программы
Вывод в обратном порядке наибольший элемент последовательности
- Вводится функция
getMax, которая принимает файловый потокstreamи возвращает максимальное значение из последовательности. - Внутри функции
getMaxпеременнойmaxприсваивается значение 0, а затем она инициализируется первым числом из потока. - Затем в цикле
whileсчитываются числа из потока и сравниваются с текущим максимальным значением. Если число больше текущего максима, то оно становится новым максимальным значением. - После выхода из цикла
whileфункция возвращает текущее максимальное значение. - Вводится функция
printRev, которая принимает целое числоvalи выводит его в обратном порядке. - Внутри функции
printRevиспользуется рекурсия для вывода числа в обратном порядке. Если число больше 9, вызывается функцияprintRevдля вывода оставшейся части числа. - В функции
mainвызывается функцияgetMaxс аргументомstdin, который представляет собой стандартный ввод. - Затем вызывается функция
printRevс аргументом, равным результату функцииgetMax. - Наконец, функция
mainвозвращает 0, что означает успешное завершение программы.