前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >流程控制-9(上)

流程控制-9(上)

作者头像
Python知识大全
发布2020-02-13 13:56:24
3570
发布2020-02-13 13:56:24
举报
文章被收录于专栏:Python 知识大全Python 知识大全

本文目录 前言 一、顺序结构 二、选择结构1-if语句 三、选择结构2-switch语句 前言 1.默认的运行流程 默认情况下,程序的运行流程是这样的:运行程序后,系统会按书写顺序执行程序中的每一行代码。比如下面的程序 1 #include <stdio.h> 2

3 int main()

4 {

5

6 printf("Hello-1\n");

7 printf("Hello-2\n");

8 printf("Hello-3\n");

9

10 return 0; 11 }

程序运行后,会按顺序执行第6、7、8行语句,于是输出结果为:

Hello-1

Hello-2

Hello-3 2.其他运行流程 但很多时候,我们并不想要按照默认的运行流程去走,比如想在某个条件成立的情况下才执行某一段代码,否则不执行。比如微信的这个界面:

如果用户点击了注册按钮,我们就执行“跳转到注册界面”的代码;如果用户点击了登录按钮,我们就执行“跳转到登录界面”的代码。如果用户没做出任何操作,就不执行前面所说的两段代码。要想实现这种功能,那就要学会如何去控制程序的运行流程。 3.流程结构 为了方便我们控制程序的运行流程,C语言提供3种流程结构,不同的流程结构可以实现不同的运行流程。这3种流程结构分别是: 顺序结构:默认的流程结构。按照书写顺序执行每一条语句。 选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码。 循环结构:在给定条件成立的情况下,反复执行某一段代码。 一、顺序结构 顺序结构是3种结构中最简单的,也是默认的流程结构:程序中的语句是按照书写顺序执行的。在文章开头开始列出的代码段,就是顺序结构,这里就不多介绍了。 二、选择结构1-if语句 C语言中选择结构的实现方式有两种:if语句和switch语句。先来看下if语句的使用,而if语句的形式是有好多种的。 1.形式1 先来看看if语句最简单的形式 1> 简介 1 if ( 条件 )

2 {

3 语句1; 4 语句2; 5 .... 6 } 如果if右边小括号()中的条件成立,也就是为“真”时,就会执行第2~6行大括号{}中的语句;如果条件为假,就不执行大括号{}中的语句。这里的if是关键字。 2> 举例 1 int a = 7; 2 3 if ( a ) 4 { 5 printf("条件a成立\n"); 6 printf("a的值为真"); 7 } C语言规定所有非0值都为“真”,而a的值是7,因此第3行的条件是成立的,接着就会执行第5、6行代码。输出结果如下: 1 条件a成立 2 a的值为真 如果将a的值改为0,那么第3行的条件就不成立,就不会执行第5、6行代码 3> 省略大括号{} 如果if后面大括号{}中只有一行代码时,可以省略大括号。形式如下: if ( 条件 ) 语句1; 注意:如果条件成立,只会执行if后面的第1条语句;如果条件不成立,就不会执行if后面的第1条语句。 1 int a = 7;

2

3 if ( a > 9 )

4 printf("aaa");

5 printf("bbb"); 因为第3行的a>9是不成立的,所以不会执行第4行代码。而第5行代码跟if语句是没有任何练习的,因此,第5行代码照常执行。于是会看到屏幕上只输出:

bbb 由于第5行代码跟if语句是没有任何联系的,所以一般会把代码写成下面这样: 1 int a = 7;

2

3 if ( a > 9 )

4 printf("aaa");

5 printf("bbb"); 为了保证代码的可读性,不建议省略大括号!!! 4> 语句嵌套 if语句内部是可以嵌套其他if语句的,如下面的例子 1 int a = 7;

2

3 if ( a > 0 )

4 {

5 printf("a的值大于0\n");

6

7 if ( a<9 )

8 {

9 printf("a的值小于9");

10 }

11 } 第3行的a>0是成立的,因此会按顺序执行第4~11大括号中的代码。执行到第7行的时候,a<9也是成立的,因此会执行第9行代码。输出结果: 1 a的值大于0

2 a的值小于9 5> 使用注意1 有些人习惯写完一行代码就在后面加个分号";",于是写if语句的时候,他们可能会这样写: 1 int a = 6;

