第3章 控制结构
第三章 三种基本程序控制结构
12
• 例3-5设计一个信息录入窗体(见图3-6),录入
学生的基本信息。包括学号、姓名、系别、班级、 生日、家庭住址。单击保存按钮后,录入的基本信 息由MsgBox显示。
Visual Basic程序设计教程
13
Private Sub Command1_Click() Dim s_en As Single, s_sp As Single, s_pro As Single 3.3 选 择 结 构 Dim ave As Single, msg As String s_en = Val(Trim(Text2.Text)) 例3-6一个简化了的奖学金评审规则:三门课程的 s_sp = Val(Trim(Text3.Text)) 90分以上(包含90分)者可以获得奖 s_pro平均成绩在 = Val(Trim(Text4.Text)) Visual ave =学金。编写一个 (s_en + s_sp + s_pro) / 3Basic程序,看谁能拿到 ave =奖学金。 Fix(ave * 100 + 0.5) / 100 ‟结果保留小数点后两位 ‟奖学金评审,使用IF选择结构 分析:解决该问题的关键是学生的平均分与90的 If ave >= 90 Then 关系,求取平均分后,即可进行判断。判断过程用 msg = Label5.Caption & Text1.Text & "的平均分为:" & ave选择结构实现。程序界面使用四个文本框,用来输 & ",可获得奖学金" Else 入学生姓名和三门课程的成绩,一个标签用来显示 msg = Label5.Caption & Text1.Text & "的平均分为:" 判断结果。 & ave & ",不能获得奖学金" End If ‟输出评审结果 Label5.Caption = msg 14 Visual Basic程序设计教程 End Sub
第3章专家系统控制(3.4专家控制系统)
知识源 —是与控制问题子任务有关的一些独立知识模块。
推理规则——采用“IF—THEN”产生式规则, 条件部分是全局数据库(黑板)或是局部数据 库中的状态描述,动作或结论部分是对黑板信 息或局部数据库内容的修改或添加。 局部数据库——存放与子任务相关的中间结果, 用框架表示,其中各槽的值即为这些中间结果。 操作原语——一类是对全局或局部数据库内容 的增添、删除和修改操作,另一类是对本知识 源或其他知识源的控制操作,包括激活、中止 和固定时间间隔等待或条件等待。
5
1. 专家 控制系 统的工 作原理
知识基子系统位于系统上层,对数值算法进行 决策、协调和组织,包含有定性的启发式知识, 进行符号推理,按专家系统的设计规范编码, 通过数值算法库与受控过程间接相连,连接的 信箱中有读或写信息的队列。
6
内部过程 的通信功 能如下:
① 出口信箱 将控制配置命令、控制算法的参数 变更值以及信息发送请求从知识基系统送往数值 算法部分。 ② 入口信箱 将算法执行结果、检测预报信号、 对于信息发送请求的答案、用户命令以及定时中 断信号分别从数值算法库、人一机接口及定时操 作部分送往知识基系统。
9
2. 知识基系统的内部组织和推理机制 (1)控制的知识表示
专家控制把系统视为基于知识的系统,系统包 含的知识信息可以表示如下:
10
数据库包括:
事实——已知的静态数据。例如传感器测量误 差、运行阈值、报警阈值、操作序列的约束条 件、受控过程的单元组态等。 证据——测量到的动态数据。例如传感器的输 出值、仪器仪表的测试结果等。 假设——由事实和证据推导提到的中间结果, 作为当前事实集合的补充。例如,通过各种参 数估计算法推得的状态估计等。 目标——系统的性能指标。例如对稳定性的要 求,对静态工作点的寻优,对现有控制规律是 否需要改进的判断等。
第3章-2_程序的控制结构
22
#include<stdio.h> #include<math.h> void main() { float x,y; printf("please input x:\n”); scanf("%f”,&x); if(x<0) y=fabs(x); else if(x<2) y=sqrt(x+1); else if(x<4) y=pow(x+2,3); else y=2*x+5;
2012-8-11 24
switch
多路选择
switch (表达式) { case 常数1: 语句序列1; 语句序列1; case 常数2: 语句序列2; 语句序列2; ………… default: 语句序列n; 语句序列3; } default可以没有,但最好不省略 不要忘记break
25
2012-8-11
4
如何设计结构化的程序?
Top-down, Stepwise refinement 自顶向下、逐步求精 1971年,wirth提出的结构化程序设计方法 – 先全局后局部 – 先整体后细节 – 先抽象后具体
2012-8-11
5
自顶向下、逐步求精的 结构化程序设计方法
A11
有穷性 – 在合理的时间内完成 确定性,无歧义 – 如果x≥0,则输出Yes;如果x≤0,则输出No; 有效性 – 能有效执行 – 负数开平方 没有输入或有多个输入 有一个或多个输出
2012-8-11 8
算法的分类
数值运算算法: –解决求数值解问题 非数值运算算法: –需要用分析推理、逻辑推理才能解决的问题 –例如人工智能中的许多问题,查找、分类等
第三章(2) 模糊控制系统的设计
假设中等小费是15%,高是25%,小费低是5%。 小费函数大致形状如下。明显地,曲线形状受 当地传统、文化喜好影响,但三条规则通用。
0.25
0.15
0.05
服务差或食品差 服务好或食品好
3.3 模糊控制器的设计举例 31
μ μ A(e) μ B(e)
0
e
3.2模糊控制系统的设计 12
二、模糊控制器的设计原则 b). α 较小,控制灵敏度高; α 较大,鲁棒性好; 一般取α = 0.5。
μ μ A(e) μ B(e) μ μ A(e) μ B(e)
0
e
0
e
3.2模糊控制系统的设计
13
二、模糊控制器的设计原则 3、设计规则库 规则数: N=nout*(nin(nlevel-1)+1)。 4、设计模糊推理 可由软、硬件实现。
20
3.3 模糊控制器的设计举例
3.3 模糊控制器的设计举例 4、模糊控制规则的确定 为使系统输出的动态特性最佳,根据操作经验而 总结的一条条模糊条件语句。
3
4 5 2 1
Td
0
t
3.3 模糊控制器的设计举例
21
3.3 模糊控制器的设计举例 (1)误差e = T – Td 为负大时,全功率加热。
5、精确化方法 一定要选取有代表性的值。
3.2模糊控制系统的设计
14
3.3 模糊控制器的设计举例 以加热炉温度控制系统为例: 由于模糊关系矩阵是一个高阶矩阵,多次合成计 算使输出使系统实时性变差,在实际应用中通 常采用查表法。
DE
Td
_
e
Δ
KΔe Ke E
模糊 控制表
U
Ku
u
被控对象
第3章 选择结构(C++版)
if (条件表达式) 语句1; else 语句2;
true
条件表达式
flase
程序设计风格提示:书 写if-else语句时,if和else 要对齐,而分支的语句部分 要缩进两格。
语句块1
语句块2
图3-2
例3.4 根据用户输入的成绩,判断是否通过了考试。 #include<iostream > using namespace std; int main() { int c; cin >> c; if (c>=60) cout<<"pass! \n"; else cout<<"sorry!\n"; return 0; }
第二节 if选择结构
C++提供三种选择结构,即if选择结构、if-else选择结构 和switch选择结构。 一、if语句(单分支结构) 格式1:
if (条件表达式) 语句1;
功能:如果条件表达式的值为真, 即条件成立,语句1将被执行。否则, 语句1将被忽略(不被执行),程序将 按顺序从整个选择结构之后的下一条 语句继续执行。执行流程如图3-1所示 说明:格式中的“条件表达式”必 须用圆括号括起来。
if、else、switch、while、do和for等都是C++关键字。 这些关键字是该语言保留的,用于实现C++控制结构的不同 特性。关键字不能作为变量名等一些标识符。注意,将关键 字while的拼写变为“While”是个语法错误,因为C++是区分 大小写的语言。while、if和else等所有C++保留关键字只能 语句1
图3-1
第3章 程序控制结构
if嵌套语句也可以实现多分支的选择问题,但如果分支较 多,程序代码行数也随之曾多,从而降低了程序的可读性, 造成程序容易产生错误。C语言提供了switch语句可以解决 这一问题,switch语句直接处理多分支选择,而且可读性 较好。它的一般形式如下:
switch(表达式) { case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; … case 常量表达式n: 语句n; break; default: 语句n+1; }
T
条件是否成立
F
F
T 语句序列
语句2
语句1
语句2
结束
结束选择
循环结束
3.2 语句
程序的执行部分是由语句构成的。执行 语句的过程就是实现程序功能的过程。语 句是C语言的基本执行单位。
3.2.1声明语句
声明语句主要用来说明合法标识符, 以便能在程序中合法使用它们。在C 语言程序设计中,任何用户自定义 的函数、变量和符号常量都必须遵 循先声明后使用的原则。 声明语句的语法格式如下: 数据类型符 用户标识符;
多分支结构流程图
表达式1
T
语句1
F
表达式2 1
T
语句2 1
F
表达式3
T
语句3
F
表达式n
T
语句n
F 语句 F n+1
输入百分制成绩,输出对应成绩等级
#include <stdio.h> void main() { int m; printf("Please input mark:"); scanf("%d",&m); if(m>=90) printf("A\n"); else if(m>=80) printf("B\n"); else if(m>=70) printf("C\n"); else if(m>=60) printf("D\n"); else }
第3章 选择&循环结构程序设计
switch语句的语义
switch语句的语义如下:
计算整型表达式; 将整型表达式的值顺序地与各个case后的整常量 相比较,若与某个整常量相等,则从对应的case 之后的语句组开始往下执行,若与所有整常量均 不等,在有default的情况下,只执行语句组n。
以上语义中隐含着:
每个分支中可以有多个语句,而且不必复合。 一旦找到匹配 (或defaulte),就会一直往下执行 而非执行单个分支。若想在执行单个分支后退出, 则必须让每个语句组的最后一条语句是 break;。
与人类擅长解析和符号运算等特点不同, 计算机必须从具体数据出发,按照人为其 设计好的程序机械地进行运算。另一方面, 由于计算机的运算速度很快,因此最擅长 完成那些计算工作量很大的重复性运算。 这种重复是指运算步骤,数据则在重复中 不断地改变,每当执行这组步骤时,程序 都从变量的原值推出它的一个新值,这一 过程称为“迭代” ,是计算机得以发展的 关键因素。循环则是实现迭代的必要条件。
3.3.2 while语句
while语句的语法 while语句的语义 while语句程序实例
while语句的语法
while语句的语法是:
while (表达式) 语句
其中:
“while (表达式)”为循环控制,其中“表达式” 可以为任意类型,但其值将当作逻辑值使用。 “语句 ”为循环体,它可以是一个语句、一个由 花括弧括起来的复合语句或另一个控制结构。
如果表达式的初值为false,则一次循环也不执行 表达式的值必须在循环体中改变,否则为死循环
while语句程序实例
// 从键盘输入一组整数(以0作为输入结束的标志),打印其最大值 #include <stdio.h> int main() { int x, max; printf("输入一个整数:"); scanf("%d", &x); max = x; while (x != 0) { printf("输入一个整数:"); scanf("%d", &x); if (x > max) max = x; } printf("最大值 max = %d\n", max); return 0;
《程序设计基础(CC++)》课程教学大纲
《程序设计基础(C/C++)》课程教学大纲一、课程信息英文名称:Foundation of Programming (C/C++)授课方式:机房授课课程类别:学科基础课程性质:必修学分:3学时:54学时适用对象:计算机类专业等先修课程:计算机导论开课院系:软件工程系、计算机科学与技术系等二、课程简介《程序设计基础(C/C++)》是软件工程、计算机科学与技术等计算机类本科专业的学科基础课程。
本课程主要的教学内容是C++语言的基本数据类型与表达式,程序基本控制结构,函数、数组及指针的运用,以及输入/输出流类的应用等。
课程以程序设计方法贯穿始终,从语法规则到编程实践,力求在掌握基本程序设计方法的同时,培养学生良好的程序设计习惯,养成良好的专业素养。
本课程的教学方式采用机房上课演示讲授并辅以学生上机练习,充分利用课堂网络教学环境,与PPT、板书、课后思考题和练习题等相结合,并结合课程设计教学环节,使学生能够掌握C/C++程序设计的基本方法,学会对现实世界中的问题及其解决方法用C++语言进行描述。
三、课程任务、目标与要求1.课程任务《程序设计基础(C/C++)》是学习计算机编程的入门课程,学生不仅要学习C/C++语言的基本知识和程序设计方法,还要上机编程实践,掌握计算机调试程序的基本技能,为后续课程的学习打下良好的编程基础。
2.课程基本要求2.1课程目标《程序设计基础(C/C++)》课程着重对学生编程实践能力的培养。
要求学生重视上机编程实践,广学多练,不断地培养和提高编程兴趣;充分利用现代信息技术及互联网资源,运用发散性思维方式,对相关知识进行扩展,开阔视野,在循序渐进中提高编程能力。
2.2 课程目标与毕业要求之间的对应关系本课程要求学生掌握软件工程和计算机学科有关程序设计的基本理论和基本知识;掌握对现实世界中问题及其解决方法用C++语言进行描述的分析方法和技术;具有运用C/C++语言进行程序设计的基本能力;了解程序设计方法和C/C++语言的理论发展动态和行业需求。
Chap03-基本控制结构
Chap03基本控制结构程勇信息科学与技术学院计算机系Sept. 2006课程提纲Chap01 绪论Chap02 数据类型与表达式Chap03 基本控制结构Chap04 数组和字符串Chap05 指针Chap06 函数Chap07 程序组织与预处理Chap08 类和对象Chap09 运算符重载Chap10 继承与派生Chap11 虚函数和多态性Chap12 异常处理Chap13 输入与输出Chap14 范型程序设计与STL本章提纲选择语句if语句if-else语句switch语句循环语句while循环do-while循环for循环转向语句break语句continue语句goto语句选择语句选择结构能够根据特定条件的判断来选择程序所要执行的分支。
if语句if (表达式)语句if-else语句if (表达式)语句1else语句2if语句可以嵌套,但要避免else 悬空(else语句与最近的if语句配对);if语句逻辑选择语句(续)多分支选择结构(switch语句)一般格式switch (表达式) {case 常量表达式1:语句(块)1case 常量表达式2:语句(块) 2┆case 常量表达式n:语句(块) ndefault : 语句(块) n+1}几点说明表达式可以是可以是整型、字符型、枚举型;Switch语句中包含n个常量表达式,与Case一起作为n组分支的标号;以case中的常量表达式值为入口标号,由此开始顺序执行。
因此,每个case分支最后应该加break语句;若干分支执行内容相同可共用一组语句;循环语句重复结构(循环结构)是十分重要的程序结构,分为“当型”和“直到型”两种控制形式。
在C++中,有三种循环结构while循环do-while循环for循环while循环格式while (exp)语句(块)当循环条件表达式的值为真,则执行循环体,直至exp的值为假。
故称为“当型”循环;exp可以是算术表达式、关系表达式和逻辑表达式;while语句循环语句(续)do-while循环一般格式do {语句;while (exp);while循环和do-while循环的区别:while语句先判断条件是否满足,然后才执行循环体,因此可能一次也不执行do-while语句至少执行一次循环体后再判断循环条件是否满足,因此必须执行一次循环体;在大多数情况下可以相互替代;do-while语句循环语句(续)for循环一般格式for (exp1; exp2; exp3)语句exp1: 用来设置循环控制变量初值,一般是赋值表达式;exp2: 其计算结果可以用来作为循环条件,一般是关系表达式或逻辑表达式;exp3: 用来修改循环控制变量的值。
第4_3章 程序的控制结构
2010-6-1
17
例4.19: 方法2
break 语句
2010-6-1
18
Hale Waihona Puke #include <math.h> main() { int m, i, k;
例4.19: 方法2
printf("Please enter a number:"); scanf("%d", &m); Please enter a number: 6 k = sqrt(m); for (i=2; i<=k; i++) No! { Program is over! if (m % i == 0) break; } if (i > k) printf("Yes!\n"); else printf("No!\n"); printf("Program is over!\n"); }
2010-6-1 22
这一章我们学习了
常用算法 求阶乘: 求阶乘: – 数据类型的定义, long或double 数据类型的定义, long或 求累加和: 求累加和: long 统计: 统计: – 统计正数,平均分以上,n个成绩中100~90,89~80,79~70 统计正数,平均分以上, 个成绩中100~90,89~80,
2010-6-1 11
流程的转移控制
break语句 break语句 continue语句 continue语句
2010-6-1
12
break和continue
对for,while,do-while循环进行内部手术 for,while,do-while循环进行内部手术 break,退出一层循环或者switch break,退出一层循环或者switch continue,中断此次循环体的执行, continue,中断此次循环体的执行,开始下一次 break和continue少用为妙 break和continue少用为妙
计算机科学导论-程序是如何执行的
CPU
PC
IR
R ALU
8
汇编指令的概念
“读取a到R”操作——load指令
• 程序语句中的“读取a到R”,表示CPU 将变量a读取到寄存器R中。我们设计指令 “load”表示“读取a到R”操作,那么load指 令中需要有两个“操作数”(operands),一 个操作数是变量a的地址,另一个操作数是存 储的寄存器。
3
第2节 a=a+1的执行过程 分解“a=a+1”的执行步骤 CPU中的核心部件 汇编指令的概念 a=a+1的完整执行过程
4
分解“a=a+1”的执行步骤
主存存储三条指令:
• 读取a到R • R加1 • 将R存回a
CPU R
主存
内存 地址
读读取取a到a R 300 Ra加1 301
将存R存回回a a 302
将R1存回a
内存 地址
300 301 302
a
1000
10
汇编指令的概念
“R赋值”操作——mov指令 程序语句中的“R赋值”,表示给寄存器R中赋一个值。我们设计指令
“mov”表示“R赋值”操作,那么mov指令中需要有两个操作数,一个操作数 是赋给的值,另一个操作数是寄存器。
格式1: mov R1, constant 注: mov指令有两个操作数,前一个是寄存器,后一个是十六进制的常数
13
汇编指令的概念
•
减法指令 sub:同add指令的格式一样。“sub R2, R1,constant”,代
表了R2 = R1 – constant。“sub R3, R1, R2”代表了R3=R1-R2
•
左移位指令shiftl,“shiftl R3,R1,05h”代表寄存器R1的二进制数左移
第3章 程序基本控制结构
输入代码如下:
Dim sYourScore As string Dim iScore As integer
System.console.WriteLine(“请输入你的考试分数 (0--100)之间:”) sYourScore=System.Console.ReadLine iScore = convert.toInteger(sYourScore)
基本语句
模拟文件读取出错
程序运行结果:
基本语句
Case 语句的用法
Case语句的用法
至此为止,Select Case语句的三种用法都 已经用到了,下面总结一下: (1)Case…To…的形式 表示被选择的表达式处于某个范围以内 (2)Case Is…的形式 表示被选择的表达式满足某个条件,当然, Is后面不一定是等于,只要是比较运算符 (=,<,>,<>等)就可以。 (3)Case …的形式 这事实上相当于Case Is =的形式。
基本语句
Case 语句的用法
Case语句的用法
如果所有的条件都不能满足,Select Case 将会进入到Case Else语句。虽然Case Else语句可以不写,但是选择完了所有的 条件以后,最好加上Case Else..,这是用 来处理异常情况的。比如在这个程序中, 如果用户输入期望以外的值,就执行Case Else输出信息,告诉用户输入无效,这样 就大大地提高了程序对抗错误输入的能力, 也就是所谓的“健壮”。
四. 猜数游戏
代码实现
用Select…Case语句判断输入的数字是否 正确 记录猜测次数 演示
四. 猜数游戏
思考
第3章 控制结构
条件运算符的结合性是从右向左,它 的运算结果是一个数值,可以继续参加运 算,也可用于表达式求值的任何地方。 例如: if(x<y ?x: z<y? z:y) a=b; cout << x<y? x:y;
条件运算符可以嵌套使用。如求三个变量 x,y,z中的最小值,用条件运算符可表示为: min=(t=x<=y?x:y)<=z?t:z; 等同于以下的条件语句: if(x<=y) t=x; else t=y; if(t<=z) min=t; else min=z; 显然,前面的表示法比后一种要简洁。
if(d) //若d不为0 { root1=(-b+sqrt(d))/(2*a); root2=(-b-sqrt(d))/(2*a); cout<<”该方程有两个不同的实根:”; cout<<”x1=” <<root1<<‟\t‟<< “x2=”<<root2; } else { root1= -b/(2*a); cout<<”该方程有两个相等的实根: x1=x2=”<<root1; } cout<<endl; }
因此使用内嵌的if语句应包含else部分,这样 if数目和else数目相同,内层到外层一一对应, 不致出错,或者将只有if而无else分支的条件语 句内嵌在外层的else子句中,这样也不会出错。 或者可以加花括号来确定配对关系。 例如,将上述语句写成下列形式: if(e1) { if(e2) 语句1 } //内嵌的if else 语句2 这时,{ }限定了内嵌if语句的范围,因此else与 第一个if配对。
【例3.3】从键盘上输入三个整数,输出三个数中的最大数。 程序如下: 分析:对三个数作两次比较, #include<iostream.h> 1)比较前两个数,把大数存 void main( ) 于中间变量;2)把中间变量和 { int x,y,z,t; 第三个数比较,输出其中的 cout<<”输入三个整数:”; 较大数。 cin>>x>>y>>z; cout<<”x=”<<x<<” “<<”y=”<<y<<” “<<”z=”<<z<<endl; if(x>=y) t=x; else t=y; cout<<”三个数中的最大数是:”; if(t>z) cout<<t<<endl; else cout<<z<<endl; }
第三章1(未用 用 Authore)
#include <stdio.h> void main() { char c1,c2; //增强人机交互性。 printf("请输入一个大写字母:"); c1=getchar(); printf("%c,%d\n",c1,c1); c2=c1+32; printf("%c,%d\n",c2,c2); }
a=3;
?
t=a; a=b; b=t;
3
复合语句
程序的基本控制结构
C语言编程实际上就是把一个解决实际问题 的算法用C语言的语句和函数来描述。 C语言是一种按结构化程序设计思想设计 的程序设计语言。按照这样一种设计出来的程 序具有结构清晰、可读性好,易于修改和容易 验证的优点。 结构化程序设计是一些进行程序设计的原则 和方法。在这种方法中,模块是一个基本概念, 一个模块可以是一条语句、一段程序、一个函 数等。
10
选择结构(if语句 )
在C语言中,if语句可有三种形式:
形式1 if(表达式) 语句 if(a>b) c=a; 形式2 if(表达式) 语句1 if(a>0) c=a; else 语句2 else c=b; if(表达式1) 语句1 if(w>50) cost=15; else if (表达式2) 语句2 else if(w>30) cost=10; 形式3 …… else if(w>20) cost=5; else if (表达式n-1)语句n-1 else if(w>10) cost=1; else 语句n else cost=0;
B 70~79
最后一行的 break可以省略。
23
C语言的控制结构(switch语句)
第3章 算法与控制结构
本章概要 上一页 下一页 退 出
用伪代码描述的算法 【例3-1】判断一个正整数是否是素数。分别用自然语言、 BEGIN(算法开始) 流程图和伪代码来描述解决该问题的算法。 flag=true; 用自然语言描述的算法 输入n ; Step1:设置一个判断素数的标志量flag,初值为true(先假定 是一个素数) i=2 ; Step2:输入n的值(欲判断的数) do Step3:2赋给i(i作为除数) Step4:n被i除,得余数r{ 求n除以i的余数r ; if(余数r为0) flag=false ; Step5:如果r等于0,表示n能被i整除,n不是素数,置flag为 false i+1i ; Step6:使i自增1(i+1i) } Step7:如果flag为true而且i≤n-1,返回到Step4;否则执行下 一步 while (flag为true而且i≤n-1) 返回到do ; Step8:如果flag为true,打印“n是素数”,否则打印“n不是 if (flag为true) 输出打印“n是素数”; 素数” else 输出打印“n不是素数”; 算法结束 END(算法结束)
1)有穷性,指算法是有限的操作序列; 2)确定性,指每个操作有确定的含义,无二义性; 3)可执行性,指每个操作都是可以执行的; 4)有序性,指执行步骤严格按逻辑顺序进行; 5)可输入/输出信息,输入的信息是算法加工的对象, 而算法解决问题的结果应当输出
本章概要 上一页 下一页 退 出
2
三种基本控制结构
17
3.4 循环结构
在利用计算机解题时,往往可以把复杂的不容易
理解的求解过程转换为易于理解的操作的多次重 复,这就是循环。 在循环算法中,穷举与迭代(递推)是两类具有代 表性的基本算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.3.3 if语句的嵌套
开始 输入 n N
n>=60 Y Y n>=90 N n>=80 N Y
D
C
B
A
输出 结束
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
void main() { int n; cout<<"Enter the score:"; cin>>n; if (n>=60) if (n>=90) cout<<"The degree is A"<<endl; else if (n>=80) cout<<"The degree is B"<<endl; else cout<<"The degree is C"<<endl; else cout<<"The degree is D"<<endl; }
true 或 非 0 表达式 false 或0 语句
注意:
关系表达式两边的括号必不可少。 不要将关系表达式误写成赋值表达式。
3.3.2 完整的if语句
完整的if语句有如下的一般形式: if ( 表达式) 语句1; else 语句2; 首先计算表达式的值,如果表达式的值为真,则执 行语句1;否则就执行语句2。流程如右图所示。通 常,将前者叫做if分支,将后者叫做else分支。 if (x>y) cout<<x<<endl; else cout<<y<<endl; 实现了从x和y中选择较大的一个输出。
3.3.3 if语句的嵌套
运行结果
Enter the score:86↙ The degree is A Enter the score:74↙ The degree is C Enter the score:48↙ The degree is D 由于if语句存在两种形式,当发生嵌套时就面临理解的问题,在程序p31.cpp中就出现下列嵌套形式: if(表达式1) if(表达式2) 语句1; else 语句2; else解释为属于第1个 if与属于第2个if会有 完全不同的结果。 else究竟属于哪个if?
if (表达式1) { if (表达式2) 语句1;} else 语句2;
3.4 switch…case判断式
在有的问题中,要进行多次判断选择,C++中使用switch语句,其语法形式如 下: switch (表达式) { case 常量表达式1:[语句块1][break;] case 常量表达式2:[语句块2][break;] … case 常量表达式n:[语句块n][break;] [default: 语句块n+1] } 表达式可以是任意一个合法的C++表达式,但其值只能是字符型或者整型。 常量表达式是由常量组成的表达式,其值也只能是字符型常量或者整型常量, 各常量表达式的值不可以重复(相等)。 符号[ ]表示其中的内容可选,语句块是可选的,它可以由一条语句或一个复合 语句组成。 break语句、default语句也是可选的。
3.1 C++语言的语句
语句是程序中可以独立执行的最小单元,类似于自然语言中的句子。语句一般由分 号结束。语句通常是由表达式构成的,表达式尾部加上分号构成表达式语句。 a=b+c; i+j; ; 由赋值表达式构成的语句,通常称其为赋值语句。 由算术运算表达式构成的语句。 由一个空的表达式构成的语句叫做空语句。空语句常用 于在程序中某处根据语法要求应该有一条语句,而 实际上又没有什么操作可执行的场合。
3.5 for循环
for循环语句执行过程图 :
① ② ④ 表达式 1 false 或 0 循环体外
for(表达式 1;表达式 2;表达式 3) 表达式 2 { 语句 1; 语句 2; ... 语句 n 表达式 3 for 循环语句执行过程 ③循环体
true
或非 0
语句
}
循环体外语句;
3.5 for循环
3.3.3 if语句的嵌套
对于上述歧义,C++规定else与前面最近的没有else的if语句配对。因此上述 嵌套的if语句解释如下: if(表达式1) if(表达式2) 语句1; else 语句2; if (表达式1) if (表达式2) 语句1; else 语句2;
if (表达式1) { if (表达式2) 语句1; } else 语句2;
3.4 switch…case判断式
switch (表达式) { case 常量表达式1:[语句块1][breakase 常量表达式n:[语句块n][break;] [default: 语句块n+1] } switch语句的执行过程: ①先求出表达式的值; ②将表达式的值依次与case后面的常量表达式值相比较,若与某一常量表 达式的值相等,则转去执行该case语句后边的语句序列,直到遇到break语句 或switch语句的右花括号为止。 ③若表达式的值与case语句后的任一常量表达式的值都不相等,如果有 default语句,则执行其后边的语句序列。如果没有default语句,则什么也不 执行。
if语句和switch语句的比较: if语句和switch语句都可以 用来处理程序中的分支问题, 在许多场合可以互相替代。 差别表现为: (1)if语句常用于分支较少 的场合;而switch语句常用于分 支较多的场合。 (2)if语句可以用来判断一 个值是否落在一个范围内;而 switch语句则要求其相应分支的 常量必须与某一值严格相等。
注意:
在使用switch-case语句时经常容易丢失必要的break语句,这样程序会产生结 果的错误,此类错误往往不易发觉。
3.4 switch…case判断式
【例3-2】将百分制的成绩按的等级分输出的switch-case语句的实现。
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 void main() { int n; cout<<"Enter a score:"; cin>>n; switch(n/10) { case 9: case 10: cout<<"The degree is A"<<endl; break; case 8: cout<<"The degree is B"<<endl; break; case 7: case 6: cout<<"The degree is C"<<endl; break; default: cout<<"The degree is D"<<endl; } }
3.3.1 基本的if语句
基本的if语句具有如下的一般形式: if (表达式) 语句; if (i>10) i=i-5; 其中:表达式通常是一个关系表达式或逻辑表式, cout<<i<<endl; 语句可以是一个单条语句,或是一个块语句,甚至 是一个空语句。它的执行过程如右图。在C++中,if 执行过程为:先对i的值进行判断;如果i的值大 后面实际可以跟任意一个可计算出结果的表达式, 于10,则将i的值减5,然后输出;否则直接输 甚至可以直接用常量0代表逻辑假,用非0代表逻辑 出i的值。 真。
表达式 true 或 非 0 语句 1 false 或0 语句 2
注意:
尽管完整的if语句中存在两个语句段,且有两个表示语句结束的分号,但整个语 句在语法上只是一条语句。 if分支后边的分号是不可缺少的(除非这里是一条复合语句)。
3.3.3 if语句的嵌套
将if语句用作if语句的语句段。这就是所谓的if语句的嵌套。if语句的嵌套常用于 多次判断选择。 【例3-1】将百分制的成绩按等级分输出。 分析:等级分为四等:A、B、C、D,分别对应的分数段为90~100、80~89 、60~79、0~59,转换时需要进行多次判断,要用多重选择结构,这里我们 选用嵌套的if语句。
运行结果 1×1=1 1×2=2 1×3=3 1×4=4 1×5=5 2×2=4 2×3=6 3×3=9 2×4=8 3×4=12 4×4=16 2×5=10 3×5=15 4×5=20 5×5=25
注意:
表达式不是语句,所以表达式不能在程序中独立存在。 块语句右花括号后边不再需要分号。
3.2 判断与循环
流程图是用来描述算法(程序)的工具,它具有简洁、直观、准确的优点,一些 常用的流程图符号如图下:
起止框
或
流程线
输入输出框
连接点
判断框
处理框
3.3 if…else…if判断式
判断选择结构又称条件分支结构,是一种基本的程序结构类型。在程序设计 中,当需要进行选择、判断和处理的时候,就要用到条件分支结构。条件分支结 构的语句一般包括if语句、if–else语句、switch–case语句。
运行结果
sum= 2500
3.5.2 用for语句实现嵌套循环
所谓循环结构嵌套是指一个循环体内可以包含另一个完整的循环结构,构成多 重循环结构。 【例3-4】用嵌套for语句显示乘法九九表
7 8 9 10 11 12 13 14 15 16 17 void main() { const int line=9; int i,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; } }