fork download
  1. #include <iostream>
  2. #define NUM_STUDENTS 5
  3. #define NUM_SUBJECTS 3
  4. #define STR_LENGTH 30
  5. using namespace::std;
  6.  
  7. int point[NUM_STUDENTS][NUM_SUBJECTS];
  8.  
  9. char name[NUM_STUDENTS][STR_LENGTH] =
  10. {
  11. "畠山 永基",
  12. "石崎 悠里",
  13. "緒方 十四夫",
  14. "丹羽 茂也",
  15. "米田 由治"
  16. };
  17. char kamoku[NUM_SUBJECTS][STR_LENGTH] =
  18. {
  19. "国語",
  20. "数学",
  21. "英語"
  22. };
  23.  
  24. class SEISEKI
  25. {
  26. public:
  27. // ・成績をキーボードから入力する機能
  28. void point_input()
  29. {
  30. for (int i = 0; i < NUM_STUDENTS; ++i)
  31. {
  32. cout << name[i] << endl;
  33. for (int j = 0; j < NUM_SUBJECTS; ++j)
  34. {
  35. cout << kamoku[j] << ":";
  36. cin >> point[i][j];
  37. }
  38. }
  39. }
  40. // ・成績をモニターで確認する出力機能
  41. void display()
  42. {
  43. for (int i = 0; i < NUM_STUDENTS; ++i)
  44. {
  45. cout << name[i] << endl;
  46. for (int j = 0; j < NUM_SUBJECTS; ++j)
  47. {
  48. cout << kamoku[j] << " = " << point[i][j] << '\t';
  49. }
  50. cout << endl;
  51. }
  52. }
  53. };
  54.  
  55. class SYUKEI: SEISEKI
  56. {
  57. public:
  58. // ・各個人別総合展を求める機能
  59. int get_kojin_sum(int n)
  60. {
  61. int sum = 0;
  62. for (int i = 0; i < NUM_SUBJECTS; ++i)
  63. sum += point[n][i];
  64. return sum;
  65. }
  66.  
  67. // ・科目別の平均点を求める機能
  68. int get_kamoku_avg(int n)
  69. {
  70. int sum = 0;
  71. for (int i = 0; i < NUM_STUDENTS; ++i)
  72. sum += point[n][i];
  73. return sum / NUM_STUDENTS;
  74. }
  75.  
  76. // ・各個人別の総合点を画面に表示する機能
  77. void display_kojin_sum()
  78. {
  79. for (int i = 0; i < NUM_STUDENTS; ++i)
  80. cout << name[i] << '\t' << get_kojin_sum(i) << endl;
  81. }
  82.  
  83. // ・各科目別の平均点を画面に表示する機能
  84. void display_kamoku_avg()
  85. {
  86. for (int i = 0; i < NUM_SUBJECTS; ++i)
  87. cout << kamoku[i] << '\t' << get_kamoku_avg(i) << endl;
  88. }
  89. };
  90.  
  91. int main()
  92. {
  93. SEISEKI s;
  94. SYUKEI syu;
  95.  
  96. int test_date[] = {23, 45, 67, 89, 12, 34, 56, 78, 90, 12, 34, 56, 78, 90, 12};
  97.  
  98. {
  99. // ・成績をキーボードから入力する場合
  100. // cout << "\n成績をキーボードから入力する\n";
  101. // s.point_input();
  102.  
  103. // ・成績をプログラムソースから読み込む場合
  104. {
  105. int k = 0;
  106. for (int i = 0; i < NUM_STUDENTS; ++i)
  107. for (int j = 0; j < NUM_SUBJECTS; ++j)
  108. point[i][j] = test_date[k++];
  109. }
  110.  
  111. // 登録データをファイルから読み込む場合
  112. // {
  113. // FILE *fp = fopen("c168-384.cpp.in", "r");
  114. // for (int i = 0; i < NUM_STUDENTS; ++i)
  115. // for (int j = 0; j < NUM_SUBJECTS; ++j)
  116. // fscanf(fp, "%d", &point[i][j]);
  117. // fclose(fp);
  118. // }
  119. }
  120.  
  121. // ・成績をモニターで確認する
  122. cout << "\n成績をモニターで確認する\n";
  123. s.display();
  124.  
  125. // ・各個人別の総合点を画面に表示する
  126. cout << "\n各個人別の総合点を画面に表示する\n";
  127. syu.display_kojin_sum();
  128.  
  129. // ・各科目別の平均点を画面に表示する
  130. cout << "\n各科目別の平均点を画面に表示する\n";
  131. syu.display_kamoku_avg();
  132.  
  133. // ・各科目の最高点を取った人の名前をそれぞれ表示する
  134. {
  135. cout << "\n各科目の最高点を取った人の名前をそれぞれ表示する\n";
  136. for (int j = 0; j < NUM_SUBJECTS; ++j)
  137. {
  138. int imax = 0; // 初期値として、最高点は0番目の学生と仮置きする
  139. for (int i = 0; i < NUM_STUDENTS; ++i)
  140. if (point[i][j] > point[imax][j])
  141. imax = i;
  142. cout << kamoku[j] << '\t' << name[imax] << endl;
  143. }
  144. }
  145.  
  146. // ・総合点で最高点を取った人の名前を表示する
  147. {
  148. cout << "\n総合点で最高点を取った人の名前を表示する\n";
  149. int sum[NUM_STUDENTS];
  150. // 各人の総合点を求める
  151. for (int i = 0; i < NUM_STUDENTS; ++i)
  152. sum[i] = syu.get_kojin_sum(i);
  153. int imax = 0;
  154. // 総合点の最高を求める
  155. for (int i = 0; i < NUM_STUDENTS; ++i)
  156. if (sum[i] > sum[imax])
  157. imax = i;
  158. // 最高点に等しい者の名前を表示する(最高点が2人以上の場合も有り得るため)
  159. for (int i = 0; i < NUM_STUDENTS; ++i)
  160. if (sum[i] == sum[imax])
  161. cout << name[i] << endl;
  162. }
  163. }
  164.  
Success #stdin #stdout 0s 3100KB
stdin
Standard input is empty
stdout
成績をモニターで確認する
畠山 永基
国語 = 23	数学 = 45	英語 = 67	
石崎 悠里
国語 = 89	数学 = 12	英語 = 34	
緒方 十四夫
国語 = 56	数学 = 78	英語 = 90	
丹羽 茂也
国語 = 12	数学 = 34	英語 = 56	
米田 由治
国語 = 78	数学 = 90	英語 = 12	

各個人別の総合点を画面に表示する
畠山 永基	135
石崎 悠里	135
緒方 十四夫	224
丹羽 茂也	102
米田 由治	180

各科目別の平均点を画面に表示する
国語	47
数学	53
英語	54

各科目の最高点を取った人の名前をそれぞれ表示する
国語	石崎 悠里
数学	米田 由治
英語	緒方 十四夫

総合点で最高点を取った人の名前を表示する
緒方 十四夫