第3章 控制结构_第1页
第3章 控制结构_第2页
第3章 控制结构_第3页
第3章 控制结构_第4页
第3章 控制结构_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

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

文档简介

第3章控制结构

C++语言程序设计教程第3章控制结构

2011年3月教材:C++语言程序教程学习目标

掌握顺序结构的概念及语句。掌握分支和多分支语句的语法格式及用法。理解循环的概念,掌握while,dowhile,for三种循环语句的语法格式、用法及区别。掌握选择结构和循环结构嵌套的含义及用法理解并掌握跳转语句break、continue语句的语法和使用场合,能根据要求选择合适的跳转语句。重点:掌握分支和多分支语句的应用。掌握while,dowhile,for三种循环语句的语法格式、用法及区别。掌握选择结构和循环结构嵌套的应用。灵活应用相应的控制结构完成简单的程序设计工作。引言一个程序往往由一系列语句组成,程序的执行原则是由上而下、一行一行顺序执行。但程序中往往遇到这种情况:根据不同的选择或计算结果程序要进行不同的处理:有的语句要反复执行多次,这就需要程序要有控制转向能力与反复执行语句的能力。首先,复习一下程序的结构和语句;然后,学习程序的控制结构。C++程序的结构C++的一个程序包含一个或多个程序单位(每个程序单位构成一个程序文件)。每一个程序单位由以下几个部分组成:

(1)预处理命令。如:#include命令和#define命令。(2)声明部分。例如对数据类型和函数的声明,以及对变量的定义。(3)函数。包括函数首部和函数体,在函数体中可以包含若干声明语句和可执行语句。(4)类,包括类头和类体。#include<iostream>//预处理命令usingnamespacestd;constdoublePI=3.14159;voidmain()//函数首部{floatr,s;//变量的声明部分r=4.5;s=PI*r*r;//执行语句cout<<"

s="

<<s<<endl;//输出结果}C++程序结构可以用图3.1表示。图3.1C++程序结构C++语言的语句C++程序中最小的独立单位是语句。它相当于一篇文章中的一个句子。C++语句是为完成某项任务而进行相关操作的命令,它以分号“;”作为语句的结束标志。C++语句可以分为以下6种:6种语句:声明语句表达式语句空语句复合语句选择语句控制语句循环语句函数和流对象调用语句(1)声明语句

声明语句又称为说明语句,它可以用来对程序中出现的各种名称进行声明。这些名称通常是表示变量、常量、函数、结构、类、对象等实体的标识符。在C++程序中,一个名称在使用之前必须先被声明,声明的目的是告诉编译器某个名称所指代的实体类型。(2)表达式语句C++中任何一个表达式加上分号便是表达式语句。大多数表达式语句是赋值表达式和函数调用。格式:表达式;表达式语句与表达式的区别:表达式可以包含在其它表达式中,而语句不可以。例:if((a=b)>0)t=a;不可写为:if((a=b;)>0)t=a;注意:表达式不是语句,所以表达式不能在程序中独立存在。(3)复合语句复合语句是由两条或两条以上的语句用花括号{}括起来组成的。通常将复合语句看成一条语句进行处理。例如:{ sum=sum+i;i++;} 复合语句常用在if中的分支以及for、while、dowhile语句的循环体等。含有说明语句的复合语句称为分程序。块语句右花括号后边不再需要分号。(4)控制语句改变程序执行的方向的语句①goto(转向语句)②if(条件)else(条件语句)③switch(多分支选择语句)④break(中止执行switch或循环语句)⑤continue(结束本次循环语句)⑥return(从函数返回语句)⑦while()(循环语句)⑧dowhile()(循环语句)⑨for()(循环语句)选择跳转循环结构(5)函数和流对象调用语句函数调用语句由一次函数调用加一个分号构成一个语句。

如:

sort(a,10);流对象调用语句(简单的输入、输出)向标准输出设备(显示器)输出例:intx=10;

cout<<“x=“<<x;从标准输入设备(键盘)输入例:cin>>x;(6)空语句空语句是只有一个分号的语句。;可见,空语句是一种不做任何操作的语句序列。该语句用在需要一条语句,但又不做任何操作的地方。例如:有些语句的循环体等。for(i=1;i<=10;i++)

;本章讲述组成C++程序的各种语句。C++语言提供的基本控制结构分三种类型顺序结构选择结构循环结构C++语言提供的基本控制结构分三种类型顺序结构:按照语句的先后顺序执行程序中的语句。选择结构:按照给定的条件有选择地执行程序中的语句。循环结构:按照给定的规则重复地执行程序中的语句。3.1顺序结构程序设计所谓顺序控制结构,就是按照语句排列的先后顺序执行程序中的语句。顺序控制语句是一类简单的语句,包括:表达式语句、空语句和输入输出语句等。在C++中最基本的顺序结构是数据的输入和输出。在用C++编写程序时,实现顺序结构的方法非常简单,只需要将语句顺序排列即可。例如:交换两个整数值的程序段: t=x; x=y; y=t; 就是顺序结构。例如:用*组成一个菱形的程序属于顺序结构。#include<iostream>usingnamespacestd;voidmain(){cout<<"

