C言語超初心者のための平均計算プログラム

このQ&Aのポイント
  • C言語超初心者のための平均計算プログラムの作り方を教えてください。
  • int型の最後のprintf文で%fを使用しているのはなぜですか?
  • 答えが実数値でなければならないため、%fを使用しています。
回答を見る
  • ベストアンサー

c言語超初心者です。教えてください

基本的だと思いますが教えてください。 #include <stdio.h> int main(void) { int na, nb: puts("二つの整数を入力してください."); printf("整数A:”); scanf("%d",&na); printf("整数B:”); scanf("%d",&nb); printf("それらの平均は%fです。\n,(na+nb)/2.0); return(0); } これでintの形で最後のprintfが%fなのですがintは%dとなるはずなのですがこれは2。0という実数値で割るから答えは実数値になりますよ。という意味で%fとしたのでしょうか?確かにこうしないと正しい値がでてこないのです。教えてください。

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

  • ベストアンサー
  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

%d にするとna+nb が奇数の時どうなりますか? 少数がつきますよね。(0.5) なので、表示するときは、実数形式にしています。(割る数を実数にしている)

dasuthin
質問者

お礼

迅速にありがとうございました。

その他の回答 (4)

  • ballville
  • ベストアンサー率47% (233/487)
回答No.5

Cでは式の中で暗黙の型変換が行われます。 いまの例では、 (na+nb)/2.0 の部分。 naもnbもint型ですが、それを2.0で割ることで、 自動的にdouble型にしています。 下のページが参考になると思います。

参考URL:
http://www9.plala.or.jp/sgwr-t/c/sec04.html
dasuthin
質問者

お礼

すごいいいサイトを紹介してくれてありがとうございました。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★正しいですよ。質問者さん。 ・実数値は、%f です。 ・ちはみに、『2.0』を表記しないと実数で計算されませんでの『2』ではダメです。 ・実数値の表現は必ず小数点で指定します。定数の場合はね。 ・もう、たくさんの人々のアドバイスがありますので問題は解決ですな。 補足: ・c言語の超初心者ですが『printf』の書式文字列の確認を取りたかったようですね。 ・これから、自分自身に自信を持っても良いですよ。 ・c言語は順調に理解していると思います。 ・最後に頑張って下さい。さようなら。質問者さん。

dasuthin
質問者

お礼

本当にありがとうございました。やっぱり専門家さんは、朝でもがんばってるんですね。

回答No.3

問題を二つに分けて考えるべきでしょう。 ・平均値は整数では表せない。 (na + nb) / 2としたら、小数点以下で切り捨てられます。 従って、(na + nb) / 2.0とすることで実数演算を行なうわけです。 ・実数値のフォーマット指定は%dではない。 上記のように実数演算を行なうと、結果の型はdoubleとなります。 double値を出力するためのフォーマット指定は、"%e", "%f", %g"などです。 #個人的には%gがお勧め。 尚、結果を切り捨ててよいなら、printf("%d", (na + nb) / 2);でも構わないわけです。

dasuthin
質問者

お礼

本当にありがとうございました。さすが専門家はすごいですね。憧れます。

回答No.2

float型、つまり浮動小数点表示するときに使います。 ここが%dだと小数点以下が切り捨てられてしまいます。

参考URL:
http://www.page.sannet.ne.jp/mtoga/lang/c/bih-c_30.htm
dasuthin
質問者

お礼

本当にありがとうございました!!

関連するQ&A

  • c言語超初心者です。2

    #include <stdio.h> int main(void) { int na,nb, nc; int sum; double ave; puts("三つの整数を入力してください."); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); printf("整数C:"); scanf("%d", &nc); sum=na+nb+nc; ave=(double)sum/3; printf("それらの合計は%5dです。\n", sum); printf("それらの平均は%5.1fです。\n",ave); return(0); } とういうのを作ったんですが、最後のそれらの合計は%5dとやりその5の意味は整数を10進法で少なくても5桁で表示とありますが、例えば1,2,3と入力しても合計は6とでて5桁ででないんですけど。そういう意味ではありませんか?あとave=(double)sum/3;のところをave=sum/3.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言語について

    「条件演算子(a?b:c)を使って、三つの整数値を読み込んで、その最小値を求めて表示するプログラムを作成せよ」という問題を初心者なりに自分で以下のように解いてみたのですが、もっと簡単に表示できるプログラムがあれば教えてください。 #include<stdio.h> int main(void) { int na,nb,nc,min; printf("整数1:"); scanf("%d",&na); printf("整数2:"); scanf("%d",&nb); printf("整数3:"); scanf("%d",&nc); (na<nb)?min=na:min=nb; printf("最小値は%dです。\n",(nc<min)?min=nc:min); return 0; }

  • 初心者です。

    以下のソースの説明ですが、例えばnaに5、nbに4を入れたとき、 実行後の表示として  5+6+7+8=26 となるようにしたいのですが、できません。 教えてください。 #include <stdio.h> int main(void) { int sum = 0; int na,nb; printf("整数A:"); scanf("%d",&na); printf("整数B:"); scanf("%d",&nb); /*nbは回数*/ for ( na; na <= nb ;na++){ sum = sum + na; } printf("%dです。\n",sum); return(0); }

  • C言語の課題で困っています。その1.四則演算

    二つの整数値を読み込んで、前者を後者で割り、その結果の商と余りを表示するプログラムを作成。 実行例にあるよう、ゼロで割るような場合への対処も考慮する。 実行例1: 整数の除算を行います。整数を入力してください。 整数A:13 整数B:5 13 ÷ 5 = 2 あまり 3 実行例2: 整数の除算を行います。整数を入力してください。 整数A:10 整数B:0 0でわることはできません! (注)プログラム実行時にキーボードからどんな整数を入力してもいいように作成すること。 という課題に取り組んでいますが、途中までしか記述できません。 どなたか助けてください。 下記が途中までの記述です。 /*二つの整数値を読み込んで、前者を後者で割り、その結果の商と余りを表示*/ #include <stdio.h> int main(void) { int na, nb; printf("shimasaki kazunori \n"); puts("整数の除算を行います。整数を入力してください。: \n"); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); printf("na ÷ nb = %d あまり %d \n", na / nb, nb, na % nb); return(0); }

  • C言語 if文について

    #include <stdio.h> int main(void) { int a; printf("整数を入力してください:"); scanf("%d",&a); if(a % 10 == 5) puts("最下位の桁は5です。"); else puts("最下位の桁は5でありません。"); return 0; これでどうして読み込んだ整数値の最も下の桁が5であるかどうかを判断しているのでしょう? ifの式がいまいち理解できません。 解説できる方いませんか?

  • C言語の演習2

    何度も似たような質問を出していますがよろしくお願いします。。。 問題は 2つの整数を入力してください。 整数A:54 整数B:84 Aの値はBの64.285714%です。 というものです。あっているか確認お願いします。 #include<stdio.h> int main(void) { int vx, vy; puts("2つの整数を入力してください。"); printf("整数A"); scanf("%lf",&vx"); printf("整数B"); scanf("%lf",&vy"); printf("Aの値はbの%f%です。/n",(double)(vx/vy)); return 0; } であっていますか??お願いします。

  • C言語

    最近C言語を始めたばかりなのですが、コンパイラをしたあと、オブジェクトファイルをexeしようとすると、エラーがでます。 そのエラーとは ”問題が発生したため、error.exe を終了します。 ご不便をおかけして申し訳ありません。この問題を Microsoft に報告してください。”です。 どなたかわかる方教えてください。 以下が、問題のプログラムです。 #include <stdio.h> int main(void) { int na; puts("身長を入力してください。"); printf("身長:"); scanf("%d",&na); printf("標準体重は[%.1f]です。%n", (double)(na - 100) * 0.9); return(0); }

  • C言語について

    最近C言語を始めたばかりです。 誰か教えてください。 私の勉強している、明解C言語入門の演習2-6で、  以下に示すように、身長を整数値として読み込んで、標準体重を実数で表示するプログラムを作成せよ。標準体重は(身長-100)×0.9によって求め、その小数点以下は、1桁だけ表示すること。    身長を入力してください。  標準体重は67.5です。 がわかりません。  念のため、私の作ったものを参考にして答えを教えていただけないでしょうか? #include <stdio.h> int main(void) { int na; puts("身長を入力してください。"); printf("身長:"); scanf("%d",&na); printf("標準体重は[%.1f]です。%n", (double)(na - 100) * 0.9); return(0); }

  • C言語でscanf()が先に実行されるのはなぜですか?

    C言語でscanf()が先に実行されるのはなぜですか? #include <stdio.h> int main(void){ int intNum; printf("整数を入力してください:\n"); scanf("%d", &intNum); printf("入力値は:%d\n",intNum); return(0); }

専門家に質問してみよう