精品课程计算机程序设计VC++课件(铁道版)第二章 流程控制语句_第1页
精品课程计算机程序设计VC++课件(铁道版)第二章 流程控制语句_第2页
精品课程计算机程序设计VC++课件(铁道版)第二章 流程控制语句_第3页
精品课程计算机程序设计VC++课件(铁道版)第二章 流程控制语句_第4页
精品课程计算机程序设计VC++课件(铁道版)第二章 流程控制语句_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Visual C+Visual C+程序设计程序设计流程控制语句流程控制语句Visual C+Visual C+程序设计程序设计2.1 操作运算语句操作运算语句2.2 流程控制语句流程控制语句VC+程序的语句按其功能可以划分为两类:程序的语句按其功能可以划分为两类:操操作运算语句作运算语句与与流程控制语句流程控制语句。常见的操作运算语句有以下几种:说明语句、表常见的操作运算语句有以下几种:说明语句、表达式语句、空语句、块(复合)语句等达式语句、空语句、块(复合)语句等。1、说明语句、说明语句说明语句用来说明或定义变量、函数、类型等,说明语句用来说明或定义变量、函数、类型等,变量说明语句的基本格

2、式为:变量说明语句的基本格式为:类型类型 变量名;变量名;如:如:int a,b,c; /说明语句说明语句2、表达式语句、表达式语句任何一个表达式后面加上一个分号(语句结束符任何一个表达式后面加上一个分号(语句结束符“ ;”)就构成了表达式语句,如赋值语句由赋值表达式加分号就构成了表达式语句,如赋值语句由赋值表达式加分号“;”构成,其语法格式为:构成,其语法格式为:变量变量 = 表达式表达式;例如:例如:a=1; b=c=a+2; /赋值语句赋值语句则则 a的值为的值为1; b的值为的值为3; c的值为的值为3注意:注意:(1) “=”为赋值运算符,其左边只能是一个变量。为赋值运算符,其左边只

3、能是一个变量。(2) 可以多重赋值,将一个表达式的值同时赋给多个变量。可以多重赋值,将一个表达式的值同时赋给多个变量。如:如: 变量变量1 = 变量变量2 = = 变量变量n = 表达式表达式;等价于:变量等价于:变量1 = 表达式表达式;变量变量2 = 表达式表达式;变量变量n = 表达式表达式; 3、空语句、空语句 空语句是指只有一个分号而没有表达式的语句。语法格空语句是指只有一个分号而没有表达式的语句。语法格式为:式为: ;空语句不做任何运算,只是一种形式上的语句。空语句不做任何运算,只是一种形式上的语句。4、块语句(复合语句)、块语句(复合语句) 块语句是用一对花括号块语句是用一对花括

4、号 括起来的多个语句,在逻辑上括起来的多个语句,在逻辑上它相当于一个语句。语法格式为:它相当于一个语句。语法格式为:语句语句1; 语句语句2; 语句语句n;例如:例如: t=a; a=b; b=t; 注意:块语句右花括号注意:块语句右花括号“”之后没有分号。之后没有分号。Visual C+Visual C+程序设计程序设计2.2.1 顺序结构顺序结构2.2.2 选择结构选择结构2.2.3 循环结构循环结构2.2.4 循环嵌套循环嵌套2.2.5 break语句和语句和continue语句语句2.2.6 abort( )函数和函数和exit( )函数函数顺序结构顺序结构按按照语句在程序中的照语句在

5、程序中的先先后次序后次序一条一条的从上到下一条一条的从上到下依次执依次执行行。顺序结构是。顺序结构是C+中最基本的程中最基本的程序结构。图序结构。图2-1表示了一个顺序结构表示了一个顺序结构形式。形式。bABa图图2-1 顺序结构流程图顺序结构流程图 C+程序基本的控制结构有三种:程序基本的控制结构有三种:顺序结构顺序结构、选选择结构择结构和和循环结构循环结构。 从图中可以看出它有一个入口从图中可以看出它有一个入口a点,一个出口点,一个出口 b点,在结构内点,在结构内A框框和和B框都是顺序执行的处理框。框都是顺序执行的处理框。例例2-1 从键盘输入一个三位正整数,求出各位数字,并从键盘输入一个

6、三位正整数,求出各位数字,并将其逆序逐个输出。将其逆序逐个输出。算法:利用整除与求模运算,将三位数中的个、十、百算法:利用整除与求模运算,将三位数中的个、十、百位数字分离。位数字分离。 编程实现:编程实现:#includevoid main( )int n,i,j,k;cinn; i=n/100; /求百位数求百位数 j=n/10%10; /求十位数求十位数 k=n%10; /求个位数求个位数 cout 逆序数码为逆序数码为:ktjtiendl; 调试与运行:调试与运行: 输入:输入:123 输出:逆序数码为输出:逆序数码为: 3 2 1学习与实践:学习与实践:若输入的数值是三位小数,若输入的

7、数值是三位小数,怎样分离出各个数码?怎样分离出各个数码?选择结构,它通过对给定的选择结构,它通过对给定的条件条件进行判断,从进行判断,从而决定而决定执行执行两个或多个两个或多个分支分支中的哪一支。因此,在中的哪一支。因此,在编写选择语句之前,应该首先明确判断条件是什么,编写选择语句之前,应该首先明确判断条件是什么,并确定当判断结果为并确定当判断结果为“真真”或或“假假”时应分别执行时应分别执行什么样的操作(算法)。什么样的操作(算法)。VC+程序中提供的选择语句有三类程序中提供的选择语句有三类:(1)if 语句语句(2)ifelse 语句语句(3)switch 语句语句1、 if语句语句基本格

8、式为:基本格式为: if(表达式)(表达式) 语句语句; “表达式表达式”值有两种情况:值有两种情况:0与与非非0,非非0表示真,表示真,0表示假。表示假。 if表达式后的语句称为表达式后的语句称为内嵌语句内嵌语句,语法,语法上只能是单一语句,可以是块语句和空上只能是单一语句,可以是块语句和空语句。语句。执行执行if语句时,首先计算表达式的值,语句时,首先计算表达式的值,若其为若其为真真(非非0),则执行内嵌语句;若),则执行内嵌语句;若为为假假(0),则跳过内嵌语句,执行后继),则跳过内嵌语句,执行后继语句。语句。内嵌语句内嵌语句 条件条件abYN图图2-2 if语句流程图语句流程图图图2-

