当前位置:首页 >> 小学教育 >>

第二章 流程控制语句


Visual C++程序设计

第 2 章

流程控制语句

Visual C++程序设计

第2章 流程控制语句
2.1 操作运算语句 2.2 流程控制语句

2.1 操作运算语句
VC++程序的语句按其功能可以划分为两类:操 作运算语句与流程控制语句。

常见的操作运算语句有以下几种:说明语句、表 达式语句、空语句、块(复合)语句等。 1、说明语句 说明语句用来说明或定义变量、函数、类型等, 变量说明语句的基本格式为: 类型 变量名; 如:
int a,b,c; //说明语句
第3页 江苏科技大学计算机科学与工程学院计算机基础部

2.1 操作运算语句
2、表达式语句 任何一个表达式后面加上一个分号(语句结束符“ ;”) 就构成了表达式语句,如赋值语句由赋值表达式加分号“;” 构成,其语法格式为:变量 = 表达式; 例如: a=1; b=c=a+2; //赋值语句 则 a的值为1; b的值为3; c的值为3 注意: (1) “=”为赋值运算符,其左边只能是一个变量。 (2) 可以多重赋值,将一个表达式的值同时赋给多个变量。 如: 变量1 = 变量2 = … = 变量n = 表达式; 等价于:变量1 = 表达式;变量2 = 表达式;…;变量n = 表达式;
江苏科技大学计算机科学与工程学院计算机基础部 第4页

2.1 操作运算语句
3、空语句 空语句是指只有一个分号而没有表达式的语句。语法格 式为: ; 空语句不做任何运算,只是一种形式上的语句。 4、块语句(复合语句) 块语句是用一对花括号 { } 括起来的多个语句,在逻辑 上它相当于一个语句。语法格式为: { 语句1; 语句2; …… 语句n; } 例如: { t=a; a=b; b=t; } 注意:块语句右花括号“}”之后没有分号。
江苏科技大学计算机科学与工程学院计算机基础部 第5页

Visual C++程序设计

2.2 流程控制语句
2.2.1 顺序结构
2.2.2 选择结构

2.2.3 循环结构
2.2.4 循环嵌套

2.2.5 break语句和continue语句
2.2.6 abort( )函数和exit( )函数

2.2.1 顺序结构
C++程序基本的控制结构有三种:顺序结构、选 择结构和循环结构。 顺序结构按照语句在程序中的先 后次序一条一条的从上到下依次执 行。顺序结构是C++中最基本的程 序结构。图2-1表示了一个顺序结构 形式。 从图中可以看出它有一个入口a 点,一个出口 b点,在结构内A框 和B框都是顺序执行的处理框。
江苏科技大学计算机科学与工程学院计算机基础部

a

A

B

b 图2-1 顺序结构流程图

第7页

2.2.1 顺序结构
例2-1 从键盘输入一个三位正整数,求出各位数字,并 将其逆序逐个输出。

算法:利用整除与求模运算,将三位数中的个、十、百 位数字分离。 调试与运行: 编程实现: 输入:123 #include<iostream.h> 输出:逆序数码为: 3 2 1 void main( ) { int n,i,j,k; 学习与实践: cin>>n; 若输入的数值是三位小数, i=n/100; //求百位数 怎样分离出各个数码? j=n/10%10; //求十位数 k=n%10; //求个位数 cout<<" 逆序数码为:"<<k<<'\t'<<j<<'\t'<<i<<endl; }
江苏科技大学计算机科学与工程学院计算机基础部 第8页

2.2.2 选择结构
选择结构,它通过对给定的条件进行判断,从 而决定执行两个或多个分支中的哪一支。因此,在 编写选择语句之前,应该首先明确判断条件是什么, 并确定当判断结果为“真”或“假”时应分别执行 什么样的操作(算法)。 VC++程序中提供的选择语句有三类:

(1)if 语句 (2)if…else 语句 (3)switch 语句
江苏科技大学计算机科学与工程学院计算机基础部 第9页

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

图2-2中,菱形框表示条件判断, 矩形框表示处理语句,带箭头的连线表示执行走向。
江苏科技大学计算机科学与工程学院计算机基础部 第10页

2.2.2 选择结构
例2-2 从键盘输入一个整数,若大于0,输出1;若小于 等于0,则输出-1。 编程实现: #include <iostream.h> void main() { int a; cout<<“ 输入a的值: ”; cin>>a; if(a > 0 ) //A行 cout<<1<<endl; if(a <= 0) //B行 cout<<-1<<endl; }

