重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

#include <stdio.h>
#include <math.h>

int main()
{
double x;

for (x=0.0; x<=10.0; x+=1.0){
printf("The square root of %f is %f\n", sqrt(x));
}
return 0;
}
をgcc -lm XXX.cでコンパイルしようとすると

XXX.c:関数:'main'内:
XXX.c:9:3: 警告:書式'%f'は対応した'double'引数が予期されます[-Wformat]/tmp/ccPq0KS7.o: In function 'main' 
XXX.c: (text+0x2d) undefined reference to 'sqrt'
collect2: ldはステータス1で終了しました、

となります。相当な素人ですがどなたか問題点をご指摘いただければと存じます。

A 回答 (2件)

>をgcc -lm XXX.cでコンパイルしようとすると



手元のversion 4.4.6では、gcc -lm xxx.c でも大丈夫でしたが、念のため、gcc xxx.c -lm でやってください。
    • good
    • 0
この回答へのお礼

おお!
うまくいきました。有難うございました。

お礼日時:2012/09/11 21:55

>printf("The square root of %f is %f\n", sqrt(x));



引数が1個たりないですね。%fが2個あるってことは、sqrt(x)だけでなく、xも出力するのでは?


また、for文の変数をdouble型でやってしまうのは誤差があるので期待した回数だけ実行しない可能性があります。for文の変数自体はint型で行い、sqrtの引数として渡す時にdoubleへキャストした方が間違いないと思います。

この回答への補足

引数の件はお恥ずかしい次第でした。引数の追加では事情はかわりませんでした。
アドバイスですが、初めはxをint x;で宣言し、sqrt(double x)と書くのでしょうか?

補足日時:2012/09/11 20:52
    • good
    • 0
この回答へのお礼

早速の回答大変有難うございます。

お礼日時:2012/09/11 20:51

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