つくる 点数入力と平均

この章で手に入れたもの

第1章では決まった文字を出すだけでした。この章で、値を変数に持ち、外から受け取り、計算し、桁を決めて出せるようになりました。今回はそれを1本のプログラムにまとめて、成績管理アプリを一歩進めます。

作るのは「3科目の点数を入力すると、一覧と合計と平均を出す」プログラムです。

組み立ての順番

やることは4つで、上から順に並べるだけです。

  1. 見出しを出す
  2. 3つの点数を scanf で読む
  3. 合計と平均を計算する
  4. 桁を揃えて表示する
#include <stdio.h> int main(void) { int kokugo, suugaku, eigo; printf("=== 成績管理 ===\n"); scanf("%d %d %d", &kokugo, &suugaku, &eigo); /* ここで合計と平均を出す */ /* ここで表示する */ return 0; }

詰まりやすいところ

合計は int、平均は double です。合計は点数を足しただけなので整数のままで問題ありません。平均は前回のとおり、割る前にキャストしてください。(double)total / 3 です。ここを忘れると平均が 78.0 や 73.0 のように、小数点以下が必ず 0 になります。それが出たら切り捨てが起きている合図です。

幅は 6 で揃えます。 点数と合計は %6d、平均は %6.1f です。こうすると数の右端が縦に並び、「点」の位置も揃います。合計は3桁になるので、幅を指定しないと行ごとに「点」の位置がずれます。

scanf の & を忘れないでください。 3つとも必要です。値がおかしいときは、まずここを見てください。理由は第7章で扱います。

出力の形

入力が 78 と 92 と 64 のとき、次のようになります。

=== 成績管理 === 国語 78点 数学 92点 英語 64点 合計 234点 平均 78.0点

見出しは入力を読む前に出しても後に出しても、出力される順番は変わりません。読み終わってから表示を始めるほうが、次章以降で処理が増えたときに読みやすくなります。

揃わないときの見方

期待どおりに動かないときは、ずれている行だけを見てください。原因はだいたい次の3つに分かれます。

  • 数の左の空白の数が違う。幅の指定が 6 になっていない
  • 平均の小数点以下が 0 になる。割る前のキャストが抜けている
  • 平均が 73.666667 と長い。%f のままで桁を指定していない

どれもコンパイルは通ってしまう種類の間違いです。C はこうした「動くけれど違う」を自分で見つける必要がある言語なので、出力を1行ずつ見比べる進め方に、この章のうちに慣れておくと後が楽になります。

次の章へ

いまのプログラムは、点数が何点でも同じ形で表示します。次の第3章では if 文を学び、前回書いた「60点以上かつ出席10回以上」のような条件で表示を出し分けられるようにします。この回で作った合計と平均の計算は、そこでもそのまま使います。

要件

  1. 1行目に「= 成績管理 =」を出す
  2. 国語、数学、英語の順に3つの点数を scanf で読む
  3. 各科目と合計は %6d で出す
  4. 平均はキャストを使って計算し %6.1f で出す
  5. 「国語 78点」「合計 234点」「平均 78.0点」の形で並べる

入出力例

main("78 92 64") → "=== 成績管理 === 国語 78数学 92英語 64合計 234平均 78.0点" main("80", "75", "66") → "=== 成績管理 === 国語 80数学 75英語 66合計 221平均 73.7点"

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.c
学習モード

メモ

つくる 点数入力と平均

⌘S で保存