昨天介绍了选择控制结构的大体内容,今天在做一些补充和完善。首先介绍一下逻辑运算符即:或,与,非。在C语言中分别用| |,&&,!,来表示。其中“或”和“与”具有“短路”特性:若表达式的值可由先计算左操作数的值单独推到出来那么将不再计算右操作数的值。例:
a&&b,若a为假计算机便直接判断其为假不在计算b的值,没有必要呀!又如a| |b,若a为真则直接判断其为真,不再对b进行判断。举两个简单的例子:(i!=0)&&(j/i>0);这个“与”可以有效的避免除0运算。在看一个例子:(a>=1)&&(b++=5);其中a为0b为5。这个语句便使一些值无法进行预算,我们当然可以这样写:(b++=5)&&(a>=1);但是我们要尽量避免“bad smell”不要将自增自减运算放到复杂的表达式里面。
程序中常见的错误:编译错误(初学者易犯,最容易维护);连接错误(未包含盖包含的头文件,找不到路径);运行错误(多为非法操作造成,或是具有语意及逻辑上的错误,最不易维护)。测试的过程其实就是找bug的过程,测试只能证明程序有错但不可以证明程序正确。软件测试的分类:
白盒测试;又称结构测试。多在程序前期由程序的编写人员(详细的知道程序结构)进行测试。
黑盒测试:又称功能测试,在程序后期由测试人员进行。通常两种方法结合使用。
下面结合实例介绍一下:
#include <stdio.h>
#include<math.h>
main()
{
float a,b,c;
printf("请输入三角形的三边长:");
scanf("%f, %,f %f, &a, &b, &c,);
if(a+b>c&&a+c>b&&b+c>a)/*三角形的基本条件*/
{
if(a==b||b==c||a==c)
printf("等腰三角形");
else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a
printf("直角三角形");
else
printf("一般三角形");
}
else
printf("不是三角形"\n);
}
这个程序是有缺陷的在判断完等腰后用了else if但是非等腰三角形无法识别呀,所以这里应用两个if语句即:
if(a==b||b==c||a==c)
printf("等腰三角形");
if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a
printf("直角三角形");
还有就是判定直角三角形的时候存在不足,因为计算机存储的浮点数都为近似值所以是无法得到a^2+b^2=c^2的。这时我们要用到上次介绍过的近似取等了,用到了fabs取绝对值运算符。即便是这样这个程序就没有毛病了吗?欢迎各位小伙伴前来留言指正。接下来的手写版笔记会有一些详细的介绍和补充内容:
|