Сформировать массив B из отрицательных элементов массива A, имеющих четный индекс. Найти сумму квадратов элементов нового массива

Я не совсем понимаю как сформировать второй массив из первого

Вот условия задачи: Дан массив A вещественного типа, содержащий n положительных и отрицательных элементов [-5, 5]. Сформировать массив B из отрицательных элементов массива A, имеющих четный индекс. Найти сумму квадратов элементов нового массива.

Вот что у меня получилось написать. Помогите дорешить, пожалуйста

В результате выполнения он выводит последнее, подходящее по условиям число, столько раз сколько встретились подходящие числа

#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <time.h>
#include <math.h>
#include <stdlib.h>

main()
{
    srand(time(NULL));
    setlocale(LC_ALL,"");
    
    int n,i=0,rand();
    
    printf("Введите_размер_массива: ");
    scanf("%d", &n);

    
    float a[n];
    
    printf("\nСгенерированный_массив: ");
    
    for (i=0; i<=n; i++)
    {   

        a[i]= -5 + rand()%10 * 1.153;
        printf("%.2f\t", a[i]);
    }
    
    int k=0;
    float b[k];
    
    for (i=0; i<=n; i++)
    {   
        if ((i%2==0)&&(a[i]<0))
        { 
            k++;
            b[k]=a[i];
            
        }
               
        
    }   

    printf("\nПолученныи_массив:      ");
    
    for (i=0; i<k; i++)
    {   

        printf("%.2f\t", b[k]);
    }
}


Ответы (1 шт):

Автор решения: markls

Чтобы сформировать из первого массива второй, нужно сначала пройтись по первому массиву и посчитать количество нужных нам элементов (в моём коде это делает ф-ция count). После этого мы создаем второй массив и начинаем его заполнять, вновь перебирая элементы первого массива и подбирая нужные нам (в моём коде это делается сразу после того, как выделяется память для массива b).

На основании предоставленного кода сделал этот. Ответ получается верный.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <time.h>
#include <math.h>
#include <stdlib.h>

int count(float* a, int n) // считает количество нужных нам элементов
{
    int count = 0;
    for (int i = 0; i < n; i += 2)
    {
        if (a[i] < 0) count++;
    }
    return count;
}

main()
{
    srand(time(NULL));
    setlocale(LC_ALL, "");
    int n;

    printf("Введите размер массива: ");
    scanf("%d", &n);


    float* a = malloc(n * sizeof(float));
    printf("\nСгенерированный_массив: ");

    for (int i = 0; i < n; i++)
    {

        a[i] = -5 + rand() % 10 * 1.153;
        printf("%.2f\t", a[i]);
    }
    int i = 0;
    int k = count(a, n);
    float* b = malloc(sizeof(float) * k);
    for (int j = 0; j < k)
         if (a[j] < 0)
              b[i++] = a[j];

    printf("\nПолученныи_массив:      ");
    float sum = 0; // искомый ответ
    for (int i = 0; i < k; i++) // тут же можно подсчитать ответ.
    {
        printf("%.2f\t", b[i]);
        sum += b[i] * b[i];
    }
    printf("\nПолученный ответ: %.2f", sum);
}
→ Ссылка