Программа компилируется, но при выполнении крашится - 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;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем функцию sr, которая складывает два числа и делит их на 2
- Задаем размер массива через ввод с клавиатуры
- Инициализируем генератор случайных чисел
- Создаем массив t1 заданного размера и заполняем его случайными числами от 550 до 661
- Создаем массив t2, размер которого на 1 больше, чем половина от N, и заполняем его средними значениями из пары соседних элементов массива t1
- Выводим значения массива t2 на экран
- Если N нечетное, то выводим последнее значение, которое является результатом применения функции sr к последним двум элементам массива t1
- Завершаем программу и возвращаем 0