- 締切済み
関数呼び出しを使った、絶対値出力プログラムについて質問です。
すみませんが、このプログラムを見てもらえませんか? 絶対値が上手く表示できません。よろしくお願いします。 #include <stdio.h> double myabs(double); main() { double x,a; printf("Input number = "); scanf("%lf", &x); if(x < 0) { a = myabs(x); printf("Zetaitti = %f\n", a); } else { printf("Zetaitti = %f\n", x); } } double myabs(double x) { double a; x = -x; return(a); }
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- tatsu99
- ベストアンサー率52% (391/751)
>すみませんが しつこいようですけど >最後にXに返すとは、main()関数のどこのXに返しているのですか? >何度もすみません。 Xに返すのではなく、Xの内容を返しています。 従って、Xの内容が3であれば、3が返ります。 これは、この関数をよびだしたところの行の a = myabs(x); で aがその3の値を受け取ることをしめしています。 従って return(X)と書こうが、return(Y)と書こうが、受け取るほうに影響はありません。大切なのは、Xの内容(又はYの内容)です。この内容を呼び出し側は受け取りますから。
- dekopa-
- ベストアンサー率42% (161/378)
「絶対値を返す」なら、if文も含めて関数にしないと。 main() 中略 double a = myabs(x); printf("Zetaitti = %f\n", a); double myabs(double x) { if (x < 0) return -x; else return x; }
- koko_u_
- ベストアンサー率18% (459/2509)
何故みんな関数名が myabs() なのに、符号を反転させる関数で OK としているのですか? 今回、main 側で符号を判断してるけど、そんなことを前提にして関数を書いてるんじゃないよね?
- tatsu99
- ベストアンサー率52% (391/751)
double myabs(double x) { double a; x = -x; return(a);・・・・これを return(x);にしてください。 }
補足
ありがとうございます。 無事に実行できました。 すみませんが しつこいようですけど 最後にXに返すとは、main()関数のどこのXに返しているのですか? 何度もすみません。
- ymmasayan
- ベストアンサー率30% (2593/8599)
> double myabs(double x) > { > double a; > x = -x; > return(a); > } a = -x; かと。 蛇足ですがmainのaと関数内のaは別物であることにご注意ください。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・なぜ、double a; を宣言しているのですか。 また、その a を返していますが x を返せば良いと思いますよ。 double myabs( double x ) { return( -x ); } ↑ で良いのでは。
- koko_u_
- ベストアンサー率18% (459/2509)
>double myabs(double x) >{ >double a; > >x = -x; > >return(a); >} a には最初から最後まで何も代入されてませんが。。。 変数のスコープについて勉強して下さい。
お礼
あぁ そういう事だったのですね。 ありがとうございました。 自分でも もっと勉強してみます。 ありがとうございました。