学习与实践: (1)若将A行改:if(a>0); 调试与运行: 输入的数据-5,输出结果如 输入:3 何? 输出:1 (2)若再将B行删除,分别 再运行一次: 输入的3与-5 ,输出结果如 输入:-5 何? 输出:-1 (3)怎样实现:输入正数、 零、负数,分别输出1、0、 -1?
第11页

江苏科技大学计算机科学与工程学院计算机基础部

2.2.2 选择结构
2、if…else语句 基本格式为: if(表达式)语句1; else 语句2; 执行过程: ①首先计算“表达式”值; ②如果其值为真,则执行语句1; ③如果其值为假,则执行语句2。
b 图2-3 if--else 语句流程图 Y a 条件 N

语句 1

语句 2

图2-3中,条件为真时执行语句1,否则执行语句2。语句 1与语句2中,一定执行且只执行其中的一条语句。
江苏科技大学计算机科学与工程学院计算机基础部 第12页

2.2.2 选择结构
例2-3 求方程ax2+bx+c=0的解。其中系数a,b,c由键盘输入。
#include <iostream.h> #include <math.h> void main(void) { float a,b,c,delta; cin>>a>>b>>c; delta=b*b-4*a*c; if(delta<0) cout<<"方程没有实根!\n"; else { delta=sqrt(delta); if(delta){ // if(delta!=0) cout<<“方程有两个不同的实根 ”; cout<<“x1=”<<(-b+delta)/2/a<<?\t?; cout<<“x2=”<<(-b-delta)/2/a<<?\n?; } else { cout<<“方程有两个相同的实根 ”; cout<<"x1=x2="<<-b/2/a<<'\n'; } } }
江苏科技大学计算机科学与工程学院计算机基础部

程序解读: (1)程序代码中用 到求平方根函数 sqrt(),必须包含其头 文件<math.h>。 (2)作为条件判断 的“表达式”可以是 变量、常量、关系表 达式、逻辑表达式、 赋值表达式等。 (3)作为内嵌语句 1或语句2,同样可 以是单句、空语句、 块语句和条件语句等。
第13页

2.2.2 选择结构
3、if语句的嵌套
if语句或if…else语句中的 内嵌语句又可以是if语句或 if…else语句,这样就形成了 if语句的嵌套。 当多个if语句嵌套时, 为了防止出现二义性, VC++语言规定:同一个 块中,else总是与其前 面的最靠近它的未经配 对的if配对。如下列程 序段: int a=3,b=4,c=5,x=0; if(a<c) if(b<c) //A if(b==c) x=1 else { if(a=c)x=2; x=3; } else x=4; else x=5;

执行后,x的值为2。若把A行改 为“if(b>c)”,则x的值为多少?
第14页

江苏科技大学计算机科学与工程学院计算机基础部

2.2.2 选择结构
例2-4 判断输入字符的种类:数字、大写字母、小写字母、 控制字符(其ASCII码值小于32)和其他字符。 (1)程序流程
入口 假 < 32 图2-4 if语句的嵌套



?0?~?9?

假 ?A?~?Z? 真




?a?~?z? 真 假 其他

控制字符

数字

大写字母

小写字母

出口
江苏科技大学计算机科学与工程学院计算机基础部 第15页

2.2.2 选择结构
(2)编程实现:

# include <iostream.h> void main(void) { char c; cin.get(c); if(ch<32) cout<<"这是一个控制字符。\n"; else if(ch>='0'&&ch<='9') cout<<"这是一个数字字符。\n"; else if(ch>='A'&&ch<='Z') cout<<"这是一个大写字符。\n"; else if(ch>='a'&&ch<='z') cout<<"这是一个小写字符。\n"; else cout<<"这是一个其他字符。\n"; }
(3)调试与运行: 输入:1 再运行一次: 输入:a
江苏科技大学计算机科学与工程学院计算机基础部

(4)程序解读: ①库函数cin.get(ch)表示逐个读取字符,不 管其是空格还是控制字符。 ②编程时,为了防止if语句的嵌套出错,可 以用一对大括号将if…else语句变为块语句。

输出:这是一个数字字符。 输出:这是一个小写字符。
第16页

2.2.2 选择结构
4、条件运算符—— ? : 格式: 表达式1?表达式2:表达式3 功能:根据表达式1的值来确定整个表达式的结果,如 果其值为真,则以表达式2的值作为结果;否则,以表达式3 的值作为结果。

例如,求出两个数中的最大值,可以表示为: max= a>b?a:b ; 它等同于: if(a>b)max=a; else max=b; 条件运算符也可以嵌套。例如,求出三个数中的最大值, 可以表示为: max= a>b?a>c?a:c:b>c?b:c ; 它等同于什么样的if…else语句?
江苏科技大学计算机科学与工程学院计算机基础部 第17页