9、2中,菱形框表示条件判断,中,菱形框表示条件判断,矩形框表示处理语句,带箭头的连线表示执行走向。矩形框表示处理语句,带箭头的连线表示执行走向。例例2-2 从键盘输入一个整数,若大于从键盘输入一个整数,若大于0,输出,输出1;若小于;若小于等于等于0,则输出,则输出-1。编程实现:编程实现:#include void main()int a;couta;if(a 0 ) /A行行 cout1endl; if(a = 0) /B行行 cout-10); 输入的数据输入的数据-5,输出结果如,输出结果如何?何?(2)若再将)若再将B行删除,分别行删除,分别输入的输入的3与与-5 ,输出结果如,输出结

10、果如何?何?(3)怎样实现:输入正数、)怎样实现:输入正数、零、负数,分别输出零、负数,分别输出1、0、-1?执行过程:执行过程:首先计算首先计算“表达式表达式”值;值;如果其值为真,则执行语句如果其值为真,则执行语句1;如果其值为假,则执行语句如果其值为假,则执行语句2。条件条件语句语句1语句语句2abYN图图2-3 if-else 语句流程图语句流程图2、ifelse语句语句基本格式为:基本格式为:if(表达式)语句表达式)语句1;else 语句语句2;图图2-3中,条件为真时执行语句中,条件为真时执行语句1,否则执行语句,否则执行语句2。语句。语句1与语句与语句2中,一定执行且只执行其中

11、的一条语句。中,一定执行且只执行其中的一条语句。例例2-3 求方程求方程ax2+bx+c=0的解。其中系数的解。其中系数a,b,c由键盘输入。由键盘输入。#include #include void main(void)float a,b,c,delta;cinabc;delta=b*b-4*a*c; if(delta0) cout方程没有实根!方程没有实根!n; else delta=sqrt(delta); if(delta) / if(delta!=0) cout“方程有两个不同的实根方程有两个不同的实根 ”; cout“x1=”(-b+delta)/2/at; cout“x2=”(-b

12、-delta)/2/an; else cout“方程有两个相同的实根方程有两个相同的实根 ”; coutx1=x2=-b/2/an; 程序解读:程序解读:(1)程序代码中用)程序代码中用到求平方根函数到求平方根函数sqrt(),必须包含其头必须包含其头文件文件。(2)作为条件判断)作为条件判断的的“表达式表达式”可以是可以是变量变量、常量常量、关系表关系表达式达式、逻辑表达式逻辑表达式、赋值表达式赋值表达式等。等。(3)作为内嵌语句)作为内嵌语句1或语句或语句2,同样可以,同样可以是是单句单句、空语句空语句、块块语句语句和和条件语句条件语句等。等。3、if语句的嵌套语句的嵌套 if语句或语句或

13、ifelse语句中的语句中的内嵌语句内嵌语句又可以又可以是是if语句语句或或ifelse语句语句,这样就形成了,这样就形成了if语句的嵌套。语句的嵌套。当多个当多个if语句嵌套时,语句嵌套时,为了防止出现二义性,为了防止出现二义性,VC+语言规定:语言规定:同一个同一个块中块中,else总是与其前总是与其前面的最靠近它的未经配面的最靠近它的未经配对的对的if配对配对。如下列程。如下列程序段:序段:int a=3,b=4,c=5,x=0;if(ac)if(bc)”,则,则x的值为多的值为多少?少?例例2-4 判断输入字符的种类:数字、大写字母、小写字母、判断输入字符的种类:数字、大写字母、小写字