*"

<<endl;cout<<"

***"

<<endl;cout<<"

*****"

<<endl;cout<<"

***"

<<endl;cout<<"

*"

<<endl;cout<<endl;}#include<iostream>#include<iomanip>usingnamespacestd;voidmain(){cout<<setw(16)<<"*"<<endl;cout<<setw(17)<<"***"<<endl;cout<<setw(18)<<"*****"<<endl;cout<<setw(17)<<"***"<<endl;cout<<setw(16)<<"*"<<endl;cout<<endl;}如:设计一个程序的菜单的一段程序,也属于顺序结构。…….cout<<"这是两个复数运算的程序"<<endl;cout<<"********************"<<endl;cout<<"请根据需要选择要进行计算的种类:\n\n";cout<<"1.加法运算"<<endl;cout<<"2.减加法运算"<<endl;cout<<"3.乘法运算"<<endl;cout<<"4.除法运算"<<endl;cout<<"0.退出运算"<<endl;cout<<"********************"<<endl;……..通过上面的介绍,我们可以清楚的知道:语句是程序中可以独立执行的最小单元,类似于自然语言中的句子。语句一般由分号结束。语句通常是由表达式构成的,表达式尾部加上分号构成表达式语句。如下列语句:C++语言程序设计教程第3章控制结构

a=b+c;

i+j;;

变量的说明必须以分号结束,所以变量的说明也是语句,叫做说明语句。由一对花括号{}括起来的多条语句叫做一个块语句。例如:{inti=5;i=(i+5)/2;cout<<i<<endl;}

块语句也叫复合语句,它在语法上等价于一条语句。主要用于在程序的某处只允许存在一条语句,而需要执行一项必须由多条语句才能完成的操作。注意:表达式不是语句,所以表达式不能在程序中独立存在。块语句右花括号后边不再需要分号。由赋值表达式构成的语句,通常称其为赋值语句。由算术运算表达式构成的语句。由一个空的表达式构成的语句叫做空语句。空语句常用于在程序中某处根据语法要求应该有一条语句,而实际上又没有什么操作可执行的场合。变量说明语句。块语句。3.2判断与循环

流程图是用来描述算法(程序)的工具,它具有简洁、直观、准确的优点,一些常用的流程图符号如图下:C++语言程序设计教程第3章控制结构

3.3if…else…if判断式判断选择结构又称条件分支结构,是一种基本的程序结构类型。在程序设计中,当需要进行选择、判断和处理的时候,就要用到条件分支结构。条件分支结构的语句一般包括if语句、if–else语句、switch–case语句。3.3.1基本的if语句

一般形式:

if(表达式)语句;

if(i>10)i=i-5;cout<<i<<endl;

其中:表达式通常是一个关系表达式或逻辑表式,语句可以是一个单条语句,或是一个块语句,甚至是一个空语句。它的执行过程如右图。在C++中,if后面实际可以跟任意一个可计算出结果的表达式,甚至可以直接用常量0代表逻辑假,用非0代表逻辑真。

执行过程为:先对i的值进行判断;如果i的值大于10,则将i的值减5,然后输出;否则直接输出i的值。注意:关系表达式两边的括号必不可少。不要将关系表达式误写成赋值表达式。C++语言程序设计教程第3章控制结构

一般形式:

if(表达式)语句1;else语句2;

if(x>y)cout<<x<<endl;elsecout<<y<<endl;

首先计算表达式的值,如果表达式的值为真,则执行语句1;否则就执行语句2。流程如右图所示。通常,将前者叫做if分支,将后者叫做else分支。实现了从x和y中选择较大的一个输出。

注意:尽管完整的if语句中存在两个语句段,且有两个表示语句结束的分号,但整个语句在语法上只是一条语句。if分支后边的分号是不可缺少的(除非这里是一条复合语句)。3.3.2完整的if语句C++语言程序设计教程第3章控制结构

例3.1在两个已知数中取大数输出#include<iostream>usingnamespacestd;voidmain(){ intn1,n2,max; cout<<"输入两个数:"; cin>>n1>>n2;max=n1;

if(max<n2)max=n2; cout<<"max="<<max<<endl;}程序运行结果:输入两个数:53max=5例3.2已知两个整数,按从大到小输出#include<iostream>usingnamespacestd;

voidmain(){inta,b; cout<<"输入a,b="; cin>>a>>b;

if(a<b)cout<<b<<"\t"<<a<<endl;else cout<<a<<"\t"<<b<<endl; }

