1

以下は、辺が与えられたときに三角形の面積を計算するプログラムのソースコードです。

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

void main()
{
int a,b,c;
float s,area;
clrscr();
printf("Enter the lengths of the sides of the triangle:\n");
scanf("%d%d%d",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("Area=%f",area);
getch();
}

TurboC++コンパイラバージョン3.0を使用してプログラムをコンパイルしました。辺を10、10、10とすると、面積は43.301270になります。これは正しいです。しかし、値を1、1、1として差し込むと、プログラムは面積を0.000000と表示しますが、これは明らかに間違っています。さらに、3、3、3の値をプラグインすると、面積が2.000000になりますが、これは間違っています。

プログラムの不安定な動作の理由を知っている人はいますか?どうすれば修正できますか?プログラムをZipファイルとしてアップロードしました

前もって感謝します。

4

3 に答える 3

6

切り捨ての計算に整数演算を使用してsおり、切り捨てに苦しんでいます。このようにプログラムを変更して、浮動小数点演算を使用します。

s=(a+b+c)/2f;
于 2011-09-29T10:40:16.580 に答える
3

a、、、bおよびのそれぞれcint;であると仮定します。次にa+b+cですint
2intです。

(a + b + c) / 2整数除算です。

試してみてください(a + b + c) / 2.0

doubleまた、浮動小数点値にはsを使用することをお勧めします。

于 2011-09-29T10:44:03.013 に答える
1
s =((float)a + b + c)/2.0f; 
于 2011-09-29T10:41:17.117 に答える