Динамическая память. Массивы - 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;
}

Объяснение кода листинга программы

  1. Объявление переменных:
    • n (размер массива а)
    • a (указатель на массив a[])
    • b (указатель на массив b[])
  2. Проверка размера массива a[], чтобы он был больше 0.
  3. Выделение памяти под массив a[] с помощью malloc().
  4. Заполнение массива a[] значениями и подсчет количества положительных чисел.
  5. Проверка размера массива b[] (количество положительных чисел), чтобы он был больше 0.
  6. Выделение памяти под массив b[] с помощью malloc().
  7. Заполнение массива b[] положительными числами из массива a[].
  8. Вывод на экран массива a[] и массива b[] для наглядности.
  9. Освобождение памяти, занятой массивами a[] и b[].
  10. Возврат 0, что означает успешный конец программы.

Оцени полезность:

6   голосов , оценка 3.5 из 5
Похожие ответы