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