Не компилируется код примера из книги - C (СИ)
Формулировка задачи:
/*Списал код с книги. Visio 2012 не может его даже скомпилировать, а GCC не выводит результат(аварийно завершается программа), подскажите в чём дело? */
#include <stdio.h>
#include <conio.h>
#define S 4
#define C 4
int sum(int rows, int cols, int ar[rows][cols]);
void main(void)
{
int x, y;
int rs = 4, we = 5;
int massiv1[S][C] = {
{5, 120, -100, 0},
{20, 120, -30, -1000},
{304, -459, 234, 32432},
{342, -213, 543, -324}
};
int massiv2[S + 2][C - 1] = {
{34, -23, 453},
{543, -213, 546},
{234, 53, -23},
{0 ,543, -3},
{34 ,-45, 213},
{0, 324, -23}
};
int massiv3[x][y];
for(x = 0; x < rs; x++)
for(y = 0; y < we; y++)
massiv3[x][y] = x * y + y;
printf("summa massiv1[4][4] = %d\n", sum(S, C, massiv1));
printf("summa massiv2[6][3] = %d\n", sum(S + 2, C - 1, massiv2));
printf("summa massiv3[4][5] = %d\n", sum(rs, we, massiv3));
getch();
return;
}
int sum(int rows, int cols, int ar[rows][cols])
{
int summa = 0;
int q, a;
for(q = 0; q < rows; q++)
for(a = 0; a < cols; a++)
summa += ar[q][a];
return summa;
}Решение задачи: «Не компилируется код примера из книги»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#define S 4
#define C 4
int sum(int rows, int cols, int ar[rows][cols]);
void main(void)
{
int x, y;
int rs = 4, we = 5;
int massiv1[S][C] = {
{5, 120, -100, 0},
{20, 120, -30, -1000},
{304, -459, 234, 32432},
{342, -213, 543, -324}
};
int massiv2[S + 2][C - 1] = {
{34, -23, 453},
{543, -213, 546},
{234, 53, -23},
{0 ,543, -3},
{34 ,-45, 213},
{0, 324, -23}
};
int massiv3[x][y];
for(x = 0; x < rs; x++)
for(y = 0; y < we; y++)
massiv3[x][y] = x * y + y;
printf("summa massiv1[4][4] = %d\n", sum(S, C, massiv1));
printf("summa massiv2[6][3] = %d\n", sum(S + 2, C - 1, massiv2));
printf("summa massiv3[4][5] = %d\n", sum(rs, we, massiv3));
getch();
return;
}
int sum(int rows, int cols, int ar[rows][cols])
{
int summa = 0;
int q, a;
for(q = 0; q < rows; q++)
for(a = 0; a < cols; a++)
summa += ar[q][a];
return summa;
}
Объяснение кода листинга программы
- Включаются заголовочные файлы stdio.h и conio.h
- Определяются константы S и C, которые представляют количество строк и столбцов в массивах
- Функция sum() определена как функция с именем main()
- В функции main() определены переменные x и y, которые используются для инициализации массива massiv3
- Массив massiv1 инициализируется значениями {5, 120, -100, 0}, {20, 120, -30, -1000}, {304, -459, 234, 32432}, {342, -213, 543, -324}
- Массив massiv2 инициализируется значениями {34, -23, 453}, {543, -213, 546}, {234, 53, -23}, {0 ,543, -3}, {34 ,-45, 213}, {0, 324, -23}
- Переменные x и y инициализируются значениями 4 и 5 соответственно
- Массив massiv3 инициализируется значениями x * y + y
- Вызывается функция sum() для вычисления суммы элементов массива massiv1 с размерами 4x4
- Вызывается функция sum() для вычисления суммы элементов массива massiv2 с размерами 6x3
- Вызывается функция sum() для вычисления суммы элементов массива massiv3 с размерами 4x5
- Выводится сообщение
summa massiv1[4][4] =и значение суммы массива massiv1 - Выводится сообщение
summa massiv2[6][3] =и значение суммы массива massiv2 - Выводится сообщение
summa massiv3[4][5] =и значение суммы массива massiv3 - Функция main() возвращает управление
- Функция sum() принимает три аргумента: int rows, int cols, int ar[rows][cols]
- Внутри функции sum() определена переменная summa, которая инициализируется значением 0
- Два вложенных цикла for перебирают все элементы массива ar[][]
- Внутри циклов переменная summa увеличивается на сумму соответствующих элементов массива ar[][]
- Возвращается значение переменной summa