1 if语句中零值比较的注意点
1)bool型变量应该直接出现于条件中,不要进行比较
#include <stdio.h>
typedef enum _bool
{
FALSE=0,
TRUE=1
}BOOL;
int main()
{
BOOL b = TRUE;
if(b)
{
printf("OK");
}
else
{
printf("ERROR");
}
return 0;
}
2)普通变量和零值(常数)比较时,将零值放在比较符号左边,这样可以避免产生难以发现的bug
int i =1;
if(0==i)
{
}
else
{
}
3)float型变量不能直接与0比较,需要定义精度
#include <stdio.h>
typedef enum _bool
{
FALSE=0,
TRUE=1
}BOOL;
#define E 0.0000001
int main()
{
BOOL b = TRUE;
int i=0;
float f=5.0;
if((5-E<=f)&&(f<=5+E))
{
printf("OK");
}
else
{
printf("ERROR");
}
return 0;
}
switch语句
1)switch语句对应单个条件多个分值的情形
2)每个case语句分支必须有break,default语句有必要的时候加上
3)但是,case语句中的值只能是整型或字符型
4)case语句排列顺序:
*按字母或数字顺序排列各条语句
*正常情况在前面,异常在后面
*default语句用于处理异常
#include <stdio.h>
void f1(int i)
{
if( i < 6 )
{
printf("Failed!\n");
}
else if( (6 <= i) && (i <= 8) )
{
printf("Good!\n");
}
else
{
printf("Perfect!\n");
}
}
void f2(char i)
{
switch(i)
{
case 'c':
printf("Compile\n");
break;
case 'd':
printf("Debug\n");
break;
case 'o':
printf("Object\n");
break;
case 'r':
printf("Run\n");
break;
default:
printf("Unknown\n");
break;
}
}
int main()
{
f1(5);
f1(9);
f2('o');
f2('d');
f2('e');
}
2 循环语句
1)do语句先执行后判断,循环体至少执行一次
2)while语句先判断后执行,循环体可能不执行
3)for语句先判断后执行,相比while简洁
#include <stdio.h>
int f1(int n)
{
int ret = 0;//
int i = 0;//循环变量
for(i=1; i<=n; i++)
{
ret += i;//累加1到n的值
}
return ret;
}
int f2(int n)
{
int ret = 0;
while( (n > 0) && (ret += n--) );//n到1加
return ret;
}
int f3(int n)
{
int ret = 0;
if( n > 0 )//必须注意n的取值范围
{
do
{
ret += n--;
}while( n );
}
return ret;
}
int main()
{
printf("%d\n", f1(10));
printf("%d\n", f2(10));
printf("%d\n", f3(10));
}
break和continue的区别
1)break表示终止循环的执行
2)continue表示终止本次循环体,进入下次循环
所以,switch能否用continue关键字?为什么?
不可以
#include <stdio.h>
#include <malloc.h>
int func(int n)
{
int i = 0;
int ret = 0;
int* p = (int*)malloc(sizeof(int) * n);//分配资源
do
{
if( NULL == p ) break;
if( n < 0 ) break;
for(i=0; i<n; i++)
{
p[i] = i;
printf("%d\n", p[i]);
}
ret = 1;
}while(0);
free(p);//释放P
return ret;
}
int main()
{
if( func(10) )
{
printf("OK");
}
else
{
printf("ERROR");
}
}
运行结果 0 1 2 3 4 5 6 7 8 9