2 if ( a>8 );

3 {

4 printf("a大于8");

5 } 如果第2行尾部的分号,其实一个分号也是一条语句,这个叫做“空语句”。第2行的a>8不成立,所以不会执行后面的“空语句”。而后面的大括号{}跟if语句是没有联系的,因此会正常执行,于是会看到输出:

a大于8 所以要非常小心,千万不要在if的小括号后面添加分号。 第3~5行的内容是一个独立的“代码块”: 1 {

2 printf("a大于8");

3 } 6> 使用注意2 下面的写法从语法的角度看是对的 int a = 10;

if (a = 0)

{ printf("条件成立"); }

else { printf("条件不成立"); } 上述代码是完全合理的,编译器不会报错,只是个警告而已。因为a为0,所以为"假",输出结果是:"条件不成立"

这里隐藏着很大的陷阱在: 假设你本来是想判断a是否为0,那么本应该写if (a == 0),若你误写成了if (a = 0),那将是一件非常可怕的事情,因为编译器又不报错,这样的BUG就难找了。因此,像a==0这样的表达式,最好写成0==a,若你误写成0=a,编译器会直接报错的。 // 不推荐 if (a == 0) { } // 推荐 if (0 == a) { } 7> 使用注意3 在C语言中,可以不保存关系运算的结果。因此,下面的写法是合法的: 1 int a = 10;

2 a > 10;

3 a == 0;

这里又是一个陷阱,假设你的本意是想给a赋值为0,那么本应该写a = 0; ,若你误写成a == 0; ,那将又是一个非常难找的BUG,因为编译器根本不会报错。在1993年的时候,这个BUG差点让一桩价值2000万美元的硬件产品生意告吹,因为如果这个BUG不解决,这个产品就没办法正常使用 2.形式2 if还可以跟关键字else一起使用 1> 简介 1 if ( 条件 ) 2 { 3 语句1; 4 } 5 else 6 { 7 语句2; 8 } 如果条件成立,就会执行if后面大括号{}中的语句; 如果条件不成立,就会执行else后面大括号{}中的语句。总之,两个大括号中一定会有1个被执行,而且只能执行的1个。 为了减少代码行数,你也可以写成下面的格式: 1 if ( 条件 ) {

2 语句1;

3 } else {

4 语句2;

5 } 当然,也可以省略大括号,写成下面的格式: 1 if ( 条件 )

2 语句1;

3 else

4 语句2; 如果条件成立,就执行if后面的第1条语句;如果条件不成立,就执行else后面的第1条语句。但还是不建议省略大括号{}。 1 int a = 10;

2 if ( a==0 ) {

3 printf("a等于0");

4 } else {

5 printf("a不等于0");

6 } 第2行的a==0不成立,所以会执行第5行代码,输出结果: a不等于0 3.形式3 if和else还有一种比较复杂的用法 1> 简介 1 if ( 条件1 ) 2 { 3 语句1; 4 } 5 else if ( 条件2 ) 6 { 7 语句2; 8 } 我的手机 2018/9/24 星期一 22:45:46 1> 简介 1 if ( 条件1 ) 2 { 3 语句1; 4 } 5 else if ( 条件2 ) 6 { 7 语句2; 8 } 9 else if ( 条件3 ) 10 { 11 语句3; 12 } 13 ... 14 else 15 { 16 其他语句; 17 } 如果条件1成立,就执行条件1后面大括号{}中的内容:第2~4行 如果条件1不成立,条件2成立,就执行条件2后面大括号{}中的内容:第6~8行 如果条件1、条件2都不成立,条件3成立,就执行条件3后面大括号{}中的内容:第10~12行 第13行的...表示可以有无限个else if 如果所有的条件都不成立,就会执行else后面大括号{}中的内容:第15~17行 注意:这么多大括号中,只有1个大括号内的代码会被执行。跟之前一样,所有的大括号都可以省略,但是不建议省略。必要的时候,最后面的else那一段(第14~17行)是可以省略的。 2> 举例 1 int a = 10; 2 if ( a==0 ) { 3 printf("a等于0"); 4 } else if( a>0 ) { 5 printf("a大于0"); 6 } else { 7 printf("a小于0"); 8 } 第2行中的a==0不成立,接着会检查第4行。第4行的a>0成立,因此会执行第5行代码。输出结果: a大于0 如果a的值是负数,那么第2、4行的条件都不成立,于是就会执行第7行代码。 三、选择结构2-switch语句 1.形式 先来看看switch语句的使用形式: 1 switch(整型表达式) 2 { 3 case 数值1: 4 语句1; 5 break; 6 case 数值2: 7 语句2; 8 break; 9 ... ... 10 case 数值n: 11 语句n; 12 break; 13 default : 14 语句n+1; 15 break; 16 } 当整型表达式的值等于“数值1”时,就会执行“语句1”,后面的break表示退出整个switch语句,也就是直接跳到第16行代码; 当整形表达式的值等于“数值2”时,就会执行“语句2”;后面的以此类推。如果在数值1~数值n中,没有一个值等于整型表达式的值,那么就会执行default中的语句n+1。 由于所有的case后面都有个break,因此执行完任意一个case中的语句后,都会直接退出switch语句 2.举例 1 int a = 10;

