• ベストアンサー

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

  • C言語で計算が合いません(初心者)

    C言語で計算が合いません(初心者) 簡単な計算のプログミングをしているのですが 計算が合わなくて困っています。 整数型変数aと実数型変数bを定義 整数型変数cとdを定義して、c=0.5*a*b、d=a/2*b 実数型変数eとfを定義して、e=0.5*a*b、f=a/2*b という内容のプログラムを作ったのですが a=7,b=2.4を代入してみた結果 ---------------------------- Input a>>7 Input b>>2.4 8 7 8.400000 7.200000 ---------------------------- となりました どこが間違っているのでしょう? 答えは8.4でcが8なのは有効数字のためだと思いますが dとeで答えが全く違う理由が分かりません。 下に私が書いたものを貼っています。 ---------------------------- #include<stdio.h> int main(void){ int a,c,d; double b,e,f,ans; printf("Input a>>"); scanf("%d",&a); printf("Input b>>"); scanf("%lf",&b); c=0.5*a*b; printf("%d\n",c); d=a/2*b; printf("%d\n",d); e=0.5*a*b; printf("%lf\n",e); f=a/2*b; printf("%lf\n",f); return 0; } ---------------------------- よろしくお願いします。

  • mbed C言語について

    c言語の初歩的な質問です。 http://www.oidenansho.com/elekijack/mbed/2bk0919_gyro_servo/gyro_servo.htm のページにあるプログラムで ♯define on 1 ♯define off 0 ♯define Gy1_offset 0.01 とあるのは、どういう意味でしょうか? どこにどんなふうに反映されるのでしょうか? またprintf %2.5fの意味を教えてください。小数点以下5桁を指定している? 2は何でしょうか? わかる方、お願いします(>_<)

  • すいません、delphi初心者です。

    すいません、delphi初心者です。 わかる方いましたら教えてください。 今小数点の計算を行っているのですが、整数以下の小数点の切り捨てのサンプルはよく見るのですが、第一 以降や、第2位以降の切り捨てなども設定できるものでしょうか?? すいません、わかる方いましたらご教授ください!! 宜しくお願いお致します。

  • c#のマクロ定義について

    C言語でマクロ定義の場合以下のようにヘッダファイルに#defineで定義しますが、C#の場合どのようにすればいいのでしょうか。 C言語の場合 *** test.h *** #define TEST 5 C#の場合 public const int TEST = 5; //これでいいの? 専用のclassを用意するの? 初歩的な質問ですが宜しくお願い致します。

  • C言語超初心者からの質問

    最近プログラミングの勉強を始めたものなんですが、ここで質問して薦められた「明解 C言語入門編 著柴田望洋」の一番最初の項目の整数の和を求めるプログラムをやったのですが実行しても反応がありません。 どこが間違っているのでしょうか? ちなみに使っているエディタはK2Editorです。 回答よろしくお願いします。 以下プログラム /* 整数値15と37の和を表示する */ #include <stdio.h> int main(void) {   printf("%d", 15 + 37);    /* 整数値15と37の和を十進数で表示 */   return (0); }

  • C言語の課題

    1、整数型の変数を2個だけ使い、キーボードから5個の整数を読み込み負の整数のみの和を表示プログラムを作れ 2、1、の問題について使える変数を3個に増やしたうえでwhile文を使ったプログラムを作れ 3、1、の問題について使える変数を3個に増やしたうえfor文を使ったプログラムを作れ 1を作ろうとするとかなり長くなってしまうのです… ヒントでもいいので教えてください。

  • C言語初心者です。次のプログラムを簡潔にしたいです

    二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成せよ。 自分のプログラムは以下の通りです。 #include <stdio.h> int main(void) { int num1,num2,small,big,sum=0; printf("二つの整数を入力してください。\n"); printf("整数A:"); scanf("%d",&num1); printf("整数B:"); scanf("%d",&num2); small=(num1 > num2) ? num2 : num1; big=(num1 > num2) ? num1 : num2; printf("%d以上%d以下の全整数の和は",small,big); if (num1 < num2) { do { sum+=num1; num1++; }while (num1 <= num2); } else { do { sum+=num2; num2++; }while (num2 <= num1); } printf("%dです。",sum); return 0; } 結果は正しく表示されるはずです。 しかし多変数かつループ文を組み合わせているため、長ったらしくなっています。 どのようなプログラミングならば、簡潔にかけますか? 解答がないので困っています。

  • C言語について。初心者です。

    参考書の問題で、「整数値以下である正の偶数を照準に表示するプログラムを作成せよ」 例)整数を入力してください:19   2 4 6 8 10 12 14 16 18 とあり、自分で以下のプログラムを作ってみたのですが「222222・・・・・・・・・・・・・・・・・・」となるだけです。どう変えればちゃんと表示されるようになりますか?ちなみにwhile文を使うのが条件です。 #include<stdio.h> int main(void) {       int na; int nb=0; printf("整数を入力してください。:"); scanf("%d",&na); while(nb<na) printf("%d",nb+2); putchar('\n'); return 0; }

  • C言語プログラム

    2つの整数を入力させ、それらが等しい場合hitoshii、異なる場合にはhitoshikunaiと出力するプログラムを作りたいのですが、うまくいきません。間違っているところを教えてください。 #include<stdio.h> #include<conio.h> void main() { printf("整数を入力してください:"); int number1; scanf("%d",number1); printf("整数を入力してください:"); int number2; scanf("%d",number2); if(number1==number2) { printf("hitoshii"); } else { printf("hitoshikunai"); } getch(); }

  • プログラミングCについて

    次のプログラムは11の正の平方根の近似値を、以下の方法に基づいて小数点以下第4位の精度で求めるプログラムである。このプログラムが正しく動作するように下線部を埋め、プログラムを完成させなさい。なお、3の2乗は9であり、4の2乗は16なので、10の平方根は3と4の間であることはわかっているとしてよい。(小数点以下第4位の精度とは、小数点以下第4位までが真値ち一致するようにし、第5位以下については一致しなくてもよい事を意味する。よって、結果の表示自身に第5位以下が表示されても構わない。) double x; for(x=3;x<4;x+=0.0001) { for(_______) break; } printf("11の正の平方根は%______です。\n",x); 平方根を求める方法: 変数を3から4まで0.0001刻みで増やしながら、その2乗を計算していきます。最初は3なので、その2乗は9となり、11よりも小さい値になりますが、変数の増加に応じて2乗の値も増えていき、4の2乗になる前には11を越えます。この時の変数が11の平方根の近似値になります。 注意: このプログラムによる答えは3.3167となります。実際には、変数の2乗が初めて11を越えたときの変数の値よりも、その1ステップ前の変数の値が方が近似値として適切かもしれません。しかし、今回はそこまで考慮する必要はありません。

専門家に質問してみよう