tceic.com
简单学习网 让学习变简单
当前位置:首页 >> 数学 >>

第3章-1顺序选择结构 (1)


主讲教师:谢翠萍
信息工程教研室
网页制作 信息工程教研室

第3章 程序设计初步 (第一个重点)
顺序控制语句 选择控制语句 循环控制语句 跳转语句
网页制作 信息工程教研室

本章学习内容
学点什么哪?
1. 了解算法的描述方法; 2. 熟练掌握用C语言的基本控制语句进

r />
行顺序、选择和循环结构 程序设 计的方法;
3. 掌握一些常用的算法,如累加、累 乘、统计、递推、迭代、穷举等; 4. 了解结构化程序设计的基本思想;
网页制作 信息工程教研室

重点与难点
?

设计累加和累乘算法,并寻找累加项或累乘项

的构成规律;
? ? ? ?

三种循环语句在控制流程时区别和相互联系;

条件语句的嵌套和循环语句的嵌套;
break语句在switch语句和循环语句中的作用; continue语句在循环语句中的作用。

网页制作

信息工程教研室

算法及描述方法
面向过程的程序 = 数据结构 + 算法

? ?

计算机中的算法( Algorithm )
?为解决一个具体问题而采取的、确定的、有

限的操作步骤,仅指计算机能执行的算法

网页制作

信息工程教研室

算法及描述方法
生活中的问题求解:
问题: 烤蛋糕(Baking a Cake) 解决步骤:
Start 2. 将烤箱预热 3. 准备一个盘子 4. 在盘子上抹上一些黄油 5. 将面粉、鸡蛋、糖和香精混合在一起搅拌均匀 6. 将搅拌好的面粉团放在盘子上 7. 将盘子放到烤箱内 8. End
1.
网页制作 信息工程教研室

分治策略,逐步细化

Problem: 准备早餐

1. Start 2. 准备早餐 3. End

网页制作

信息工程教研室

分治策略,逐步细化

1. Start 2. 准备早餐 2.1 准备一个金枪鱼三明治 2.2 准备一些薯条 2.3 冲一杯咖啡 3. End

网页制作

信息工程教研室

分治策略,逐步细化
1. Start 2.准备早餐 2.1 准备一个金枪鱼三明治 2.1.1 拿来两片面包 2.1.2 准备一些金枪鱼酱 2.2 准备一些薯片 2.3 冲一杯咖啡 3. End

网页制作

信息工程教研室

分治策略,逐步细化
1. Start 2.准备早餐 2.1 准备一个金枪鱼三明治 2.1.1 拿来两片面包 2.1.2 准备一些金枪鱼酱 2.2 准备一些薯片 2.2.1 将土豆切成片 2.2.2 油炸这些土豆片 2.3 冲一杯咖啡 3. End

网页制作

信息工程教研室

分治策略,逐步细化
1. Start 2.准备早餐 2.1 准备一个金枪鱼三明治 2.1.1 拿来两片面包 2.1.2 准备一些金枪鱼酱 2.2 准备一些薯片 2.2.1 将土豆切成片 2.2.2 油炸这些土豆片 2.3 冲一杯咖啡 2.3.1 烧些开水放入杯中 2.3.2 在水杯中加入一些咖啡和糖 3. End
网页制作 信息工程教研室

算法及描述方法
?

算法的描述方法
? 自然语言描述
? 传统流程图(Flowchart)
?

在1966年,Bohra 与 Jacopini 提出 1973年,美国学者I.Nassi 和 B.Shneiderman 提出

? N-S结构化流程图
?

? 伪码(Pseudocode)表示

网页制作

信息工程教研室

流程图(Flowchart)
开始/结束 一般处理框 输入/输出 判断

流程线
网页制作 信息工程教研室

三种基本结构
? ?

顺序结构、选择结构、循环结构 已经证明,任何程序均可只用这三种结构 实现
?图灵

?

只用这三种结构的程序,叫结构化 程序 程序“必须”符合结构化规则
信息工程教研室

?

网页制作

流程图
选择结构
顺序结构 true false

循环结构

true
false
网页制作 信息工程教研室

