• ベストアンサー

入力した任意の数の平方根を求める

C言語を少しずつですが勉強していて、最小値から最小値までの和を求めるのと、入力した数の2乗を求めるプログラムはわりと楽に完成したのですが、平方根を求めるというのができずに困っています。 プログラムの流れを説明すると、 1.どの処理を行うのか、数字+Enterで選択(平方根は、case 3です) 2.その処理を行う 3.結果の出力 です。 平方根の処理は、 scanfで実数を変数に代入→計算を行う関数を実行→結果を出力です。 症状としては、例えば4と入力して処理を実行すると、桁数のすごく大きい数が入力した数として処理され、また平方根も正しく求められていないようです。 (コンパイル時にエラーは出ていません)

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

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

★最初に C ファイルをダウンロードするのが面倒。貼り付けたら。 ・同じような処理を簡単なサンプルとして載せておく。  参考にして下さい。 サンプル: #include <math.h> #include <stdio.h> int main( void ) {  double a;  // 入力  printf( "平方根の入力:" );  scanf( "%lf", &a );  // 出力  printf( "a=%f の平方根は %f です。\n", a, sqrt(a) );  return 0; } その他: ・main() 関数にある >double zene,daikon; /* これは、平方根を求める */  ↑  この2つの変数をグローバル変数にすれば動く気がしますけど。  あまりお勧めしません。 ・関数には引数を取るようにしてはどうでしょうか?  あと戻り値も double 型を返すようにするとか。  // 関数のプロトタイプ宣言  double sabadaikon( double zene );  ↑  関数名がおもしろいね。→魚と野菜を処理するの?  ※処理が分かるような名前をつける事をお勧めします。 ・以上。

Nabe1992-6
質問者

お礼

貼り付けてしまうと、長くなってしまうかな、と思ったのでアップロードしましたが、貼り付けたほうがよいのですね。もし、また質問することがあれば(できればない方が良いのですが)そうしたいと思います。 関数名ですが、subとしたらエラー(もしかしたら他の所に問題があったのかも知れません)が出たので適当につけてしまいました。今度は処理がわかるようにしたいと思います。

その他の回答 (6)

  • TT414
  • ベストアンサー率18% (72/384)
回答No.7

>double zene,daikon; >scanf("%f",&zene); 型が違います。

Nabe1992-6
質問者

お礼

ピンポイントの指摘ありがとうございました。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.6

int main( void ){ double zene,daikon; } void sabadaikon( void ){ double zene,daikon; } これらの変数は同じ名前でも全く違うものです。 変数のスコープについて 関数内で宣言された変数はその関数内のみで有効です 関数の外で宣言された変数はそのファイル内で有効です このような変数の有効範囲をスコープと呼びます。

Nabe1992-6
質問者

お礼

スコープについて、詳しいご説明ありがとうございました。

  • RAPTsong
  • ベストアンサー率42% (74/175)
回答No.5

そもそも、この程度なら関数分けしないことで、不具合は起こらなかったでしょう。

Nabe1992-6
質問者

お礼

わかりました。関数に分けるべきか分けないべきか、よく考えようと思います。

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.3

ある関数(例えばmain)から別のある関数(例えば平方根を求める関数)に 仕事を依頼するときに、 「平方根を求めたい数」を「引数」で渡して、 「求めた平方根」を「戻り値」で返してもらう、 という考え方を勉強してください。

Nabe1992-6
質問者

お礼

その考え方について、勉強してみたいと思います。ありがとうございました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

有効範囲(スコープ)について復習することを強くお勧めします。

Nabe1992-6
質問者

お礼

すみません、補足とお礼をクリックし間違えました。

Nabe1992-6
質問者

補足

スコープ、ですね。他の方の解答をみても、よほど基礎的なミスをしていたようです。ありがとうございました。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

回答ではないのですが、このような問題が生じたら、入力した 値をそのまま出力してみることをお勧め致しますね。それで 何かが分かるかもしれません。 それから、プログラムは与えられた値をそのまま信じて処理する ということは有得ません。PCには扱える値の範囲と言うものがあ ります。それを超えた値が入力されたら、エラーではじかなければ プログラムとは言えないでしょう。 そのような機能が必要であることを学ぶのもプログラミング学習 です。一般的には、このプログラムは仕様ミスと分類されるバグが ある、ということになります。

Nabe1992-6
質問者

お礼

ありがとうございます。エラーではじくことについても、勉強してみたいと思います。

関連するQ&A