首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

测试版2 c语言创建三角形,该怎么解决

2012-03-21 
测试版2 c语言创建三角形/*名称:创建三角形需求:任意输入三条线段的长度,判断它们可以组成一个什么形状的

测试版2 c语言创建三角形
/*
名称:   创建三角形

需求:   任意输入三条线段的长度,判断它们可以组成一个
    什么形状的三角形(锐角三角形   钝角三角形   等腰三角形   等边三角形   直角三角形   等腰直角三角形)

实现:   首先判断输入的数据是否满足构建一个三角形,IsOk()实现此功能
    如果不满足则要求重新输入一组数据,直到满足要求。

    通过调用Form   ()函数我们可以知道这是个什么形状的三角形
     
    主函数规定了输入结束的条件

编译环境:   VC6.0        

版本号:     beta   2
*/

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

/*   对被调函数进行申明   */
int   IsOk   (double   x,   double   y,   double   z);/*   判断是否可以组建一个三角形   */
void   Form   (double   x,   double   y,   double   z);/*   判断三角形的形状   */

int   main   (void)
{
double   x,   y,   z;/*   三角形的三条边   */
int   check   =   0;/*   程序结束的判断条件   */

/*   格式控制,使光标处于屏幕中央   */
for   (int   i=0;   i <10;   i++)
{
printf   ( "\n ");
}
for   (int   j=0;   j <26;   j++)
{
printf   ( "   ");
}
puts   ( "> > > > >   欢迎使用本软件   < < < < < ");
printf   ( "\n\t\t\t\t ");
system   ( "pause ");/*   等待键盘输入   */
system   ( "cls ");/*   清屏   */
puts   ( "\n任意输入三条边长 ");

/*   程序结束的条件   */
while   (!check)
{
printf   ( "\n提示:   请在你输完一个数字后按回车以便输入下一个数\n\n输入第一条边长: ");
while   (scanf   ( "%lf ",   &x)   !=   1   ||   x   <=   0)  
{
while   (getchar   ()   !=   '\n ')   /*   将堵在输入流中的后半行字符读入并抛弃(这个地方写得好)   */
;
system   ( "cls ");
printf   ( "\n边长只能为大于0的数字!\n\n重新输入第一条边长: ");
}

printf   ( "\n输入第二条边长: ");
while   (scanf   ( "%lf ",   &y)   !=   1   ||   y   <=   0)  
{
while   (getchar()   !=   '\n ')  
;
system   ( "cls ");
printf( "\n边长只能为大于0的数字!\n\n重新输入第二条边长: ");
}

printf   ( "\n输入第三条边长: ");
while   (scanf   ( "%lf ",   &z)   !=   1   ||   z   <=   0)  
{
while   (getchar()   !=   '\n ')  
;
system   ( "cls ");
printf( "\n边长只能为大于0的数字!\n\n重新输入第三条边长: ");
}

/*   当输入的数字无法满足构建一个三角形   */
while   (!IsOk   (x,   y,   z))
{
system   ( "cls ");
puts   ( "\n抱歉!!不满足构建一个三角形,请重输! ");
printf   ( "\n提示:   请在你输完一个数字后按回车以便输入下一个数\n\n输入第一条边长: ");
while   (scanf   ( "%lf ",   &x)   !=   1   ||   x   <=   0)  
{
while   (getchar   ()   !=   '\n ')   /*   将堵在输入流中的后半行字符读入并抛弃(这个地方写得好)   */
;
system   ( "cls ");
puts( "\n边长只能为大于0的数字!\n\n重新输入第一条边长: ");
}



printf   ( "\n输入第二条边长: ");
while   (scanf   ( "%lf ",   &y)   !=   1   ||   y   <=   0)  
{
while   (getchar()   !=   '\n ')  
;
system   ( "cls ");
printf( "\n边长只能为大于0的数字!\n\n重新输入第二条边长: ");
}

printf   ( "\n输入第三条边长: ");
while   (scanf   ( "%lf ",   &z)   !=   1   ||   z   <=   0)  
{
while   (getchar()   !=   '\n ')  
;
system   ( "cls ");
printf( "\n边长只能为大于0的数字!\n\n重新输入第三条边长: ");
}
}

system   ( "cls ");
printf   ( "\n你输入的数据(精确到小数点后7位)是:   %.7lf   %.7lf   %.7lf\n ",   x,   y,   z);
printf   ( "\n这是一个:     ");

/*   判断三角形的形状   */
Form   (x,   y,   z);

/*   是否继续程序   */
printf   ( "\n继续-> 按数字0     |   退出-> 按任意键(除0)   \n\n-> ");

/*   只有输入0时才继续程序   */
if   (scanf   ( "%d ",   &check)   ==1   &&   check   ==   0)
{
system   ( "cls ");
puts   ( "\n请任意输入三条边的长度 ");
}
else   break;

}

system   ( "cls ");
for   (int   k=0;   k <10;   k++)
{
printf   ( "\n ");
}
for   (int   l=0;   l <30;   l++)
{
printf   ( "   ");
}
puts   ( "谢谢您的使用! ");
for   (int   m=0;   m <10;   m++)
{
printf   ( "\n ");
}

return   0;
}