顺序结构
顾名思义,就是指按照语句在程序中的先 后次序一条一条的顺次执行。

网页制作

信息工程教研室

复合语句(也称语句块)
C 语言允许把若干条语句用一对花括号括起来, 构成一个复合语句。例如: { int a; a=1+2; } 复合语句是若干条语句的一个集合,它在语法上 是一个整体,相当于一条语句。

网页制作

信息工程教研室

复合语句(也称语句块)
?

复合语句内可以定义变量 ?变量必须在语句块的开头定义
?变量仅在定义它的语句块内(包括下层语句块)

有效。

?同一个语句块内的变量不可同名,不同语句块可

以同名 ?各司其职、下层优先 ?尽量不要在下层语句块内定义变量,也尽量不 要定义同名变量
信息工程教研室

网页制作

复合语句(也称语句块)
?

在什么情况下使用复合语句?
?语句块可以用在任何可以使用语句的地方,但没

有道理要乱加语句块
?一般是在分支和循环中需要进行多项操作时使用。

if (a < b)

{

}
网页制作

t = a; a = b; b = t;

整体被看成是 一条语句

信息工程教研室

选择控制语句

C++程序中提供的选择语句有两种: if 语句和 switch 语句。

网页制作

信息工程教研室

if 语句
1. if语句 if (条件表达式) 语句块;
表达式 真(非0) 语句块 假(0)

网页制作

信息工程教研室

条件 :是关系表达式或由关系表达式组合而成的逻
辑表达式。最终结果是true或false,决定程序下一 步的执行顺序。 例 :表示 x∈ [-1,1] 例: x在 [1,10] 和区间, [200,210]之间为真,否则为假。 C1 是否为小写字母的条件是: 应写为 : x>=-1 && x<=1 ,不能写为: -1<=x<=1 (c1>=?a? ) && ( c1<=?z? )
(x>=1) && (x<=10) || (x>=200) && (x<=210 )

网页制作

信息工程教研室

例:判断用户的输入,如果输入的 数值大于0,则 在屏幕上显示“正数”。

int main(void) { int a; cin >> a;

}

if (a > 0) cout << ”正数” << endl;

改成 if ( 0), 改成 if ( 0 == 改成 if ( a = 改成 if(3 < 会输出吗? 0 ) ,,会输出吗? 32 ) )会输出吗? ,会输出吗?

C语言对真假的处理: 非零是真,零就是假。真用1表示,假用0表示。
网页制作 信息工程教研室

if语句的范围问题
if (表达式) 整体来说是 语句A; 一条语句 语句B; 说明:if 默认只能控制语句A,无法控制语句B, 语句B一定会执行。
?

若想控制A和B,可以加上大括号,作为复合语句。 if (表达式) { 语句A; 语句B; }
网页制作 信息工程教研室

if-else
?

选择结构的一种最常用形式 if (表达式) 语句块1; else 语句块2; Y N 表达式!=0? 语句块3;

语句块1
语句块3
网页制作

语句块2

信息工程教研室

if-else
表达式值非0时,执行语句块1,然后语句块3 表达式值为0时,执行语句块2,然后语句块3 else部分可以没有。当表达式值为0时,直接 执行语句3 if-else嵌套使用时,注意else和谁配套的问题

网页制作

信息工程教研室

判断用户的输入,如果输入的数值大于0,则在屏幕 上显示“正数”;否则在屏幕上显示“不是正数”。
#include<iostream> using namespace std; int main(void) { int a; cin >> a; if (a > 0) cout << ”正数” << endl; else cout << ”不是正数” << endl; return 0; } 网页制作

信息工程教研室

条件表达式
?

表达式1 ? 表达式2 : 表达式3 1 表达式2 0 表达式3

表达式 1

?z = (a > b) ? a : b; ?此种表达式切忌用得过于繁杂
网页制作 信息工程教研室

以下程序的执行结果是什么?
int main( void) { int x = 2, y = -1, z = 2;

} 最后一个输出语句属于if语句吗? 该main()函数里面,到底包含几条语句?
网页制作

if (x < y) if (y < 0) z = 0; else z += 1; cout << z ; return 0;

哦,原来是因为 else 总是与靠近 它的if配套…

