#include <stdio.h>
#include "stdlib.h"
int input_array(int a, int* b){
b = (int*) malloc(a * sizeof(int));
for (int i = 0; i < a; ++i) {
printf("array[%d] = ", i);
scanf("%d", *(b+i));
}
return b;
}
int find_min(int* b, int a){
int min = *b;
for (int i = 1; i < a; ++i) {
if (*(b+i) < min)
min = *(b+i);
}
return min;
};
int find_max(int* b,int a){
int max = *b;
for (int i = 1; i < a; ++i) {
if (*(b+i) > max)
max = *(b+i);
}
return max;
}
float average_function(int min, int max){
float average = (min + max)/2;
return average;
}
int main() {
int a, min, max;
float average;
int* b = NULL;
printf("Введите длину массива:");
scanf("%d", &a);
input_array(a, b);
find_min(b, a);
find_max(b,a);
average_function(min, max);
printf("Минимум: ""%d \n", min);
printf("Максимум: ""%d \n", max);
printf("Среднее: ""%f \n", average);
free(b);
return 0;
}
Почему возникает ошибка
scanf("%d", *(b+i));
b = (int*) malloc(a * sizeof(int));
) и даже пытается её возращать, но неправильным типом и main это значение не использует. А поэтому в main b как был NULL так и остаётся. По-хорошему надо как-то так:int * input_array(int a){
int *b = (int*) malloc(a * sizeof(int));
for (int i = 0; i < a; ++i) {
printf("array[%d] = ", i);
scanf(" %d", b+i);
}
return b;
}
int main() {
...
printf("Введите длину массива:");
scanf(" %d", &a);
int *b = input_array(a);
min = find_min(b, a);
max = find_max(b,a);
average = average_function(min, max);
...
}