将if语句用作if语句的语句段。这就是所谓的if语句的嵌套。if语句的嵌套常用于多次判断选择。

【例3-3】将百分制的成绩按等级分输出。分析:等级分为四等:A、B、C、D,分别对应的分数段为90~100、80~89、60~79、0~59,转换时需要进行多次判断,要用多重选择结构,这里我们选用嵌套的if语句。3.3.3if语句的嵌套

C++语言程序设计教程第3章控制结构

3.3.3if语句的嵌套

78910111213141516171819202122intmain(){ intn; cout<<"Enterthescore:"; cin>>n;if(n>=60) if(n>=90)cout<<"ThedegreeisA"<<endl;elseif(n>=80)cout<<"ThedegreeisB"<<endl;elsecout<<"ThedegreeisC"<<endl;elsecout<<"ThedegreeisD"<<endl;return0;}C++语言程序设计教程第3章控制结构

3.3.3if语句的嵌套

运行结果Enterthescore:86↙ThedegreeisAEnterthescore:74↙ThedegreeisCEnterthescore:48↙ThedegreeisD

由于if语句存在两种形式,当发生嵌套时就面临理解的问题,在程序p3-1.cpp中就出现下列嵌套形式:if(表达式1)if(表达式2)语句1;else语句2;else解释为属于第1个if与属于第2个if会有完全不同的结果。else究竟属于哪个if?

C++语言程序设计教程第3章控制结构

3.3.3if语句的嵌套

if(表达式1){if(表达式2)语句1;}else语句2;if(表达式1)if(表达式2)语句1;else语句2;

对于上述歧义,C++规定else与前面最近的没有else的if语句配对。因此上述嵌套的if语句解释如下:if(表达式1)

if(表达式2)语句1;else语句2;if(表达式1){if(表达式2)语句1;}else语句2;C++语言程序设计教程第3章控制结构

注意(1)if之后的表达式,通常是逻辑式或关系式,必须用括号括起来。(2)若在条件满足时需要执行多条语句,必须用{}号把语句括起来组成复合语句。(3)注意;的位置。(4)注意多重ifelse的搭配。if总是与它上面最近的else配对,如要改变,用复合语句{}(5)注意书写格式,相互配对的语句要对齐例3.4已知3个浮点数按从大到小顺序输出。#include<iostream.h>

voidmain(){floata,b,c,t;cout<<"输入a,b,c=";cin>>a>>b>>c;if(a<b){t=a;a=b;b=t;}if(a<c){t=a;a=c;c=t;}if(b<c){t=b;b=c;c=t;}cout<<a<<"\t"<<b<<"\t"<<c<<endl; }

3.4switch…case判断式

switch语句也称开关语句,用于多重选择的场合,测试某一个变量具有多个值时所执行的动作。该语句的功能是根据给定表达式的不同取值来决定从多个语句序列中的哪一个语句开始执行。3.4switch…case判断式

1、switch语句语法形式:switch(表达式){case常量表达式1:[语句块1][break;]case常量表达式2:[语句块2][break;]…case常量表达式n:[语句块n][break;][default:语句块n+1]}表达式可以是任意一个合法的C++表达式,但其值只能是字符型或者整型。常量表达式是由常量组成的表达式,其值也只能是字符型常量或者整型常量,各常量表达式的值不可以重复(相等)。符号[]表示其中的内容可选,语句块是可选的,它可以由一条语句或一个复合语句组成。break语句、default语句也是可选的。C++语言程序设计教程第3章控制结构

2、switch语句的执行过程:①先求出表达式的值;②将表达式的值依次与case后面的常量表达式值相比较,若与某一常量表达式的值相等,则转去执行该case语句后边的语句序列,直到遇到break语句或switch语句的右花括号为止。③若表达式的值与case语句后的任一常量表达式的值都不相等,如果有default语句,则执行其后边的语句序列。如果没有default语句,则什么也不执行。注意:在使用switch-case语句时经常容易丢失必要的break语句,这样程序会产生结果的错误,此类错误往往不易发觉。C++语言程序设计教程第3章控制结构

在执行<语句序列>的各个语句时,遇到break语句时,则退出该开关语句。如果遇不到break语句时,则依次执行其后的<语句序列>,直到开关语句的右花括号,再退出该开关语句。使用开关语句时,应注意如下事项。①开关语句中case子句的表达式是整常型表达式。通常只能使用整型数值、字符型常量或枚举型量等。②通常的<语句序列>中最后一条语句是break,表示退出该开关语句。③在开关语句中,default子句可以被省略,它也可以出现在花括号内的任意位置。④开关语句可以嵌套。⑤在开关语句的<语句序列>中,使用break语句是很重要的。【例3-5】将百分制的成绩按的等级分输出的switch-case语句的实现。789101112131415161718192021222324252627intmain(){ intn; cout<<"Enterascore:"; cin>>n;switch(n/10) {case9:case10:cout<<"ThedegreeisA"<<endl;break;case8:cout<<"ThedegreeisB"<<endl;break;case7:case6:cout<<"ThedegreeisC"<<endl;break;default:cout<<"ThedegreeisD"<<endl; }

return0;}if语句和switch语句的比较:if语句和switch语句都可以用来处理程序中的分支问题,在许多场合可以互相替代。差别表现为:(1)if语句常用于分支较少的场合;而switch语句常用于分支较多的场合。(2)if语句可以用来判断一个值是否落在一个范围内;而switch语句则要求其相应分支的常量必须与某一值严格相等。

C++语言程序设计教程第3章控制结构

例3.5输入1-7数字,转换成星期英文表示#include<iostream>usingnamespacestd;voidmain(){ intnum; cout<<“输入数字1-7=”;cin>>num; switch(num) { case7:cout<<“TodayisSunday\n";break; case1:cout<<"TodayisMonday\n";break; case2:cout<<"TodayisTuesday\n";break; case3:cout<<"TodayisWednesday\n";break; case4:cout<<"TodayisThursday\n";break; case5:cout<<"TodayisFriday\n";break; case6:cout<<"TodayisSaturday\n";break; default:

cout<<“error!"<<endl;break; }}注意:switch与if不同,它仅能判断一种逻辑关系,即表达式是否等于指定的常量,而if可以计算并判断各种表达式。case子句后必须为常量,常常是整型和字符型。default可以省略,这时,不满足条件什么也不执行。case和default只起标号的作用,顺序可以颠倒,颠倒时注意后面的break语句。多个case语句可以共用一组程序。循环结构程序设计

循环是所有编程语言的基本工具之一。它可以使某段程序代码被反复执行。我们在程序中,可以设置这个反复执行的过程,以使循环执行指定次数,或使循环执行到满足某个条件为止。循环:能够用来使程序反复执行某段代码,直到满足给定的条件为止的C++语句。循环变量:循环中用于计数的变量。循环修改部分:修改循环中用作循环条件变量的值。循环控制部分:判断循环是否结束。C++提供了三种实现循环的方法:

for循环、while循环、dowhile循环所有形式的循环通常都由四部分组成:(1)初始化部分主要为循环做准备工作。包括建立指针,设置循环次数的计数初始值,设置其他变量的初始值等。(2)循环体在循环语句中,要重复执行的操作。

循环体可以是单条语句、块语句甚至是空语句。是循环程序的核心,用于完成各种具体操作。(3)修改部分

为执行循环而修改某些参数,如地址指针、计数器或某些变量,为下次循环做准备。(4)控制部分判断循环是否结束。这部分是循环程序设计的关键,每个循环程序必须选择一个控制循环程序运行和结束的条件。通常判断循环是否结束主要有两种方法。

通常判断循环是否结束的两种方法:

①计数器控制循环:这种方式一般用于循环次数已知的情况。②条件控制循环:用于循环次数未知的情况,根据条件决定是否结束。3.5for循环for循环的使用非常灵活,既可以用于循环次数已知的情况,也可以用于循环次数未知的情况。3.5.1for语句上述格式可理解为:for(循环变量赋初值;循环条件;循环变量增值)循环体for是关键字;表达式1、表达式2和表达式3是任意表达式;语句为循环体,它可以是一条语句,也可以是复合语句,还可以是空语句。for语句的语法形式:for(表达式1;表达式2;表达式3)语句

for循环语句的执行过程:

①计算表达式1的值。②计算表达式2的值,并进行判断,如果表达式2的值为0(false)则退出该循环,执该循环体后面的语句;如果表达式2的值为非0(true)转(3)。③执行循环体的语句。④计算表达式3的值。⑤转②3.5.1for循环for循环语句执行过程图:C++语言程序设计教程第3章控制结构

C++语言程序设计教程第3章控制结构

【例3-3】求1+3+5+7…+99分析:求1~100的之间的奇数和就是一个累加的算法,累加过程是一个循环过程,可以用for语句实现:567891011121314#include<iostream>usingnamespacestd;intmain(){inti,sum=0;for(i=1;i<100;++i,++i)sum=sum+i;cout<<"sum="<<sum<<endl;return0;}运行结果sum=2500

表达式1可以省略,此时表达式1应出现在循环语句之前。表达式3可以省略,即将循环变量增量的操作放在循环体内进行。表达式1不仅可以设置循环变量的初值,同时还可以通过逗号表达式设置设置一些其它变量的值。表达式2和表达式3都可以这样。表达式2如果省略,即不判断其循环条件,则循环将无终止地进行下去。要结束循环,需要在循环体内设置break语句,退出循环。#include<iostream>usingnamespacestd;intmain(){inti; doublesum=1;for(i=1;i<100;++i,++i)sum=sum*i;cout<<"sum="<<sum<<endl;return0;}for语句一般形式:for(<初始化>;<表达式1>;<表达式2>)语句;功能:根据给定的条件,重复执行循环体语句。for常用于循环条件已知重复计算问题。其中:

初始化语句:用于进入循环之前给某些变量赋初值。

表达式1:计算表达式的值,表明循环的条件

表达式2:用于对某些变量的值进行修正,保证循环趋向结束的语句。先判断,然后再执行循环体。条件初始化条件为真循环语句修改循环条件语句for循环执行过程图真假for循环

for(表达式1;表达式2;表达式3)

{语句组1(循环体)}执行过程演示:

for循环语句应用举例1、打印100,99,98~1之间的整数。2、计算sum=1+2+3+4+…….1003、输出100以内能被3整除且各位数为6的所有整数。4、求Fibonacci数例问题,求前20项,每行输出6个数。5、计算n!=1*2*3*…..n,设n=5。1、打印100,99,88~1之间的整数。#include<iostream>usingnalespacestd;voidmain(){

for(inti=100;i>=1;i--)cout<<i<<“\t”;cout<<endl;}2、计算sum=1+2+3+4+…….100。#include<iostream>usingnamespacestd;voidmain(){intsum(0),i(1); for(i=1;i<=100;i++) sum=sum+i;cout<<"i="<<i-1<<"sum="<<sum<<"\n";}3、输出100以内能被3整除且各位数为6的所有整数。#include<iostream>usingnamespacestd;voidmain(){inti,j;for(i=0;i<10;i++){j=i*10+6;if(j%3!=0)continue;cout<<j<<"\t";}cout<<endl;}4、求Fibonacci数例问题,求前20项,每行输出6个数。#include<iostream>usingnamespacestd;voidmain(){intf1(1),f2(1),m;cout<<"m=";cin>>m;cout<<f1<<"\t"<<f2<<"\t";for(inti=2;i<m;i++){f1=f1+f2;f2=f1+f2;cout<<f1<<"\t"<<f2<<"\t";if(i%3==0)cout<<endl;}cout<<endl;}求Fibonacci数例问题,求前20项,每行输出6个数#include<iostream>usingnamespacestd;voidmain(){floata=1,b=1,c;inti;cout<<a<<"\t"<<b<<"\t";for(i=3;i<=20;i++){c=b;b=a+b;a=c;cout<<b<<"\t";if(i%6==0)cout<<endl;}cout<<endl;}5、求n!#include<iostream>usingnamespacestd;voidmain(){doubler=1;inti,n;cout<<"n=";cin>>n;for(i=1;i<=n;i++)r=r*i;cout<<i-1<<"!="<<r<<endl;}

所谓循环结构嵌套是指一个循环体内可以包含另一个完整的循环结构,构成多重循环结构。3.5.2用for语句实现嵌套循环C++语言程序设计教程第3章控制结构

【例3-4】用嵌套for语句显示乘法九九表789101112131415161718intmain(){constintline=9;inti,j,k,l;for(i=0;i<line;i++)//显示9行{for(j=0;j<=i;j++)//每一行显示的内容cout<<j+1<<"×"<<i+1<<"="<<(j+1)*(i+1)<<"\t";cout<<endl;}return0;}运行结果:1×1=11×2=22×2=41×3=32×3=63×3=91×4=42×4=83×4=124×4=161×5=52×5=103×5=154×5=205×5=25用嵌套for语句显示乘法九九表,用另一种方法做。#include<iostream>usingnamespacestd;voidmain(){ inti,j; for(i=1;i<=9;i++) cout<<i<<'\t';cout<<endl; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) cout<<i*j<<"\t"; cout<<endl; }}

【例3-5】百钱百鸡问题:鸡翁一、值钱五;鸡婆一、值钱三;鸡雏三,值钱一;百钱买百鸡。问鸡翁、鸡婆、鸡雏各几?分析:鸡翁最多有20个,鸡婆最多有33个,鸡雏最多有100个。采用穷举的方式,考察每一种可能,是否满足百钱买百鸡。C++语言程序设计教程第3章控制结构

789101112131415161718intmain(){constintcock=20,hen=33,chick=100;//分别表示鸡翁、鸡婆、鸡雏的最大数 inti,j,k; for(i=0;i<=cock;i++) for(j=0;j<=hen;j++) for(k=0;k<=chick;k++) if((i+j+k)==100&&(5*i+3*j+k/3)==100&&k%3==0) //鸡的个数与钱数必须为整数 cout<<"鸡翁、鸡婆、鸡雏各有:\t"<<i<<"\t"<<j<<"\t"<<k<<endl;

return0;}运行结果:鸡翁、鸡婆、鸡雏各有:02575鸡翁、鸡婆、鸡雏各有:41878鸡翁、鸡婆、鸡雏各有:81181鸡翁、鸡婆、鸡雏各有:12484保证k/3是整数

循环优化是指通过减少循环的层次以及每层循环体执行的次数,以节省系统资源(时间),提高程序运行效率。百钱百鸡问题如何进行循环优化?百钱买百鸡,另一方法程序#include<iostream>usingnamespacestd;voidmain(){intco,he,chi;for(co=0;co<=20;co++)for(he=0;he<=33;he++){chi=100-co-he;if(5*co+3*he+chi/3.0==100) cout<<co<<'\t'<<he<<'\t'<<chi<<endl;}}3.6while循环

有两种循环控制语句实现,while语句和do…while语句。条件表达式给出是否执行循环体的判断条件,常用关系表达式或逻辑表达式作为条件表达式,也可以用其他表达式或常量;语句是while循环的循环体,它可以是一条语句,也可以是复合语句。语句为循环体,它可以是一条语句,也可以是复合语句,还可以是空语句。3.6.1while语句语法形式:C++语言程序设计教程第3章控制结构

while(条件表达式)语句while循环语句执行过程格式:while(<条件>){循环语句;}功能:先检查循环条件,如果为真,则执行循环语句。如果条件为假,则跳过循环语句。执行其后面的语句。

while用来实现“当型”循环结构。先判断,后执行循环体语句。真假条件初始化条件为真循环语句修改循环条件语句

循环执行过程图

注意:①执行while循环语句时,先计算<条件>给出的表达式的值。如果第一次计算的表达式值为0时,一次循环体也不执行。②如果循环语句中给定的表达式值永远为非0时,而循环体内又无退出循环的语句,则为无限循环。③该循环语句可以嵌套。例、计算sum=1+2+3+4+…….100#include<iostream>usingnamespacestd;voidmain(){intsum=0,i=1;//定义变量,初始化 while(i<=100)//构造循环 {sum=sum+i;//循环体,多次执行

i++;

//修改循环控制变量}cout<<"i="<<i-1<<“sum="<<sum<<“\n”;}//输出结果i=100s=5050

3.6.2do--while语句do-while也是一种循环结构,称为“直到型”循环。do…while语句先执行循环体后判断条件表达式的值,若表达式的值为真则反复地执行循环体,直到表达式的值为假才退出循环。因此,do…while语句也被叫做“直到”型循环。do语句的特点是:先执行循环体,后判断循环条件是否成立。条件初始化条件为真循环语句修改循环条件语句循环执行过程图真假do-while循环语句格式do{循环语句;}while(条件表达式);其中:条件表达式给出是否执行循环体的判断条件,常用关系表达式或逻辑表达式作为条件表达式,也可以用其他表达式或常量;功能:程序先执行循环体,然后再检查循环条件。如果条件为真,重复执行循环语句。

先执行一次循环体<语句>,再计算<条件表达式>中给定的表达式的值。

如果该表达式的值为非0时,则再执行循环体,直到其值为0时,退出循环语句。

先执行语句,后判断条件。

do-while循环语句的执行过程注意:①该循环语句的特点是无论<条件>如何,至少执行一次循环体<语句>。当第一次循环表达式的值为真时,while与do—while的结果完全一样,否则结果不相同。②该循环语句可以用while循环语句表示,其格式如下:

<语句;>while(<条件>)<语句;>③该循环语句可以嵌套。例、计算sum=1+2+3+4+…….100#include<iostream.h>voidmain(){intsum=0,i=1; do {sum=sum+i;

i++;

}while(i<=100)cout<<"i="<<i-1<<"sum="<<sum<<“\n”;}例、已知一个自然数,编程将该自然数的每一位按其逆序输出。#include<iostream>usingnamespacestd;voidmain(){longintn=54321,d;do{d=n%10;cout<<d; n/=10;}while(n>0);cout<<endl;}while和do…while语句在一定条件下,while循环可能一次都不执行,而do…while循环在任何条件下都至少要执行一次。这一点正是在程序设计中决定选择while语句还是do...while语句的重要依据。C++语言程序设计教程第3章控制结构

while与do…while语句的执行流程:

注意:while(条件表达式)后面分号不可省去。在一定条件下,while循环可能一次都不执行,而do…while循环在任何条件下都至少要执行一次。这一点正是在程序设计中决定选择while语句还是do...while语句的重要依据。while与do…while语句的执行流程:

在一定条件下,while循环可能一次都不执行,而do…while循环在任何条件下都至少要执行一次。这一点正是在程序设计中决定选择while语句还是do...while语句的重要依据。while与do…while语句的执行流程:

