![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
「二辺の長さが与えられているとき、斜辺の長さを求めよ」という問題です。
#include <stdio.h>
#include <math.h>
#define a 3
#define b 4
int main (void)
{
double c=0;
c=sqrt(a*a+b*b);
printf("%f",c);
return 0;
}
visual2010c++で作ったんですが、sqrtに下線がついて、コンパイルエラーしちゃいます。
すんごい初歩的なことなんだと思いますが、どこなのか気づけません。
どなたかよろしくお願いします。
No.4ベストアンサー
- 回答日時:
sqrt()の引数が合っていないということでしょう。
一般的に
double sqrt( double );
ですが、引数が#defineされていて、3と4。
これは、整数なので、「a*a+b*b」の計算結果は整数。
よって、
#define a 3.0
とするか、
c=sqrt(0.0+a*a+b*b); // 「0.0+」を付けて実数計算にした。
c=sqrt(1.0*a*a+b*b); // 「1.0*」を付けて実数計算にした。
とすれば良いでしょう。
それと、C++モードでコンパイルされている様ですが、Cモードでコンパイルすれば、
c=sqrt(a*a+b*b); /* Cモードでコンパイルしよう。 */
のままでO.K.なはず。
C言語は同名の関数を定義できず、関数の引数に合わせてキャストしてくれますが、C++は同名で引数の違う関数を定義できるので関数の引数が合わないと関数が存在しないことになってしまう。
No.6
- 回答日時:
C言語をやるなら、『型』の概念は完璧にしてください。
sqrt()の引数、戻り値は浮動小数型です。 おそらく「オーバーロードが見つからない」旨のエラーが出たのでしょう。 引数をdouble型にしてください。
No.5
- 回答日時:
> C言語で直角三角形の斜辺を求めるプログラムについて
ここに嘘があります。
「C言語」ではなく、C++ですね。
> sqrtに下線がついて、コンパイルエラーしちゃいます。
C++のmath.hでは、三種類のsqrt関数が多重定義されています。
float sqrt(float);
doble sqrt(double);
long double sqrt(long double);
これに対して、aもbもint型ですので、それらを組み合わせた式 a*a+b*b もint型になり、どのsqrt関数を選べばよいのかコンパイラには判断が付かないのです。
一方、Cの場合、こうした多重定義はできませんから、
float sqrtf(float);
doble sqrt(double);
long double sqrtl(long double);
のように関数名が異なります。
結果として、int型の実引数を渡しても、選ぶべきsqrt関数は一種類だけなのです。
ちなみに、Visual C++ 6.0のような標準準拠度の低い処理系では、上記のCの場合と同様になっているため、コンパイルエラーになりません。
No.3
- 回答日時:
Visual C++ 6.0ではエラーは起きないです。
実行結果は
5.000000
です。
1.コンパイル環境によって
sqrt関数が違うのでしょう。
2.
Visual C++では
double sqrt( double x );
です。
#define a 3.0
#define b 4.0
double c=0.0
以上のようにしたらどうでしょうか。
3.
math.hではないのか
ところで
でも通常cは char型の変数を用いることが多いようです。
プロになってからcを charと間違えないようにしてください。
No.1
- 回答日時:
コンパイルしたときに出るエラーメッセージの全文を、そのまま貼り付けてください。
この回答への補足
error C2668: 'sqrt' : オーバーロード関数の呼び出しを解決することができません。
math.h(589): 'long double sqrt(long double)' の可能性があります。
math.h(541): または 'float sqrt(float)'
math.h(127): または 'double sqrt(double)'
引数リスト '(int)' を一致させようとしているとき
全文は難しいので・・・
No2の人が言っているところを張り付けました。
けど、よくわかりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C言語 3 2022/10/04 15:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
至急です! マクロ定義で #defi...
-
C言語を実行すると-infが出てき...
-
C言語 関数プロトタイプ宣言の...
-
float型とdouble型の変数の違い...
-
doubleは常に%lfとするべきなのか
-
c言語のコンパイルエラー canno...
-
c言語で、繰り返し文の中で、0....
-
ax^2+bx+c=0の解を求めたいので...
-
2次方程式の解を求めるプログ...
-
doubleの変数にintとintの割り...
-
C言語で-23乗を取り扱うには
-
C言語の複素数についてです。
-
-1.#IND00と出てしまうのですが...
-
C 開放してるのにエラー(doubl...
-
c++について質問です
-
difftime()について
-
MQL4での条件文の書き方
-
たくさんの数の平均を求める方...
-
2次方程式の解
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
C言語 関数プロトタイプ宣言の...
-
関数におけるif文とreturn文に...
-
C 開放してるのにエラー(doubl...
-
C言語の型による処理速度の違い
-
至急です! マクロ定義で #defi...
-
doubleは常に%lfとするべきなのか
-
Cで3乗根を求める方法
-
-1.#IND00と出てしまうのですが...
-
C言語で-23乗を取り扱うには
-
C++で外積
-
2次方程式の解を求めるプログ...
-
方程式を2分法を用いて解くプロ...
-
ニュートン法
-
c言語のコンパイルエラー canno...
-
difftime()について
おすすめ情報