Определить произведение нечетных элементов, расположенных после последнего отрицательного - C (СИ)
Формулировка задачи:
Помогите описать массив. Тему вроде понял. А как написать программу не очень для данной задачи. Дано натуральное число n и массив натуральных чисел a [1..n]. Определить произведение нечетных элементов, расположенных после последнего отрицательного элемента. Заранее спасибо.
Решение задачи: «Определить произведение нечетных элементов, расположенных после последнего отрицательного»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main( void )
{
unsigned n;
size_t i, j, sum = 0;
int lastNegative = -1;
// ввод размера массива
puts( "Choose size of your array: ");
while( scanf( "%u", &n ) != 1 ) {
puts( "Enter invalid value. Try again!" );
scanf( "%*[^\n]" );
}
// декларация массива
int a[n];
srand( time( NULL ));
for ( i = 0; i < n; ++i ) {
// инициализация массива псевдослучайными числами
a[i] = rand() % 90 - 15;
// поиск последнего отрицательного числа в массиве
if ( a[i] < 0 )
lastNegative = i;
}
// отрицательных чисел не найдено программа завершается
if ( lastNegative < 0 ) {
puts( "Not found negative digits" );
return EXIT_FAILURE;
}
else {
if ( lastNegative % 2 != 0 )
i = lastNegative;
else
i = ( lastNegative + 1 );
// подсчет суммы
while ( i < n ) {
sum += a[i] * a[i + 2];
i += 2;
}
}
// вывод массива и суммы
for ( i = 0; i < n; ++i )
printf( "%4d", a[i] );
printf( "\n%s%zu\n", "Sum is: ", sum );
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
- Ввод размера массива с помощью функции scanf.
- Инициализация массива случайными числами с помощью функции rand() и операторов % и -15.
- Поиск последнего отрицательного числа в массиве с помощью переменной lastNegative.
- Проверка на отсутствие отрицательных чисел в массиве и завершение программы при необходимости.
- Проверка четности/нечетности индекса последнего отрицательного числа и инициализация переменной i.
- Подсчет произведения нечетных элементов, расположенных после последнего отрицательного числа, с помощью цикла while и оператора i += 2.
- Вывод массива и суммы с помощью цикла for и функций printf.
- Возврат значения EXIT_SUCCESS при успешном завершении программы.