if、switch、do、while和for分析

1. if语句

(1)if语句用于根据条件选择执行语句

(2)else不能独立存在且总是与它之前最近的if相匹配

(3)else语句后可以接连其他if语句

 

(4)if语句中零值比较的注意点

  ①bool型变量直接出现于条件中,不要进行比较

  ②变量和0值比较时,0值应该出现在比较符号左边(工程经验)

  ③float型变量不能直接进行0值比较,需要定义精度

   

 

 

2. switch语句分析

(1)switch语句对应单个条件多个分值的情形

(2)case语句分支必须要有break,否则会导致分支重叠

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

(4)case语句中的值只能是整型或字符

(5)case语句的排列顺序

  ①按字母或数字顺序排列各条语句

  ②正常情况放在前面,异常情况放在后面

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

【编程实例】

if和switch的使用示例 有趣的角色互换
#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);
    f1(7);
    
    f2('o');
    f2('d');
    f2('e');

    return 0;
}
#include <stdio.h>

void f1(int i)
{
    switch( i < 6 )
    {
        case 1:
            printf("Failed!\n");
            break;
        
        default:
            switch( (6 <= i) && (i <= 8) )
            {
                case 1:
                    printf("Good!\n");
                    break;
                    
                default:
                    printf("Perfect!\n");
                    break;
            }
            break;
    }
}

void f2(char i)
{
    if( 'c' == i )
    {
        printf("Compile\n");
    }
    else if( 'd' == i )
    {
        printf("Debug\n");
    }
    else if( 'o' == i )
    {
        printf("Object\n");
    }
    else if( 'r' == i )
    {
        printf("Run\n");
    }
    else
    {
        printf("Unknown\n");
    }
}

int main()
{
    f1(5);
    f1(9);
    f1(7);
    
    f2('o');
    f2('d');
    f2('e');

    return 0;
}

 

3. 总结

(1)if语句实用于需要“按片”进行判断的情形中

(2)switch语句实用于需要对各个离散值进行分别判断的情形中

(3)if语句可以从功能上完全代替switch语句,但switch语句无法代替if语句

(4)switch语句对于多分支判断的情形更加简洁

 

4. 循环语句分析

(1)循环语句的基本工作方式

  ①通过条件表达式判定是否执行循环体

  ②条件表达式遵循if语句表达式的原则

(2)do、while、for的区别

  ①do语句先执行后判断,循环体至少执行一次

  ②while语句先判断后执行,循环体可能不被执行

  ③for语句先判断后执行,相比while更简洁

5. 循环的回顾

(1)do…while语句的循环方式

 

(2)while语句的循环方式

 

(3)for语句的循环方式

 

▲注意上图字体颜色与for语句各部分的对应关系。for(初始区;条件;终止区)。初始区只执行1次,其次判断条件,再次执行循环体,最后执行终止区并返回到条件判断进行循环。

【编程实例】三种循环语句的使用对比

#include <stdio.h>

int f1(int n)
{
    int ret = 0;
    
    if( n > 0 )
    {
        do
        {
            ret += n--;  
        }
        while( n > 0 );
    }
    
    return ret;
}

int f2(int n)
{
    int ret = 0;
    
    while( (n > 0) && (ret += n--)); 
    
    return ret;
}

int f3(int n)
{
    int ret = 0;
    int i = 0;
    
    for(i=1; i<=n; i++)
    {
        ret += i;
    }
    
    return ret;
}

int main()
{
    printf("%d\n", f1(100));
    printf("%d\n", f2(100));
    printf("%d\n", f3(100));
    
    return 0;
}

6. 终止循环语句的分析

(1)break和continue的区别

  ①break表示终止循环的执行,跳出整个循环体

  ②continue表示终止本次循环,进入下次循环

【思考】switch能否用continue关键字?为什么?

    switch是分支语句,没有循环的概念。而continue是中止本次循环,进入下次循环,只能为循环语句所用,不能用在其他场合。

【实例分析】continue和break的区别

#include <stdio.h>

void f1(int n)
{
    int i = 0;
    
    for(i=1; i<=n; i++)
    {
        if( (i % 2) == 0 )
        {
            break;
        }
        
        printf("%d ", i);
    }
    
    printf("\n");
}

void f2(int n)
{
    int i = 0;
    
    for(i=1; i<=n; i++)
    {
        if( (i % 2) == 0 )
        {
            continue;
        }
        
        printf("%d ", i);
    }
    
    printf("\n");
}

int main()
{
    f1(10);
    f2(10);
    
    return 0;
}

【实例分析】do…while(0)和break的妙用

#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 < 5 ) break;

        if( n > 100) break;
        
        for(i=0; i<n; i++)
        {
            p[i] = i;
            printf("%d\n", p[i]);
        }
        
        ret = 1;
    }while( 0 );  //do...while(0),表示循环体只执行一次,加break可以在适当时候强制跳出!
    
    printf("free(p)\n");
    
    free(p); //因为用了do.while(0)与break的组合,可以保证在任何时候,内存都可以被正确释放!
    
    return ret;
}

int main()
{
    if( func(10) )
    {
        printf("OK\n");
    }
    else
    {
        printf("ERROR\n");
    }

    return 0;
}

7. 总

for语句

while语句

do…while语句

①for循环先进行判断再进入循环体

②for循环适合于循环次数固定的场合

①while循环先进行判断再进入循环体执行

②while循环适合于循环次数不定的场合

①do…while循环先执行循环体再进行条件判断

②do…while循环体至少执行一次循环体

posted on 2018-04-12 14:16  arabain  阅读(383)  评论(0)    收藏  举报

导航