2.2.2 选择结构
5、switch语句 switch语句是多分支的选择语句,也称开关语句,其格 式为: switch(表达式) { case 常量表达式1:语句序列1; case 常量表达式2:语句序列2; …… case 常量表达式n:语句序列n; default: 语句序列n+1; } 使用时注意: (1)switch后面的表达式,可以是常量表达式,也可以是 变量表达式;而case后面的表达式只能是常量表达式。 (2)上述表达式其类型只能是整型、字符型或枚举类型。
江苏科技大学计算机科学与工程学院计算机基础部 第18页

2.2.2 选择结构
switch语句的执行顺序是: (1)首先对“表达式”进行计算,得到一个确定的值。 (2)然后在case 子句寻找与此值相匹配的常量表达式。若 找到相匹配的常量,则以此作为入口,开始顺序执行入口处 后面的语句序列。 ①语句序列中如果遇到break语句,则跳出switch语句,转而 执行switch结构后的其他语句; ②如果没有遇到break语句,则顺序执行后面case子句中的语 句序列,而不管该子句的常量表达式值是否匹配。
(3)如果没有找到相匹配的常量表达式: ①在有default的情况下,执行default后面的语句序列; ②否则结束switch语句,转而执行switch结构后的其它语句。
江苏科技大学计算机科学与工程学院计算机基础部 第19页

2.2.2 选择结构
switch语句的执行过程如图2-5所示。

表达式 case 常量1 case 常量2 case 常量n default

语句序列1 break;

语句序列2 break;

……

语句序列n break;

语句序列 n+1

图2-5 switch语句流程图
江苏科技大学计算机科学与工程学院计算机基础部 第20页

2.2.2 选择结构
例2-5 对下列程序,当输入分别为2、1、3、7时, 输出结果是什么。 输入:2 输出:2
#include <iostream.h> 输入:1 void main() 输入:3 { int n; cin>>n; 输入:7 switch(n){ case 1:cout<<n++<<'\t'; case 2:cout<<n++<<endl;break; case 3:cout<<n++<<'\t'; case 6:cout<<"China"<<'\n';break; default:cout<<"GOOD!"<<endl; } }
江苏科技大学计算机科学与工程学院计算机基础部

输出:1
输出:3

2
China

输出:GOOD!

第21页

2.2.2 选择结构
程序解读:
(1)在各个分支中的break语句起着退出switch语 句的作用。 (2)各个case(包括default)语句的出现次序可 以任意。 (3)switch结构可以嵌套。 (4)switch结构可以没有default分支。 (5)case 后面表达式的值不能相同。 (6)可以使多个case语句共用一组语句序列。
江苏科技大学计算机科学与工程学院计算机基础部 第22页

2.2.2 选择结构
题目:设计一个程序把实型的百分制成绩转换成五分制成绩。 算法:定义实型变量s表示百分制成绩,字符型变量c表示五 分制成绩。 switch(表达式) { case 表达式1:c=?A?; 情况1:100分——?A?; case 表达式2 :c=?A?; 情况2:90分~100分——?A?; case 表达式3 :c=?B?; 情况3:80分~90分——?B?; case 表达式4 :c=?C?; 情况4:70分~80分——?C?; case 表达式5 :c=?D?; 情况5:60分~70分——?D?; default:c=?E?; 其他:——?E? } 表达式对应于s的十位(百位);表达式1~5分别是10、 9、8、7、6;表达式为:int(s)/10。
江苏科技大学计算机科学与工程学院计算机基础部 第23页

2.2.2 选择结构
编程实现:

#include<iostream.h> void main() { float s; char c; cin>>s; switch(int(s)/10) { case 10:c=?A?; break; case 9 :c=?A?; break; case 8: c=?B?; break; case 7: c=?C?; break; case 6: c=?D?; break; default:c=?E?; break; } cout<<s<<?\t?<<c<<?\n?; }

程序解读:
(1)程序就这样写行不行?如 某位同学的成绩为88 分,输出 结果是多少?怎样修改?
(2)能否去掉最后一个分支中 的“break;”? (3)能否把第一个分支改为 “case 10:”? (4)switch后的条件能否 写 成“int(s/10 )”或 “s/10” ?

江苏科技大学计算机科学与工程学院计算机基础部

第24页

2.2.3 循环结构
VC++提供了while、do…while和for三种循环控制语句, 它们有相同的组成部分:循环条件(进入、退出条件)和循 环体,可以完成相似的功能,按进入与退出循环的方式可分 为当型循环(先判断条件后执行循环体)和直到型循环两类 (先执行循环体后判断条件) 。
当型循环 ( while、for ) a 直到型循环 ( do…while) a 循环体

循环体 条件 N b Y

条件

Y

N
图2-6 循环结构流程图 b
第25页

江苏科技大学计算机科学与工程学院计算机基础部

2.2.3 循环结构
1、 while 语句
语法格式为: while(条件表达式) { 循环体; } 执行过程:首先对条件表达式进行判断,若判断结果为 假(值为0),则跳过循环体,执行while语句后面的语句。 若判断结果为真(值为非0),则进入循环体,执行循环体 中的语句。执行完一遍循环体后,再对条件表达式进行判断, 若判断结果为真,则再执行循环体,……依次类推,直到判 断结果为假时,退出while循环语句,转而执行后面的语句。 即“先判断后执行”。

江苏科技大学计算机科学与工程学院计算机基础部

第26页

2.2.3 循环结构
循环语句通常有4个部分组成:循环变量初始 化、判断条件、循环体、修改循环变量的值。 例:用while语句计算sum=1+2+3+…+10。 int sum=0, i=1; //循环变量初始化 while (i<=10) //判断条件 { //循环体 sum=sum+i; i++; //修改循环变量的值 }
江苏科技大学计算机科学与工程学院计算机基础部 第27页

2.2.3 循环结构
注意: (1)如果循环体只包含一个语句,则一对花括号可以省略。 (2)仔细定义循环变量的初始值和判断条件的边界值。 (3)对条件表达式的计算总是比循环体的执行多一次。这 是因为最后一次判断条件为假时不执行循环体。 (4)当循环体不实现任何功能时,要使用空语句作为循环 体,表示为: while (条件表达式) ; (5)循环体中,改变循环变量的值很重要。如果循环变量 的值恒定不变,或者当条件表达式为一常数时,将会导致 无限循环(也即死循环)。

江苏科技大学计算机科学与工程学院计算机基础部

第28页

2.2.3 循环结构
例2-6 打印ASCII码表的可打印字符。要求按每行8个字符的 方式输出字符及其对应的编码值。 算法:将整型值赋给字符型变量,自动转换成对应的字符。 程序设计: (1)程序结构:循环结构——while语句实现。 (2)可见字符的ASCII值为32~126,循环控制变量ascii从32 开始循环(循环变量初始化:int ascii=32)。循环条件为: ascii<=126。 (3)循环体: ①把ascii赋值给字符变量c,得到对应字符; ②输出字符及ASCII值; ③ ascii自增,求下一个字符; ④控制输出格式。
江苏科技大学计算机科学与工程学院计算机基础部 第29页

2.2.3 循环结构
特别提示: 编程实现: #include <iostream.h> 四个特殊字符的ASCII值: #include <iomanip.h> 空格字符为 32,’0? 为48 、’A? void main( void ) 为 65 、 ‘a? 为 97。 { int ascii=32; //A行 char c; cout <<setw(40)<<"ASCII码对照表" <<endl ; //输出表头 while(ascii<=126) //B行 { c=ascii; //将整型值赋给字符型变量,强制转换成对应字符型值。 cout<<?\??<<c<<“\?=”<<ascii<<?\t?; //输出字符及其ASCII值 ascii++; if(ascii%8==0) cout<<?\n?; //每行输出8组值 } cout <<endl; 学习与实践: } (1)将A行改为:int ascii=0; 输出结果如何? (2)将B行改为:while(ascii<=255) 输出结果如何?
江苏科技大学计算机科学与工程学院计算机基础部 第30页

2.2.3 循环结构
2、 do…while 语句
语法格式为: do { 循环体; } while(条件表达式);
功能:当流程到达do后,立即执行循环体,然后再对条 件表达式进行判断。若条件表达式的值为真,则重复执行循 环体语句,直到条件表达式的值为假退出循环。即“先执行 后判断”方式。

(1)do…while结构与while结构中都具有一个while语句, 很容易混淆。为明显区分它们,do…while循环体即使是一 个单语句,习惯上也使用花括号括起来,并且while(表达 式)直接写在花括号“}”的后面,最后一定要加一个分号。
江苏科技大学计算机科学与工程学院计算机基础部 第31页

2.2.3 循环结构
例:用do…while语句计算sum=1+2+3+…+10。 int sum=0,i=1; //变量初始化 do { sum+=i++; //循环体与改变循环变量的值 } while (i<=100); //判断条件 (2)与while语句不同的是:while语句有可能一次 都不执行循环体,而do…while循环至少执行一次, 因为直到程序到达循环体的尾部遇到while时,才知 道继续条件是什么。
江苏科技大学计算机科学与工程学院计算机基础部 第32页

2.2.3 循环结构
例2-7 用迭代法求

a 的近似值。

算法: (1)设x02=a,则x0=a/x0,即x0和a/x0都接近于 a ,且 (x0+a/x0)/2更接近于 a 。 (2)即求平方根的迭代公式为: 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 为止。
江苏科技大学计算机科学与工程学院计算机基础部 第33页

2.2.3 循环结构
编程实现: #include <iostream.h> #include <math.h> void main(void) { float x0,x1,a; cout<<“输入一个正数:”; cin>>a; if(a<0) cout<<a<<“不能开平方!\n”; else{ x1=a/2; do{ x0=x1; x1=(x0+a/x0)/2; }while(fabs(x1-x0)>1e-5); cout<<a<<“的平方根等于:”<<x1<<?\n?; } }
江苏科技大学计算机科学与工程学院计算机基础部 第34页

2.2.3 循环结构
3、 for 语句 语法格式为: for(表达式1;表达式2;表达式3) { 循环体 ; } (1)表达式1是初始化表达式,一般用于对循环 语句涉及的变量进行初始化或赋初值; (2)表达式2是条件表达式,当它的判断条件为 真时,就执行循环体,否则终止循环,退出for语句; (3)表达式3是修正表达式,一般用于在循环体 执行之后,对修改循环变量的值; (4)循环体是当表达式2为真时执行的一组语句 序列,通常是块语句。
江苏科技大学计算机科学与工程学院计算机基础部 第35页

2.2.3 循环结构
对于for语句: for(表达式1;表达式2;表达式3) { 循环体 ; } 其执行过程如图2-7所示:
N a

表达式1

(1)先执行表达式1; (2)判断表达式2,若为0, 则结束循环,并转到(5); (3)若表达式2为非0,则 执行循环体,然后执行表达 式3; (4)转回(2); (5)执行for语句下面的语 句。
江苏科技大学计算机科学与工程学院计算机基础部

表达式 2 Y
循环体

表达式3

b

图2-7 for 循环流程图
第36页