/*结果是2*/

4条语句
信息工程教研室

if语句常见错误
if (x > 0) ; y = 3*x+2; x>=1 && x<=10

if (x = 2) printf(“y>0”);

if (1<=x<=10) y=x-1;
x == 2 或 2 == x 如果满足某条件需执行多条 语句,要用花括号括起来

复合语句问题 Else没有if与之匹配
网页制作

信息工程教研室

空语句
编译器必须在if条件表达式的后面找到分号“;”, 以标志if语句的结束。 if(条件表达式);//空语句做if中的语句 语句1; 此时语句1不属于if的控制范围,不管条件表达式 为真为假,语句1总是被执行。

网页制作

信息工程教研室

找别扭
?

int a = 1; if (a == 0) printf( “OK“ );

?

int a = 1; if (a = 0) printf( “OK“ );

?

int a = 0; if (a == 0) printf( “OK“ );

?

int a = 0; if (a = 0) printf( “OK“ );
信息工程教研室

网页制作

== 和 =
?

int a; a = 0; a = = 1;

?

int a; a = = 0; a = 1;

?
?

一定要分清==和= 下面用法能起点小作用:

== 逻辑运算符 = 赋值运算符
编译出错

?

int a = 0; if (0 = = a) printf( “OK“ );

?

int a = 0; if (0 = a) printf( “OK“ );
信息工程教研室

网页制作

? ?

if的一种扩展 if (表达式1) N 语句块1; 表达式1!=0? else if (表达式2) Y 表达式2!=0? N 语句块2; else if (表达式3) 语句块1 Y 表达式3!=0? N 语句块3; 语句块2 Y ………… else 语句块3 语句块4; 语句块5; 语句块4
语句块5

if-else-if

?

else部分可以没有
信息工程教研室

网页制作

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

C Programming Language
网页制作

35

信息工程教研室

if (表达式) 语句块1; (expression) else if ( 表达式) 语句块2; else if (表达式) 语句块3; else 语句块4;
网页制作

if-else-if if-else-if 语句 statement

信息工程教研室

if-else-if语句 if (表达式) 语句块1; else if (表达式) 语句块2; else if (表达式) 小心,此处不能 语句块3; 再放表达式!! else (表达式) 语句块4;
网页制作 信息工程教研室

执行过程
if <表达式1 is true> 语句块1; 如果表达式1是真的 结束if语句 语句块1将被执行,执行 else if <表达式2 is true> 完后,整个if结束 执行语句块2; 结束if语句 … else 执行语句块n; 结束else …
信息工程教研室

网页制作

网页制作

if <表达式1 is true> 语句块1; 如果表达式1是假的 结束if语句 ? 语句块2被跳过, 然后转向测试表达 else if <表达式2 is true> 式 2 执行语句块2; 结束if语句 … else 执行语句块n; 结束else …
信息工程教研室

网页制作

if <表达式1 is true> 语句块1; 结束if语句 else if <表达式2 is true> 执行语句块2; 如果表达式 2是真的 语句块 2 将被执行 结束if语句 … else 执行语句块n; 结束else …
信息工程教研室

网页制作

if <表达式1 is true> 语句块1; 结束if语句 else if <表达式2 is true> 执行语句块2; 如果表达式2是假的 ? 语句块2被跳过,然后 结束if语句 转向测试后面的表达式 … else 执行语句块n; 结束else …
信息工程教研室

int main(void ) { double delta = 2;

}

若在这后面加一条语句 cout<<"haha"; if (delta > 0) 会产生什么结果? cout << "有两个解!\n"; else if (delta == 0) cout << "有一个唯一解\n"; else cout << "无解!\n"; return 0;
信息工程教研室

网页制作

从键盘输入一个百分制成绩,输出成绩的等级。
# include <iostream> using namespace std; int main(void) { float score; //score分数 cou << "请输入您的考试成绩: "; cin >> score; 成绩等级判断 reutn 0;
信息工程教研室

网页制作

}

