C语言学习笔记(4)——分支语句if,switch;循环语句for,while,break,continue

时间:2022-01-16 20:32:04

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