Динамическая память. Массивы - C (СИ)
Формулировка задачи:
Есть массив А. Нужно сформулировать новый массив Б с индексов положительный элементов массива А.
Я не пойму, как реализовать инициализацию нового масива в цикеле.
#include#include int main() { int *a,*b,n,i; printf("Enter amount:"); scanf("%d",&n); int m=n; a=(int*)calloc(n, sizeof(int)); b=(int*)calloc(m, sizeof(int)); if (!a) { puts("ERROR"); return 1; } printf("Enter elements for A:\n"); for (i=0; i \n"); for (i=0; i \t",*(a+i)); for (i=1; i<=n; i++) { for (int j=1; j<=m;j++) { if (a[j])>0) { (b[i])=j; } } } printf ("Elements of mass B:"); for (i=0; i \t",*(b+i)); } free(a); free(b); return 0; }
Решение задачи: «Динамическая память. Массивы»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> /* ********************************************* * Дан массив А. Нужно сформировать новый массив * Б из положительных элементов массива А. ********************************************* */ int main (void) { int n; // размер массива а printf("n = "); scanf("%i", &n); if (n < 1) return -1; // если размер массива 0 и меньше, конец программы int * a = NULL; // нулевой указатель на массив a /* если не удалось получить память под массив а[], конец программы */ if ((a = (int*)malloc(n*sizeof(int))) == NULL) { printf("Memory allocation error!\n"); return -1; } // заполняем массив a[] значениями и считаем количество положительных int i, c = 0; for (i=0; i<n; i++) { printf("a[%i] = ", i+1); scanf("%i", &a[i]); if (a[i] > 0) c++; // считаем положительные - размер массива b[] } if (c < 1) // проверка размера массива b[] { printf("Hasn't positive numbers.\n"); free(a); return -1; } /* если все проверки прошли успешно, создаем массив b[] */ int * b = NULL; if ((b = (int*)malloc(c*sizeof(int))) == NULL) { printf("Memory allocation error!\n"); free(a); return -1; } // заполняем массив b[] положительными массива a[] int k = 0; for (i=0; i<n; i++) if (a[i] > 0) b[k++] = a[i]; // выводим оба массива на экран для наглядности printf("\narray a[]:\n"); for (i=0; i<n; i++) printf("%i ", a[i]); printf("\n\narray b[]:\n"); for (i=0; i<c; i++) printf("%i ", b[i]); printf("\n"); // освобождаем память, занятую массивами, и выходим: free(a); free(b); return 0; }
Объяснение кода листинга программы
- Объявление переменных:
- n (размер массива а)
- a (указатель на массив a[])
- b (указатель на массив b[])
- Проверка размера массива a[], чтобы он был больше 0.
- Выделение памяти под массив a[] с помощью malloc().
- Заполнение массива a[] значениями и подсчет количества положительных чисел.
- Проверка размера массива b[] (количество положительных чисел), чтобы он был больше 0.
- Выделение памяти под массив b[] с помощью malloc().
- Заполнение массива b[] положительными числами из массива a[].
- Вывод на экран массива a[] и массива b[] для наглядности.
- Освобождение памяти, занятой массивами a[] и b[].
- Возврат 0, что означает успешный конец программы.