Написать функцию выводящую максимальный элемент в массиве и его индекс через указатель - C (СИ)
Формулировка задачи:
Здравствуйте ! Помогите пожалуйста решить задачу - требуется написать функцию, находящую максимум массива и его индекс. С первой частью вроде бы справился, а вот как быть с индексом ?
#define _CRT_SECURE_NO_WARNINGS
#define size 10
#include <stdio.h>
#include <math.h>
void max_index(int *, int);
void max_index(int * arr, int i)
{
int *max = arr;
int *index_max = &i;
*index_max = 0;
for (i = 0; i <= size - 1; i++) {
printf("arr[%d]= ", i);
scanf("%d", arr + i);
if (arr[i] > *max)
max = &arr[i];
*index_max = i;
}
printf("%d %d\n", *max,*index_max);
}
main(void)
{
int arr[size], i;
for (i = 0; i <= size - 1; i++) {
max_index(arr, i);
return 0;
}
}
Видимо недостаточно акцентировал на том, что максимум и индекс нужно найти через указатель....(Если я превращаю index_max в int - все работает....)
Решение задачи: «Написать функцию выводящую максимальный элемент в массиве и его индекс через указатель»
textual
Листинг программы
#include <stdio.h>
void max_index(int *a, int n, int *max, int* index_max) {
*max = *a;
*index_max = 0;
for (int* i = a + 1; --n > 0; i++) {
if (*i > *max) {
*max = *i;
*index_max = i - a;
}
}
}
int main(void) {
int max, index_max;
int arr[] = { 1, 2, 0, 9, 3, 4, 8, 7, 5, 6 };
max_index(arr, sizeof(arr) / sizeof(arr[0]), &max, &index_max);
printf("%d %d\n", max, index_max);
return 0;
}
Объяснение кода листинга программы
- Объявление функции
max_index, которая принимает три аргумента: массивa, его размерnи указатели на переменныеmaxиindex_max. - Инициализация переменных
maxиindex_maxзначением первого элемента массива и нулевым индексом соответственно. - В цикле
forитерируемся по массиву, начиная со второго элемента. - Сравниваем текущий элемент с переменной
max. Если текущий элемент большеmax, то обновляем значенияmaxиindex_max. - В конце функции возвращаем значение
maxиindex_max. - В функции
mainсоздаем массивarrи вызываем функциюmax_index, передавая ей этот массив, его размер и указатели на переменныеmaxиindex_max. - Выводим на экран значения
maxиindex_max. - Возвращаем 0, чтобы указать, что программа успешно завершилась.