第3章流程控制C语言教程零基础到大神.docx

上传人:b****3 文档编号:5132673 上传时间:2023-05-08 格式:DOCX 页数:32 大小:118.73KB
下载 相关 举报
第3章流程控制C语言教程零基础到大神.docx_第1页
第1页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第2页
第2页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第3页
第3页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第4页
第4页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第5页
第5页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第6页
第6页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第7页
第7页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第8页
第8页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第9页
第9页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第10页
第10页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第11页
第11页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第12页
第12页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第13页
第13页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第14页
第14页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第15页
第15页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第16页
第16页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第17页
第17页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第18页
第18页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第19页
第19页 / 共32页
第3章流程控制C语言教程零基础到大神.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第3章流程控制C语言教程零基础到大神.docx

《第3章流程控制C语言教程零基础到大神.docx》由会员分享,可在线阅读,更多相关《第3章流程控制C语言教程零基础到大神.docx(32页珍藏版)》请在冰点文库上搜索。

第3章流程控制C语言教程零基础到大神.docx

第3章流程控制C语言教程零基础到大神

第3章流程控制

学习目标

◆掌握选择结构语句

◆掌握循环结构语句

前面的章节一直在介绍C语言的基本语法知识,然而仅仅依靠这些语法知识还不能编写出完整的程序。

在程序中,通常需要加入业务逻辑,并对程序的流程进行控制。

本章将重点讲解C语言中最基本的三种流程控制语句。

程序的运行流程图

流程图是描述问题处理步骤的一种常用图形工具,它是由一些图框和流程线组成的。

流程图描述问题的处理步骤,形象直观,便于阅读。

画流程图时必须按照功能选用相应的流程图符号,常用的流程图符号如图3-1所示。

图3-1流程图符号

图3-1所示的流程图符号中,列举了四种图框和两种流程线,具体说明如下:

●起止框用于表示流程的开始或结束;

●输入/输出框用平行四边形表示,在平行四边形内可以写明输入或输出的内容;

●判断框用菱形表示,它的作用是对条件进行判断,根据条件是否成立来决定如何执行后续的操作;

●处理框用矩形表示,它代表程序中的处理功能,如算术运算和赋值等;

●流程线用实心单向箭头或直线表示,可以连接不同位置的图框,流程线的标准流向是从左到右和从上到下,可用直线表示,非标准流向的流程线应使用箭头指示方向;

●连接点用圆形表示,用于流程图的延续。

通过上面的讲解,初学者对流程图符号有了简单的认识,接下来先来看一个简单的流程图,如图3-2所示。

图3-2判断奇偶数

图3-2表示的是一个判断奇偶数的流程图,下面针对该流程图中的执行顺序进行说明,具体如下:

第1步:

程序开始;

第2步:

进入处理框,将变量number赋值为1;

第3步:

进入判断框,判断number是否为偶数,如果是偶数,则进入下面的输出框,输出number是偶数;否则进入左面的输出框,输出number是奇数;

第4步:

输出完成后,进入结束状态,程序终止。

顺序结构语句

前面章节讲解的程序都有一个共同的特点,即程序中的所有语句都是从上到下逐条执行,这样的程序结构叫做顺序结构。

顺序结构是程序开发中最常见的一种结构,它可以包含多种语句,如变量的定义语句、输入输出语句、赋值语句等。

下面来看一个顺序结构的简单例子,通过程序实现按顺序输出“我爱C语言”,如例3-1所示。

例3-1

1#include

2intmain()

3{

4printf("我\n");

5printf("爱\n");

6printf("C\n");

7printf("语\n");

8printf("言\n");

9return0;

10}

运行结果如图3-3所示。

图3-3运行结果

在例3-1的程序中,使用了5个printf()语句,从上往下依次输出“我、爱、C、语、言”。

从运行结果可以看出,程序是按照语句的先后顺序执行的。

因此,可以说明该程序是一个顺序结构的程序。

选择结构语句

在实际生活中经常需要作出一些判断,比如开车来到一个十字路口,这时需要对红绿灯进行判断,如果前面是红灯,就停车等候,如果是绿灯,就通行。

同样,在C语言中也经常需要对一些条件做出判断,从而决定执行哪一段代码,这时就需要使用选择语句。

选择结构语句分为if条件语句和switch条件语句,接下来本小节将对它们进行详细地讲解。

3.1.1if条件语句

if条件语句分为三种语法格式,每一种格式都有其自身的特点,下面分别进行讲解。

1、if语句

if语句是指如果满足某种条件,就进行相应的处理。

例如,小明妈妈跟小明说“如果你考试得了100分,星期天就带你去游乐场玩”。

这句话可以通过下面的一段伪代码来描述。

如果小明考试得了100分

妈妈星期天带小明去游乐场