14、母、控制字符(其控制字符(其ASCII码值小于码值小于32)和其他字符。)和其他字符。(1)程序流程)程序流程真真假假真真真真真真假假假假假假 3209AZaz 控制字符控制字符数字数字大写字母大写字母小写字母小写字母其他其他图图2-4 if语句的嵌套语句的嵌套出口出口入口入口(2)编程实现:)编程实现:# include void main(void)char c;cin.get(c);if(ch32) cout=0&ch=9) cout=A&ch=Z) cout=a&ch=z) cout这是一个小写字符。这是一个小写字符。n; else coutb?a:b ;它等同

15、于:它等同于:if(ab)max=a;else max=b;条件运算符也可以嵌套。例如,求出三个数中的最大值,条件运算符也可以嵌套。例如,求出三个数中的最大值,可以表示为:可以表示为: max= ab?ac?a:c:bc?b:c ;它等同于什么样的它等同于什么样的ifelse语句?语句?5、switch语句语句switch语句是多分支的选择语句,也称开关语句,其格语句是多分支的选择语句,也称开关语句,其格式为:式为:switch(表达式)(表达式) case 常量表达式常量表达式1:语句序列:语句序列1; case 常量表达式常量表达式2:语句序列:语句序列2; case 常量表达式常量表达式

16、n:语句序列:语句序列n; default: 语句序列语句序列n+1;使用时注意:使用时注意:(1)switch后面的表达式,可以是后面的表达式,可以是常量表达式常量表达式,也可以是,也可以是变量表达式变量表达式;而;而case后面的表达式只能是后面的表达式只能是常量表达式常量表达式。(2)上述表达式其类型只能是)上述表达式其类型只能是整型整型、字符型字符型或或枚举类型枚举类型。switch语句的语句的执行顺序执行顺序是:是:(1)首先对)首先对“表达式表达式”进行计算,得到一个确定的值。进行计算,得到一个确定的值。(2)然后在)然后在case 子句寻找与此值相匹配的常量表达式。若子句寻找与此

17、值相匹配的常量表达式。若找到相匹配的常量,则以此作为入口,开始顺序执行入口处找到相匹配的常量,则以此作为入口,开始顺序执行入口处后面的语句序列。后面的语句序列。语句序列中如果遇到语句序列中如果遇到break语句,则跳出语句,则跳出switch语句,转而语句,转而执行执行switch结构后的其他语句;结构后的其他语句;如果没有遇到如果没有遇到break语句,则顺序执行后面语句,则顺序执行后面case子句中的语子句中的语句序列,而不管该子句的常量表达式值是否匹配。句序列,而不管该子句的常量表达式值是否匹配。 (3)如果没有找到相匹配的常量表达式:)如果没有找到相匹配的常量表达式:在有在有defau

18、lt的情况下,执行的情况下,执行default后面的语句序列;后面的语句序列;否则结束否则结束switch语句,转而执行语句,转而执行switch结构后的其它语句。结构后的其它语句。switch语句的执行过程如图语句的执行过程如图2-5所示。所示。语句序列语句序列1break;语句序列语句序列2break;语句序列语句序列nbreak;语句序列语句序列n+1表达式表达式case 常量常量1case 常量常量2case 常量常量ndefault图图2-5 switch语句流程图语句流程图例例2-5 对下列程序,当输入分别为对下列程序,当输入分别为2、1、3、7时,时,输出结果是什么。输出结果是什

19、么。#include void main() int n;cinn;switch(n)case 1:coutn+t;case 2:coutn+endl;break;case 3:coutn+t;case 6:coutChinan;break;default:coutGOOD!endl;输入:输入:2 输出:输出:2输入:输入:1 输出:输出:1 2输入:输入:3 输出:输出:3 China输入:输入:7 输出:输出:GOOD!(1)在各个分支中的)在各个分支中的break语句起着退出语句起着退出switch语语句的作用。句的作用。(2)各个)各个case(包括(包括default)语句的出现次

20、序可)语句的出现次序可以任意。以任意。(3)switch结构可以嵌套。结构可以嵌套。(4)switch结构可以没有结构可以没有default分支。分支。(5)case 后面表达式的值不能相同。后面表达式的值不能相同。(6)可以使多个)可以使多个case语句共用一组语句序列。语句共用一组语句序列。程序解读:程序解读:题目:设计一个程序把实型的百分制成绩转换成五分制成绩。题目:设计一个程序把实型的百分制成绩转换成五分制成绩。算法:定义实型变量算法:定义实型变量s表示百分制成绩,字符型变量表示百分制成绩,字符型变量c表示五表示五分制成绩。分制成绩。情况情况1:100分分A;情况情况2:90分分100

21、分分A;情况情况3:80分分90分分B;情况情况4:70分分80分分C;情况情况5:60分分70分分D;其他:其他:Eswitch(表达式表达式)case 表达式表达式1:c=A;case 表达式表达式2 :c=A;case 表达式表达式3 :c=B;case 表达式表达式4 :c=C;case 表达式表达式5 :c=D;default:c=E;表达式对应于表达式对应于s的十位(百位);表达式的十位(百位);表达式15分别是分别是10、9、8、7、6;表达式为:;表达式为:int(s)/10。 编程实现:编程实现:#includevoid main()float s; char c;cins;

22、switch(int(s)/10) case 10:c=A;case 9 :c=A;case 8: c=B;case 7: c=C;case 6: c=D;default:c=E;coutstcn; 程序解读:程序解读:(1)程序就这样写行不行?如)程序就这样写行不行?如某位同学的成绩为某位同学的成绩为88 分,输出分,输出结果是多少?怎样修改?结果是多少?怎样修改?break;break;break;break;break;break;(2)能否去掉最后一个分支中)能否去掉最后一个分支中的的“break;”?(3)能否把第一个分支改为)能否把第一个分支改为“case 10:”?(4)swit

23、ch后的条件能否后的条件能否 写写成成“int(s/10 )”或或 “s/10” ?图图2-6 循环结构流程图循环结构流程图循环体循环体条件条件abYN当型循环当型循环 ( while、for )abYN条件条件循环体循环体直到型循环直到型循环 ( dowhile)VC+提供了提供了while、dowhile和和for三种循环控制语句,三种循环控制语句,它们有相同的组成部分:它们有相同的组成部分:循环条件循环条件(进入、退出条件)和(进入、退出条件)和循循环体环体,可以完成相似的功能,按进入与退出循环的方式可分,可以完成相似的功能,按进入与退出循环的方式可分为当型循环(先判断条件后执行循环体)

24、和直到型循环两类为当型循环(先判断条件后执行循环体)和直到型循环两类(先执行循环体后判断条件)(先执行循环体后判断条件) 。语法格式为:语法格式为:while(条件表达式)(条件表达式) 循环体循环体; 执行过程:首先对条件表达式进行判断,若判断结果为执行过程:首先对条件表达式进行判断,若判断结果为假(值为假(值为0),则跳过循环体,执行),则跳过循环体,执行while语句后面的语句。语句后面的语句。若判断结果为真(值为非若判断结果为真(值为非0),则进入循环体,执行循环体),则进入循环体,执行循环体中的语句。执行完一遍循环体后,再对条件表达式进行判断,中的语句。执行完一遍循环体后,再对条件表

25、达式进行判断,若判断结果为真,则再执行循环体,若判断结果为真,则再执行循环体,依次类推,直到判依次类推,直到判断结果为假时,退出断结果为假时,退出while循环语句,转而执行后面的语句。循环语句,转而执行后面的语句。即即“先判断后执行先判断后执行”。 1、 while 语句语句循环语句通常有循环语句通常有4个部分组成:个部分组成:循环变量初始循环变量初始化化、判断条件判断条件、循环体循环体、修改循环变量的值修改循环变量的值。例:用例:用while语句计算语句计算sum=1+2+3+10。int sum=0, i=1; /循环变量初始化循环变量初始化while (i=10) /判断条件判断条件/

26、循环体循环体sum=sum+i; i+; /修改循环变量的值修改循环变量的值注意:注意:(1)如果循环体只包含一个语句,则一对花括号可以省略。)如果循环体只包含一个语句,则一对花括号可以省略。(2)仔细定义循环变量的初始值和判断条件的边界值。)仔细定义循环变量的初始值和判断条件的边界值。(3)对条件表达式的计算总是比循环体的执行多一次。这)对条件表达式的计算总是比循环体的执行多一次。这是因为最后一次判断条件为假时不执行循环体。是因为最后一次判断条件为假时不执行循环体。(4)当循环体不实现任何功能时,要使用空语句作为循环)当循环体不实现任何功能时,要使用空语句作为循环体,表示为:体,表示为:wh

27、ile (条件表达式)(条件表达式) ;(5)循环体中,改变循环变量的值很重要。如果循环变量)循环体中,改变循环变量的值很重要。如果循环变量的值恒定不变,或者当条件表达式为一常数时,将会导致的值恒定不变,或者当条件表达式为一常数时,将会导致无限循环(也即死循环)。无限循环(也即死循环)。例例2-6 打印打印ASCII码表的可打印字符。要求按每行码表的可打印字符。要求按每行8个字符的个字符的方式输出字符及其对应的编码值方式输出字符及其对应的编码值。算法:将整型值赋给字符型变量,自动转换成对应的字符。算法:将整型值赋给字符型变量,自动转换成对应的字符。程序设计:程序设计:(1)程序结构:循环结构)

28、程序结构:循环结构while语句实现。语句实现。(2)可见字符的)可见字符的ASCII值为值为32126,循环控制变量,循环控制变量ascii从从32开始循环(循环变量初始化:开始循环(循环变量初始化:int ascii=32)。循环条件为:)。循环条件为:ascii=126。(3)循环体:)循环体:把把ascii赋值给字符变量赋值给字符变量c,得到对应字符;,得到对应字符;输出字符及输出字符及ASCII值;值; ascii自增,求下一个字符;自增,求下一个字符;控制输出格式。控制输出格式。编程实现:编程实现:#include #include void main( void )int asc

29、ii=32; /A行行char c;cout setw(40)ASCII码对照表码对照表 endl ; /输出表头输出表头while(ascii=126) /B行行c=ascii;/将整型值赋给字符型变量将整型值赋给字符型变量,强制转换成对应字符型值。强制转换成对应字符型值。 coutc“=”asciit; /输出字符及其输出字符及其ASCII值值ascii+;if(ascii%8=0) coutn; /每行输出每行输出8组值组值cout endl; 特别提示:特别提示:四个特殊字符的四个特殊字符的ASCII值:值:空格字符为空格字符为 32,0 为为48 、A 为为 65 、 a 为为 97

30、。学习与实践:学习与实践:(1)将)将A行改为:行改为:int ascii=0; 输出结果如何?输出结果如何?(2)将)将B行改为:行改为:while(ascii=255) 输出结果如何?输出结果如何?2、 dowhile 语句语句语法格式为:语法格式为:do 循环体循环体; while(条件表达式(条件表达式);功能:当流程到达功能:当流程到达do后,立即执行循环体,然后再对条后,立即执行循环体,然后再对条件表达式进行判断。若条件表达式的值为真,则重复执行循件表达式进行判断。若条件表达式的值为真,则重复执行循环体语句,直到条件表达式的值为假退出循环。即环体语句,直到条件表达式的值为假退出循环

31、。即“先执行先执行后判断后判断”方式。方式。(1)dowhile结构与结构与while结构中都具有一个结构中都具有一个while语句,语句,很容易混淆。为明显区分它们,很容易混淆。为明显区分它们,dowhile循环体即使是一循环体即使是一个单语句,习惯上也使用花括号括起来,并且个单语句,习惯上也使用花括号括起来,并且while(表达式)(表达式)直接写在花括号直接写在花括号“”的后面,最后一定要加一个分号。的后面,最后一定要加一个分号。例:用例:用dowhile语句计算语句计算sum=1+2+3+10。int sum=0,i=1; /变量初始化变量初始化dosum+=i+;/循环体与改变循环变

32、量的值循环体与改变循环变量的值 while (i=100); /判断条件判断条件(2)与)与while语句不同的是:语句不同的是:while语句有可能一次语句有可能一次都不执行循环体,而都不执行循环体,而dowhile循环至少执行一次,循环至少执行一次,因为直到程序到达循环体的尾部遇到因为直到程序到达循环体的尾部遇到while时,才知时,才知道继续条件是什么。道继续条件是什么。 例例2-7 用迭代法求用迭代法求 的的近似值。近似值。a算法:算法:(1)设)设x02=a,则,则x0=a/x0,即,即x0和和a/x0都接近于都接近于 ,且,且(x0+a/x0)/2更接近于更接近于 。aa (2)即

33、求平方根的迭代公式为:)即求平方根的迭代公式为:x1= (x0+a/x0)/2 ,若若x0 和和x1差的绝对值小于差的绝对值小于10-5,则它们就是,则它们就是 。a(3)把输入的正数赋给)把输入的正数赋给a,并把,并把a/2的值作为的值作为x0的初值,根的初值,根据迭代公式求出据迭代公式求出x1,若,若|x1-x0|10-5 ,则,则x1就是所求的平方根就是所求的平方根的近似值;否则将的近似值;否则将x1 赋给赋给 x0,再根据公式求出,再根据公式求出x1,重复以上,重复以上过程,直到过程,直到|x1-x0|10-5 为止。为止。编程实现:编程实现:#include #include voi

34、d main(void)float x0,x1,a;couta;if(a0) couta1e-5);couta“的平方根等于:的平方根等于:”x1n;3、 for 语句语句语法格式为:语法格式为:for(表达式(表达式1;表达式表达式2;表达式表达式3) 循环体循环体 ; (1)表达式表达式1是是初始化表达式初始化表达式,一般用于对循环,一般用于对循环语句涉及的变量进行初始化或赋初值;语句涉及的变量进行初始化或赋初值;(2)表达式表达式2是是条件表达式条件表达式,当它的判断条件为,当它的判断条件为真时,就执行循环体,否则终止循环,退出真时,就执行循环体,否则终止循环,退出for语句;语句;(3

35、)表达式表达式3是是修正表达式修正表达式,一般用于在循环体,一般用于在循环体执行之后,对修改循环变量的值;执行之后,对修改循环变量的值;(4)循环体循环体是当表达式是当表达式2为真时执行的一组语句为真时执行的一组语句序列,通常是序列,通常是块语句块语句。 对于对于for语句:语句:for(表达式表达式1;表达式表达式2;表达式表达式3) 循环体循环体 ; 其执行过程如图其执行过程如图2-7所示:所示:图图2-7 for 循环流程图循环流程图表达式表达式1表达式表达式 2表达式表达式3循环体循环体YNab(1)先执行表达式)先执行表达式1;(2)判断表达式)判断表达式2,若为,若为0,则结束循环

