好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#判断三角形的类型

题目描述:

输入三角形的三条边长,判断是否能构成一个三角形(不考虑退化三角形,即面积为零的三角形),是什么样的三角形(直角、锐角、钝角、等边、等腰)。

函数声明为: byte gettriangletype(int,int,int)

  1. 如何用一个byte来表示各种输出情况?

  2. 如果你是一名测试工程师,应该如何写测试用例来完成功能测试呢?

题目解析:

对于如何用一个byte表示各种输出情况,不是很清楚,有待研究。

下面的程序我只是实现了功能,并没有按照给定的函数声明的格式完成,大家可以参考参考

ui:

代码:

?

using system;

using system.collections.generic;

using system.linq;

using system.windows.forms;

using system.text.regularexpressions;

 

namespace triangletest

{

   public partial class form1 : form

   {

     public form1()

     {

       initializecomponent();

     }

     private void test_click( object sender, eventargs e)

     {

       //等腰,等边,直角,钝角,锐角。

       dictionary< string , int > result = new dictionary< string , int >();

       result.add( "等腰" , 0);

       result.add( "等边" , 0);

       result.add( "直角" , 0);

       result.add( "钝角" , 0);

       result.add( "锐角" , 0);

       var t1 = edge1.text;

       var t2 = edge2.text;

       var t3 = edge3.text;

       if (checkinput(t1, t2, t3))

       {

         var e1 = double .parse(edge1.text);

         var e2 = double .parse(edge2.text);

         var e3 = double .parse(edge3.text);

         double [] numbers = new double [] { e1, e2, e3 };

         double powsum = math.pow(e1, 2) + math.pow(e2, 2) + math.pow(e3, 2);

         double max = numbers.max();

         if (checktriangle(e1, e2, e3))

         {

           //三角形。

           result[ "等腰" ] = checkequicrural(e1, e2, e3) ? 1 : 0;

           result[ "等边" ] = checkequilateral(e1, e2, e3) ? 1 : 0;

           result[ "直角" ] = checkrightangle(powsum, max) ? 1 : 0;

           result[ "钝角" ] = checkobtuseangle(powsum, max) ? 1 : 0;

           result[ "锐角" ] = checkacuteangle(powsum, max) ? 1 : 0;

           string resulttip = result[ "等腰" ] == 1 ? "等腰" : "" ;

           resulttip += result[ "等边" ] == 1 ? "等边" : "" ;

           resulttip += result[ "直角" ] == 1 ? "直角" : "" ;

           resulttip += result[ "钝角" ] == 1 ? "钝角" : "" ;

           resulttip += result[ "锐角" ] == 1 ? "锐角" : "" ;

           resulttip += "三角形" ;

           messagebox.show(resulttip);

         }

         else

         {

           //不是三角形。

           messagebox.show( "您输入的三边构不成三角形!" );

         }

       }

       else

       {

         //输入非法。

         messagebox.show( "您输入的信息有问题!" );

       }

     }

 

     private bool checkacuteangle( double powsum, double max)

     {

       return (math.pow(max, 2) < powsum - math.pow(max, 2)) ? true : false ;

     }

 

     private bool checkobtuseangle( double powsum, double max)

     {

       return (math.pow(max, 2) > powsum - math.pow(max, 2)) ? true : false ;

     }

 

     private bool checkrightangle( double powsum, double max)

     {

       return (math.pow(max, 2) == powsum - math.pow(max, 2)) ? true : false ;

     }

 

     private bool checkequicrural( double e1, double e2, double e3)

     {

       return (e1 == e2 && e2 == e3) ? true : false ;

     }

 

     private bool checkequilateral( double e1, double e2, double e3)

     {

       return (e1 == e2 || e2 == e3 || e3 == e1) ? true : false ;

     }

 

     private bool checktriangle( double edge1, double edge2, double edge3)

     {

       double [] edges = new double [] { edge1, edge2, edge3 };

       double sum = edges[0] + edges[1] + edges[2];

       int succflag = 0;

       for ( int i = 0; i < edges.count(); i++)

       {

         if (edges[i] < sum - edges[i])

         {

           succflag++;

         }

       }

       if (succflag == 3)

       {

         return true ;

       }

       else

       {

         return false ;

       }

     }

 

     private bool checkinput( string edge1, string edge2, string edge3)

     {

       bool result = false ;

       regex reg = new regex( "^[0-9]*$" );

       if (reg.ismatch(edge1) && reg.ismatch(edge2) && reg.ismatch(edge3))

       {

         if (int32.parse(edge1) > 0 && int32.parse(edge2) > 0 && int32.parse(edge3) > 0)

         {

           result = true ;

         }

       }

       return result;

     }

   }

}

run:

2. 对于功能测试而言:

  1)值的类型测试:注意输入值的种类(整形,浮点型,字符串类型等),检查对于非法值类型是否有控制逻辑;

  2)值的边界测试:注意输入值的范围(只能为非负数),检查超出范围时是否有控制逻辑;

  3)以结果为导向的测试:分别对非三角形,三角形中的等腰、等边、直角、钝角、锐角做出几组符合要求的测试数据,检查test结果是否正确;

  4)值的长度测试:根据需求检查输入值达到最大值长度时,是否能够正常test。

c#判断三角形的类型基本功能已经是现实,但是并没有按照给定的函数声明的格式完成,还有待于提高,或者是大家有什么好的建议,可以提出,尝试去解决。

dy("nrwz");

查看更多关于C#判断三角形的类型的详细内容...

  阅读:84次