(1)使用if语句格式
if (score > 100.0) cout << "这是做梦!\n"; if (score >= 90.0 && score <= 100.0) cout << "优秀!\n"; if (score >= 80.0 && score <90.0) cout << "良好!\n"; if (score >= 70.0 && ave < 80.0) cout << "一般!\n"; if (score >= 60.0 && score<70.0) cout << "及格!\n"; if (score >= 0.0 && score < 60.0) cout << "不及格!继续努力!\n";
网页制作 信息工程教研室

(2)使用if…else if..格式
if (score > 100.0) cout << "这是做梦!\n"; else if (score>=90.0 && score<=100.0) cout << "优秀!\n"; else if (score>=80.0 && score<90.0) cout << "良好!\n"; else if (score>=70.0 && score<80.0) cout << "一般!\n"; else if (score>=60.0 && score<70.0) cout << “及格!\n”; else if (score>=0 && score<60.0) cout << “不及格!\n"; else cout << "输入分数过低,不要如此自卑!\n";
网页制作 信息工程教研室

(2)使用if…else if..格式(更好的版本)
if (score > 100.0) cout << "这是做梦!\n"; 每一个else else if (score >= 90.0) 的条件意味 cout << "优秀!\n"; 着上一个if else if (score >= 80.0) 条件的补集 cout << "良好!\n"; else if (score >= 70.0) cout << "一般!\n"; else if (score >= 60.0) cout << "及格!\n"; else if (score >= 0) cout << "不及格!继续努力!\n"; else cout << "输入分数过低,别如此自卑!\n";
网页制作 信息工程教研室

将两个数从小到大输出
#include <iostream> using namespace std; int main( void) { int a, b, t; cin >> a >> b; 很常用的例子

if (a > b) { t = a; a = b; b = t; } }
网页制作

cout<< a<<“,”<< b<<endl;
信息工程教研室

输入三个整数,按从小到大的顺序输出它们。
#include <iostream> using namespace std; int main( void) { int a, b, c, t; 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 << “,” << b << “,” << c ;
信息工程教研室

网页制作

if语句嵌套
else 与最靠近它的、未与别的 else 匹配过的 if 匹配 if (表达式1) if (表达式1) if(表达式2) 语句1 if(表达式2) 语句1 else
else 语句2 if(表达式3) 语句3 else 语句4

if (表达式1) if(表达式2) 语句1 else if(表达式3) 语句3 else 语句4
网页制作

else if(表达式3) 语句3 else 语句4 尽可能使用花括 号来标识逻辑关 系的正确性。
信息工程教研室

网页制作

if (a > b) { if (a > c) max = a; else max = c; } else { if (b > c) max = b; else max = c; }

信息工程教研室

switch语句

switch (e) /*e 表达式(整型、字符型或枚举型)*/ { case c1:语句序列1; c1~cn case c2:语句序列2; 常量(整数、字符、常量 表达式,不含变量或函数, …… case cn:语句序列n; 与e的类型保持一致) default:语句序列n+1; /*可缺省,但最好不省略*/ }

default – 不是c1~cn的情况 (位置不一定在最后) ;

?不要忘记break
网页制作

信息工程教研室

int main(void) { float score; ?! cin>>score; switch((int) score/10 ) { case 9:cout << “A\n"; case 8:cout << “B\n"; case 7:cout << “C\n"; case 6:cout << “D\n"; case 5: case 4: case 3: 输入“75”,求输出结果 case 2: case 1: case 0:cout << “E\n"; default: cout << “error!\n"; } }
网页制作 信息工程教研室

int main(void) { float score; cin>>score; switch((int) score/10) { case 9:cout << “A\n"; case 8:cout << “B\n"; case 7:cout << “C\n"; case 6:cout << “D\n"; case 5: case 4: case 3: case 2: 运行结果 case 1: case 0:cout <<C“E\n"; D default: cout << “error!\n"; E } Error! }
网页制作

不好意思 ,我70多 分!

我的成绩 应该是C! 什么!“E”? “Error ”? 怎么会这样 ?!
E 其他

信息工程教研室

解决方法— int main(void) 运行结果: { —break; float score; C cin>>score; switch((int) score/10) { case 9:cout << “A\n";break; 这才差不多 case 8:cout << “B\n";break; ! case 7:cout << “C\n";break; case 6:cout << “D\n";break; case 5: case 4: case 3: case 2: break! case 1: case 0:cout << “E\n";break; E default:cout << 其他 “error!\n"; } } 网页制作 信息工程教研室

