根据输入的三角形的三条边判断三角形的类型,并输出他的类型
初步想法:先判断能不能够成三角形,可以再判断是否三边相等,是则等边,不是则判断是否两边相等,两边相等则为等腰三角形,否则为其他。
测试用例 遇到的困难:1.怎么判断有效输入?
第一个想法是通过scanf来统计,后来我发现这么做是有缺陷的,万一他要是输入了一个字母,直接就被转换成了ASCII,这么做是行不通的
第二个想法就是用字符串、数组来处理输入
2.在完成了初步的程序设计之后,遇到了一个问题,就是这个数字老师并没有规定它到底应该有多大,所以这就牵涉到了高精度算法。
解决第一个问题的代码:
#include#include int ctmAtoi(char T[]){ register int i; int base=1, result=0; for(i=strlen(T)-1; i>=0; i--) result+=base*(T[i]-'0'), base*=10; return result; } int main(){ register int i; char ac[256], bc[256], cc[256]; printf("请输入三角形的三条边:") ; scanf("%s%s%s", ac, bc, cc); int cnt=1; for(i=0; i '9') cnt=0; for(i=0; i '9') cnt=0; for(i=0; i '9') cnt=0; int a=ctmAtoi(ac), b=ctmAtoi(bc), c=ctmAtoi(cc); if(a==0 || b==0 || c==0) cnt=0; if(cnt == 0){ printf("非法输入"); return 0; } if((a+b)>c&&(a+c)>b&&(b+c)>a) { if((a==b)&&(b==c)) printf("是等边三角形"); else if ((a==b)||(b==c)||(a==c)) printf("是等腰三角形") ; else printf("一般三角形"); } else printf("非三角形") ; return 0; }
解决第二个问题后的代码:
#include#include #include #define maxlen 10000 typedef struct{ char num[maxlen]; int len; }BigInt; int i,j,k; void printBigInt(BigInt T){ for(i=T.len-1; i>=0; i--) printf("%d",T.num[i]); } BigInt toBigInt(char str[]){ BigInt T; T.len=strlen(str); for(i=0; i if(a.len > b.len) return '>'; if(a.len < b.len) return '<'; for(i=a.len-1; i>=0; i--){ if(a.num[i] == b.num[i]) continue; if(a.num[i] > b.num[i]) return '>'; if(a.num[i] < b.num[i]) return '<'; } return '='; } BigInt addBigInt(BigInt a, BigInt b){ if(a.len < b.len) return addBigInt(b,a); BigInt d; d.len = 0; char t = 0; for(i=0; i t += a.num[i]; if(i < b.len) t+=b.num[i]; d.num[d.len++] = t % 10; t /= 10; } if(t) d.num[d.len++]=t; return d; } int main(){ char astr[maxlen], bstr[maxlen], cstr[maxlen], zero[maxlen]="0"; printf("input a:"); scanf("%s", astr); printf("input b:"); scanf("%s", bstr); printf("input c:"); scanf("%s", cstr); int cnt = 1; for (i = 0; i < strlen(astr); i++) if (astr[i] < '0' || astr[i] > '9') cnt = 0; for (i = 0; i < strlen(bstr); i++) if (bstr[i] < '0' || bstr[i] > '9') cnt = 0; for (i = 0; i < strlen(cstr); i++) if (cstr[i] < '0' || cstr[i] > '9') cnt = 0; BigInt a=toBigInt(astr), b=toBigInt(bstr), c=toBigInt(cstr); if (cmpBigInt(a,toBigInt(zero)) == '=' || cmpBigInt(b,toBigInt(zero)) == '=' || cmpBigInt(b,toBigInt(zero)) == '=' ) cnt = 0; if (cnt == 0) { printf("Illegal input!n"); return 0; } if( cmpBigInt(addBigInt(a,b), c)=='>' && cmpBigInt(addBigInt(a,c), b)=='>' && cmpBigInt(addBigInt(b,c), a)=='>') { if(cmpBigInt(a,b)=='=' && cmpBigInt(b,c)=='=') printf("It is an equilateral triangle.n"); else{ if(cmpBigInt(a,b)=='=' || cmpBigInt(b,c)=='=' || cmpBigInt(a,c)=='=') printf("It is an isosceles triangle.n") ; else printf("It is an ordinary triangle.n"); } } else printf("It is not a triangle.n") ; return 0; }