2.2.3 循环结构
例:用for语句计算sum=1+2+3+…+10。 for (int sum=0,i=1;i<=10;i++) { sum+=i; //循环体 } 初始化,判断条件,修改方式,都在for语句头部 的括号中描述,循环体相对简洁。 使用循环结构时必须注意,如果循环的控制条件 永远成立,循环体将永无休止地反复执行,程序就将 陷入“死循环”,这显然是应当防止的。
江苏科技大学计算机科学与工程学院计算机基础部 第37页

2.2.3 循环结构
循环结构通常由四个主要部分构成: (1) 循环的初始部分。循环中相关变量(循环控制变量等)的定义、 初始化,往往出现在循环语句的开头部分。 (2) 循环的控制部分。设定循环条件,保证循环语句按要求循环, 控制循环次数。 (3) 循环的修改部分。修改相关变量(循环控制变量等)的值,保 证循环语句执行过程中,相关变量按要求变化。 (4) 循环的工作部分。即循环体,完成循环程序的主要功能。 对于一个具体的程序,上述几个部分有时很明显就能分开,有时却 很难分开。相互位置有时能互换,或相互包容。 编写循环结构程序时,要特别注意: (1) 选用哪个循环语句,其格式要正确。 (2) 循环开始时,各变量的值是多少;循环过程中,各变量的值如 何变化;循环结束后,各变量的值是多少。 (3) 怎样控制循环过程,即怎样设定循环条件。 (4)哪些语句参与循环,即循环体是什么。
江苏科技大学计算机科学与工程学院计算机基础部 第38页

2.2.3 循环结构
例:从键盘上输入十个实型数,求出它们的和与平均值。 (1) 选用for语句。 (2) 设s(0)为和,a为输入的数及平均值,i(0)为循环控制变量, 每循环一次自增一次。 (3) 循环条件:i<10。 (4)主要功能语句有三条: cin>>a; s+=a; a=s/10; 循环体是{ cin>>a; s+=a; }。 flaot s=0, a; for(int i=0;i<10;i++) { cin>>a; s+=a; } a=s/10; //A (1)定义变量时, s能否像a一样 不赋值? (2)能否把s和a的定义放到循环 体中?或表达式1的位置? (3)i能否从1开始循环? (4)A行能否改为“a=s/i;”?
第39页

江苏科技大学计算机科学与工程学院计算机基础部

2.2.3 循环结构
例:求100以内所有奇数的平均值。 (1) 选用for语句。 (2) 设a (0)为平均值,i(1)为循环控制变量,每循环一次 增加2。 float a=0; (3) 循环条件:i<=100。 for(int i=1;i<=100;i+=2) (4)主要功能语句有二条: a+=i; a+=i; a/=50; a/=50; 循环体是{ a+=i; }。 程序解读: (1)该题与上题的最大区别在于,该题的 i 既是循环控 制变量,也是参与平均值运算的数;而上题的 i 仅为循 环控制变量,不参与平均值的运算。 (2)注意 i 的变化规律。
江苏科技大学计算机科学与工程学院计算机基础部 第40页

2.2.4 循环嵌套
循环嵌套是指循环语句的循环体中包含循环语句,如: for(int i=0;i<4;i++) { for(int j=0;j<5;j++) cout<<"i="<<i<<",j="<<j<<'\t'; cout<<'\n'; } 运行结果: i=0,j=0 i=0,j=1 i=1,j=0 i=1,j=1 i=2,j=0 i=2,j=1 i=3,j=0 i=3,j=1 从运行结果发 现,外循环每循 环一次,内循环 则循环一遍。即 i 为0时,j从0变 化到4,j 为5时 退出内循环,到 外循环的表达式 3;然后 i 变为1, j再从0变化到 4;…;一直到i 变为4,退出整 个循环。
第41页

i=0,j=2 i=1,j=2 i=2,j=2 i=3,j=2

i=0,j=3 i=1,j=3 i=2,j=3 i=3,j=3

i=0,j=4 i=1,j=4 i=2,j=4 i=3,j=4

江苏科技大学计算机科学与工程学院计算机基础部

2.2.4 循环嵌套
同一种循环语句可以嵌套,不同的循环语句也可以相互 嵌套,但在循环的嵌套中要注意,内层循环应完全在外层循 环里面,也就是不允许出现交叉。在嵌套的循环结构中,如 用缺口矩形表示每层循环结构时,则图2-8中(a)、(b)是正确 的多层循环结构,而(c)是错误的多层循环结构,因为它出现 了循环结构的交叉。

(a)

(b) 图2-8 循环结构嵌套

(c)
第42页

江苏科技大学计算机科学与工程学院计算机基础部

2.2.4 循环嵌套
例2-8 打印九九乘法表
程序解读: #include <iostream.h> A行的循环条件为什么是 #include <iomanip.h> “j<=i”?若改为“j<10”运 void main( void ) 行结果是什么? { int i,j; cout<<'\n'; for(i=1;i<10;i++) { for(j=1;j<=i;j++) //A行 cout<<setw(4)<<i*j; cout<<?\n?; } }
江苏科技大学计算机科学与工程学院计算机基础部 第43页

2.2.5 break语句和continue语句
在VC++中,除了提供顺序执行和选择控 制、循环控制语句外,还提供了一类跳转语 句。这类语句的总体功能是中断当前某段程 序的执行,并跳转到程序的其他位置继续执 行。 常见的跳转语句有三种:break语句、 continue语句与goto语句。 其中,goto语句不作介绍。

江苏科技大学计算机科学与工程学院计算机基础部

第44页

2.2.5 break语句和continue语句
1、break语句
break语句的作用是:结束当前正在执行的循环 (for、while、do…while)或多路分支(switch) 程序结构,转而执行这些结构后面的语句。 在switch语句中,break用来使流程跳出switch语 句,继续执行switch后的语句。 在循环语句中,break用来从最近的循环体内跳 出。
特别提示:break语句可以用在循环语句与 switch语句中。
江苏科技大学计算机科学与工程学院计算机基础部 第45页

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

江苏科技大学计算机科学与工程学院计算机基础部

第46页

2.2.5 break语句和continue语句
例2-9 输出1到10之间的不能被3整除的数。
#include<iostream.h> void main( ) { for(int i=1; i<=10; i++) { if(i%3==0) continue; //A 行 cout << i<<?\t? ; } cout<<endl; 学习与实践: } 若将程序A 行continue语 句换成break语句,输出如 调试与运行: 何? 输出:1 2 4 5 7 8 10
江苏科技大学计算机科学与工程学院计算机基础部 第47页

程序解读: 当i被3整除时,执行 continue语句,结束本 次循环,即跳过cout语 句,转去执行i++,进 入下一次循环。只有i不 能被3整除时,才执行 cout函数,输出i。

2.2.5 break语句和continue语句
例2-10 求出100以内的所有素数(质数),并按每行五个数 据输出。

算法: (1)所谓素数,即只能被1和自身整除的自然数(1除外)。 (2)判断一个数n是否为素数,可用循环语句实现,循环 控制变量i从2变化到n-1 ,只要有一次n能被i整除,n就不是 素数,否则n是素数。
100以内的素数有: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
江苏科技大学计算机科学与工程学院计算机基础部 第48页

2.2.5 break语句和continue语句
#include<iostream.h> #include<iomanip.h> void main( ) { int i,n,count=0; for(n=2;n<100; n++) //A1 { for(i=2;i<=n-1;++i) //B if(n%i==0) break; if(i>n-1) { cout<<setw(4)<<n; count++; if(count%5==0) cout<<endl; } } //A2 }
(1)该程序是由两层循环组成 的循环嵌套结构,外循环自A1行 开始到A2行,内循环自B开始到 break 语句结束。 (2)break语句执行的条件是 (n%i==0),即n一旦能被 i 整除就 结束内循环,此时 i<=n-1 。 (3)若n一直没有被 i 整除, 虽然没有执行break,但当条件i <= n-1不满足时,同样会结束内循 环。此时i>n-1 。 (4)内循环结束后,只要判断 i 是否大于n-1 就能确定n是否为素 数。 (5) count为计数器。
第49页

江苏科技大学计算机科学与工程学院计算机基础部

2.2.6 abort( )函数和exit( )函数
abort( )与exit( )都是VC++的库函数,其功能都是终止程 序的执行,使用它们要包含头文件stdlib.h。 1、abort( )函数 使用格式:abort( ); 调用该函数时,括号内不能有参数。在执行该函数时, 系统不做结束程序前的收尾工作,直接终止程序的执行。 2、exit()函数 使用格式: exit( 表达式 ); 其中,表达式的值只能是整型数,作为终止程序执行的 原因:用0表示正常退出,而用其它的值表示异常退出。执 行时,系统要做终止程序执行前的收尾工作,如关闭该程序 打开的文件,释放变量所占用的存储空间(不包括动态分配 的存储空间)等。
江苏科技大学计算机科学与工程学院计算机基础部 第50页

程序举例
例2-11:判断某一年是否是闰年。 算法: (1)若某年份是闰年,则该年份能被400整除, 或能被4整除但不能被100整除。 (2) 定义变量year为年份,变量leap为是否闰 年的标记。若(year%400==0)||(year%4==0&& year%100!=0),则leap的值为1,否则leap的值为0。

江苏科技大学计算机科学与工程学院计算机基础部

第51页

程序举例
调试与运行: #include “iostream.h” 输入:2000 void main() 输出:2000 is a leap year. { int year,leap; cout<<“please input a year:”<<endl; cin>>year; if((year%4==0&&year%100!=0)||(year%400==0)) leap=1; 再运行一次 输入: 1995 else leap=0; 输出: 1995 is not a leap year. if(leap) cout<<year<<“ is a leap year.”<<endl; else cout<<year<<“ is not a leap year.”<<endl; }
江苏科技大学计算机科学与工程学院计算机基础部 第52页

程序举例
例2-12 求所有的“水仙花数”。
“水仙花数”是一个三位数,该数各位数字的立方和恰好等 于该数本身。例如153=13+53+33,所以153是“水仙花数”。 算法一:穷举出所有三位数,对每一个三位数,先分别求 出其百、十、个位上的数字,再求出各个数字的立方和。最 后判断其和与这个三位数是否相等。 算法二:外循环穷举出所有三位数,内循环求出每一个三 位数个位,十位和百位数的立方和。内循环先用%运算符求 其末位数,然后除10,直到该数为0。最后判断其和与这个 三位数是否相等。 算法三:利用三重循环嵌套,穷举出各位上可能出现的数, 判断由这三个数组成的三位数与其立方和是否相等。
江苏科技大学计算机科学与工程学院计算机基础部 第53页

程序举例
编程实现(算法一): #include<iostream.h> void main() { int i,a,b,c; for (i=100;i<=999;i++) { a=i/100; //a是数i的百位数 b=i/10-a*10; //b是数i的十位数 c=i-b*10-a*100; //c是数i的个位数 if(i==a*a*a+b*b*b+c*c*c) cout<<a<<b<<c<<endl; } }
江苏科技大学计算机科学与工程学院计算机基础部 第54页

程序举例
编程实现(算法二) : #include<iostream.h> A行“n=i”的作用是什么? void main() 内循环为什么不直接用 i 去 { int i,n,k,s; 运算? for (i=100;i<=999;i++) { s=0;n=i; //A while(n) { k=n%10; s+=k*k*k; n/=10; } if(i==s) cout<<i<<endl; } }
江苏科技大学计算机科学与工程学院计算机基础部 第55页

程序举例
编程实现(算法三) : #include<iostream.h> void main() { int i,j,k; for (i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) cout<< i*100+j*10+k <<endl; }

江苏科技大学计算机科学与工程学院计算机基础部

第56页

程序举例
例2-13 设计一个程序,求Fibonacci数列的前20项, Fibonacci数列的定义如下: f1=1 f2=1 fn=fn-1+fn-2 算法: (1)设Fibonacci数列的第1项为f1(1) ,第2项为f2(1) 。 (2)则可求出Fibonacci数列的第3项f3=f1 + f2 。 (3)用f1代替f2, f2代替f3。 (4) 转回(2),则所求的f3为第4项,以此类推, 直到求出前20项。
江苏科技大学计算机科学与工程学院计算机基础部 第57页

程序举例
#include <iostream.h> #include <iomanip.h> void main( void ) { long int f1=1, f2=1, f3; cout <<setw(12)<<f1<< setw(12) <<f2 ; //输出前两项 for(int n=3;n<=20;n++) //循环语句求第3项到第20 项 { f3=f1+f2; cout << setw(12)<< f3; //输出新值 f1=f2; f2=f3; //更新f1和f2,注意赋值次序 if(n%4==0) cout<<?\n?; //控制输出格式 } cout <<endl; }
江苏科技大学计算机科学与工程学院计算机基础部 第58页

练习题
1、编写程序,从键盘任意输入三个整数,按由小 到大输出。 2 、从键盘上输入十个实型数,求出这十个数之和 与平均值,用循环语句实现。 3 、从键盘上输入一个整数n的值,按下式求出y 的值,并输出n和y的值。 y=1!+2!+3!+ ┄ +n! 4 、设计一个程序,求出100到1000之间的所有素 数。

江苏科技大学计算机科学与工程学院计算机基础部

第59页

练习题
5 、设计一个程序,输入一个任意整数(1至4位), 求出各位数字之和,并统计出位数。

6 、找出1-999之间全部同构数。同构数是这样组 数:它出现在其平方数的右边。如5是25右边的数, 25是在25右边的数,故5和25是同构数。
7 、编写程序,求满足下列两个条件的最小自然数 n并将结果显示在屏幕上: n的个位数字是6; 将n的个位数字6移到最高位数字之前(如 153846称过后为615384),所得的新数恰为n 的4倍。
江苏科技大学计算机科学与工程学院计算机基础部 第60页


相关文章:
掌握各种流程控制语句
第四章流程控制语句 21页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 掌握各种流程控制语句 隐藏>> 【实验目的...
第3章 流程控制语句
第3章 主讲内容 3.1.1 语句的分类 3.1.1 语句的分类 流程控制语句 ?3、空语句 ?只由一个分号构成的语句称为空语句。 ?4、复合语句 ?由一对“{}”括起来...
SQL第二章习题答案 程序
S​Q​L​第​二​章​习​题​答​案​ ​程​序...可以用 GO 来通知批语句 的结束。 --(5) 、流程控制语句是通过判断制定的...
c语言程序设计第二章课后参考答案
第二章:C 程序的基本结构一、 单项选择题 1、以下不是 C 语言的特点的是___。 A)语言的表达能力强 B)语言定义严格 C)数据结构系统化 D)控制流程结构化 ...
实验二 流程控制语句
实验二 流程控制语句实验二 流程控制语句隐藏>> 实验二 流程控制语句【实验目的】 实验目的】 1.掌握if…else,switch…case分支; 2.掌握for,while,do-while等循...
流程控制语句的使用
第四章 流程控制语句 38页 1财富值喜欢此文档的还喜欢 第24讲 T-SQL流程控制...C#控制结构 二、实验要求 1. 2. 3. 4. 分析程序,上机验证结果。 写出程序...
实验1 流程控制语句
实验1 流程控制语句_计算机软件及应用_IT/计算机_专业资料。C++实验 实验1 流程控制语句【实验目的】 1 学习 if、switch 选择语句的使用及其嵌套的使用方法 2 ...
第三章 程序控制语句
同系列文档 第一章 c语言概述 第二章 数据类型、运算符...1/2 相关文档...C 的程序设计和控制语句 printf 的一般形式 printf(格式控制序列,输出表列);...
流程控制语句
第四章流程控制语句 21页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 流程控制语句 隐藏>> 软件英才网 软件行业...
程序流程控制语句练习
第6章 用户与计算机的交互... 46页 免费如要投诉违规内容,请到百度文库投诉中心...程序流程控制语句练习 隐藏>> 1、题目:企业发放的奖金根据利润提成。利润(I)低...
更多相关标签:
流程控制语句 | java流程控制语句 | mysql流程控制语句 | sql流程控制语句 | php流程控制语句 | js流程控制语句 | oracle流程控制语句 | vba流程控制语句 |