Другие языки программирования и технологии

Помогите с написание программы СИ (С комментариями пожалуйста )

Дан массив целых чисел размерности n (n вводится с клавиатуры). В
случае, если элементы, стоящие на нечетных индексах образуют
возрастающую последовательность, получить среднее арифметическое
четных элементов, иначе – количество положительных элементов.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_SIZE 50 // Максимальный размер массива.

int main() {
    int arr[MAX_SIZE]; // Массив с запасом на MAX_SIZE элементов.
    printf("Enter the number of elements (max allowed is %d):\n", MAX_SIZE);
    int n;
    scanf("%d", &n); // Считываем n с клавиатуры.
    srand((unsigned)time(NULL)); // Инициализируем генератор случайных чисел.
    // Заполняем массив случайными числами из диапазона [-10;50] и выводим его.
    for (int i = 0; i < n; i++) {
        arr[i] = -10 + rand() % 61;
        printf("%d ", arr[i]);
    }
    printf("\n");
    int ascending = 1; // Флаг true, предполагаем, что последовательность возрастающая.
    for (int i = 3; i < n; i += 2)
        // Если нарушено условие возрастания, то устанавливаем флаг в false и прекращаем цикл.
        if (arr[i] < arr[i - 2]) {
            ascending = 0;
            break;
        }
    if (ascending) {
        int evenCount = 0, sum = 0;
        for (int i = 0; i < n; i++)
            if (arr[i] % 2 == 0) {
                ++evenCount;
                sum += arr[i];
            }
        if (evenCount)
            printf("Average of even elements: %lf\n", sum / (double)evenCount);
        else
            printf("Array has no even elements\n");
    } else {
        int positiveCount = 0;
        for (int i = 0; i < n; i++)
            positiveCount += arr[i] > 0;
        printf("Number of positive elements: %d\n", positiveCount);
    }
    return 0;
}
Михаи Малкига
Михаи Малкига
20 861
Лучший ответ
#include "stdio.h"/*Подключение библиотеки стандартного ввода/вывода данных. */ /*Заменить " " на < >*/
#include "conio.h"/*Подключение дополнительной библиотеки ввода/вывода данных. */ /*Заменить " " на < >*/

int main()
{
int* A;/*Указатель на целочисленный маасив A*/
int n;/*Количество элементов массива. */
int i;/*Итератор циклов. */
int s; int c; int cp;/*Сумма четных элементов; Количество чётных элементов; Количество положительных элементов массива. */
int ap; int b;/*Значение предыдущего элемента массива с нечётным индексом; Параметр b. 1 - Последовательность элементов массива с нечётными индексами возрастающая, 0 - убывающая. */

/*Ввод количества элементов массива, с проверкой на корректность. */
/*Программа будет запрашивать ввод нового значения, до тех пор, пока оно не будет больше двух. */
printf("Количество элементов массива должно быть больше двух. \n");
do
{
printf("Введите количество элементов массива:");
scanf("%d", &n);/*Сохранение введенного значения в переменной n.*/
} while (n < 3);/*Цикл повториться, если n < 3.*/
/*Индексы элементов массива [1;n].*/
A = (int*) malloc((n + 1) * sizeof(int));/*Выделение памяти под массив целочисленных элементов. */
s = 0; c = 0; cp = 0;/*Сумма четных элементов; Количество чётных элементов; Количество положительных элементов массива. */
for (i = 1; i <= n; i++)/*Цикл по всем элементам массива A.*/
{
printf("A[%d]=", i);/*Вывод на экран номера текущего элемента массива. */
scanf("%d", A + i);/*Считывание с клавиатуры значения текущего элемента массива*/

if (A[i] % 2 == 0)/*Проверка текущего элемента массива на чётность. */
{
s += A[i];/*Увеличение суммы чётных элементов массива на значение текущего четного элемента массива. */
c++;/*Увеличение счетчика чётных элементов массива на единицу. */
}

if (A[i] > 0)/*Проверка текущего элемента массива на положительность. */
cp++;/*Увеличение счётчика положительных элементов на единицу. */
}

ap = A[1]; b = 1;/*Значение предыдущего элемента массива с нечётным индексом; Параметр b. 1 - Последовательность элементов массива с нечётными индексами возрастающая, 0 - убывающая. */
for (i = 3; i <= n; i += 2)/*Цикл по нечётным элементам массива. */
{
if (A[i] <= ap)/*Если текущий элемент массива с нечётным индексом меньше значения предыдущего: */
b = 0;/*Параметру b присваивается нулевое значение. */
ap = A[i];/*Значению предыдущего элемента массива с нечётным индексом присваивается значение текущего элемента массива с нечётным индексом. */
}

if (b == 1)/*Если последовательность элементов массива с нечетными индексами возрастающая. */
printf("%.3f", (float)s / c);/*Вывод на экран среднего арифметического чётных элементов массива. "(float)s" - явное приведение типа переменной s к типу float. Необходимо, для не целочисленного деления. */
else/*Если последовательность элементов массива с нечетными индексами убывающая. */
printf("%d", cp);/*Вывод на экран количества положительных элементов массива*/

free(A);/*Освобождение памяти, занимаемой динамическим массивом A*/
printf("\nНажмите клавишу Enter для завершения работы программы.");
getch();/*Приложение не завершит работы, пока не будет нажата клавиша Enter.*/
return 0;
}
Alexx G
Alexx G
11 953