一、判断三角形的类型:
要求:输入三角形a、b、c三个数值,判断三角形的类型。
#include <stdio.h>
#include <math.h>
#define EPS 1e-1
int main()
{
float a,b,c;
while(1)
{
printf("Input a,b,c:");
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>c&&a+c>a&b+c>a)
{
if(a==b&&b==c&&a==c)
{
printf("等边三角形\n");
}
else if(fabs(a-b)<=EPS||fabs(b-c)<=EPS||fabs(c-a)<=EPS)
{
if(fabs(a*a+b*b-c*c)<=EPS||fabs(a*a+c*c-b*b)<=EPS||fabs(c*c+b*b-a*a)<=EPS)
printf("等腰直角三角形\n");
else printf("等腰三角形\n");
}
else if(fabs(a*a+b*b-c*c)<=EPS||fabs(a*a+c*c-b*b)<=EPS||fabs(c*c+b*b-a*a)<=EPS)
{
printf("直角三角形\n");
}
else
{
printf("普通三角形\n");
}
}
else if(a+b<=c||a+c<=b||c+b<=a)
{
printf("不是三角形\n");
}
}
}
二、百分制换五分制:
#include <stdio.h>
int main()
{
int score,mark;
printf("Please enter score:");
scanf("%d",&score);
mark=score/10;
switch(mark)
{
case 10:
case 9:
printf("%d--A\n",score);
break;
case 8:
printf("%d--B\n",score);
break;
case 7:
printf("%d--C\n",score);
break;
case 6:
printf("%d--D\n",score);
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
printf("%d--E\n",score);
break;
default:printf("Input error!\n");
}
return 0;
}
上述程序存在一定问题,例如当输入101-109是整数除法结果都是10;
当输入小于0时结果都是0。因此,就需要在原有的基础上进行改进。
#include <stdio.h>
int main()
{
int score,mark;
printf("Please enter score:");
scanf("%d",&score);
mark=score<0||score>100? -1:score/10;
// mark=score/10;
switch(mark)
{
case 10:
case 9:
printf("%d--A\n",score);
break;
case 8:
printf("%d--B\n",score);
break;
case 7:
printf("%d--C\n",score);
break;
case 6:
printf("%d--D\n",score);
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
printf("%d--E\n",score);
break;
default:printf("Input error!\n");
}
return 0;
}
三、对输入非法字符的检查与处理
scanf()也是存在返回值的。所以,我们可以利用返回值来判断输入数据个数或者格式是否有错。
输入时要注意存储器存储数据的范围,超出范围,则会导致程序运行出错,显示异常。
#include <stdio.h>
int main()
{
int a,b,max,ret;
while(1)
{
printf("Input a,b:");
ret=scanf("%d,%d",&a,&b);
if(ret!=2)
{
printf("Input data quantity or format error\n");
fflush(stdin);
}
else
{
max=a>b?a:b;
printf("max=%d\n",max);
}
// return 0;
}
}