在一定条件下,while循环可能一次都不执行,而do…while循环在任何条件下都至少要执行一次。这一点正是在程序设计中决定选择while语句还是do...while语句的重要依据。【例3-6】分别用while循环do…while循环求1+3+5+7+…+99C++语言程序设计教程第3章控制结构

注意:应用while语句与do…while语句时应注意,一般来说在循环体中,应该包含改变循环条件表达式的语句,否则便会造成无限循环(死循环)。37891011121314151617/*用while语句计算1+3+...+99*/intmain(){inti=1,sum=0;while(i<100){sum=sum+i;++i,++i;}cout<<"sum="<<sum<<endl;return0;}/*用do...while计算1+3+...+99*/intmain(){inti=1,sum=0;do {sum=sum+i;++i,++i; }while(i<100);cout<<"sum="<<sum<<endl;return0;}在本例中,改变循环条件的语句是++i,++i;这两个程序在任何时候运行结果都相同吗?在什么时候结果不相同?3.7break,continue,goto语句

C++语言提供了三个转移语句:break语句、continue语句和goto语句。主要用于改变程序中语句的执行顺序,使程序从某一语句有目的地转移到另一语句继续执行。break语句的功能是:中断所在循环体或switch...case语句块,跳转本层循环体外。3.7.1break语句break语句的格式:C++语言程序设计教程第3章控制结构

【例3-8】判断一个数是否为素数。分析:素数是不能被大于或等于2的数整除的数。用一个循环依次判断此数是否被大于等于2的数整除,一旦被一个数整除,就用break跳出循环,宣布此数不是素数。

break;C++语言程序设计教程第3章控制结构

7891011121314151617181920intmain(){inti,n;while(1){cout<<“n=“;cin>>n;if(n<=1)break;for(i=2;i<n;i++)if(n%i==0)break;i>=n?cout<<n<<"是素数\n":cout<<n<<"不是素数\n";}return0;}运行结果:5↙5是素数6↙6不是素数7↙7是素数0↙

当判断不是一个素数时,用break中断循环。由于break所在的是多重循环的内层,因此外层循环仍未中断。break中断了最外层循环,中止了继续从键盘继续输入数据。注意:既然break语句用来中断循环,它一定要用在循环体或swtich...case体中,用在其它地方就会出错。#include<iostream>usingnamespacestd;intmain(){inti,n;while(1){cout<<"n=";cin>>n;if(n<=1)break;for(i=2;i<n;i++)if(n%i==0)break;i>=n?cout<<n<<"是素数\n":cout<<n<<"不是素数\n";}return0;}continue语句只能用在循环语句的循环体内。在循环执行的过程中,如果遇到continue语句,程序将结束本次循环,接着开始下一次的循环。continue语句的格式:C++语言程序设计教程第3章控制结构

【例】使用continue改写判断素数的程序:

continue;3.7.2continue语句7891011121314151617181920intmain(){inti,n;while(1){cout<<“n=“;cin>>n;if(n<=1)break;for(i=2;i<n;i++)if(n%i==0)break;i>=n?cout<<n<<"是素数\n":cout<<n<<"不是素数\n";}return0;}continue当不是素数,直接跳到第15行继续执行。程序结果错误。程序跳到语句标号位置继续执行。语句标号属于标识符,格式如下:goto语句的格式:C++语言程序设计教程第3章控制结构

goto语句标号;3.7.3goto语句

语句标号:语句

其中的语句可以是任意语句,如:dowhile、while()、for()...等。goto语句的使用限制在一个函数体内,即goto语句只能在一个函数范围内进行语句转移。在同一函数中,语句标号应该是唯一的。C++语言程序设计教程第3章控制结构

【例3-9】使用goto语句改写判断素数的程序:3.7.3goto语句7891011121314151617181920voidmain(){inti,n;while(1){cout<<“n=“;cin>>n;if(n<=1)break;for(i=2;i<n;i++)if(n%i==0)break;i>=n?cout<<n<<"是素数\n":cout<<n<<"不是素数\n";}return0;}加上标号goon:gotogoon;运行结果:与原程序相同注意:尽管C++语言中提供了goto语句,但它决不鼓励程序员使用goto语句。在早期的程序设计方法中,goto语句是控制程序流程的基本手段之一而在现代程序设计方法中,它则变成了程序设计高手的技巧之一。

3.8本章小结

语句用于完成一定功能,对程序实行流程控制。一系列语句构成程序。

表达式语句由表达式加上分号构成,完整实现表达式的功能;结构语句用于控制程序的结构;块语句是用{}括起来的各种语句系列,在程序中可以看成是一条语句。

if语句有基本形式与if...else形式,由这两种形式可以组合成各种结构,但本质上只有这两种形式。在两种形式组合使用发生理解的歧义时,C++规定else与前面最近的没有else的if语句配对。

