В динамический двумерный массив неверно вводятся элементы

Задача: дана группа из N учащихся. Для них известны оценки по четырём предметам, и нужно найти их среднее арифметическое (суммирование оформить ИМЕННО в подпрограмме).

#include "iostream"
#include "stdlib.h"
#include "math.h"

void arithmetical_mean(int(arr)[4], int i) {
    double avg = (arr[1] + arr[2] + arr[3] + arr[0]) / 4;
    printf("Student %d: %.2lf", i, avg);
}

int main(int argc, char* argv[])
{
    setlocale(LC_CTYPE, "RUSSIAN");
    int N;
    printf("Введите N");
    scanf_s("%d", &N);

    int **grades =(int**)calloc(N, sizeof(int*));
    for (int i = 0; i < N; i++)
        grades[i] = (int*)calloc(4, sizeof(int));
    printf("Введите оценки: Математика");
    for (int i = 1; i <= N; i++)
        scanf_s("%d", &grades[i,0]);
    printf("Введите оценки: Физика");
    for (int i = 1; i <= N; i++)
        scanf_s("%d", &grades[i,1]);
    printf("Введите оценки: Химия");
    for (int i = 1; i <= N; i++)
        scanf_s("%d", &grades[i,2]);
    printf("Введите оценки: Информатика");
    for (int i = 1; i <= N; i++)
        scanf_s("%d", &grades[i,3]);
    for (int i = 1; i <= N; i++)
        printf("DEBUG: %d %d %d %d\n", grades[i,0], grades[i,1], grades[i,2], grades[i,3]);
    for (int i = 1; i <= N; i++)
        arithmetical_mean(grades[N], i);
    return 0;
    }

Проблема становится заметной на строке printf("DEBUG: ..., где выводятся все элементы массива. Например, N=3, и из первого цикла вводятся числа 1 2 3, из второго - 4 5 6, из третьего - 5 8 3, из четвёртого - 3 1 4, то выводятся 3 одинаковых строки - DEBUG: 3 6 3 4 (т.е. последние элементы каждого).

В чём может быть проблема? Буду благодарен, если кто заметит недочеты.


Ответы (0 шт):