36、,并转到(则结束循环,并转到(5););(3)若表达式)若表达式2为非为非0,则,则执行循环体,然后执行表达执行循环体,然后执行表达式式3;(4)转回()转回(2););(5)执行)执行for语句下面的语语句下面的语句。句。 例:用例:用for语句计算语句计算sum=1+2+3+10。初始化,判断条件,修改方式,都在初始化,判断条件,修改方式,都在for语句头部语句头部的括号中描述,循环体相对简洁。的括号中描述,循环体相对简洁。使用循环结构时必须注意,如果循环的控制条件使用循环结构时必须注意,如果循环的控制条件永远成立,循环体将永无休止地反复执行,程序就将永远成立,循环体将永无休止地反复执行,

37、程序就将陷入陷入“死循环死循环”,这显然是应当防止的。,这显然是应当防止的。for (int sum=0,i=1;i=10;i+) sum+=i; /循环体循环体循环结构通常由四个主要部分构成循环结构通常由四个主要部分构成:(1) 循环的初始部分。循环中相关变量(循环控制变量等)的定义、循环的初始部分。循环中相关变量(循环控制变量等)的定义、初始化,往往出现在循环语句的开头部分。初始化,往往出现在循环语句的开头部分。(2) 循环的控制部分。设定循环条件,保证循环语句按要求循环,循环的控制部分。设定循环条件,保证循环语句按要求循环,控制循环次数。控制循环次数。(3) 循环的修改部分。修改相关变量

38、(循环控制变量等)的值,保循环的修改部分。修改相关变量(循环控制变量等)的值,保证循环语句执行过程中,相关变量按要求变化。证循环语句执行过程中,相关变量按要求变化。(4) 循环的工作部分。即循环体,完成循环程序的主要功能。循环的工作部分。即循环体,完成循环程序的主要功能。对于一个具体的程序,上述几个部分有时很明显就能分开,有时却对于一个具体的程序,上述几个部分有时很明显就能分开,有时却很难分开。相互位置有时能互换,或相互包容。很难分开。相互位置有时能互换,或相互包容。 编写循环结构程序时,要特别注意:编写循环结构程序时,要特别注意:(1) 选用哪个循环语句,其格式要正确。选用哪个循环语句,其格

39、式要正确。(2) 循环开始时,各变量的值是多少;循环过程中,各变量的值如循环开始时,各变量的值是多少;循环过程中,各变量的值如何变化;循环结束后,各变量的值是多少。何变化;循环结束后,各变量的值是多少。(3) 怎样控制循环过程,即怎样设定循环条件。怎样控制循环过程,即怎样设定循环条件。(4)哪些语句参与循环,即循环体是什么。哪些语句参与循环,即循环体是什么。例:从键盘上输入十个实型数,求出它们的和与平均值。例:从键盘上输入十个实型数,求出它们的和与平均值。(1) 选用选用for语句语句。(2) 设设s(0)为和,为和,a为输入的数及平均值,为输入的数及平均值,i(0)为循环控制为循环控制变量,

40、每循环一次自增一次。变量,每循环一次自增一次。(3) 循环条件:循环条件:ia;s+=a;a=s/10;循环体是循环体是 cina; s+=a; 。flaot s=0, a;for(int i=0;ia;s+=a;a=s/10;/A(1)定义变量时,)定义变量时, s能否像能否像a一样一样不赋值?不赋值?(2)能否把)能否把s和和a的定义放到循环的定义放到循环体中?或表达式体中?或表达式1的位置?的位置?(3)i能否从能否从1开始循环?开始循环?(4)A行能否改为行能否改为“a=s/i;”?(1) 选用选用for语句语句。(2) 设设a (0)为平均值,为平均值,i(1)为循环控制变量,每循环

41、一次为循环控制变量,每循环一次增加增加2。 (3) 循环条件:循环条件:i=100。 (4)主要功能语句有二条:主要功能语句有二条:a+=i;a/=50;循环体是循环体是 a+=i; 。float a=0;for(int i=1;i=100;i+=2)a+=i;a/=50;程序解读:程序解读:(1)该题与上题的最大区别在于,该题的该题与上题的最大区别在于,该题的 i 既是循环控既是循环控制变量,也是参与平均值运算的数;而上题的制变量,也是参与平均值运算的数;而上题的 i 仅为循环仅为循环控制变量,不参与平均值的运算。控制变量,不参与平均值的运算。(2)注意注意 i 的变化规律。的变化规律。例:

42、求例:求100以内所有奇数的平均值。以内所有奇数的平均值。for(int i=0;i4;i+)for(int j=0;j5;j+) couti=i,j=jt;coutn;运行结果:运行结果:i=0,j=0 i=0,j=1 i=0,j=2 i=0,j=3 i=0,j=4i=1,j=0 i=1,j=1 i=1,j=2 i=1,j=3 i=1,j=4i=2,j=0 i=2,j=1 i=2,j=2 i=2,j=3 i=2,j=4i=3,j=0 i=3,j=1 i=3,j=2 i=3,j=3 i=3,j=4从运行结果发从运行结果发现,外循环每循现,外循环每循环一次,内循环环一次,内循环则循环一遍。即则循

43、环一遍。即 i 为为0时,时,j从从0变变化到化到4,j 为为5时时退出内循环,到退出内循环,到外循环的表达式外循环的表达式3;然后;然后 i 变为变为1,j再从再从0变化到变化到4;一直到;一直到i 变为变为4,退出整,退出整个循环。个循环。循环嵌套是指循环语句的循环体中包含循环语句,如:循环嵌套是指循环语句的循环体中包含循环语句,如:(a)(b)(c)图图2-8 循环结构嵌套循环结构嵌套同一种循环语句可以嵌套,不同的循环语句也可以相互同一种循环语句可以嵌套,不同的循环语句也可以相互嵌套,但在循环的嵌套中要注意,内层循环应完全在外层循嵌套,但在循环的嵌套中要注意,内层循环应完全在外层循环里面

44、,也就是不允许出现交叉。在嵌套的循环结构中,如环里面,也就是不允许出现交叉。在嵌套的循环结构中,如用缺口矩形表示每层循环结构时,则图用缺口矩形表示每层循环结构时,则图2-8中中(a)、(b)是正确是正确的多层循环结构,而的多层循环结构,而(c)是错误的多层循环结构,因为它出现是错误的多层循环结构,因为它出现了循环结构的交叉。了循环结构的交叉。例例2-8 打印九九乘法表打印九九乘法表#include #include void main( void )int i,j;coutn;for(i=1;i10;i+)for(j=1;j=i;j+) /A行行coutsetw(4)i*j;coutn; 程序

45、解读:程序解读:A行的循环条件为什么是行的循环条件为什么是“j=i”?若改为?若改为“j10”运运行结果是什么?行结果是什么?在在VC+中,除了提供顺序执行和选择控中,除了提供顺序执行和选择控制、循环控制语句外,还提供了一类跳转语制、循环控制语句外,还提供了一类跳转语句。这类语句的总体功能是中断当前某段程句。这类语句的总体功能是中断当前某段程序的执行,并跳转到程序的其他位置继续执序的执行,并跳转到程序的其他位置继续执行。行。常见的跳转语句有三种:常见的跳转语句有三种:break语句、语句、continue语句语句与与goto语句语句。其中,其中,goto语句不作介绍。语句不作介绍。 break

46、语句的作用是:语句的作用是:结束当前正在执行的循环结束当前正在执行的循环(for、while、dowhile)或多路分支()或多路分支(switch)程序结构,转而执行这些结构后面的语句。程序结构,转而执行这些结构后面的语句。在在switch语句中,语句中,break用来使流程跳出用来使流程跳出switch语语句,继续执行句,继续执行switch后的语句。后的语句。在循环语句中,在循环语句中,break用来从最近的循环体内跳用来从最近的循环体内跳出。出。 特别提示:特别提示:break语句可以用在语句可以用在循环语句循环语句与与switch语句语句中。中。1、break语句语句continue

47、语句的作用是:语句的作用是:结束当前正在执行的这结束当前正在执行的这一次循环(一次循环(for、while、dowhile),接着执行下),接着执行下一次循环一次循环。即跳过循环体中尚未执行的语句,接着。即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。进行下一次是否执行循环的判定。continue语句和语句和break语句的区别是:语句的区别是:continue语语句只结束本次循环,而不是终止整个循环的执行。句只结束本次循环,而不是终止整个循环的执行。而而break语句则是结束本次循环,不再进行条件判断。语句则是结束本次循环,不再进行条件判断。特别提示:特别提示:continu

48、e语句只能用在语句只能用在循环语句循环语句中。中。2、continue语句语句例例2-9 输出输出1到到10之间的不能被之间的不能被3整除的数。整除的数。#includevoid main( ) for(int i=1; i=10; i+)if(i%3=0) continue; /A 行行 cout it ; coutendl;调试与运行:调试与运行:输出:输出:1 2 4 5 7 8 10程序解读:程序解读:当当i被被3整除时,执行整除时,执行continue语句,结束本语句,结束本次循环,即跳过次循环,即跳过cout语语句,转去执行句,转去执行i+,进,进入下一次循环。只有入下一次循环。只

