黑马程序员 C语言 - 03 流程控制

时间:2023-02-19 18:29:05

若排版有错误,请查看PDF版:C语言 - 03 流程控制


第一章 流程控制

一、  顺序结构

默认的流程结构。按照书写顺序执行每一条语句。

 

二、  选择结构 if、switch

(一)    if

1.      简单使用

1)     结构1:

if(条件)

{

    语句1;

    语句2;

    ......

}

 

2)     结构2:

if(条件1)

{

    语句1;

    语句2;

    ......

}

else

{

   

}

 

3)     结构3:

if(条件1)

{

    语句1;

    语句2;

    ......

}

else if(条件2)

{

   

}

else

{

   

}

 

4)     结构4:

if (条件)

语句1;

 

if (条件) 语句1; 语句2;  条件成立,只会执行语句1;语句2不在选择结构内。

 

2.      注意

1)     同一时刻,只有一个大括号里面的代码会被执行

2)     先判断条件是否成立,0表示条件不成立

if (0)

{

     printf("A\n");

}

else

{

     printf("B\n");

}

              结果:B

 

3)     比较大小时,常量值放左边,变量放右边

if (0 == a)

{

     printf("a等于0\n");

}

else

{

     printf("a不等于0\n");

}

 

4)     if语句后不要写分号

if ( 5>6 );

{

    printf("A\n");

}

 

5)     错误代码:作用域不明确

if (10 >6)

int a = 5;

       如果要在if后面的语句中定义新的变量,必须用大括号{}

 

6)     if (条件) 语句1; 语句2; 语句3;

a)      条件成立,只会执行语句1;

b)     语句2、语句3 不在选择结构内。

 

(二)    switch

1.      简单使用

    switch (数值)

    {

      case 数值1:

          break;

      case 数值2:

         break;

   case 数值3:

       break;

   default:

      break;

}

1)     默认情况下,只有一个case后面的代码会被执行

2)     break 作用是跳出switch,如果一个case后面没有break,而且这个case成立,就会按顺序执行后面所有case中的语句,直到遇到break为止

3)     如果要在case后面定义一个新的变量,必须用大括号{}包住

int main()

{

    char c = '+';

    int a = 10;

    int b = 20;

   switch (c) {

        case '+':

        {

            int sum = a + b;

            printf("和是:%d", sum);

            break;

        }

        default:

        {

            int minus = a - b;

            printf("差是:%d", minus);

            break;

        }

    }

    return 0;

}

 

2.      if、switch对比

1)     很多情况可以互换

2)     if用得比较多,switch只能是某个单值

 

三、  循环结构

(一)  while

1.      简单使用

    while (条件)

    {

      循环体

 }

1)     如果条件成立,就会执行一次循环体,执行完毕,再次判断条件是否成立......

2)     如果一开始条件就不成立,永远不会执行循环体

3)     break直接结束整个循环

4)     continue结束当前的循环,进入下一次循环

5)     while(1); 死循环

 

(二)  do while

1.      简单使用

    do {

 

 } while(条件);

 

    int i=0;//不会进入循环

    while(i<0){

        i++;

    }

   

    int i=0;

    do{

        i++;

} while(i<0);// i=1

 

2.      do while与while

1)     很多情况下,while与do while可以互换

2)     while:如果条件不成立,那么永远不会执行循环体

do while:不管条件成不成立,至少会执行一次循环体

3)     最好使用while

 

(三)  for

1.      简单使用

    for (语句1; 条件; 语句2)

    {

        循环体

    }

1)     语句1:初始化语句

2)     语句2:增量语句(执行完循环体后再执行的语句)

3)     for一开始就会执行一次语句1(整个for循环只会执行一次)

4)     判断条件是否成立,如果条件成立,就会执行一次循环体,然后就会执行语句2,再次判断条件是否成立

 

2.      for循环嵌套

好友列表1

              好友1

              好友2

好友列表2

       好友1

       好友2

好友列表3

       好友1

       好友2

 

    for (int i =1; i<=3; i++)

        {

            printf("好友列表%d\n", i);

            for (int j =1; j<=2; j++)

            {

                printf("    好友%d\n", j);

            }

         }

 

3.      注意

1)     不要随便在for()后面写分号

for (int i=0; i<5; i++);

{

    printf("哈哈\n");

}

 

2)     如果要在循环体中定义新的变量,必须用大括号{}包住

错误:a的作用域不明确

     for (int i=0; i<5; i++)

     int a = 10;

3)       错误写法

for (int i =0; i<10; i++, a++)//报错a没有定义

{

    // a只能用在循环体{}

    int a = 10;

}

 

4)       死循环

for(;;);

 

5)       for循环体内部变量的作用域

for (int i=0; i<4; i++)

{

    int i = 10; // i的作用域为{}内,与增值语句中的i不同

    printf("%d\n", i);

}

/* 结果为:

    10

    10

    10

    10

*/

 

break

1.      使用场合

1)     switch语句:退出整个switch语句

2)     循环结构:退出整个循环语句

 

2.      注意

只对最近的循环结构有效

 

continue

1.      使用场合

循环结构:结束当前这次的循环体,进入下一次循环体

 

2.      注意

只对最近的循环体有效

 

循环结构的选择

       一般优先使用for循环,然后再考虑while,最后do while。