if switch do while for分析

来源:互联网 发布:java怎么写日志 编辑:程序博客网 时间:2024/06/04 00:58

一、分支语句if分析

if语句用于根据条件选择执行语句;

else不能独立存在且总是与它最近的if相匹配;

else语句后可以连接其他if语句。

if(condition){    //statement1}else{    //statement2}
if语句中零值比较的注意点:

(1)bool型变量应该直接出现于条件中,不要进行比较;

(2)普通变量和0值比较时,0值应该出现在比较符号左边;

(3)float型 变量不能直接进行0比较,需要定义精度。

情况1:
bool b = true;if( b ){    //statement1}else{    //statement2}
情况2:

int i = 0;if( 0 == i ){    //statement1}else{    //statement2}
情况三:

#define EPSINON 0.00000001float f = 0.0;if( (-EPSINON <= f) && (f <= EPSINON) ){    //statement1}else{    //statement2}
二、分支语句switch分析
switch语句对应单个条件多个分支的情形;
每个case语句分支必须要有break,否则会导致分支重叠;

default语句有必要加上,以处理特殊情况。

switch(表达式){    case 常量:        代码块;    case 常量:        代码块;    default:        代码块;}
case语句中的值只能是整形或是字符型;

case语句排列顺序分析 按字母或数字顺序排列各条语句 正常放前面 异常放后面

default语句只用于处理真正的默认情况。

if 和switch对比分析 四点结论

#include <stdio.h>void func1(int i){    if(i < 6)    {        printf("failed\n");    }    else if((6 <= i) && ( i <= 8))    {        printf("GOOD\n");    }    else    {        printf("perfect\n");    }}void func2(char n){    switch(n)    {    case 'A':        printf("perfect\n");        break;    case 'B':        printf("good\n");        break;    case 'C':        printf("pass\n");        break;    case 'D':        printf("failed\n");        break;    default:        break;    }}int main(){    func1(1);    func2('A');    return 0;}
三、循环语句分析

通过条件表达式判定是否执行循环体 条件表达式遵循if语句表达式的原则

do语句至少执行循环体一次 while >= 0 次 for先判断 再执行 更简洁

例子分析:

#include <stdio.h>int func1(int n){    int i = 0;    int ret = 0;    for(i = 0; i < n; i++)    {        ret += i;    }    return ret;}int func2(int n){    int ret = 0;    while ((n > 0) && (ret += n--));    return ret;}int func3(int n){    int ret = 0;    if(n > 0)    {        do        {            ret += n--;        }while(n);    }    return ret;}int main(){    printf("%d\n",  func1(101));    printf("%d\n",  func2(100));    printf("%d\n",  func3(100));    return 0;}
do while存在的意义?下面例子:

int fun(int n){    int i = 0;    int ret = 0;    int *p = (int*)malloc(n*sizeof(int));    do    {        if( NULL == p)            break;        if(n < 0)            break;        for(i = 0; i < n; i++)        {            p[i] = i;            printf("%d", p[i]);        }        ret = 1;    }while(0);        free(p);        return ret;}
避免可能造成内存泄漏的情况。

break:终止循环的执行 跳出一个“块””包括 switch 和 循环

continue:终止本次循环 进入下一次循环