Switch的嵌套

int main(void) { int x=1,y=0,a=0,b=0; 2、不同的 break 也只是中 switch(x) { 断本层的 switch,不会发生 case 1 : 混乱。 switch(y) { 求程序运行结果。 case 0 : a++;break; case 1 : b++;break; 结果:a=2,b=1。 } case 2 : a++;b++;break; 如果 x=2 ? case 3 : a++;b++; } 结果:a=1,b=1 cout<<“a=”<<a<<“,b=“<< b; }
网页制作

说明 1、内外层的switch中的 case语句中的常量允许相同

如果x=3? 结果:a=1,b=1
信息工程教研室

switch小结
?

switch后面括号中的表达式一般是整型、字符型 或枚举型表达式,不能是数学表达式(比如case s<=250: )、字符串等。 在各个分支中的break语句起着退出switch语句 的作用 case语句起标号的作用。标号不能重名 。 各case(包括default)语句的次序可任意。 允许多个case共用一个执行语句。 default语句是可缺省的。但最好不省略 switch结构也可以嵌套。
信息工程教研室

?

?

?
? ? ?

网页制作

switch和if-else-if的比较
? if-else-if比switch的条件控制更强大

?else-if可以依照各种逻辑运算的结果进行流

程控制。(多条件多结果)

?switch只能进行==判断,并且只能是整数判

断。(单条件多结果)

网页制作

信息工程教研室

switch和if-else-if的比较
? switch比else-if更清晰 ? 两者都要尽量避免用得过多、过长,尤其

不要嵌套得太多

?它们大大增加程序的分支,使逻辑关系显得

混乱,不易维护,易出错

网页制作

信息工程教研室


推荐相关:

第3章--选择结构--参考答案

第3章--选择结构--参考答案_高等教育_教育专区。顺序分支结构选择题: 1. 设...c||1) D 3.能正确表示 a≥10 或 a≤0 的关系表达式是 A) a>=10 or...


第3章--选择结构

第3章--选择结构_高等教育_教育专区。顺序分支结构选择题: 1. 设 ch 是 ...((a...


第3章 选择结构

32页 1下载券 第3章 顺序选择结构程... 47页 7下载券 第3章 选择结构...b=3,c=4;,则以下选项中值为 0 的表达式是 A)(!a==1)&&(!b==0) ...


第3章 选择结构

选择结构 、选择题 1、D 此题主要是考语句的...选 B 21、A 此题考查的是条件表达式的求解顺序。...(a%b<1)||(a/b>1).这是将后面个逻辑表达...


【金版教程】2015届高考物理大一轮总复习 第三章 第1讲 原子结构 氢原子光谱模拟提能训 新人教版选修3-5

​拟​提​能​训​ ​新​人​教​版​​修​3​...【金版教程】 2015 届高考物理大一轮总复习 第三章 第 1 讲 原子结 构 氢...


高一生物(1-3章)非选择题集萃附答案

高一生物(1-3 章)选择题集萃 命题人:程广玉 2015.9.28 1.从生命系统的结构来分析,给下面的实例归类(填序号)。 ①受精卵 ②树叶 ③心脏 ④胃 ⑤血液 ...


1-3章习题解答

答:略。 【习题 1-4】请从以下的 4 个选项中选择一个正确答案。 (1)A ...3 2 3,3 4 3,4,4 0 1 第3章 顺序选择结构程序设计 【习题 3-1】...


第3章顺序结构

第3章_顺序结构程序 74页 1财富值 第3章 顺序结构...59页 免费 第4章 选择结构 56页 5财富值如要投诉...() Picture1.Print Picture1.Print Tab(1); "2...


C语言第3章顺序结构

C语言第3章顺序结构_其它_高等教育_教育专区。第三章 顺序结构 选择题 1. 结构化程序设计的三种基本结构是( )。 A. 函数结构、判断结构、选择结构 B.平行...

网站首页 | 网站地图
All rights reserved Powered by 简单学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com