Как передать в подпрограмму указатель на i-тый элемент массива - C (СИ)
Формулировка задачи:
Итак, есть главная программа, есть подпрограмма, в главной программе осуществляется только вывод и инициализация переменных, в подпрограмме заполнение массива, вычисление количества положительных элементов, и их среднего значения.Тоесть:
1.главная программа(инициализация, первоначальное обьявление)
2.подпрограмма функция
3.главная программа(вывод)
Вопрос, как передать в подпрограмму указатель на i-тый элемент массива X?Динамически выделить память я могу только в главной программе, так веть?Или если использовать malloc в подпрограмме, и в конце подпрограммы не очистить память командой free, память не удалится?Вот интересует как можно организовать передачу итого элемента динамически выделенного массива, или может можно подругому както занести массив в подпрограмму, выполнить операции некоторые с ним, и вытащить потом в гл прогу, и вывести?
#include <stdio.h> #include <conio.h> #include <math.h> #include <alloc.h> void podprog(float x, SX, KX); void main(void) { int SX, KX, i; float *x; SX=0; KX=0; x=(float *)malloc(3*sizeof(float)); printf("Massiv X"); for(i=0;i<3;i++) podprog(&x[i], &SX, &KX, i); for(i=0;i<3;i++) printf("%d ", x[i]); free(x); getch(); } void podprog(float **x, *SX, *KX, i) { *x=1+i; *SX=*SX+1; *KX++; }
В примере нерабочая программа, нужно чтобы заработала, необязятельно подходить именно методом который предложил я, любой подойдётЖду помощи, спасибо большое заранее
Решение задачи: «Как передать в подпрограмму указатель на i-тый элемент массива»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> void procedure(const float* x, int size, int* positive, float* average) { float sum = 0; *positive = 0; for (int i=0; i < size; ++i) { scanf("%f", x+i); if (x[i] > 0) { ++(*positive); sum += x[i]; } if (*positive > 0) *average = sum / *positive; } } int main() { int size = 3; float* arr = (float*)malloc(size*sizeof(*arr)); float average; int positive; procedure(arr, size, &positive, &average); free(arr); printf("%d %f\n", positive, average); return 0; }
Объяснение кода листинга программы
В этом коде есть две переменные-указателя: positive и average. Они указывают на место в памяти, где хранятся значения, которые будут использоваться в функции. В функции procedure происходит следующее:
- Создается переменная sum, которая будет использоваться для хранения суммы элементов массива.
- Переменная positive инициализируется нулем. Она будет использоваться для подсчета количества положительных чисел в массиве.
- Начинается цикл for, который проходит по всем элементам массива.
- В каждой итерации цикла происходит чтение элемента массива с помощью функции scanf и добавление его к переменной sum, если он больше нуля.
- Если количество положительных чисел больше нуля, то переменная average вычисляется как сумма всех положительных чисел, деленная на их количество.
- По завершении цикла, функция возвращает void, то есть ничего не возвращает. В функции main происходит следующее:
- Создается переменная size, которая содержит размер массива.
- Создается переменная arr, которая будет использоваться для хранения адреса начала массива.
- Создаются две переменные: average и positive. Они будут использоваться для хранения значений, которые будут получены из функции procedure.
- Функция procedure вызывается с аргументами arr, size, &positive, &average.
- После выхода из функции procedure, переменные positive и average содержат результаты работы функции.
- Массив arr освобождается с помощью функции free.
- Выводится значение переменных positive и average с помощью функции printf.
- Программа возвращает 0, что означает успешное завершение работы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д