/*   判断这三条线段是否可以组成一个三角形   */
int   IsOk   (double   x,   double   y,   double   z)
{
if   ((x   +   y   >   z)   &&   (fabs(x   -   y)   <   z))
{/*   the   same:   if   ((x   +   y   >   z)   &&   ((x   -   y   >   0)   ?   (x   -   y   <   z):(y   -   x   <   z)))   */
return   1;/*   满足条件   */
}
return   0;
}

/*   判断三角形的形状   */
void   Form   (double   x,   double   y,   double   z)
{

double   temp;
int   flag   =   0;
/*   const   double   delta   =   1e-5;   */
const   double   delta   =   (x   +   y   +   z)   *   1e-8;/*   浮点数总有一些舍入误差,   这样写是为了进行更准确的判断   */

if   (x   ==   y   &&   x   ==   z)
{
puts   ( "等边三角形\n ");
}

else  
{
if   (x   >   y)/*   以下三个if语句是对x,   y,   z   进行从小到大的排序   */
{
temp   =   x;
x   =   y;
y   =   temp;
}
if   (x   >   z)
{
temp   =   x;
x   =   z;
z   =   temp;
}
if   (y   >   z)
{
temp   =   y;


y   =   z;
z   =   temp;
}/*   至此   x   <=   y   <=   z   */

if   (x   ==   y   ||   x   ==   z   ||   y   ==   z)/*   判断等腰   */
{
flag   =   1;
}

if   (flag)/*   当前是等腰三角形   */
{
if   (x   *   x   +   y   *   y   >   z   *   z)/*   两小边的平方和大于第三边的平方   */
{
puts   ( "等腰锐角三角形\n ");
}
else   if   (fabs(x   *   x   +   y   *   y   -   z   *   z)   <   delta)
{
puts   ( "等腰直角三角形\n ");
}
else  
{
puts   ( "等腰钝角三角形\n ");
}
}

else/*   当前不是等腰三角形     */
{
if   (x   *   x   +   y   *   y   >   z   *   z)
{
puts   ( "锐角三角形\n ");
}

else   if   (fabs(x   *   x   +   y   *   y   -   z   *   z)   <   delta)
{
puts   ( "直角三角形\n ");
}
else  
{
puts   ( "钝角三角形\n ");
}
}
}
}




[解决办法]
while (getchar () != '\n ') /* 将堵在输入流中的后半行字符读入并抛弃(这个地方写得好) */
;

- -b
[解决办法]
好象还是有问题
最后敲 回车还是退不出来 
不知道楼主要做什么?
[解决办法]
等着看看测试版3

热点排行