Программа компилируется, но при выполнении крашится - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача состоит в том, чтобы заполнить массив t1[N] случайными числами, а после задать каждому элементу массива t2[(N-1)/2] значение, которое является средним арифметическим значений пар соседних элементов из t1[N]. Написал код, но после запуска вылетает окно „Прекращена работа программы“, и на этом всё заканчивается. Использую Code::Blocks, но, может, проблема в коде?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
    srand(time(NULL));
    int N;
    printf("Podaj rozmiar tablicy: ");
    scanf("%d", &N);
    int t1[N];
    int t2[(N + 1) / 2];
 
    for(int i = 0; i < N; i++)
    {
        t1[i] = 55 + rand() % 112;
        printf("%d\n", t1[i]);
    }
 
    int c = 0;
 
    if(N % 2 == 0)
    {
        for(int i = 1; i < N; i + 2)
        {
            t2[c] = (t1[i] + t1[i - 1]) / 2;
            printf("%d\n", t2[с]);
            c++;
        }
    }
    else
    {
        for(int i = 1; i < N - 2; i + 2)
        {
            t2[c] = (t1[i] + t1[i - 1]) / 2;
            printf("%d\n", t2[с]);
            c++;
        }
        t2[((N + 1) / 2) - 1] = t1[N - 1];
        printf("%d\n", t2[((N + 1) / 2) - 1]);
    }
 
    return 0;
}

Решение задачи: «Программа компилируется, но при выполнении крашится»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int sr(int a, int b)
{
    return ( (a + b)/2 );
}
 
int main(void)
{
    srand(time(NULL));
    int N;
    printf("Podaj rozmiar tablicy: ");
    scanf("%d", &N);
    printf("\n");
    int t1[N];
    int t2[(N + 1) / 2];
    for(int i = 0; i < N; i++)
    {
        t1[i] = 550 + rand() % 112;
        printf("%d ", t1[i]);
    }
    printf("\n");
    int  c = 0, i;
    for(i = 1; i < N; i += 2, c++)
    {
        t2[c] = sr(t1[i], t1[i-1]);
        printf("%d ", t2[c]);
    }
    if(N%2==1)
        printf("%d",sr(t1[N-1],t1[N-2]));
    return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Определяем функцию sr, которая складывает два числа и делит их на 2
  3. Задаем размер массива через ввод с клавиатуры
  4. Инициализируем генератор случайных чисел
  5. Создаем массив t1 заданного размера и заполняем его случайными числами от 550 до 661
  6. Создаем массив t2, размер которого на 1 больше, чем половина от N, и заполняем его средними значениями из пары соседних элементов массива t1
  7. Выводим значения массива t2 на экран
  8. Если N нечетное, то выводим последнее значение, которое является результатом применения функции sr к последним двум элементам массива t1
  9. Завершаем программу и возвращаем 0

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы