アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語を少しずつですが勉強していて、最小値から最小値までの和を求めるのと、入力した数の2乗を求めるプログラムはわりと楽に完成したのですが、平方根を求めるというのができずに困っています。

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

A 回答 (7件)

★最初に 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 );
 ↑
 関数名がおもしろいね。→魚と野菜を処理するの?
 ※処理が分かるような名前をつける事をお勧めします。
・以上。
    • good
    • 0
この回答へのお礼

貼り付けてしまうと、長くなってしまうかな、と思ったのでアップロードしましたが、貼り付けたほうがよいのですね。もし、また質問することがあれば(できればない方が良いのですが)そうしたいと思います。

関数名ですが、subとしたらエラー(もしかしたら他の所に問題があったのかも知れません)が出たので適当につけてしまいました。今度は処理がわかるようにしたいと思います。

お礼日時:2007/09/06 17:39

>double zene,daikon;


>scanf("%f",&zene);
型が違います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/06 17:42

int main( void ){


double zene,daikon;
}
void sabadaikon( void ){
double zene,daikon;
}
これらの変数は同じ名前でも全く違うものです。

変数のスコープについて
関数内で宣言された変数はその関数内のみで有効です
関数の外で宣言された変数はそのファイル内で有効です
このような変数の有効範囲をスコープと呼びます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/06 17:41

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/06 17:40

ある関数(例えばmain)から別のある関数(例えば平方根を求める関数)に


仕事を依頼するときに、
「平方根を求めたい数」を「引数」で渡して、
「求めた平方根」を「戻り値」で返してもらう、
という考え方を勉強してください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/06 17:36

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

この回答への補足

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

補足日時:2007/09/06 17:34
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/06 17:36

回答ではないのですが、このような問題が生じたら、入力した


値をそのまま出力してみることをお勧め致しますね。それで
何かが分かるかもしれません。

それから、プログラムは与えられた値をそのまま信じて処理する
ということは有得ません。PCには扱える値の範囲と言うものがあ
ります。それを超えた値が入力されたら、エラーではじかなければ
プログラムとは言えないでしょう。

そのような機能が必要であることを学ぶのもプログラミング学習
です。一般的には、このプログラムは仕様ミスと分類されるバグが
ある、ということになります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/06 17:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!