Расставить указатели - 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); 
}

Объяснение кода листинга программы

  1. Установка локали на русский язык с помощью функции setlocale(LC_ALL, Russian).
  2. Вывод сообщения Оценка за первую задачу:.
  3. Считывание оценки за первую задачу с помощью функции scanf() и сохранение ее в переменной l1.
  4. Вывод сообщения Оценка за вторую задачу:.
  5. Считывание оценки за вторую задачу с помощью функции scanf() и сохранение ее в переменной l2.
  6. Вывод сообщения Процент правильных ответов в тесте(первая попытка):.
  7. Считывание процента правильных ответов в тесте (первая попытка) с помощью функции scanf() и сохранение его в переменной P1.
  8. Вывод сообщения Процент правильных ответов в тесте(вторая попытка):.
  9. Считывание процента правильных ответов в тесте (вторая попытка) с помощью функции scanf() и сохранение его в переменной P2.
  10. Возврат управления из функции inputData().

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы