• ベストアンサー

C初心者です

学校でC言語を習い始めたばかりの初心者です。以下のプログラムを作成したいのですが、お教え願います。ちなみに授業では整数型の変数を定義してなんちゃらとか、printfというところまでしかやってません。 1、5人の身長の平均を求めるプログラム(小数点以下切捨て) 2、1の人数5に対してNUMBERというマクロ名を与え、プログラムを書き換えよ。(#defineで定義とか言うひヒントがかいてありました) 3、#defineによるマクロ名を使うメリットは何か? という3つです。 1は変数を5個定義してやればいいんですかね?それを全部足して5で割って…、でいいんでしょうか? 2,3はまったく分かりません。 かなり簡単な質問かとは思いますが、なにぶん始めたばかりなものなので、お教え願います。 できたらプログラムリストを示していただきたいです。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • elttac
  • ベストアンサー率70% (592/839)
回答No.1

1. は,それでも構いませんが,「配列変数」を使うと効果的です。配列変数は,「番号付きの変数」です。簡単のため,身長は整数でよいでしょうか。 #include <stdio.h> int main() { int height[5]; /* 身長 */ int sum = 0; /* 平均計算用の累積 */ int average; /* 平均身長 */ for (i = 0; i < 5; i++) { printf("%d 人めの身長は? ", i + 1); scanf("%d", &height[i]); sum += height[i]; } average = sum / 5; printf("平均身長は %d。\n", average); return 0; } ここで実は,height[5] は使用していませんから,この目的のためだけのプログラムでしたら,これは不要になります。ですが,2,3 のメリットをわかりやすくするために,このまま残しておきましょう。  さて,2. ですが,次のようにプログラムが書き換わります。先ほどの定数 5 を NUMBER という名前に置き換えます。 #include <stdio.h> #define NUMBER 5 int main() { int height[NUMBER]; int sum = 0; int average; for (i = 0; i < NUMBER; i++) { printf("%d 人めの身長は? ", i + 1); scanf("%d", &height[i]); sum += height[i]; } average = sum / NUMBER; printf("平均身長は %d。\n", average); return 0; } となります。  これから,3. の答えも見えてきます。  まず,もし「5 人」でなく「10 人」に拡張しなければならないときを考えます。従来でしたら,該当する「5」を探して,すべて「10」に書き換えなければなりませんが,この場合,NUMBER の定義を 10 にすれば解決です(#define NUMBER 10)。  それから,このもうひとつ都合がよいところは,「数値などに意味のある名前を付けられること」です。もし,ただ「5」とだけ書かれていたら,これがなぜに「5」なのかわかりません。もし,それが記号で「NUMBER」となっていたら,「何らかのデータ数」と察しがつくということになって,プログラムが解読しやすくなります。  以上,お答えになりましたでしょうか。

ZZR1200
質問者

お礼

ありがとうございます。何とかレポート間に合いました。これから少しずつステップアップしていきたいと思います。また質問する事があると思いますが、その時もぜひ宜しくお願いします。

関連するQ&A