Расставить указатели - C (СИ)
Формулировка задачи:
Разработайте программу, которая будет вычислять и печатать оценки за тему для трех студентов.
В программе должны быть реализованы, как минимум, следующие функции
- inputData для организации ввода исходных данных;
- average для вычисления среднего арифметического;
- calculateTestMark для вычисления оценки за тест по проценту правильных ответов в каждой попытке;
- calculateLabMark для вычисления оценки за лабораторную работу по оценкам за задачи;
- printTable для печати отчетной таблицы.
Программа работает, но нужна помощь в правильной расстановке указателей
Листинг программы
- #include <stdio.h>
- #include <windows.h>
- #include <math.h>
- #include <locale.h>
- void inputData(int &l1, int &l2, int &P1, int &P2) //ввод данных
- {
- setlocale(LC_ALL, "Russian");
- printf("Оценка за первую задачу:\n");
- scanf("%d", &l1);
- printf("Оценка за вторую задачу:\n");
- scanf("%d", &l2);
- printf("Процент правильных ответов в тесте(первая попытка):\n");
- scanf("%d", &P1);
- printf("Процент правильных ответов в тесте(вторая попытка):\n");
- scanf("%d", &P2);
- }
- int calculateTestMark(int P1, int P2, int &tmark) //тест
- {
- if (P1 > P2)
- P2 = P1;
- else
- P1 = P2;
- if (P1 >= 90)
- tmark = 5;
- if (P1 >= 70 && P1 < 90)
- tmark = 4;
- if (P1 >= 50 && P1 < 70)
- tmark = 3;
- if (P1 < 50)
- tmark = 2;
- return tmark;
- }
- float calculateLabMark(int l1, int l2, float &lmark) //лабораторная
- {
- lmark = (l1*1.0 + l2) / 2;
- return lmark;
- }
- float average(float &av, float lmark, int tmark) //тема
- {
- av = (tmark*1.0 + lmark) / 2;
- return av;
- }
- void printTable(int st1_l1, int st1_l2, int st1_P1, int st1_P2, int st1_tmark,
- float st1_lmark, float st1_av,
- int st2_l1, int st2_l2, int st2_P1, int st2_P2, int st2_tmark, float
- st2_lmark, float st2_av,
- int st3_l1, int st3_l2, int st3_P1, int st3_P2, int st3_tmark, float
- st3_lmark, float st3_av) //таблица
- {
- setlocale(LC_ALL, "Russian");
- printf("№\tЗад.1\tЗад.2\tТест 1\tТест 2\tЛаб.раб. Тест\tТема\n");
- printf("1\t%d\t%d\t%d\t%d\t%.0f\t%d\t%.0f\n", st1_l1, st1_l2, st1_P1, st1_P2, ceil(st1_lmark), st1_tmark, ceil(st1_av));
- printf("2\t%d\t%d\t%d\t%d\t%.0f\t%d\t%.0f\n", st2_l1, st2_l2, st2_P1, st2_P2, ceil(st2_lmark), st2_tmark, ceil(st2_av));
- printf("3\t%d\t%d\t%d\t%d\t%.0f\t%d\t%.0f\n", st3_l1, st3_l2, st3_P1, st3_P2, ceil(st3_lmark), st3_tmark, ceil(st3_av));
- printf("Среднее\t%.1f\t%.1f\t%.0f\t%.0f\t%.1f\t%.1f\t%.0f\n", (st1_l1 + st2_l1 + st3_l1)*1.0 / 3, (st1_l2 + st2_l2 + st3_l2)*1.0 / 3, (st1_P1 + st2_P1 + st3_P1)*1.0 / 3, (st1_P2 + st2_P2 + st3_P2)*1.0 / 3,(st1_lmark + st2_lmark + st3_lmark)*1.0 / 3, (st1_tmark + st2_tmark + st3_tmark)*1.0 / 3, ceil((st1_av + st2_av + st3_av) / 3));
- }
- void main()
- {
- int P1, P2, l1, l2;//входные данные(тест и задачи)
- int tmark; //результат теста
- float av, lmark; //средняя, оценка за лабораторную
- int st1_l1, st1_l2, st1_P1, st1_P2, st1_tmark; //переменные для 1 студента
- int st2_l1, st2_l2, st2_P1, st2_P2, st2_tmark; //переменные для 2 студента
- int st3_l1, st3_l2, st3_P1, st3_P2, st3_tmark; //переменные для 3 студента
- float st1_lmark, st1_av; //переменные для 1 студента
- float st2_lmark, st2_av; //переменные для 2 студента
- float st3_lmark, st3_av; //переменные для 3 студента
- /*действия для 1 студента*/
- inputData(l1, l2, P1, P2);//ввод данных
- st1_tmark = calculateTestMark(P1, P2, tmark);//тест
- st1_lmark = calculateLabMark(l1, l2, lmark);//лабораторная
- st1_av = average(av, lmark, tmark);//среднее
- st1_l1 = l1;
- st1_l2 = l2;
- st1_P1 = P1;
- st1_P2 = P2;
- /*действия для 2 студента*/
- inputData(l1, l2, P1, P2);//ввод данных
- st2_tmark = calculateTestMark(P1, P2, tmark);//тест
- st2_lmark = calculateLabMark(l1, l2, lmark);//лабораторная
- st2_av = average(av, lmark, tmark);//среднее
- st2_l1 = l1;
- st2_l2 = l2;
- st2_P1 = P1;
- st2_P2 = P2;
- /*действия для 3 студента*/
- inputData(l1, l2, P1, P2);//ввод данных
- st3_tmark = calculateTestMark(P1, P2, tmark);//тест
- st3_lmark = calculateLabMark(l1, l2, lmark);//лабораторная
- st3_av = average(av, lmark, tmark);//среднее
- st3_l1 = l1;
- st3_l2 = l2;
- st3_P1 = P1;
- st3_P2 = P2;
- /*вывод таблицы*/
- printTable(st1_l1, st1_l2, st1_P1, st1_P2, st1_lmark, st1_tmark, st1_av,
- st2_l1, st2_l2, st2_P1, st2_P2, st2_tmark, st2_lmark,
- st2_av,
- st3_l1, st3_l2, st3_P1, st3_P2, st3_tmark, st3_lmark,
- st3_av);
- system("pause");
- }
Решение задачи: «Расставить указатели»
textual
Листинг программы
- void inputData(int *l1, int *l2, int *P1, int *P2) //ввод данных
- {
- setlocale(LC_ALL, "Russian");
- printf("Оценка за первую задачу:\n");
- scanf("%d", *l1);
- printf("Оценка за вторую задачу:\n");
- scanf("%d", *l2);
- printf("Процент правильных ответов в тесте(первая попытка):\n");
- scanf("%d", *P1);
- printf("Процент правильных ответов в тесте(вторая попытка):\n");
- scanf("%d", *P2);
- }
Объяснение кода листинга программы
- Установка локали на русский язык с помощью функции setlocale(LC_ALL,
Russian
). - Вывод сообщения
Оценка за первую задачу:
. - Считывание оценки за первую задачу с помощью функции scanf() и сохранение ее в переменной l1.
- Вывод сообщения
Оценка за вторую задачу:
. - Считывание оценки за вторую задачу с помощью функции scanf() и сохранение ее в переменной l2.
- Вывод сообщения
Процент правильных ответов в тесте(первая попытка):
. - Считывание процента правильных ответов в тесте (первая попытка) с помощью функции scanf() и сохранение его в переменной P1.
- Вывод сообщения
Процент правильных ответов в тесте(вторая попытка):
. - Считывание процента правильных ответов в тесте (вторая попытка) с помощью функции scanf() и сохранение его в переменной P2.
- Возврат управления из функции inputData().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д