Расставить указатели - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Разработайте программу, которая будет вычислять и печатать оценки за тему для трех студентов. В программе должны быть реализованы, как минимум, следующие функции - inputData для организации ввода исходных данных; - average для вычисления среднего арифметического; - calculateTestMark для вычисления оценки за тест по проценту правильных ответов в каждой попытке; - calculateLabMark для вычисления оценки за лабораторную работу по оценкам за задачи; - printTable для печати отчетной таблицы. Программа работает, но нужна помощь в правильной расстановке указателей
Листинг программы
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <math.h>
  4. #include <locale.h>
  5. void inputData(int &l1, int &l2, int &P1, int &P2) //ввод данных
  6. {
  7. setlocale(LC_ALL, "Russian");
  8. printf("Оценка за первую задачу:\n");
  9. scanf("%d", &l1);
  10. printf("Оценка за вторую задачу:\n");
  11. scanf("%d", &l2);
  12. printf("Процент правильных ответов в тесте(первая попытка):\n");
  13. scanf("%d", &P1);
  14. printf("Процент правильных ответов в тесте(вторая попытка):\n");
  15. scanf("%d", &P2);
  16. }
  17. int calculateTestMark(int P1, int P2, int &tmark) //тест
  18. {
  19. if (P1 > P2)
  20. P2 = P1;
  21. else
  22. P1 = P2;
  23. if (P1 >= 90)
  24. tmark = 5;
  25. if (P1 >= 70 && P1 < 90)
  26. tmark = 4;
  27. if (P1 >= 50 && P1 < 70)
  28. tmark = 3;
  29. if (P1 < 50)
  30. tmark = 2;
  31. return tmark;
  32. }
  33. float calculateLabMark(int l1, int l2, float &lmark) //лабораторная
  34. {
  35. lmark = (l1*1.0 + l2) / 2;
  36. return lmark;
  37. }
  38. float average(float &av, float lmark, int tmark) //тема
  39. {
  40. av = (tmark*1.0 + lmark) / 2;
  41. return av;
  42. }
  43. void printTable(int st1_l1, int st1_l2, int st1_P1, int st1_P2, int st1_tmark,
  44. float st1_lmark, float st1_av,
  45. int st2_l1, int st2_l2, int st2_P1, int st2_P2, int st2_tmark, float
  46. st2_lmark, float st2_av,
  47. int st3_l1, int st3_l2, int st3_P1, int st3_P2, int st3_tmark, float
  48. st3_lmark, float st3_av) //таблица
  49. {
  50. setlocale(LC_ALL, "Russian");
  51. printf("№\tЗад.1\tЗад.2\tТест 1\tТест 2\tЛаб.раб. Тест\tТема\n");
  52. 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));
  53. 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));
  54. 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));
  55. 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));
  56. }
  57. void main()
  58. {
  59. int P1, P2, l1, l2;//входные данные(тест и задачи)
  60. int tmark; //результат теста
  61. float av, lmark; //средняя, оценка за лабораторную
  62. int st1_l1, st1_l2, st1_P1, st1_P2, st1_tmark; //переменные для 1 студента
  63. int st2_l1, st2_l2, st2_P1, st2_P2, st2_tmark; //переменные для 2 студента
  64. int st3_l1, st3_l2, st3_P1, st3_P2, st3_tmark; //переменные для 3 студента
  65. float st1_lmark, st1_av; //переменные для 1 студента
  66. float st2_lmark, st2_av; //переменные для 2 студента
  67. float st3_lmark, st3_av; //переменные для 3 студента
  68. /*действия для 1 студента*/
  69. inputData(l1, l2, P1, P2);//ввод данных
  70. st1_tmark = calculateTestMark(P1, P2, tmark);//тест
  71. st1_lmark = calculateLabMark(l1, l2, lmark);//лабораторная
  72. st1_av = average(av, lmark, tmark);//среднее
  73. st1_l1 = l1;
  74. st1_l2 = l2;
  75. st1_P1 = P1;
  76. st1_P2 = P2;
  77. /*действия для 2 студента*/
  78. inputData(l1, l2, P1, P2);//ввод данных
  79. st2_tmark = calculateTestMark(P1, P2, tmark);//тест
  80. st2_lmark = calculateLabMark(l1, l2, lmark);//лабораторная
  81. st2_av = average(av, lmark, tmark);//среднее
  82. st2_l1 = l1;
  83. st2_l2 = l2;
  84. st2_P1 = P1;
  85. st2_P2 = P2;
  86. /*действия для 3 студента*/
  87. inputData(l1, l2, P1, P2);//ввод данных
  88. st3_tmark = calculateTestMark(P1, P2, tmark);//тест
  89. st3_lmark = calculateLabMark(l1, l2, lmark);//лабораторная
  90. st3_av = average(av, lmark, tmark);//среднее
  91. st3_l1 = l1;
  92. st3_l2 = l2;
  93. st3_P1 = P1;
  94. st3_P2 = P2;
  95.  
  96. /*вывод таблицы*/
  97. printTable(st1_l1, st1_l2, st1_P1, st1_P2, st1_lmark, st1_tmark, st1_av,
  98. st2_l1, st2_l2, st2_P1, st2_P2, st2_tmark, st2_lmark,
  99. st2_av,
  100. st3_l1, st3_l2, st3_P1, st3_P2, st3_tmark, st3_lmark,
  101. st3_av);
  102. system("pause");
  103. }

Решение задачи: «Расставить указатели»

textual
Листинг программы
  1. void inputData(int *l1, int *l2, int *P1, int *P2) //ввод данных
  2. {
  3. setlocale(LC_ALL, "Russian");
  4. printf("Оценка за первую задачу:\n");
  5. scanf("%d", *l1);
  6. printf("Оценка за вторую задачу:\n");
  7. scanf("%d", *l2);
  8. printf("Процент правильных ответов в тесте(первая попытка):\n");
  9. scanf("%d", *P1);
  10. printf("Процент правильных ответов в тесте(вторая попытка):\n");
  11. scanf("%d", *P2);
  12. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы