• ベストアンサー

初めてのC言語 

半径rで円周をだすプログラムを作りたいのですが作ってみたところ答えが0.00しかでてきません。 どこが間違っているのでしょうか。 #include <stdio.h> #define PI 3.14159265358979 /* 円周率 */ int main(void) { double r,a; printf("r="); scanf("%lf",&r); a=r*2*PI; printf("r*2*PI=%5.2lf\n",a); return 0; }

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

printf で double の値を表示するとき, むかしは %f を使ってた (%lf は NG) んだね. だから, 「ちょ~古い」処理系だと変なことになるかもしれん. ただ, scanf とのからみでいろいろあって, 今では %lf でも OK になってる.

bitamin123456
質問者

お礼

lfをfに変えたらできるようになりました! 指定されたソフトが古かったみたいてす。 皆さんありがとうございました!!

その他の回答 (4)

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.4

>fとlfの違いってなんなのでしょうか。 l(える)は倍長整数を表します。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

プログラムには問題無いはずですが。 例えば printf("r="); scanf("%lf",&r); を r=100.0 ; にしたら、正しい値になるのかどうか printf("r=%5.2lf\n",r); printf("r*2*PI=%5.2lf\n",a); としてみて、rに正しい値が入っているかどうか 等、どこで変になっているかを確認してはどうでしょうか?

bitamin123456
質問者

補足

すぐの回答ありがとうございます! 今いろいろ試してみました。 ちゃんと計算されてる!と思ったら scanfのほうでは%lfで 最後のprintfでは%5.2f となっていてlが抜けていました。 試料にはdoubleを使うときは%lfを使えと 書いてあったんですが 見本ではlfでも計算できていました。 なぜなのでしょうか。fとlfの違いってなんなのでしょうか。

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.2

いや、ソースはあってます。 この、最新状態でコンパイルしていますか? ソースを上書きしてない。とか、コンパイルのファイル名が違うとか、ないですか? それと、 #include<math.h> を入れておくと、 #define M_PI 3.14159265358979323846 が入ってるので、定義せずに、M_PI で使えます。

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

intmain(void)  はint main(void) return0;    はreturn 0; 以上でコンパイルしたら半径100で628.32と出ましたよ。

bitamin123456
質問者

補足

それでもrをいくつにしても0になってしまいます。 違うところに原因があるのでしょうか。 いろいろ変えたり調べてみましたがちゃんと作動してくれません。

関連するQ&A

  • C言語 質問です。

    以下のソースで半径、円周、面積を求めるものです。 #include <stdio.h> int main(void) { double radius; double pi = 3.1415926; double circumference; double area; printf("円の半径を入力してください。\n"); scanf("%f", &radius); circumference = radius * 2 * pi; area = radius * pi; printf("半径 = %f\n", radius); printf("円周 = %f\n", circumference); printf("面積 = %f\n", area); printf("\n\n"); return 0; } 半径(radius)をint型で、scanf("%d", radius); printf("半径 = %d\n", radius); では、うまく計算出来るのですが、double型ではだめなようです。 scanfを使用しなうで、 double radius = 10;とすると%fでも計算してくれるのですが、なぜでしょうか? C言語初心者です。よろしくお願いいたします。

  • C言語のプログラムについてです。

    円を描くプログラムを作りたいのですが、条件としてpointを使わないでつくらなければなりません。あとそのプログラムについての説明もいるので、合わせて回答お願いします。pointを使うと↓のプログラムです。 #include<stdio.h> #include<math.h> int main(void); int main(void) { double point[2][2]; double r; double pi=3.14159; int i; onenpl(); space(-100.0,-100.0,100.0,100.0); printf("円を描きます\n"); printf("半径を入力してください\n"); scanf("%lf",&r); point[0][0]=r*cos(0.0); point[0][1]=r*sin(0.0); for (i=1;i<360;i=i+1) { point[1][0]=r*cos(pi/180.0*i); point[1][1]=r*sin(pi/180.0*i); line(point[0][0],point[0][1],point[1][0],point[1][1]); point[0][0]=point[1][0]; point[0][1]=point[1][1]; } closepl(); return(0); }

  • C言語のプログラムについてですが、

    #include <stdio.h> int main(void) { double r; printf("半径を入力してください:"); scanf("%lf", &r); printf("円周=%f\n", 2.0 * r * 3.14159); printf("円面積=%f\n", r * r * 3.14159); return 0; } 上のC言語のプログラムを参考にして 正三角形一辺を double値でキーボード入力し、次のように高さと 面積を計算するプログラムを教えてください。 よろしくお願いしますl_ω_l 3の平方根は1.73205とします。 [実行結果] ======= 一辺の値を入力してください: 20 高さ=17.320500 面積=173.205000

  • C言語、円周率の値が0.000000?

    いつも大変お世話になりありがとうございます。 下記のコードを実行したところ、円周率の値が0.000000になりました。 どうしてでしょうか? アドバイスの程宜しくお願い申し上げます。 #include <stdio.h> int main(void) { double pi; printf("円周率の値はいくつですか?\n"); scanf("%1f", &pi); printf("円周率の値は%fです。\n", pi); return 0; } C:\MinGW>Sample9 円周率の値はいくつですか? 3.14 円周率の値は0.000000です。

  • 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言語の初心者です。これを実行してみてください。

    「a」って打ち込んだら「a」ってでましたか? #include<stdio.h> int main(void){ char a; printf("aaa\n"); scanf_s("%c", &a); printf("%c", a); return 0; }

  • C言語の質問です。

    #include"stdio.h" int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = a+b; printf("add=%d\n", add); return 0; } と、------------------------------------------------------------------------------ #include"stdio.h" int tasizan(int x, int y); int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = tasizan(a, b); printf("add=%d\n", add); return 0; } int tasizan(int x, int y){ int aa; aa = x + y; return aa; } の違いを教えてください。

  •  現在、私はC言語を学んでいます。

     現在、私はC言語を学んでいます。  プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • C言語

    このプログラムを作りたいのですが… ??????????? 物の総数を入れてください:12 取り出す物の数を入れてください:2 12個の異なる物から2個をを取り出す組み合わせの数は66です ?????????????? ここに出てくる数字は scanfで入れます。 だいたい こんな感じだと思うのですが… ***********の部分が わかりません。 ??????????????? #include<stdio.h> int factorial(int m,int r) { ************** } int main(void) {int a,b; printf("物の総数を入れてください:") scanf("%d",&a); printf("取り出す物の数を入れてください:") scanf("%d",&b); printf("12個の異なる物から2個を取り出す組み合わせの数は%dです。\n",a,b,factorial(a,b));) ?????????????? お願いします(>_<)

  • Switch文を使ったプログラミング

    switch文を使って1のときは円周、2のときは円の面積、3のときは球の面積を求めるという問題をしています。xが1の時は出力結果は合っているのですが、xが2と3のときはdefaultの結果の"もう一度やり直し"になってしまいます。 どこが間違っているのかわかりません。 rは半径、Lは円周、Sは円の面積、Vは球の体積です。paiはπです。 #include<stdio.h> #include<stdio.h> int main(void){ double L, x, r, S, V, pai=3.14159; printf("半径rを入力:"); scanf("%lf",&r); printf("処理番号(1:円周は 2:円の面積は 3:球の体積は)"); scanf("%lf",&x); switch(x){ case 1: L = 2*pai*r; printf("円周は%0.2lf",L); break; case 2: S = pai*r*r; printf("円の面積は%0.2lf",S); break; case 3: V = 4*pai*r*r*r/3; printf("球の体積は%0.2lf",V); break; default: printf("もう一度やり直し\n"); } return 0; }