Как сделать, чтобы макрос передавал значения (нужно вывести максимум через переменную)? - C (СИ)
Формулировка задачи:
Листинг программы
- #include <stdio.h>
- #include <malloc.h>
- #define MAX_ELEM(count, array) int max=array[0]; for(int j = 0; j < n; ++j){if (array[j] > max){max = array[j];}}
- int main()
- {
- int *a;
- int n, i;
- printf("Input number of array:\n");
- scanf("%d", &n);
- a = (int*)malloc(n * sizeof(int));
- for (i = 0; i<n; i++)
- {
- printf("a[%d] =", i);
- scanf("%d", &a[i]);
- }
- int r = MAX_ELEM(n, a)
- printf("Max=%d\n", r);
- }
Решение задачи: «Как сделать, чтобы макрос передавал значения (нужно вывести максимум через переменную)?»
textual
Листинг программы
- //gcc 5.4.0
- #include <stdio.h>
- #define N 7
- #define MAX_ELEM(arr, size, max) do { \
- max=arr[0]; \
- for(int i = 1; i < size; ++i) \
- if (arr[i] > max) \
- max = arr[i]; \
- } while(0)
- int main(void)
- {
- int r=0;
- int a[N] = {1, 4, 3, 25, 6, 77, 8};
- MAX_ELEM(a, N, r);
- printf("Max=%d\n", r);
- }
Объяснение кода листинга программы
- Включаем файл stdio.h для работы с функциями ввода-вывода
- Объявляем макрос N со значением 7
- Объявляем макрос MAX_ELEM, который принимает три аргумента: arr (массив), size (размер массива) и max (переменная для хранения максимального элемента)
- В теле макроса присваиваем переменной max значение первого элемента массива arr
- С помощью цикла for проходим по всем элементам массива, начиная со второго
- Внутри цикла сравниваем текущий элемент массива с переменной max и если он больше, то присваиваем max значение текущего элемента
- В конце макроса ничего не делаем, поэтому выходим из него с помощью оператора return
- В функции main создаем массив a с семью элементами
- Вызываем макрос MAX_ELEM, передавая в качестве аргументов массив a, его размер N и переменную r
- Значение переменной r будет содержать максимальное значение из массива a
- Выводим значение переменной r на экран с помощью функции printf
- Значение переменной r будет 8, так как это максимальный элемент в массиве a
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д