Посчитать сколько отрицательных чисел получится в данной последовательности - C (СИ)
Формулировка задачи:
Добрый вечер.
Помогите с программой на динамические массивы, заранее спасибо.
Даны действительные числа a1, а2, ..., аn.(n<50).
Получить такую последовательность b1, b2, ..., bn, где b1=a1, b2=a1+a2, bn=a1+a2+...+an.
Посчитать сколько отрицательных чисел получится в данной последовательности.
Решение задачи: «Посчитать сколько отрицательных чисел получится в данной последовательности»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int *a;
int *b;
int arr_sz;
int neg_count = 0;
int i;
srand(time(NULL));
printf("Ââåäèòå Г°Г*çìåð Г¬Г*ññèâîâ: ");
scanf("%i", &arr_sz);
a = malloc(arr_sz*sizeof(int));
b = malloc(arr_sz*sizeof(int));
printf("ГЊГ*Г±Г±ГЁГў a:\n");
for (i = 0; i < arr_sz; i++)
{
a[i] = rand() % 100 - 50;
printf("%4i ", a[i]);
}
printf("\n\nГЊГ*Г±Г±ГЁГў b:\n");
b[0] = a[0];
if (b[0] < 0)
neg_count++;
printf("%4i ", b[0]);
for (i = 1; i < arr_sz; i++)
{
b[i] = a[i] + b[i-1];
printf("%4i ", b[i]);
if (b[0] < 0)
neg_count++;
}
printf("\n\nÊîëè÷åñòâî îòðèöГ*òåëüГ*ûõ ýëåìåГ*òîâ Гў Г¬Г*Г±Г±ГЁГўГҐ b: %i\n", neg_count);
free(a);
free(b);
return 0;
}
Объяснение кода листинга программы
В данном коде на языке C выполняется следующая последовательность действий:
- Связывание переменных:
- Переменная
aобъявляется как указатель на целочисленный массив размеромarr_sz. - Переменная
bобъявляется как указатель на целочисленный массив размеромarr_sz. - Переменная
arr_szинициализируется значением, введенным пользователем через функциюscanf(). - Переменная
neg_countинициализируется нулевым значением и будет использоваться для подсчета количества отрицательных чисел в массивеb. - Переменная
iиспользуется как счетчик в циклах. - Функция
srand()инициализирует генератор случайных чисел текущим временем.
- Переменная
- Заполнение массива a случайными числами:
- Цикл
forзаполняет массивaarr_szслучайными целыми числами от -50 до 50 с шагом 1. - Каждое сгенерированное число присваивается элементу массива
a[i]и выводится на экран с помощью функцииprintf().
- Цикл
- Заполнение массива b:
- Первый элемент массива
bинициализируется значением первого элемента массиваa. - Если первый элемент массива
bотрицательный, то переменнаяneg_countувеличивается на 1. - Цикл
forзаполняет оставшиеся элементы массиваbпутем добавления к каждому элементу значения соответствующего элемента массиваa. - После заполнения массива
b, выводится на экран значение переменнойneg_count, которая показывает количество отрицательных чисел в массивеb.
- Первый элемент массива
- Освобождение памяти:
- Функции
free()освобождают память, выделенную под массивыaиb.
- Функции
- Возврат значения 0:
- В конце программы возвращается значение 0, что означает успешное выполнение программы.