fork download
  1. #include <stdio.h>
  2.  
  3. #define MAX 100 // 配列の最大サイズ
  4. int seiseki[MAX]; // 成績を格納する配列
  5. int size = 0; // 入力された成績の個数
  6.  
  7. // 成績を記録する関数(record)
  8. void record(int score) {
  9. if (size < MAX) {
  10. seiseki[size] = score; // 配列に点数を記録
  11. size++; // 記録された個数を更新
  12. } else {
  13. printf("入力上限に達しました。\n");
  14. }
  15. }
  16.  
  17. // 平均値を求める関数(average)
  18. double average() {
  19. if (size == 0) return 0.0; // 記録がない場合は0を返す
  20.  
  21. int sum = 0;
  22. for (int i = 0; i < size; i++) {
  23. sum += seiseki[i]; // 合計を計算
  24. }
  25. return (double)sum / size; // 平均を求める
  26. }
  27.  
  28. // 条件付きの平均を求める関数(cond_average)
  29. double cond_average(int a, int b) {
  30. int sum = 0, count = 0;
  31. for (int i = 0; i < size; i++) {
  32. if (seiseki[i] >= a && seiseki[i] <= b) { // 指定範囲内の点数のみ考慮
  33. sum += seiseki[i];
  34. count++;
  35. }
  36. }
  37. return (count > 0) ? (double)sum / count : 0.0; // 平均を計算(該当データなしなら0)
  38. }
  39.  
  40. int main() {
  41. int num;
  42. printf("学生の人数を入力してください:\n");
  43. scanf("%d", &num);
  44.  
  45. for (int i = 0; i < num; i++) {
  46. int score;
  47. printf("学生 %d の点数を入力\n", i + 1);
  48. scanf("%d", &score);
  49. record(score); // 点数を記録
  50. }
  51.  
  52. printf("全体の平均点: %.2f\n", average());
  53. printf("60点以上100点以下の平均点: %.2f\n", cond_average(60, 100));
  54.  
  55. return 0;
  56. }
Success #stdin #stdout 0.01s 5288KB
stdin
5 62 64 85 62 34
stdout
学生の人数を入力してください:
学生 1 の点数を入力
学生 2 の点数を入力
学生 3 の点数を入力
学生 4 の点数を入力
学生 5 の点数を入力
全体の平均点: 61.40
60点以上100点以下の平均点: 68.25