2 3 switch (a) {

4 case 0:

5 printf("这是一个0");

6 break;

7 case 5:

8 printf("这是一个5");

9 break; 10 case

10:

11 printf("这是一个10");

12 break;

13 default:

14 printf("什么也不是");

15 break;

16 } 因为a的值刚好等于第10行case后面的10,所以会执行第11行代码,输出结果: 这是一个10 3.break break关键字的作用是退出整个switch语句。默认的格式中,每个case后面都有个break,因此执行完case中的语句后,就会退出switch语句。 1> 如果某个case后面没有break,意味着执行完这个case中的语句后,会按顺序执行后面所有case和default中的语句,直到遇到break为止 1 int a = 0;

2

3 switch (a) {

4 case 0:

5 printf("这是一个0\n");

6 case 5:

7 printf("这是一个5\n");

8 case 10:

9 printf("这是一个10\n");

10 break;

11 default:

12 printf("什么也不是\n");

13 break;

14 } 由于变量a的值等于第4行case后面的0,因此肯定会执行第5行代码。 由于case 0中没有break语句,就不会退出switch语句,继续往下执行代码。 由于a的值已经等于第4行case的值,接着不会再判断a的值是否等于其他case的值了,直接按顺序执行第7、9行代码。在第10行有个break,接着就会退出switch语句。 输出结果为: 1 这是一个0 2 这是一个5 3 这是一个10 如果把a的值改为5,输出结果为: 1 这是一个5 2 这是一个10 2> 在某些时候,我们确实没有必要在每一个case后面添加break。下面举一个例子:判断分数的优良中差等级(100分满分)。 )。 1 int score = 77;

2

3 switch (score/10) {

4 case 10:

5 case 9:

6 printf("优秀");

7 break; 8

9 case 8:

10 printf("良好");

11 break;

12

13 case 7:

14 case 6:

15 printf("中等");

16 break;

17

18 default:

19 printf("差劲");

20 break; 21 } 当score的范围是90~100,score/10的值为10或9时,就会执行第6行代码,然后退出switch语句; 当score的范围是80~89,score/10的值为8时,就会执行第10行代码,然后退出switch语句; 当score的范围是80~89,score/10的值为8时,就会执行第10行代码,然后退出switch语句; 当score的范围是60~79,score/10的值为7或6时,就会执行第15行代码,然后退出switch语句; 当score的范围并不是60~100,score/10的值并不在6~10范围内时,就会执行第19行代码,然后退出switch语句; score的值是77,所以score/10的值是7,输出结果:中等 4.在case中定义变量 有时候,我们可能会想在case中定义一些变量,这个时候,就必须用大括号{}括住case中的所有语句。 1 int a = 10;

2 int b = 4;

3

4 char op = '-'; 5 、

6 switch (op)

7 {

8 case '+':

9 {

10 int sum = a + b;

11 printf("a+b=%d\n", sum);

12 break;

13 }

14

15 case '-':

16 {

17 int minus = a - b;

18 printf("a-b=%d\n", minus);

19 break;

20 }

21

22 default:

23 printf("不能识别的符号");

24 break;

25 } 在第10、17分别定义两个变量。输出结果: a-b=6

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 知识大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档