正三角形、二等辺三角形、直角三角形、直角二等辺三角形、不等辺三角形、三角形ではないを判別するプログラムを以下のように書きました。
#include<stdio.h>
int main(void)
{
int a,b,c;
printf("三角形の3辺の長さを入力して下さい:");
scanf("%d %d %d",&a,&b,&c);
if(a+b<c||a+c<b||b+c<a)
{
printf("これは三角形ではありません。");
}
else{
if((a==b==c)) printf("これは正三角形です。");
else if(((c*c==a*a+b*b)||(a*a==b*b+c*c)||(b*b==a*a+c*c))&&(a==b||a==c||b==c)) printf("これは直角二等辺三角形です。");
else if((c*c==a*a+b*b)||(a*a==b*b+c*c)||(b*b==a*a+c*c)) printf("これは直角三角形です。");
else if((a==b||a==c||b==c)) printf("これは二等辺三角形です。");
else printf("これは不等辺三角形です。");
}
return 0;
}
しかし、これではなぜか入力1,1,1だと正三角形とでるのですが、2,2,2以降は二等辺三角形と出てしまいます。原因が分からないので教えてくださいお願いします。あとこうしたらいいところとか間違いがあればお願いします。
No.3ベストアンサー
- 回答日時:
「if((a==b==c)) 」
この部分ですが、正しくは
「if((a==b)&&(b==c))」
でしょう。なぜなら、「2,2,2」の時は
「a==b」→2==2
を判断します。
その結果真ですから「true」(1)が返ってきます。
その結果と
((a==b)==c))→true==2
と判断しているので、「true」(1)と「c」(2)を比較して「false」になっているのです。
No.6
- 回答日時:
★三角形の特徴を整理してからアルゴリズムを組む。
・三角形の判定のヒントとして
(1)正三角形の判定…すべての『辺』が同じ長さのとき成立
(2)不等辺三角形の判定…すべての『辺』の長さが異なるとき成立
(3)二等辺三角形の判定…2つの『辺』が同じ長さのとき成立
(4)直角三角形の判定…一番長い『辺』を c としたとき c^2=(a^2)+(b^2) となる。→ピタゴラスの定理より
をサブ関数として作ります。そしてこれを使って下のようにします。
擬似コード:
if ( 正三角形の判定 ){
printf( "正三角形\n" );
}
else if ( 二等辺三角形の判定 ){
if ( 直角三角形の判定 ){
printf( "直角二等辺三角形\n" );
}
else{
printf( "二等辺三角形\n" );
}
}
else if ( 直角三角形の判定 ){
printf( "直角三角形\n" );
}
else if ( 不等辺三角形の判定 ){
printf( "不等辺三角形\n" );
}
else{
printf( "三角形ではない\n" );
}
最後に:
・下の『参考URL』に三角形の資料を張っておきます。
これと上記の擬似コードを参考にすれば上手く判定できると思います。
・なお、判定用の関数を4つ作成してから処理すれば分かりやすくなります。
main() 関数1つで処理させるのは見苦しいと思うよ。
つまり、上記の擬似コードを main() 関数に記述するのです。
判定用の関数名は分かりやすい名前を付けておこう。
・以上。参考に!
参考URL:http://ja.wikipedia.org/wiki/三角形
No.5
- 回答日時:
>int a,b,c;
三辺とも整数のとき、直角二等辺三角形になることはありません。
No.1
- 回答日時:
> if((a==b==c)) printf("これは正三角形です。
");a==b==c は (a==b)==c と同じです。
a==bはaとbが等しいとき1等しくないとき0なので、
aとbが等しいときは、
(a==b)==c → 1==c
となり、cが1でないと真になりません。
試しに、(a,b,c)=(2,2,1)などと入れてみると、
「これは正三角形です。」と出るのではないでしょうか。
修正は、
a==b && b==c
で良いと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 1.5:2:3=直角三角形 1:2:√3≠直角三角形ではない。 1:1:√2≠直角二等辺三角形ではな 12 2022/12/21 23:45
- 数学 直角二等辺三角形についてです。 直角二等辺三角形ABCを(角A=90度)頂角Aから底辺BCに垂直に線 3 2023/06/05 23:05
- 数学 【数学の図形の名称と面積の計算方法】正三角形と扇形があります。正三角形の2辺を伸ばす 9 2023/02/06 23:30
- 数学 画像の中学2年生の数学の問題について教えていただきたいです。 三角形ADCが二等辺三角形であることと 2 2023/01/29 16:14
- 数学 角度当てクイズVol.225の解き方おしえてください 1 2023/06/23 17:45
- 数学 正五角形の対角線と求角 添付の画像、36°と求められるのですけど、 私は正五角形の内角の1つを108 5 2022/10/20 15:00
- 数学 複素数平面についての問題です。 2点α、βが定められており、それらともう1点γと結ぶ三角形が直角二等 6 2023/06/30 09:47
- 数学 中3 円周角の定理の問題です 3 2022/06/29 22:21
- 数学 数学の問題の解き方を教えて下さい。 ∠Aが直角の直角三角形ABCで、∠Bの二等分線と辺ACとの交点を 7 2022/05/06 21:52
- 数学 高校一年生です。 数学で分からない単元があるので教えて欲しいです。単元は命題の真偽です。 出た課題の 4 2023/08/18 16:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
【C言語教えてください】sin波...
-
strcmp
-
コンパイルエラーについて
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
cshの文字列操作(0埋め)
-
4の倍数を論理演算で表す。。
-
C言語 プログラミング
-
%P と %X の違い
-
8人分のテストの点数を入力し、...
-
C言語での、年複利の計算方法...
-
printf( " %2d", p * q );
-
hit&bolwのプログラミングがで...
-
scanfに文字が入力されたときに...
-
error C2143: 構文エラー : ';'...
-
printfの出力内の文字をdefine...
-
テキストカーソル位置の取得
-
unsigned int型について
おすすめ情報