在上面的伪代码中,“如果”相当于C语言中的关键字if,“小明考试得了100分”是判断条件,需要用()括起来,“妈妈星期天带小明去游乐场”是执行语句,需要放在{}中。

修改后的伪代码如下:

if(小明考试得了100分)

{

妈妈星期天带小明去游乐场

}

上面的例子就描述了if语句的用法,在C语言中,if语句的具体语法格式如下:

if(条件语句)

{

代码块

}

上述语法格式中,判断条件是一个布尔值,当判断条件为true时,{}中的执行语句才会被执行。

if语句的执行流程如图3-4所示。

图3-4if语句流程图

接下来通过一个案例来学习if语句的具体用法,如例3-2所示。

例3-2

11#include

12intmain()

13{

14//声明变量x

15intx=5;

16//如果x的值小于10则执行if大括号中的代码

17if(x<10)

18{

19x++;

20}

21printf("x=%d\n",x);

22return0;

23}

运行结果如图3-5所示。

图3-5运行结果

例3-2中,定义了一个变量x,其初始值为5。

在if语句的判断条件中判断x的值是否小于10,很明显条件成立,因此{}中的语句会被执行,变量x的值将进行自增。

从图3-5的运行结果可以看出,x的值已由原来的5变成了6。

2、if…else语句

if…else语句是指如果满足某种条件,就进行相应的处理,否则就进行另一种处理。

例如,要判断一个正整数的奇偶,如果该数字能被2整除则是一个偶数,否则该数字就是一个奇数。

if…else语句的具体语法格式如下:

if(判断条件)

{

执行语句1

……

}

else

{

执行语句2

……

}

上述语法格式中,判断条件是一个布尔值。

当判断条件为true时,if后面{}中的执行语句1会被执行。

当判断条件为false时,else后面{}中的执行语句2会被执行。

if…else语句的执行流程如图3-6所示。

图3-6if…else语句流程图

接下来通过一个实现奇偶数判断的案例来演示if..else语句的具体用法,如例3-3所示。

例3-3

24#include

25intmain()

26{

27intnum=19;

28if(num%2==0)

29{

30//判断条件成立,num被2整除

31printf("num是一个偶数\n");

32}

33else

34{

35printf("num是一个奇数\n");

36}

37return0;

38}

运行结果如图3-7所示。

图3-7运行结果

例3-3中,变量num的值为19,模以2的结果为1,不等于0,判断条件不成立。

因此会执行else后面{}中的语句,打印“num是一个奇数”。

3、if…elseif…else语句

if…elseif…else语句用于对多个条件进行判断,从而进行多种不同的处理。

例如,对一个学生的考试成绩进行等级的划分,如果分数大于等于80分等级为优,如果分数小于80分大于等于70分等级为良,如果分数小于70分大于等于60分等级为中,否则,等级为差。

if…elseif…else语句的具体语法格式如下:

if(判断条件1)

{

执行语句1

}

elseif(判断条件2)

{

执行语句2

}

……

elseif(判断条件n)

{

执行语句n

}

else

{

执行语句n+1

}

上述语法格式中,判断条件是一个布尔值。

当判断条件1为true时,if后面{}中的执行语句1会执行。

当判断条件1为false时,会继续执行判断条件2,如果为true则执行语句2,以此类推,如果所有的判断条件都为false,则意味着所有条件均未满足,else后面{}中的执行语句n+1会被执行。

if…elseif…else语句的执行流程如图3-8所示。

图3-8if…elseif…else语句的流程图

接下来通过一个对学生考试成绩进行等级划分的案例来演示if…elseif…else语句的用法,如例3-4所示。

例3-4

39#include

40intmain()

41{

42intgrade=75;//定义学生成绩

43if(grade>=80)

44{

45//满足条件grade>=80

46printf("该成绩的等级为优\n");

47}

48elseif(grade>=70)

49{

50//不满足条件grade>=80,但满足条件grade>=70

51printf("该成绩的等级为良\n");

52}

53elseif(grade>=60)

54{

55//不满足条件grade>=70,但满足条件grade>=60

56printf("该成绩的等级为中\n");

57}

58else

59{

60//不满足条件grade>=60

61printf("该成绩的等级为差\n");

62}

63return0;

64}

运行结果如图3-9所示。

图3-9运行结果

例3-4中,定义了学生成绩grade为75。

它不满足第一个判断条件grade>=80,会执行第二个判断条件grade>=70,条件成立,因此会打印“该成绩的等级为良”。

多学一招:

三元运算符

在C语言中有一种特殊的运算叫做三元运算,它和if…else语句类似,具体语法格式如下:

判断条件?

表达式1:

表达式2

三元运算通常用于对某个变量进行赋值,当判断条件成立时,运算结果为表达式1的值,否则结果为表达式2的值。

例如求两个数x、y中的较大者,如果用if…else语句来实现,具体代码如下:

intx=0;

inty=1;

intmax;

if(x>y)

{

max=x;

}else

{

max=y;

}

上面的代码运行之后,变量max的值为1。

如果if…else语句用三元运算来替换,具体代码如下:

intx=0;

inty=1;

intmax;

max=x>y?

x:

y;

3.1.2switch条件语句

switch条件语句也是一种很常用的选择语句,和if条件语句不同,它只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码。

例如,在程序中使用数字1~7来表示星期一到星期天,如果想根据某个输入的数字来输出对应中文格式的星期值,可以通过下面的一段伪代码来描述:

用于表示星期的数字

如果等于1,则输出星期一

如果等于2,则输出星期二

如果等于3,则输出星期三

如果等于4,则输出星期四

如果等于5,则输出星期五

如果等于6,则输出星期六

如果等于7,则输出星期天

如果不是1~7,则输出此数字为非法数字

对于上面一段伪代码的描述,大家可能会立刻想到用刚学过的if…elseif…else语句来实现,但是由于判断条件比较多,实现起来代码过长,不便于阅读。

这时就可以使用C语言中的switch语句来实现这种需求。

在switch语句中switch关键字后面有一个表达式,case关键字后面有目标值,当表达式的值和某个目标值匹配时,会执行对应case下的语句。

接下来通过一段伪代码来描述switch语句的基本语法格式,具体如下:

switch(表达式)

{

case目标值1:

执行语句1

break;

case目标值2:

执行语句2

break;

……

case目标值n:

执行语句n

break;

default:

执行语句n+1

break;

}

在上面的语法格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,就会执行相应case后的语句,否则执行default后的语句。

关于switch语句中的break关键字将在后面的小节中做具体介绍,此处,初学者只需要知道break的作用是跳出switch语句即可。

接下来通过一个案例来实现根据数字输出中文格式的星期的功能,如例3-5所示。

例3-5

65#include

66intmain()

67{

68intweek=5;

69switch(week)

70{

71case1:

72printf("星期一");

73break;

74case2:

75printf("星期二");

76break;

77case3:

78printf("星期三");

79break;

80case4:

81printf("星期四");

82break;

83case5:

84printf("星期五");

85break;

86case6:

87printf("星期六");

88break;

89case7:

90printf("星期天");

91break;

92default:

93printf("输入的数字不正确...");

94break;

95}

96return0;

97}

运行结果如图3-10所示。

图3-10运行结果

例3-5中,由于变量week的值为5,整个switch语句判断的结果满足第19行的条件,因此打印“星期五”。

程序中的default语句用于处理和前面的case都不匹配的情况,将第5行代码替换为intweek=8,再次运行程序,输出结果如图3-11所示。

图3-11运行结果

在使用switch语句的过程中,如果多个case条件后面的执行语句是一样的,则该执行语句只需书写一次即可,这是一种简写的方式。

例如,使用数字1~7来表示星期一到星期天,当输入的数字为1、2、3、4、5时视为工作日,否则视为休息日,这时如果需要判断一周中的某一天是否为工作日,就可以采用switch语句的简写方式,具体如例3-6所示。

例3-6

98#include

99intmain()

100{

101intweek=2;

102switch(week)

103{

104case1:

105case2:

106case3:

107case4:

108case5:

109//当week满足值1、2、3、4、5中任意一个时,处理方式相同

110printf("今天是工作日\n");

111break;

112case6:

113case7:

114//当week满足值6、7中任意一个时,处理方式相同

115printf("今天是休息日\n");

116break;

117}

118return0;

119}

运行结果如图3-12所示。

图3-12运行结果

例3-6中,当变量week的值为1、2、3、4、5中任意一个值时,处理方式相同,都会打印“今天是工作日”。

同理,当变量week值为6、7中任意一个值时,打印“今天是休息日”。

循环结构语句

在实际生活中经常会将同一件事情重复做很多次,比如在走路时,会重复使用左右脚,打乒乓球时,会重复挥拍的动作等。

同样在C语言中,也经常需要重复执行同一代码块,这时就需要使用循环语句。

循环语句分为while循环语句、do…while循环语句和for循环语句三种。

接下来,本小节将针对这三种循环语句分别进行详细地讲解。

3.1.3while循环语句

while循环语句和3.3小节讲到的条件判断语句有些相似,都是根据条件判断来决定是否执行大括号内的执行语句。

区别在于,while语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会一直执行,直到条件不成立,while循环结束。

while循环语句的具体语法格式如下:

while(循环条件)

{

执行语句

………

}

在上面的语法格式中,{}中的执行语句被称作循环体,循环体是否执行取决于循环条件。

当循环条件为true时,循环体就会被执行。

循环体执行完毕时会继续判断循环条件,如条件仍为true则会继续执行,直到循环条件为false时,整个循环过程才会结束。