49、有i不不能被能被3整除时,才执行整除时,才执行cout函数,输出函数,输出i。学习与实践:学习与实践:若将程序若将程序A 行行continue语语句换成句换成break语句,输出如语句,输出如何?何?例例2-10 求出求出100以内的所有素数(质数),并按每行五个数以内的所有素数(质数),并按每行五个数据输出。据输出。算法:算法:(1)所谓素数,即只能被所谓素数,即只能被1和自身整除的自然数和自身整除的自然数(1除外除外)。(2)判断一个数判断一个数n是否为素数,可用循环语句实现,循环是否为素数,可用循环语句实现,循环控制变量控制变量i从从2变化到变化到n-1 ,只要有一次,只要有一次n能被能

50、被i整除,整除,n就不是就不是素数,否则素数,否则n是素数。是素数。 100以内的素数有:以内的素数有:2 3 5 7 1113 17 19 23 2931 37 41 43 4753 59 61 67 7173 79 83 89 97#include#includevoid main( )int i,n,count=0;for(n=2;n100; n+) /A1for(i=2;in-1) coutsetw(4)n; count+; if(count%5=0)coutendl; /A2(1)该程序是由两层循环组成)该程序是由两层循环组成的循环嵌套结构,外循环自的循环嵌套结构,外循环自A1行行开

51、始到开始到A2行,内循环自行,内循环自B开始到开始到break 语句结束。语句结束。(2)break语句执行的条件是语句执行的条件是(n%i=0),即,即n一旦能被一旦能被 i 整除就整除就结束内循环,此时结束内循环,此时 i=n-1 。(3)若)若n一直没有被一直没有被 i 整除,整除,虽然没有执行虽然没有执行break,但当条件,但当条件i n-1 。(4)内循环结束后,只要判断)内循环结束后,只要判断 i 是否大于是否大于n-1 就能确定就能确定n是否为素是否为素数。数。(5) count为计数器。为计数器。abort( )与与exit( )都是都是VC+的库函数,其功能都是终止程的库函

52、数,其功能都是终止程序的执行,使用它们要包含头文件序的执行,使用它们要包含头文件stdlib.h。1、abort( )函数函数使用格式:使用格式:abort( );调用该函数时,括号内不能有参数。在执行该函数时,调用该函数时,括号内不能有参数。在执行该函数时,系统不做结束程序前的收尾工作,直接终止程序的执行。系统不做结束程序前的收尾工作,直接终止程序的执行。2、exit()函数函数使用格式:使用格式: exit( 表达式表达式 );其中,表达式的值只能是整型数,作为终止程序执行的其中,表达式的值只能是整型数,作为终止程序执行的原因:用原因:用0表示正常退出,而用其它的值表示异常退出。执表示正常

53、退出,而用其它的值表示异常退出。执行时,系统要做终止程序执行前的收尾工作,如关闭该程序行时,系统要做终止程序执行前的收尾工作,如关闭该程序打开的文件,释放变量所占用的存储空间(不包括动态分配打开的文件,释放变量所占用的存储空间(不包括动态分配的存储空间)等。的存储空间)等。 算法:算法:(1)若某年份是闰年,则该年份能被)若某年份是闰年,则该年份能被400整除,整除,或能被或能被4整除但不能被整除但不能被100整除。整除。(2) 定义变量定义变量year为年份,变量为年份,变量leap为是否闰为是否闰年的标记。若(年的标记。若(year%400=0)|(year%4=0& year%1

54、00!=0),则),则leap的值为的值为1,否则,否则leap的值为的值为0。例例2-11:判断某一年是否是闰年。:判断某一年是否是闰年。#include “iostream.h”void main()int year,leap;cout“please input a year:”year;if(year%4=0&year%100!=0)|(year%400=0) leap=1;else leap=0;if(leap)coutyear“ is a leap year.”endl; else coutyear“ is not a leap year.”endl; 调试与运行:调试与运行

55、:输入:输入:2000 输出:输出:2000 is a leap year.再运行一次再运行一次输入:输入: 1995 输出:输出: 1995 is not a leap year.例例2-12 求所有的求所有的“水仙花数水仙花数”。“水仙花数水仙花数”是一个三位数,该数各位数字的立方和恰好等是一个三位数,该数各位数字的立方和恰好等于该数本身。例如于该数本身。例如153=13+53+33,所以,所以153是是“水仙花数水仙花数”。算法一:穷举出所有三位数,对每一个三位数,先分别求算法一:穷举出所有三位数,对每一个三位数,先分别求出其百、十、个位上的数字,再求出各个数字的立方和。最出其百、十、个位上的数字,再求出各个数字的立方和。最后判断其和与这个三位数是否相等。后判断其和与这个三位数是否相等。算法二:外循环穷举出所有三位数,内循环求出每一个三算法二:外循环穷举出所有三位数,内循环求出每一个三位数个位,十位和百位数的立方和。内循环先用位数个位,十位和百位数的立方和。内循环先用%运算符求运算符求其末位数,然后

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论