C言語の学習では、for文やif文、配列、平均値計算などを組み合わせた課題がよく出題されます。特に「ユーザ入力を繰り返し受け取り、条件によって処理を分岐させる」問題は、基礎文法の理解確認として定番です。この記事では、「生徒の身長を複数入力し平均値を求めるプログラム」を題材に、負数入力による終了処理や特定回数の入力無視など、実践的な条件付きプログラムの書き方を解説します。
今回の課題条件を整理する
まずは仕様を整理すると、以下の条件になります。
| 条件 | 内容 |
|---|---|
| 入力回数 | 最大10回 |
| 入力値 | 浮動小数点数(float) |
| 負数入力 | その時点で終了 |
| 8回目の入力 | 平均計算から除外 |
| 出力 | 平均身長 |
この課題では、単純な平均計算だけでなく、「条件付きcontinue」や「break」の理解も重要になります。
C言語での実装例
以下が条件を満たす基本的なプログラム例です。
#include <stdio.h>
int main(void)
{
float height;
float sum = 0.0;
float average;
int count = 0;
int i;
for(i = 1; i <= 10; i++)
{
printf("%d人目の身長を入力してください: ", i);
scanf("%f", &height);
if(height < 0)
{
break;
}
if(i == 8)
{
continue;
}
sum += height;
count++;
}
if(count > 0)
{
average = sum / count;
printf("平均身長: %.2f\n", average);
}
else
{
printf("有効なデータがありません。\n");
}
return 0;
}
なぜ8回目を無視するのか
この課題のポイントは、8回目だけ平均計算に含めない点です。
例えば以下のような入力だった場合を考えます。
| 回数 | 身長 | 計算対象 |
|---|---|---|
| 1 | 170.5 | ○ |
| 2 | 168.0 | ○ |
| 3 | 172.3 | ○ |
| 8 | 999.9 | × 無視 |
8回目だけはsumにもcountにも加えません。
そのため、continueを使って以降の処理を飛ばしています。
breakとcontinueの違い
初心者が混乱しやすいのが、breakとcontinueの違いです。
| 命令 | 意味 |
|---|---|
| break | ループを終了 |
| continue | その回だけ処理をスキップ |
今回の課題では、負数入力時にbreak、8回目無視にcontinueを使っています。
変数宣言の場所に注意する理由
課題文に「変数宣言の場所に注意」と書かれている場合、古いC言語仕様を意識している可能性があります。
例えば、for文の途中ではなく、先頭付近で変数宣言する書き方です。
int i;
float height;
最近のC言語では途中宣言も可能ですが、授業環境によっては古い規格(C89など)を使っていることがあります。
初心者がよく間違えるポイント
この課題では、以下のミスが非常に多いです。
- 8回目も平均に含めてしまう
- countを増やし忘れる
- 負数入力後も計算してしまう
- 整数型(int)で宣言してしまう
- countが0なのに平均計算する
特に「0除算」はエラー原因になりやすいので、if(count > 0)は重要です。
さらに理解を深める改良例
慣れてきたら、以下のような機能追加にも挑戦できます。
- 最大身長・最小身長の表示
- 入力値を配列に保存
- 平均以外に中央値を表示
- 不正入力チェック
こうした応用を行うことで、C言語の配列や条件分岐への理解も深まります。
まとめ
C言語で平均身長を求める課題では、単なる計算だけでなく、ループ制御・条件分岐・浮動小数点・入力終了条件など、複数の基礎知識が組み合わされています。
特に今回のような「8回目だけ無視」「負数入力で終了」といった条件付き処理は、実務プログラムでもよく使われる考え方です。
まずはbreakとcontinueの動きをしっかり理解し、実際にコンパイル・実行しながら動作確認することが上達への近道になります。


コメント