switch...case语句方便实现多重分支,使程序结构更加清晰。但不能取代基本的if语句。

C++提供了for、while、do…while三种循环语句,不同场合、不同使用者使用不同的语句,一般来说:当不知道循环次数时,可以考虑使用while语句;当不知道循环次数时,但循环至少执行一次时,使用do...while语句;for语句最复杂也最灵活,一般在已知循环次数时可以考虑使用for语句。使用for语句时要注意,for语句体中其中的最后一个表达式在循环体执行完后再执行。

break语句用在循环和switch...case语句中,用于跳出语句块。continue语句用在循环语句中,用来结束本次循环,忽略后面的语句。C++语言程序设计教程第3章控制结构

3.9程序设计举例1、输入圆的半径,计算并输出该圆的面积。2、输入圆的半径,计算并输出该圆的面积。3、已知圆半径r,求圆的周长c和面积s的值。其中r的值由键盘输入。4、输入3个整数x,y,z,从大小到大排序输出。5、编写一个程序输入年、月,打印出该月的天数。6、计算PI值程序PI/4=1-1/3+1/5-1/7+….,最后一项绝对值小于1e-8。7、打印3—100内的素数8、输入两个正整数m和n,求其最大公约数9、打印图形10、求下列分数序列前15项之和。

2/1,3/2,5/3,8/5,13/8,…11、按下列公式,求e的近似值。

e=1+1/1!+1/2!+1/3!+…+1/n!12、设计输入年、月、日,输出到该月的总天数的程序。例1、输入圆的半径,计算并输出该圆的面积。#include<iostream>usingnamaspacestd;voidmain(){floatr,s;cout<<"输入圆的半径:";cin>>r;s=3.14159*r*r;cout<<"半径为"<<r<<"圆的面积="<<s<<'\n';}2、输入圆的半径,计算并输出该圆的面积。#include<iostream>usingnamespacestd;floatarea(floatr) {return3.14159*r*r;}voidmain(){ floatr,s; cout<<"输入圆的半径:"; cin>>r;s=area(r); cout<<"半径为"<<r<<"圆面积="<<s<<'\n'; }用函数实现3、已知圆半径r,求圆的周长c和面积s的值。其中r的值由键盘输入。#include<iostream>usingnamaspacestd;voidmain(){floatr,s,c;cout<<"输入圆的半径:";cin>>r;s=3.14159*r*r;c=3.14159*r*2;cout<<"半径为"<<r<<"圆的面积="<<s<<'\n';cout<<“周长=“<<c<<endl;}1、输入3个整数x,y,z,从大小到大排序输出。#include<iostream>usingnamespacestd;voidmain(){intx,y,z,t;cin>>x>>y>>z;if(x>y){t=x;x=y;y=t;} //交换x,y的值if(x>z){t=z;z=x;x=t;} /交换x,z的值if(y>z){t=y;y=z;z=t;} //交换z,y的值cout<<x<<'t'<<y<<'t'<<z);}程序运行结果:(从键盘输入:675)5 6 72、编写一个程序输入年、月,打印出该月的天数。解:根据立法,凡是1、3、5、7、8、10、12月,每月31天,凡是4、6、9、11月,每月是30天,2月份闰年是29天,平年是28天。闰年条件:year%4==0andyear%100!=0或者year%400==0程序(p日历)如下:#include<iostream>usingnamespacestd;voidmain(){intyear,month,day;cout<<"inputyear,month,day=\n";cin>>year>>month;switch(month){case2:day=28;break;case4:case6:case9:case11:day=30;break;default:day=31;}if((month>=2)&&(year%4==0&&year%100!=0||year%100==0))day=29;cout<<year<<“年”<<month<<“月有”;cout<<day<<“天"<<endl;}3、计算PI值程序PI/4=1-1/3+1/5-1/7+….,最后一项绝对值小于1e-8#include<iostream>usingnamespacestd;voidmain(){inti;doublePI(0),f(1.0);for(i=1;i<1000;i+=2){PI=PI+f/i;f=f*(-1);if(1.0/i<1e-8)break;}PI=PI*4;cout<<"steps:"<<i<<"\tPI="<<PI<<endl;}4、打印3—100内的素数#include<iostream>usingnamespacestd;voidmain(){intm,n;cout<<"theprimenumberis:\n";for(m=3;m<100;m+=2){for(n=2;n<m;n++)if(m%n==0)break;if(n>=m)cout<<m<<"\t";}}4、打印3—100内的素数

#include<iostream>usingnamespacestd;voidmain(){intm,n;cout<<"theprimenumberis:\n";for(m=3;m<100;m+=2){for(n=2;n<=m/2;n++)if(m%n==

温馨提示

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

评论

0/150

提交评论