とりあえず、自分でプログラムしましたが、どこか間違っているようです。僕のプログラムを載せますので、どこが間違っているのか教えて下さい。あと、正しいプログラムを書いていただければ幸いです。
3つの辺の長さをx、y、zに代入して三角形が成立すれば、その形状と面積をヘロンの公式を使って求める。
#include <stdio.h>
#include <math.h>
{
double x ,y, z ,error ,menseki ,ans;
printf("x ?") scanf("%f" , &x);
printf("y ?") scanf("%f" , &y);
printf("z ?") scanf("%f" , &z);
ans=(x+y+z)/2;
menseki=sqrt(ans*(ans-x)*(ans-y)*(ans-z));
if (x === y || y == z || x == z)
{
printf ("正三角形です");
printf("面積は%dです" , menseki);
}
else if (x == y || y == z || z == x)
{
printf("二等辺三角形です");
printf("面積は%dです" , menseki);
}
else
{
printf("三角形です");
printf("面積は%dです , menseki);
if(x<y+z || y<x+z || z<x+y)
{
printf("error");
}
}
No.3ベストアンサー
- 回答日時:
mainという関数ヘッダや、セミコロンが不足して文法エラーのところがありますが、これはタイプミスかコピペミスでしょうね。
それら以外の、明白な誤りは6点。
<この問題特有>
(1) 三角形が成立しているかどうかの判断を最初にすべき。正三角形や二等辺三角形の判断は、三角形が成立したときに限って行う。また、判断する前に面積を求めているが、三角形でない場合にsqrtの引数が負になって、そこでエラーになるかもしれないので、これも三角形判断後に行う。
(2) 三角形かどうかの判断基準がおかしい。
(3) 正三角形の判断で、AND条件(&&)と、OR条件(||)を間違えている。
<Cの使い方一般>
(4) double値の変数なのにscanfの書式で %f を使っている。
(5) double値のprintfなのに書式で %d を使っている。
(6) scanfの戻り値をチェックしていない。
<その他の良くない点>
(7) scanfは使いこなしが難しい関数なので、上級者の自信が付くまでは使ってはいけません。文字配列を定義して、fgets()でそこに入力して、sscanf() でdoubleに変換してください。sscanfも同様に戻り値のチェックが必要です。
(8) 標準出力にプロンプトを出している。これがなぜ良くないかは説明が難しいので、とりあえずわからなくてもいいです。
(4)(5)(6)のような間違いをするレベルの初心者の割に、プログラム全体としてはよく書けていると思います。
No.2
- 回答日時:
>printf("x ?") scanf("%f" , &x);
scanfの書式指定を確認してください。
>if (x === y || y == z || x == z)
===(=3つ)はC言語の演算子にはありません。
if (x == y || y == z || x == z)
は
x == y
y == z
x == z
のどれか1つでも条件が成立すればいいです(厳密には違いますけど)。
ですので x, y, z の3つが同じという意味にはなりません。
>if (x === y || y == z || x == z)
>else if (x == y || y == z || z == x)
最後の x == z と z == x は x, zが逆になってるだけなので同じですよ?
No.1
- 回答日時:
> C言語のプログラミングがうまくいきません!
ただ「うまくいかない」だけでなく、どのようにうまくいかないのか、現状を把握するのが、修正するときのコツであり、上達のコツです。
○ これ、このままだとコンパイルエラーになりませんか?
コンパイルエラーは一番修正しやすい間違いです。
まず、それを修正しましょう。
○計算結果がおかしい
どの時点でおかしくなっているかを調べます。
例えば、入力した値と、変数の値が違っている、等。
そして、何故そうなったかを考えます。
そういえば、先日、こんな質問がありました
http://oshiete.goo.ne.jp/qa/8101543.html
あと、printfのマニュアルで、「書式」って箇所を良く読んでみましょう。
%dに対応する型は何となってますか?そして、変数mensekiの型は何でしょう?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストカーソル位置の取得
-
printf で二進表示を行いたい。
-
コンパイルエラーについて
-
既約分数の表示プログラム
-
C言語について
-
c言語超初心者です。教えてくだ...
-
オセロを作成 助言お願いしま...
-
wsprintfの書式制御文字列につ...
-
【C言語教えてください】sin波...
-
for文内でscanf関数により配列...
-
ホームページをC言語で作りたい...
-
16bitのパラレル送信がうまくい...
-
プログラミングの問題です。 C+...
-
【C初心者】+,-,*./について【...
-
分数を表示するプログラム(長...
-
4の倍数を論理演算で表す。。
-
C言語で四則演算を使って結果が...
-
C言語
-
C言語 この問題が分かりません...
-
円の面積を求めるプログラミン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンパイルエラーについて
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
テキストカーソル位置の取得
-
4の倍数を論理演算で表す。。
-
cshの文字列操作(0埋め)
-
【C言語教えてください】sin波...
-
10個出力で改行したいのですが...
-
wsprintfの書式制御文字列につ...
-
error C2143: 構文エラー : ';'...
-
printfの出力内の文字をdefine...
-
%P と %X の違い
-
C言語
-
strcmp
-
(C言語)めちゃくちゃな値にな...
-
コマンドラインに出力した文字...
-
スレッドとメッセージキューに...
-
printf( " %2d", p * q );
-
Visual Sutdio 2017 でのC言語...
-
defineで定数が置き換えられな...
おすすめ情報