330 likes | 434 Views
第三章 基本控制结构. 3.1 顺序结构程序设计 3.2 选择结构程序设计 3.3 循环控制. 第三章 基本控制结构. 教学目标 : 1. 掌握 C++ 语言常用的输入 / 输出方式 2. 熟练掌握 if … else 的两种语法 3. 掌握 for 、 while 、 do-while 语句的用法 教学重点 : 1. 赋值语句、数据的输入输出及输入输出中常用的控制格式 2. 程序设计中构成选择、循环的算法; 教学难点 : 选择、 循环的嵌套算法分析。. 3.1 顺序结构程序设计.
E N D
第三章 基本控制结构 3.1 顺序结构程序设计 3.2 选择结构程序设计 3.3 循环控制
第三章 基本控制结构 • 教学目标: 1.掌握 C++ 语言常用的输入 / 输出方式 2.熟练掌握 if … else 的两种语法 3.掌握 for 、 while 、 do-while 语句的用法 • 教学重点: 1.赋值语句、数据的输入输出及输入输出中常用的控制格式 2.程序设计中构成选择、循环的算法; 教学难点: 选择、循环的嵌套算法分析。
3.1 顺序结构程序设计 3.1.1 C++ 语句概述 3.1.2 顺序结构程序设计 3.1.3 数据输入与输出
3.1.1 C++ 语句概述 在程序设计语言中,程序是按什么顺序执行的呢?默认按程序中语句顺序执行,语句是程序的基本功能单元。当然也有分支选择,跳转,循环非顺序执行,正体现了计算机的“智能”。C++程序也不例外。分三种基本控制结构: (1)顺序结构 (2)选择结构 (3)循环结构
C++语句 声明语句 表达式语句 选择语句 循环语句 跳转语句 复合语句 1、声明语句(说明语句) • 程序中的实体标识符必须先声明后使用 • 实体标识符如:变量、常量、函数、结构、类、对象等。 • 声明的实质:告之实体类型 (1)变量声明 (2)常量声明 (3)函数声明 (4)类型声明 • 声明语句其它功能:实体定义,变量赋值
2、表达式语句 • 格式:表达式; • 类别: (1)赋值语句 (2)复合赋值语句 (3)增(减)量语句 (4)函数调用语句 (5)输入输出语句 • 表达式语句与表达式的区别: 表达式可以包含在其他表达式中,而语句不可。 例如:if ((a=b)>0) t=a; 不可写为:if ((a=b;)>0) t=a;
3.1.2 顺序结构程序设计 • 将多个语句用一对大括号包围,便构成一个复合语句,逻辑上的一条语句 • 例如 • 空语句形式 ;不产生任何动作 • { • { • sum=sum+i; • i++; • } • } { • sum=sum+i; • i++; • }
3.1.3 数据输入与输出 • 简单的输入输出 • 向标准输出设备(显示器)输出 • 例:int x; • cout<<"x="<<x; • 从标准输入设备(键盘)输入 • 例:int x; • cin>>x;
3.2 选择结构程序设计 3.2.1 if 语句 3.2.2 switch 语句
为真 a>10? 为假 执行a减5 执行a加5 3.2.1 选择结构程序设计 1 、基本if语句(一) 格式:If ( <条件> ) <执行体语句> 形式一: 执行体为单条语句,带分号 if(a>0) a-=5; a+=5; //if语句之外
2 、基本if语句(二)格式:If ( <条件> ) <执行体语句> 形式二: 执行体为复合语句,整个if 语句结束不带分号 if(a>b) { //若a>b int t=a; //则a与b交换 a=b; b=t; } //功能:保持变量b始终为最大值 cout<<“The max is:”<<b<<‘\n’; //if语句之外
为真 条件? 为假 语句1 语句2 其它语句 3 、 If…else语句(扩展if语句) 格式: If ( <条件> ) <执行体语句1> else <执行体语句2>
4 、 if 语句—嵌套 一般形式: if( ) • if( ) 语句 1 • else 语句 2 • else • if( ) 语句 3 • else 语句 4 • 特点:if子句或else子句又包含if…else语句 • 注意:语句 1、2、3、4 可以是复合语句,每层的 if 与 else 配对,或用 { } 来确定层次关系。
C++规定:else关键字总是与它前面最近的未配对的可见的那个关键字配对。C++规定:else关键字总是与它前面最近的未配对的可见的那个关键字配对。 例如: • if( ) //第一个if • if( ) { //第二个if • if( ) //第三个if • <语句 1> • } • else • <语句 2> • 注意:复合语句内的 if 对其外面的else 是不可见的
嵌套if 语句 之阶梯结构 形式: if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3… else 语句 n • 执行流程:按顺序检测 if 条件,一旦满足则执行相应 • 的if子句,同时整个嵌套if 语句结束;否则执行最后一 • 个else子句.
三种形式: if (表达式) 语句 • 例:if (x>y) cout<<x; if (表达式) 语句1 else 语句2 • 例:if (x>y) cout<<x; • else cout<<y; if (表达式1) 语句1else if (表达式2) 语句2else if (表达式3) 语句3…else 语句 n 阶梯结构实例 • 将百分制成绩转换成字母等级: int Grade; cin>> Grade; if(>=90) cout<<“A\n”; else if(>=80) cout<<“B\n”; else if(>=70) cout<<“C\n”; else if(>=60) cout<<“D\n”; else cout<<“E\n”;
3.2.2 switch 语句 1、switch开关语句—特殊的多分支结构 格式: switch ( <表达式> ) { case <常量表达式1> : <语句序列1> case <常量表达式2> : <语句序列2> …… case <常量表达式n> : <语句序列n> default : <语句序列n+1> } 例:等级制转换为百分制 char grade; cin>>grade; switch ( grade ) { case ‘A’: Cout<<“100--99”<<endl; case ‘B’: Cout<<“89--80”<<endl; case ‘C’: Cout<<“79--60”<<endl; case ‘D’: Cout<<“Less than 60”<<endl; Default: Cout<<“Input error!\n”; }//执行后不完全合意
2、Switch与break联用改进 例:等级制转换为百分制 switch ( grade ) { case ‘A’: cout<<“100--99”<<endl; break; case ‘B’: cout<<“89--80”<<endl; break; case ‘C’: cout<<“79--60”<<endl; break; case ‘D’: cout<<“Less than 60”<<endl; break; default: Cout<<“Input error!\n”; }//执行 switch ( <表达式> ) { case <常量表达式1> : <语句序列1> break; …… case <常量表达式n> : <语句序列n> break; default : <语句序列n+1> }
可以是整型、字符型、枚举型 每个常量表达式的值不能相同,次序不影响执行结果。 可以是多个语句,但不必用{ }。 3、Switch语句 • 一般形式 • switch (表达式) • { case 常量表达式 1:语句1 • case 常量表达式 2:语句2 • ┆ • case 常量表达式 n:语句n • default : 语句n+1 • } • 执行顺序 • 以case中的常量表达式值为入口标号,由此开始顺序执行。因此,每个case分支最后应该加break语句。
4、break语句 • 使程序从switch语句内跳出(另还可从循环体跳出) ,继续执行逻辑上的下一条语句。不宜用在别处。 • 5、使用switch语句应注意的问题 • case分支可包含多个语句,且不用{ }。 • 表达式、判断值都是int型或char型。 • 若干分支执行内容相同可共用一组语句。
3.3 循环控制 3.3.1 while 语句 3.3.2 do-while 语句 3.3.3 for 语句
可以是复合语句,其中必须含有改变条件表达式值的语句。可以是复合语句,其中必须含有改变条件表达式值的语句。 3.3.1 while 语句 求自然数1~100之和” 我们知道是一个和累加运算,是一个循环求和过程,同样可以用while循环语句实现。 • 形式 while (表达式) 循环体语句 • 执行顺序(四步) • (1)计算表达式的值,若为 true(非0)时,则转步骤(2);若为 false(0)时,则转步骤(4)。 • (2)执行一次循环体语句 • (3)转步骤(1) • (4)结束并退出while循环
#include<iostream> using namespace std; void main() { int i=1, sum=0; while(i<=100) { sum+=i; //相当于sum=sum+i; i++; } cout<<"sum= " <<sum<<endl; } 问题: 1+2+3+4+…+100 执行流程: int i=1, sum=0; //控制变量i 1->100,初始置1 //记录累加和变量sum初始置0 控制变量 累加和 当条件 循环体 i=1 sum=0 ->true -> sum+i=>sum=1 i=2 sum=1 ->true -> sum+i=>sum=3 i=3 sum=3 ->true -> sum+i=>sum=6 i=4 sum=6 ->true -> sum+i=>sum=10 ……………… i=100sum=4950->true -> sum+i=>sum=5050 i=101sum=5050->false-> exit 当条件 循环体 运行结果:sum=5050
3.3.2 Do…while循环语句 适用:先执行循环体,后判断条件的情况 例: do…while语句 输入一个整数,将各位数字反转后输出。 #include <iostream> using namespace std; int main() { int n, right_digit; cout << "Enter the number: "; cin >> n;// n 保存输入的整数 cout << "The number in reverse order is ";
do { right_digit = n % 10;// 对n求模取出当前个位数 cout << right_digit; n /= 10; // 即n=n/10运算,相当于对n右移一位,去掉已取出的个位数 } while (n != 0); cout<<endl; } 运行结果: Enter the number: 365 The number in reverse order is 563
直到型循环结构与do-while 语句 • 一般形式 do 语句 while (表达式) • 执行顺序 先执行循环体语句,后判断条件。表达式为 true 时,继续执行循环体 *while语句与do-while语句的区别:
一般形式比较 while (表达式) do 语句 语句 while (表达式) • 执行流程—最大区别 while先判断控制循环的条件,后执行循环体;do…while先执行循环体,后判断控制循环的条件。 • 结果比较: While语句的循环体可能有时一次也不做; Do…while语句的循环体任何情况下至少要做一次。
循环前先求解 每次执行完循环体后求解 为true时执行循环体 3.3.3 for 语句 语法形式 for (表达式1;表达式2;表达式3) 语句 执行流程(五步) 求自然数1~100之和问题。 分析:本题需要用累加算法,累加过程是一个循环过程,可以用for语句实现。
#include<iostream> using namespace std; int main() { int i, sum=0; //控制变量和记录累加和变量 for(i=1;i<=100;i++) { sum+=i;//相当于sum=sum+i; } cout<<"sum="<<sum<<endl; } 无循环语句编程 (2*100条语句) int i, sum=0; // i=1; sum+=i; i=2; sum+=i; i=3; sum+=i; ……………… i=100; sum+=i; 运行结果: sum=5050
for 语句举例: 编写程序输出以下图案 * *** ***** ******* ***** *** *
#include<iostream> using namespace std; void main() { int i,j,n=4; for(i=1;i<=n;i++) //输出前4行图案 { for(j=1;j<=30;j++) cout<<' '; //在图案左侧空30列 for(j=1; j<=8-2*i ;j++) cout<<' '; for(j=1; j<=2*i-1 ;j++) cout<<'*'; cout<<endl; } 31
for(i=1;i<=n-1;i++) //输出后3行图案 { for(j=1;j<=30;j++) cout<<' '; //在图案左侧空30列 for(j=1; j<=7-2*i ;j++) cout<<'*'; cout<<endl; } } 32
小结: 掌握C++语言循环语句的三种形式及区别,能够选用基本循环语句编写简单的程序段。 思考题: 编写程序,求1000之内的所有“完全数”。所谓“完全数”是指一个数恰好等于其因子之和。例如,6是完全数,因为6=1+2+3 作业题: 1、分别计算整数1至10的平方并输出 2、编写程序,依次计算并输出当半径为5,4,3,2,1时的圆面积。