Ошибка в инициализации массива указателей на функции - 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 и количества экзаменов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д