Как сделать, чтобы макрос передавал значения (нужно вывести максимум через переменную)? - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д