while循环的执行流程如图3-13所示。

图3-13while循环的流程图

接下来通过while语句来实现1~4之间自然数的打印,如例3-7所示。

例3-7

120#include

121intmain()

122{

123intx=1;//定义变量x,初始值为1

124while(x<=4)//循环条件

125{

126printf("x=%d\n",x);//条件成立,打印x的值

127x++;//x进行自增

128}

129return0;

130}

运行结果如图3-14所示。

图3-14while循环

例3-7中,x的初始值为1,在满足循环条件x<=4的情况下,循环体会重复执行,打印x的值并让x进行自增。

因此打印结果中x的值分别为1、2、3、4。

值得注意的是,例3-7中的第8行代码用于在每次循环时改变变量x的值,直到循环条件不成立,如果没有这行代码,整个循环会进入无限循环的状态,永远不会结束。

3.1.4do-while循环语句

do…while循环语句和while循环语句功能类似,二者的不同之处在于,while语句需要先判断循环条件,然后根据判断结果来决定是否执行大括号中的代码,而do…while循环语句先要执行一次大括号内的代码再判断循环条件,其具体语法格式如下:

do

{

执行语句

………

}while(循环条件);

在上面的语法格式中,关键字do后面{}中的执行语句是循环体。

do…while循环语句将循环条件放在了循环体的后面。

这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。

do…while循环的执行流程如图3-15所示。

图3-15do…while循环的执行流程

接下来使用do…while循环语句将例3-7进行改写,如例3-8所示。

例3-8

131#include

132intmain()

133{

134intx=1;//定义变量x,初始值为1

135do

136{

137printf("x=%d\n",x);//条件成立,打印x的值

138x++;//x进行自增

139}while(x<=4);//循环条件

140return0;

141}

运行结果如图3-16所示。

图3-16dowhile实例

例3-8和例3-7的运行结果一致,这说明do…while循环和while循环能实现同样的功能。

然而在程序运行过程中,这两种语句还是有差别的。

如果循环条件在循环语句开始时就不成立,那么while循环的循环体一次都不会执行,而do…while循环的循环体还是会执行一次。

若将例中的循环条件x<=4改为x<1,例3-8会打印x=1,而例3-7什么也不会打印。

3.1.5for循环语句

在前面的小节中分别讲解了while循环和do…while循环。

在程序开发中,还经常会使用另一种循环语句,即for循环,它通常用于循环次数已知的情况,其具体语法格式如下:

for(初始化表达式;循环条件;操作表达式)

{

执行语句

………

}

在上面的语法格式中,for关键字后面()中包括了初始化表达式、循环条件和操作表达式三部分内容,它们之间用“;”分隔,{}中的执行语句为循环体。

接下来分别用“①”表示初始化表达式、“②”表示循环条件、“③”表示操作表达式、“④”表示循环体,通过序号来具体分析for循环的执行流程。

具体如下:

for(①;②;③)

{

}

第一步,执行①

第二步,执行②,如果判断结果为true,执行第三步,如果判断结果为false,执行第五步

第三步,执行④

第四步,执行③,然后继续执行第二步

第五步,退出循环

接下来通过一个案例对自然数1~4进行求和,如例3-9所示。

例3-9

142#include

143intmain()

144{

145intsum=0;//定义变量sum,用于记住累加的和

146for(inti=1;i<=4;i++)//i的值会在1~4之间变化

147{

148sum+=i;//实现sum与i的累加

149}

150printf("sum=%d\n",sum);//打印累加的和

151return0;

152}

运行结果如图3-17所示。

图3-17运行结果

例3-9中,变量i的初始值为1,在判断条件i<=4为true的情况下,会执行循环体sum+=i,执行完毕后,会执行操作表达式i++,i的值变为2,然后继续进行条件判断,开始下一次循环,直到i=5时,条件i<=4为false,结束循环,执行for循环后面的代码,打印“sum=10”。

为了让初学者能熟悉整个for循环的执行过程,现将例3-9运行期间每次循环中变量sum和i的值通过表3-1罗列出来。

表3-1sum和i循环中的值

循环次数

sum

i

第一次

1

1

第二次

3

2

第三次

6

3

第四次

10

4

3.1.6循环嵌套

有时为了解决一个较为复杂的问题,需要在一个循环中再定义一个循环,这样的方式被称作循环嵌套。

在C语言中,while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,这当中最常见的就是在for循环中嵌套for循环,具体语法格式如下:

for(初始化表达式;循环条件;操作表达式)

{

………

for(初始化表达式;循环条件;操作表达式)

{

执行语句;

………

}

………

}

接下来通过for语句的循环嵌套来实现使用“*”打印直角三角形,如例3-10所示。

例3-10

153#include

154intmain()

155{

156inti,j;//定义两个循环变量

157for(i=1;i<=9;i++)//外层循环

158

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2