判斷輸入的三條邊是否能組成三角形


練習題:編寫一個程序根據輸入的三角形的三條邊判斷是否能組成三角形,如果可以 則輸出它的面積和三角形類型(等邊、等腰、直角三角形)。

題目分析

  1. 這道題查了一些網上的參考,大多使用if(...)else if(...)對不同類型的三角形進行划分,但實際上,直角三角形和等腰三角形有一部分重合的三角形:等腰直角三角形。也就是在輸入等腰直角三角形時,會根據“等腰三角形”或“直角三角形”兩個條件,誰在前面就顯示哪個三角形,不會進一步判斷
  2. 其次,許多范例使用float類型進行運算,考慮到輸入時根號下的數只能通過小數表示,如果直角的判斷條件為(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)時,輸入邊長(1 1 1.414),因為1.414*1.414≈1.96,只能判斷為等腰三角形

針對以上兩個問題,對參考范例進行了優化。

優化思路

  1. 將直角三角形的判斷中增加一個等腰判斷,同時符合“等腰”和“直角”條件的三角形會輸出為“等腰直角三角形”;
  2. 使用double進行計算,並使用round函數對邊長的平方進行四舍五入,解決輸入端無法精確輸入根號邊長,導致無法判斷某些直角三角形的問題

代碼

點擊查看代碼
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

void timu_8() {
	double a, b, c;
	double s, area;
	printf("請輸入三角形的三條邊(空格分開):");
	scanf("%lf %lf %lf", &a, &b, &c);
	double A = round(a * a);
	double B = round(b * b);
	double C = round(c * c);
	
	if (a + b > c && a + c > b && b + c > a) {
		s = (a + b + c) / 2;
		area = sqrt(s * (s - a) * (s - b) * (s - c));
		printf("面積是:%.2lf\n", area);
		if (a == b && a == c) {
			printf("等邊三角形。\n");
		}
		else if (A + B == C || A + C == B || B + C == A) {
			if (a == b || a == c || b == c) {
				printf("等腰直角三角形。\n");
			}
			else {
				printf("直角三角形\n");
			}
		}
		else if (a == b || a == c || b == c) {
			printf("等腰三角形。\n");
		}
		else {
			printf("普通三角形。\n");
		}
	}
	else {
		printf("不能構成三角形。\n");
	}
}

int main() {
	printf("hallo world\n"); //確認終端是否正常啟動
	timu_8();
	return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM