Сформировать массив 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 шт):
Чтобы сформировать из первого массива второй, нужно сначала пройтись по первому массиву и посчитать количество нужных нам элементов (в моём коде это делает ф-ция 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);
}