c语言的流程控制

1、 流程控制

● 顺序结构默认的流程结构按照书写顺序执行每一条语句
● 选择结构对给定的条件进行判断再根据判断结果来决定执行哪一段代码
● 循环结构在给定条件成立的情况下反复执行某一段代码 
2、 选择结构-if
1. 简单使用
● if (表达式)  语句1;     注:如果条件为真,就执行后面的语句,否则不执行。
◆ if(count>50)  开班;  上课;

 

 1 #include <stdio.h>
 2 int main()
 3 {
 4   // 人数
 5   int count = 80;
 6   
 7   if ( count >= 50 )
 8   {
 9   printf("开班!!!
");
10   printf("准备机器!!!
");
11   }
12 
13     return 0;
14 }
● if(表达式)  语句1;  else 语句2;      注:如果条件成立就执行语句1,否则执行语句2。
◆ if(count>50)  开班;  else 不开班;
 1 #include <stdio.h>
 2 int main()
 3 {
 4   // 人数
 5   int count = 40;
 6   
 7   if ( count >= 50 )
 8   {
 9   printf("开班!!!
");
10   printf("准备机器!!!
");
11   }
12   else
13   {
14       printf("不开班!!!
");
15       printf("不准备机器!!!
");
16       
17   }
18 
19     return 0;
20 }

 

● if(表达式)  {  }
◆ if(count>50)  {开班布置课室;}  else {}
◆ { }的作用域

 

● if -else if-else
◆ ifa==0 else if (a>0)  else 
◆ 特点:只有一个括号会被执行

 

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int a = 5;
 5     
 6     if (a++ > 18) // a == 6
 7     {
 8         printf("A
");
 9     }
10     else if (a++ > 9) // a == 7
11     {
12         printf("B
");
13     }
14     else if (a++ > 5)  // a == 8
15     {
16         printf("C
");
17     }
18     else
19     {
20         printf("D
");
21     }
22     
23     printf("a的值是%d
", a);
24 
25     return 0;
26 }
 
● 陷阱
◆ if(a!=0)  { a不是0;} else {a0;}
◆ if (a); {  }      if后不要写分号
◆ if (a=0)     错误
◆ a == 0;
◆ if (10int a = 9;
 注:

        if (a>1)

        printf("A ");

    printf("B "); 

       不管a取多少B都打印与if语句没关系

2. 习题
1> 输入一个整数day代表星期几,根据day的值输出对应的星期几,比如day==1,就输出“星期一”
 1 #include <stdio.h>
 2 int main()
 3 {
 4     // 1.输入一个整数day
 5     printf("输入一个整数day
");
 6     
 7     // 2.接收输入
 8     int day;
 9     scanf("%d", &day);
10     
11     // 3.判断等级
12     if (day == 1) {
13         printf("星期一
");
14     } else if (day == 2){
15         printf("星期二
");
16     } else if (day == 3) {
17         printf("星期三
");
18     } else if (day == 4) {
19         printf("星期四
");
20     } else if (day == 5) {
21         printf("星期五
");
22     } else if (day == 6) {
23         printf("星期六
");
24     } else if (day == 7) {
25         printf("星期日
");
26     
27     }
28         return 0;
29 }
2> 输入一个整数month代表月份,根据月份输出对应的季节。

春季:345

夏季:678

秋季:91011

冬季:1212

 1 #include <stdio.h>
 2 int main()
 3 {
 4     // 1.输入一个整数day
 5     printf("输入一个整数month代表月份");
 6     
 7     // 2.接收输入
 8     int month;
 9     scanf("%d", &month);
10     
11     // 3.判断等级
12     if (month == 3||month == 4||month == 5) {
13         printf("春季
");
14     } else if (month == 6||month == 7||month == 8){
15         printf("夏季
");
16     } else if (month == 9||month == 10||month == 11) {
17         printf("秋季
");
18     } else if (month == 12||month == 1||month == 2) {
19         printf("冬季
");
20     }
21         return 0;
22 }
3> 输入一个整数score代表分数,根据分数输出等级(A-E(用两种方式)

A90~100

B80~89

C70~79

D60~69

E0~60

 

 1 #include <stdio.h>
 2 int main()
 3 {
 4     // 1.提示输入
 5     printf("请输入分数值:
");
 6     
 7     // 2.接收输入
 8     int score;
 9     scanf("%d", &score);
10     
11     // 3.判断等级 
12     if (score>=90 && score<=100) { // [90, 100]
13         printf("A
");
14     } else if (score>=80) { // [80, 89]
15         printf("B
");
16     } else if (score>=70) { // [70, 79]
17         printf("C
");
18     } else if (score>=60) { // [60, 69]
19         printf("D
");
20     } else { // (-∞, 59]
21         printf("E
");
22     }
23     return 0;
24 }
3、 选择结构-switch
1. 简单使用
● switch(表达式) { case 数值1: break;  default: break;}
● 举例

int a = 10;

switch (a) { 

    case 0:

        printf("这是一个0");

        break;

    case 5:

        printf("这是一个5");

        break;

    case 10:

        printf("这是一个10");

        break;

    default:

        printf("什么也不是");

        break;

}

● 简述break的作用: 

  break:退出整个switch语句

           如果case后面没有break,就会执行后面所有case中的语句,直到遇到break为止

● case中定义变量:

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

 

 1 #include <stdio.h>
 2 int main()
 3 {
 4     char c = '+';
 5     int a = 10;
 6     int b = 20;
 7     switch (c) {
 8         case '+':
 9         {
10             int sum = a + b;
11             printf("和是%d
", sum);
12             break;
13         }
14             
15         case '-':
16         {
17             int minus = a - b;
18             printf("差是%d
", minus);
19             break;
20         }
21     }
22         return 0;
23 }
2. ifswitch的对比
● 很多情况可以互换,if语句能完成的功能,switch并不一定能完成
● if用得比较多,比较灵活switch只能某个单值,switch能完成的功能,if语句都能完成

 

3. 习题

switch替代if实现if中的习题

 

 1 /*
 2  输入一个整数score代表分数,根据分数输出等级(A-E)(用两种方式)
 3  A:90~100 score/10 == 9、10
 4  B:80~89  score/10 == 8
 5  C:70~79  score/10 == 7
 6  D:60~69  score/10 == 6
 7  E:0~60
 8  */
 9 
10 #include <stdio.h>
11 
12 int main()
13 {
14     int score = 86;
15     
16     switch (score/10) {
17         case 10: // 100
18         case 9: // 90+
19             printf("A
");
20             break;
21         case 8: // 80+
22             printf("B
");
23             break;
24         case 7: // 70+
25             printf("C
");
26             break;
27         case 6: // 60+
28             printf("D
");
29             break;
30         default:
31             printf("E
");
32             break;
33     }
34 
35     return 0;
36 }
4、 循环结构-while
1. 简单使用
● while(表达式)
 {
      循环体
  }
● continue:结束当前的循环体,进入下一次循环体的执行
● break的使用:某次的时候停止循环,直接结束整个while循环
 
整理的例子
 1 #include <stdio.h>
 2 int main()
 3 {
 4     // 1.先确定需要重复执行的操作
 5     
 6     // 2.再确定约束条件
 7     
 8     // 定义一个变量记录做的次数
 9     int count = 0;
10     while (count<50)
11      {
12      ++count;
13      
14      if (count%10 == 0)
15      {
16      // 直接结束这一次循环体,进入下一次循环
17      continue;
18      }else if (count == 25)
19      {
20          break;
21      }
22      
23      printf("做第%d次俯卧撑
", count);
24      }
25     
26     return 0;
27 }
2. 特点

只有条件成立才会执行循环体,

 运行原理

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

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

 3. 习题

1> 提示用户输入一个整数n,计算1+2+3++n的和
 1 #include <stdio.h>
 2 int main()
 3 {
 4     // 定义变量保存用户输入的整数
 5     int n = 0; // 一定要初始化
 6     
 7     while (n <= 0)
 8     {
 9         // 1.提示输入
10         printf("请输入一个正整数:
");
11         
12         // 2.接收输入
13         scanf("%d", &n);
14     }
15     
16     // 3.计算
17     // (1 + n) * n / 2;
18     // 定义变量保存和
19     int sum = 0;
20     int number = 0; // 默认被加的数值
21     while (number < n)
22     {
23         number++;
24         sum += number; // 累加
25     }
26     
27     printf("%d
", sum);
28     return 0;
29 }
2> 提示用户输入一个整数n,计算1-2+3-4+5-6++n的和
 
第一种
 1  */
 2 #include <stdio.h>
 3 int main()
 4 {
 5     // 1.定义变量存储用户输入的整数
 6     int n = 0;
 7     
 8     // 2.判断n是否为正整数
 9     while (n <= 0) {
10         // 2.1 提示输入
11         printf("输入一个正整数:
");
12         
13         // 2.2 让用户输入
14         scanf("%d", &n);
15     }
16     
17     // 3.计算阶乘
18     int sum = 0; // 存储计算结果
19     int current = 0; // 当前要累加的数值
20     while (current < n) {
21         current++;
22         
23         // 如果是偶数,就减
24         if (current % 2 == 0) {
25             sum -= current;
26         } else { // 如果是奇数,就加
27             sum += current;
28         }
29     }
30     
31     // 4.输出结果
32     printf("%d
", sum);
33     
34     return 0;
35 }

第二种 for循环

 
 1 #include <stdio.h>
 2 int main()
 3 {
 4     int n,sum=0;
 5     printf("请输入正整数:");
 6     scanf("%d",&n);
 7     n++;
 8     for(int i=1;i<n;i+=2)
 9     {
10         sum=sum+i;
11         if(i+1!=n)
12             sum=sum-i-1;
13         
14     }
15     printf("sum== %d
",sum);
16     return 0;
17 }

记住一类题

 1 /*
 2 题目:计算1~100中所有3的倍数的个数
 3 */
 4 
 5 #include <stdio.h>
 6 
 7 int main()
 8 {
 9     // 记录3的倍数的个数
10     int count = 0;
11     
12     // 记录当前检查的数值
13     int number = 0;
14     
15     while (number < 100)
16     {
17         number++;
18         
19         // 说明number是3的倍数
20         if (number%3 == 0)
21         {
22             count++;
23         }
24     }
25     
26     printf("1~100内3的倍数的个数:%d
", count);
27 }
4. 陷阱

while(条件);

最简单的死循环   while(1);

 

5、 循环结构-do while
● 特点:一定会执行一次循环体
● whiledo while循环对比

while特点:如果一开始的条件不成立,永远不会执行循环体

 do while特点:不管一开始的条件是否成立,至少会执行一次循环体

 最好使用while

int i=0;
while(i<0){
i++;
}

 

int i=0;
do{
i++;
} while(i<0);

 例子

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int i = 0;
 6     
 7     /*
 8     while (i<0)
 9     {
10         i++; // 5
11     }*/
12     
13     do {
14         i++; // 5
15     } while (i<0);
16     
17     printf("i=%d
", i);
18 
19     return 0;
20 }
6、 循环结构-for
1. 简单实用

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

{

循环体

}

语句1:一般为初始化语句

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

● 初始化语句等可以是多句(把printf放到for的括号中)

 For循环原理:

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

2) 判断条件是否成立,若成立,则执行一次循环体,然后执行语句2,再次判断条件是否成立,若条件不成立则结束循环

3) 顺序为:(语句1-》判断条件-》循环体—》语句2-》判断条件-》循环体···)

【对比】for和while:

在性能上,for循环稍胜一筹,因为while循环只能使用外部的变量,而for循环可以对变量进行及时回收。

2. for循环嵌套

好友列表1

好友1

好友2

好友列表2

好友1

好友2

好友列表3

好友1

好友2

 

 1 #include <stdio.h>
 2 int main()
 3 {
 4     
 5     for (int i = 1; i<=4; i++)
 6     {
 7         //printf("好友列表%d
", i + 1);
 8         printf("好友列表%d
", i);
 9         
10         /*
11          printf("    好友1
");
12          printf("    好友2
");
13          printf("    好友3
");
14          printf("    好友4
");
15          printf("    好友5
");*/
16         
17         for (int j = 1; j<=2; j++)
18         {
19             printf("    好友%d
", j);
20         }
21     }
22     
23     return 0;
24 }
3. 陷阱
1> 死循环 for(;;);
2> for循环内部变量的作用域
3> 作用域混淆

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

 

4. while循环和for循环的比较
● 可以互换
● for循环的变量可以及时回收

 

5. 习题
1> 提示用户输入一个正整数n,如果n=5,就输出下列图形,其他n值以此类推

  *****

  ****

  ***

  **

  *

  *

 1 #include <stdio.h>
 2 int main()
 3 {
 4     // 1.定义一个变量存储用户输入的值
 5     int n = 0;   // 一定要初始化
 6     
 7     // 2.判断n值合不合理
 8     while (n <= 0)
 9     {
10         // 2.1 提示用户输入正整数
11         printf("请输入一个正整数:
");
12         
13         // 2.2 接收输入的数据
14         scanf("%d", &n);
15     }
16     
17     // 3.输出图形
18     for (int i = 0; i<n; i++)// 有多少行
19     {
20         //printf("*****
");
21         for (int j = 0; j<n-i; j++)
22         { // 每一行有多少个
23             printf("*");
24         }
25         
26         printf("
");
27     }
28     
29     return 0;
30 }
2> 输出九九乘法表
 1 #include <stdio.h>
 2 int main()
 3 {
 4     // 一共有多少行
 5     for (int row = 1; row<=9; row++)
 6     {
 7         // 一共有多少列(其实列数==行数)
 8         for(int column = 1; column<=row; column++)
 9         {
10             // 	是tab键,目的是保持每列之间有相同的距离
11             printf("%dx%d=%d	", row, column, row * column);
12         }
13         
14         // 换行
15         printf("
");
16     }
17 }
 
7、 breakcontinue
1. break
● 使用场合:switch循环结构
● 循环嵌套下的break

 

2. continue
● 使用场合:循环结构
● 循环嵌套下的continue
 
总结

一、选择结构

1.if

1> 结构

if (条件) {

} else if (条件2) {

} else if (条件3) {

} else {

    

}

2> 特点

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

2.switch

1> 结构

switch (数值)

{

    case 数值1:

        break;

    

    case 数值2:

        break;

    

    case 数值3:

        break;

    

    default:

        break;

}

2> 特点

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

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

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

二、循环结构

1.while

1> 特点:如果一开始条件不成立,永远不会执行循环体

2.do while

1> 特点:不管条件是否成立,至少会执行一次循环体

3.for

4.选择

1> 一般优先使用for循环

2> 然后再考虑while

3> 最后再考虑do while

原文地址:https://www.cnblogs.com/zhangxiaomeng1991/p/4149324.html