10秒目をつむったら…

とりあえず、自分でプログラムしましたが、どこか間違っているようです。僕のプログラムを載せますので、どこが間違っているのか教えて下さい。あと、正しいプログラムを書いていただければ幸いです。
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");
}
}

A 回答 (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)のような間違いをするレベルの初心者の割に、プログラム全体としてはよく書けていると思います。
    • good
    • 0

>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が逆になってるだけなので同じですよ?
    • good
    • 0

> C言語のプログラミングがうまくいきません!



ただ「うまくいかない」だけでなく、どのようにうまくいかないのか、現状を把握するのが、修正するときのコツであり、上達のコツです。

○ これ、このままだとコンパイルエラーになりませんか?
コンパイルエラーは一番修正しやすい間違いです。
まず、それを修正しましょう。

○計算結果がおかしい
どの時点でおかしくなっているかを調べます。
例えば、入力した値と、変数の値が違っている、等。
そして、何故そうなったかを考えます。

そういえば、先日、こんな質問がありました
http://oshiete.goo.ne.jp/qa/8101543.html

あと、printfのマニュアルで、「書式」って箇所を良く読んでみましょう。
%dに対応する型は何となってますか?そして、変数mensekiの型は何でしょう?
    • good
    • 0

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