Ошибка в инициализации массива указателей на функции - C (СИ)
Формулировка задачи:
Как правильно инициализировать массив указателей на функции?
Компилятор указывает ошибку в этой строчке после знака равно
void (*processGrades[4]) (int(*)[4], int, int) = (f0, f1, f2, f3);
#include <stdio.h> #define STUDENTS 3 #define EXAMS 4 void f0 (const int [][EXAMS], int, int); void f1 (const int [][EXAMS], int, int); void f2 (const int [][EXAMS], int, int); void f3 (const int [][EXAMS], int, int); int main () { int a; void (*processGrades[4]) (int(*)[4], int, int) = (f0, f1, f2, f3); int studentsGrades [STUDENTS] [EXAMS] = {{77, 68, 86, 73}, {96, 87, 89, 78}, {70, 90, 86, 81}}; printf ("\n0 - massiv ocenok\n1 - min ocenka\n2 - max ocenka\n3 - sredny ocenka po vsem testam dly kagdogo studenta\n4 - viti iz programmi\n"); scanf ("%d", &a); while (a >= 0 && a < 4) { (*processGrades[a])(studentsGrades, STUDENTS, EXAMS); printf ("\n0 - massiv ocenok\n1 - min ocenka\n2 - max ocenka\n3 - sredny ocenka po vsem testam dly kagdogo studenta\n4 - viti iz programmi\n"); scanf ("%d", &a); } printf ("You entered 4 to end\n"); return 0; } /* Выводит массив оценок */ void f0 (const int grades [][EXAMS], int peoplse, int tests) { int i, j; printf (" [0] [1] [2] [3]"); for (i = 0; i <= peoplse - 1; i++) { printf ("\nstudentGrades[%d] ", i); for (j = 0; j <= tests - 1; j++) printf("%-5d", grades[i][j]); } } /* Выводит минимальную оценку */ void f1 (const int grades [][EXAMS], int peoplse, int tests) { int i, j, lowGrade = 100; for (i = 0; i <= peoplse - 1; i++) for (j = 0; j <= tests -1; j++) if (grades[i][j] < lowGrade) lowGrade = grades[i][j]; printf("Lowest grade: %d\n", lowGrade); } /* Выводит максимальную оценку */ void f2 (const int grades [][EXAMS], int peoplse, int tests) { int i, j, highGrade = 0; for (i = 0; i <= peoplse - 1; i++) for (j = 0; j <= tests -1; j++) if (grades[i][j] < highGrade) highGrade = grades[i][j]; printf("Highest grade: %d\n", highGrade); } /* Выводит среднюю оценку для каждого студента */ void f3 (const int grades [][EXAMS], int peoplse, int tests) { int j, i, total = 0; for (j = 0; j <= peoplse - 1; j++) { for (i = 0; i <= tests - 1; i++) total += grades [j][i]; printf ("The average grade for students %d is %d\n", i, total); total = 0; } }
Решение задачи: «Ошибка в инициализации массива указателей на функции»
textual
Листинг программы
void (*processGrades[]) (const int[][EXAMS], int, int) = {f0, f1, f2, f3}; const int studentsGrades [STUDENTS] [EXAMS] = {{77, 68, 86, 73}, {96, 87, 89, 78}, {70, 90, 86, 81}};
Объяснение кода листинга программы
- Объявляется массив указателей на функции с именем processGrades.
- В качестве инициализации для этого массива перечисляются функции f0, f1, f2, f3.
- Объявляется массив с именем studentsGrades, который состоит из STUDENTS строк, каждая из которых, в свою очередь, состоит из EXAMS элементов.
- Каждая строка массива studentsGrades инициализируется значениями, представляющими оценки студентов.
- Первая строка массива studentsGrades инициализируется значениями {77, 68, 86, 73}.
- Вторая строка массива studentsGrades инициализируется значениями {96, 87, 89, 78}.
- Третья строка массива studentsGrades инициализируется значениями {70, 90, 86, 81}.
- Массив studentsGrades содержит оценки студентов по четырем экзаменам.
- Массив processGrades содержит указатели на функции, которые будут использоваться для обработки оценок студентов.
- Функции f0, f1, f2, f3 предназначены для обработки оценок студентов в соответствии с определенными правилами или алгоритмами.
- Значения переменных STUDENTS и EXAMS определяют размер массива studentsGrades и количество экзаменов соответственно.
- Значения переменных f0, f1, f2, f3 являются адресами функций, которые будут вызываться для обработки оценок студентов.
- Значения переменных 77, 68, 86, 73, 96, 87, 89, 78, 70, 90, 86, 81 являются оценками студентов по различным экзаменам.
- Каждая оценка представляет собой результат, полученный студентом по соответствующему экзамену.
- Массив processGrades используется для вызова функций, которые будут обрабатывать оценки студентов в соответствии с определенными правилами или алгоритмами.
- Каждый элемент массива processGrades содержит указатель на функцию, которая будет вызываться для обработки оценок студентов.
- Функции, на которые указывают элементы массива processGrades, могут выполнять различные операции, такие как расчет среднего значения, определение максимальной или минимальной оценки и т. д.
- Значения переменных 77, 68, 86, 73, 96, 87, 89, 78, 70, 90, 86, 81 являются входными данными для функций, на которые указывают элементы массива processGrades.
- Результатом работы функций, на которые указывают элементы массива processGrades, могут быть измененные значения оценок студентов или другие результаты, в зависимости от правил или алгоритмов, определенных для каждой функции.
- Значения переменных STUDENTS и EXAMS могут быть изменены в процессе работы программы, что может привести к изменению размера массива studentsGrades и количества экзаменов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д