教学-第3章 控制结构

合集下载

第三章 三种基本程序控制结构

第三章 三种基本程序控制结构
Visual Basic程序设计教程
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

C语言程序控制结构(zhh)

C语言程序控制结构(zhh)

否构成三角形。
如果能构成三角 形则计算面积,
否则给出相应信
息。
#include <math.h> #include<stdio.h> void main( ) { float a,b,c,s,area; scanf("%f,%f,%f",&a,&b,&c); if(a+b>c&&b+c>a&&a+c>b) { s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("area=%7.2f\n",area); } else printf(“input data error”); } 25
int s;
scanf(“%d”,&s); if(s>=90) printf(“A”);
else if(s>=80) printf(“B”);
else if(s>=70) printf(“C”); else if(s>=60) printf(“D”); else printf(“E”); }
if(s>=80) printf(“B”);
11
第三章 程序控制结构
条件运算符和条件表达式

条件运算符
?:

条件表达式的形式为:
if 表达式1!=0 表达式2 else 表达式3

表达式1?表达式2:表达式3 这就是条件表达式,先计算表达式1,若其 值为非零,则结果为表达式2的值,否则就 是表达式3的值。
12
第三章 程序控制结构

用条件运算符实现例3-1。 #include <stdio.h> void main() { int a,b,max; scanf("%d,%d",&a,&b); max = a > b ? a : b; printf("max= %d\n",max); }

3.基本控制结构

3.基本控制结构

第3章基本控制结构考点归纳3.1 C+ +语句C+ +语句按照不同功能大体分为6种类型,它们是:(1)声明语句:用于对程序中的各种实体进行声明、定义及初始化。

(2)表达式语句:用于对程序中的数据进行具体操作和处理。

(3)选择语句:用于实现程序的选择结构。

(4)循环语句:用于实现程序的循环结构。

(5)跳转语句:用于实现程序执行流程的转移。

(6)复合语句:用于表示程序中的语句块概念。

应当指出的是,C+ +中并不存在赋值语句和函数调用语句,赋值和函数调用都属于表达式而不是语句。

3.2 顺序结构1 声明语句声明语句又称为说明语句,它可以用来对程序中出现的各种名称进行声明。

这些名称通常是表示变量、常量、函数、结构、类、对象等实体的标识符。

在C+ +程序中,一个名称在使用之前必须先被声明。

声明的目的是告诉编译器某个名称所指代的实体类型。

使用声明语句能够在程序中进行如下操作:(1)变量声明(2)常量声明(3)函数声明(4)类型声明声明语句可以完成的工作不仅局限于为名称指定类型,同时也是定义语句。

另外,使用声明语句还可以在定义变量时对其进行初始化。

2 表达式语句C+ +中所有对数据的操作和处理工作都是通过表达式语句来完成的。

表达式语句的语法格式为:<表达式>;(1)赋值操作。

(2)复合赋值操作。

(3)增量、减量操作。

(4)函数调用操作。

(5)输入输出操作。

3 基本输入输出一个程序通常会向用户输出一些信息,一般也会要求用户输入一些信息。

C+ +程序的输入输出操作是通过标准库中的输入/输出流对象来完成的。

在头文件iostream中定义了代表屏幕的标准输出流对象cout和代表键盘的标准输入流对象cin。

cin和cout具有强大的输入输出功能和极为灵活的用法。

在程序中使用cin和cout之前,应首先加入预处理命令:#include<iostream>,以包含标准头文件iostream。

使用cout进行数据输出操作的一般格式为:cout<<Expr;这是一条表达式语句。

第3章专家系统控制

第3章专家系统控制
26
专家控制的理想目标(续)
(6)控制性能方面的问题能够得到诊断,控制闭 环中的单元,包括传感器和执行机构等的故障可 以得到检测;
(7)用户可以访问系统内部的信息,并进行交互,例 如对象或过程的动态特性,控制性能的统计分析等。
专家控制的上述目标复盖了传统控制在一定程度 上可以达到的功能,但又超过了传统控制技术。
第3章专家控制
专家控制是智能控制的一个重要分支,又 称专家智能控制。
所谓专家控制,是把专家系统的理论和技 术同控制理论、方法与技术相结合,在未 知环境下,仿效专家的智能,实现对系统 的控制。
基于专家控制的原理所设计的系统或控制 器,分别称为专家控制系统或专家控制器。
1
3.1 专家系统概述 3.1.1 什么是专家系统
40
3.3.1 专家控制器的结构
专家控制器通 常由知识库 (KB)、控 制规则集 (CRS)、推 理机(IE)和 特征识别与信 息处理(FR& IP)四部分组 成。
41
知识库:
用于存放工业过程控制的领域知识,由经验数据库 (DB)和学习与适应装置(LA)组成。
经验数据库主要存储经验和事实集;
控制专家系统的任务是自适应地管理一个 受控对象或客体的全部行为,使之满足预 定要求。
控制专家系统的特点是,能够解释当前情 况,预测未来发生的情况、可能发生的问 题及其原因,不断修正计划并控制计划的 执行。所以说,控制专家系统具有解释、 预测、诊断、规划和执行等多种功能。
21
(7)监视型专家系统
而专家控制则要求能对控制动作进行独立 的、自动的决策,
它的功能一定要具有连续的可靠性,较强 的抗干扰性。
29
与一般专家系统的差别
(2)在控制方式上:

第3章 模糊控制

第3章 模糊控制

期望值
+ - y
e
ec
ke d/dt kec
E
EC
ห้องสมุดไป่ตู้
模糊
控制器
U
u
ku
图中ke、kec为量化因子,ku为比例因子
量化: 将一个论域离散成确定数目的几小段(量化 级)。每一段用某一个特定术语作为标记,这 样就形成一个离散域。
假设在实际中,误差的连续取值范围是 e=[eL,eH],eL表示低限值,eH表示高限值。 将离散语言变量E的论域定义为{-m,„,-1, 0,1, „,m}。则有量化因子: 2m ke eH eL 量化因子实际上类似于增益的概念,在这 个意义上称量化因子为量化增益更为合适。
i Ri : IF x1 IS A1i AND x2 IS A2 AND xp IS Aip
i i THEN vi a0 a1 x aip x p i 1 , , N
(3 1)
vi 是模糊语言值; xi是一个输入变量;是输 i 出变量;系数集{a j }是待辨识的参数。模型的辨 i i ( N , p ) { A , a 识分两步。即结构参数 的辨识和系数 j j } 的确定。
1、最大隶属度函数法 简单地取所有规则推理结果的模糊集合中隶属 度最大的那个元素作为输出值。即: 当论域 V 中,其最大隶属度函数对应的输出 值多于一个时,简单取最大隶属度输出的平均即 可: U 0 max v (v) v V 为具有相同最大隶属度输出的总数。 此方法计算简单,但丢失信息,控制性能不高。
式中,<>代表取整运算。 模糊控制器的输出U可以通过下式转换为 实际的输出值u:
uH uL u ku U 2
问题的提出 变量量化会导致一定的量化误差。 解决方法 在量化级之间,加入插值运算。对于任意一 个连续的测量值可以通过相邻两个离散值的加 权运算得到模糊度的值。

第3章 控制结构

第3章 控制结构

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)程序控制结构(选择结构)-田媚
• 格式输出函数 • 格式输入函数
17
例:设1990年我国工业产值是100,如果每年以7.4% 的速度增长,求20年后我国的工业产值是多少?
1.
分析:计算产值的公式是:
p1=p0(1+r)n 其中:p1为n年后的产值,p0为初始值, r为增长率,n 为年数。
2. 3.
安排计算步骤 写出完整的程序
18
5
6ቤተ መጻሕፍቲ ባይዱ
1
主 函数一个C 1. 一个 C 程序必须有一个_____
二、填空:
主 函数开始执行。 程序必定从______
7
8
2. C 语言中的标识符可分为
用户标识符 关键字 、______________ _______
3. C 语言程序中的数据,在计算机内存储器中
位 ,其中只能存 最小的存储单位称为______
if
if 语句
if–else else–if
if(表达式)语句; if (表达式)语句; if(表达式)语句1 if(表达式)语句 1; else 语句2 语句2; if(表达式1 if(表达式 1)语句 )语句1 1; else if(表达式 if(表达式2 2)语句 )语句2 2; … else if(表达式 if(表达式m m)语句 )语句m m; else 语句 n; 36
23
一、关系运算符和关系表达式
关系表达式概念:
用关系运算符将两个表达式(可以是算术 用关系运算符将两个表达式 (可以是算术 表达式、关系表达式、赋值表达式或逻辑表达 式)连接起来的式子,称为关系表达式。 式) 连接起来的式子,称为关系表达式。
关系表达式 逻辑表达式
关系运算符:
< <= > >=

智能控制技术-第三章

智能控制技术-第三章
C。
3、多输入模糊推理 多输入是指有多个输入的情况。 前提1:如果A且B,那么C 前提2:现在是A’且B’ 结论: C ' ( A ' A N D B ')[ ( A A N D B ) C ]
4、多输入多规则推理 多输入,多规则。就是对于一个控制系统,它的控制规
则有多个。比如 IF A1 AND B1…,THEN C1 IF A2 AND B2…,THEN C2 …… IF An AND Bn…,THEN Cn
取所有具有最大隶属度输出的平均。J为具有相同 最大隶属度输出的总数。
当输出值为多个时候, (1)、求每个输出的最大隶属度数值;
v 0 m a xv(v),v V
(2)、求和,再平均得到其最大隶属度
v01 JjJ 1vj,vj m v a V xv(v),Jv
2、重心法 重心法 是取模糊隶属度函数的曲线与横坐标围
模糊控制器结构指的是输入输出变 量、模糊化算法、模糊推理规则和精确 化计算方法。
控制器的设计第一步首先确定控制器的输 入输出变量。
1、控制器输入输出变量
主要讲单输入-单输出模糊控制结构。
单输入-单输出模糊控制结构指的是系 统控制量只有一个,系统输出量只有一个。
单输入-单输出模糊控制结构又分一维模糊 控制器、二维模糊控制器和多维模糊控制 器。
1、最大隶属度函数性 1)、当在输出论域中,其最大隶属度函数对应的输
出值为一个。
v 0 m a xv(v),v V
(取所有规则推理结果的模糊集合中隶属度最大的 元素作为输出值。)
2)、当在输出论域中,其最大隶属度函数对应 的输出值为多个
v01 JjJ 1vj,vj m v a V xv(v),Jv

第三章作业-程序控制结构教程文件

第三章作业-程序控制结构教程文件

第三章程序控制结构通过本章实验作业应达目标1.熟练掌握格式输入与格式输出函数与各种格式符的使用,掌握各类数据输入/输出的实现方法;2.学会正确使用关系与逻辑运算,熟练构建关系与逻辑表达式;3.练习并熟练掌握if、switch语句使用,实现二路与多路选择结构;4.熟悉while、for、do_while、break、continue语句的作用与使用规范,能使用while语句、for 语句、do_while语句实现循环结构;5.掌握循环结构和选择结构之间嵌套、多重循环间嵌套的设计方法。

6.进行算法设计训练,能综合所学控制结构语句解决一般问题。

本章必须上交作业第一部分输入/输出作业要求程序3_3.c上传至http://121.251.227.27:8080/c。

源程序可以.cpp命名。

第二部分分支结构作业要求程序3_5.c、3_6.c、3_8.c上传至http://121.251.227.27:8080/c。

第三部分循环控制结构作业要求程序3_9.c、3_11.c、3_13.c、3_14.c、3_15.c、3_16.c、3_19.c上传至http://121.251.227.27:8080/c。

第一部分顺序结构与输入/输出程序设计实验一一个三位数逆序输出【实验目的】了解顺序程序结构,学习调试程序。

【实验内容】下面程序功能:键盘输入一个三位数,输出逆序后的数。

例如,输入236,输出632。

程序中有多处错误,改正后在机器上调试通过。

程序以3_1.c命名。

#include<stdio.h>void main(){int x,int y;int a,b,c;a=x/100;b=x/10%10;c=x%10;printf("Please input a num:");scanf("%d",&x);y=100c+10b+a;printf("y=%d\n",y);}【思考】如果输入的数据可以是任意大小的数,并不限制一定是一个三位数,怎样才能将该数逆序并输出?实验二字符数据输入/输出【实验目的】学习字符数据的输入与输出,学习getchar()/putchar()函数使用。

《程序设计基础(CC++)》课程教学大纲

《程序设计基础(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++语言的理论发展动态和行业需求。

第3章 数字控制技术

第3章  数字控制技术
-图中曲线分为三段,分别为ab、bc、cd,a、 b、 c、d四点坐标送计算机。
-分割原则:应保证线段所连的曲线与原图形的误 差在允许范围之内。
2. 插补计算
-插补计算: 给定曲线基点坐标,求得曲线中间值 的数值计算方法。
-插补计算原则:通过给定的基点坐标,以一定的 速度连续定出一系列中间点,这些中间点的坐标值以一 定的精度逼近给定的线段。
第3章 数字控制技术
数字控制(numerical control )主要应 用于机床控制,采用数字程序控制系统的机 床叫做数控机床。
按时序或事序规定工作的自动控制成 为顺序控制。
数控技术和数控机床是实现柔性制造 (Flexible Manufacturing,FM)和计算机 集成制造(Computer Integrated Manufacturing,CIM)的最重要的基础技 术之一。
(2) 四个象限的圆弧插补
-四个象限的圆弧插补
记忆: 2象限:1象限以y轴镜象 4象限:1象限以x轴镜象 3象限:1象限旋转180度
图3.11 四个象限圆弧插补的对称关系
圆弧插补计算公式和进给方向
注意:表中坐标值为不带符号的数,如第四象限中的点(4,-3) 应用 xm=4, ym =3查表计算。
该点偏差为 Fm+1= xm+12+ym+12-R2= Fm +2ym +1
起点偏差F0=0
(2) 终点判断
采用总步数Nxy设计数方法:Nxy 初始设值为 x 和y 轴进给 总步数之和, x 或y 轴每进给一步则Nxy –1,当Nxy 为0,则认 为达到终点。
(3) 插补计算步骤
偏差判别 -> 坐标进给 -> 偏差计算 ->坐标计算-> 终点判断

《C语言程序设计》教案第三章程序的控制结构—循环结构while和dowhile

《C语言程序设计》教案第三章程序的控制结构—循环结构while和dowhile

《C语言程序设计》课程教案表算法2:分析:设想用sum作为累加器,初值为0,利用sum+=i(i依次取值为1、2。

100)此分析需要解决的3个问题:1)sum=0,i=1;2)每执行一次sum+=i 后,i增1(i=i+1);3)判断如果i小于或等于100,重新执行步骤(2),否则停止计算main(){int i,s=0;i=1;while(i<=100)/*i<=100为循环条件*/{s=s+i;i++; /*改变i的值*/}printf(″s=%d″,s);}运行结果:s=5050说明:循环结构的三个术语:1、循环条件:循环结构中的条件表达式如while (i<=100)其中,i<100就是循环条件。

2、循环体:在每个循环周期均要执行一次的语句序列。

如while下用{ }括起来的语句序列。

3、循环控制变量:能够决定控制条件是真是假的量。

如while(i<=100)中的变量i要写出一个正确的循环结构,对控制变量要做三方面的工作:1、对循环控制变量赋初值。

2、将循环控制变量写入正确的控制条件。

3、对循环控制变量值的更新。

使用while语句需要注意以下几点:while语句的特点是先计算表达式的值,然后根据表达式的值决定是否执行循环体中的语句。

因此,如果表达式的值一开始就为“假”,那么循环体一次也不执行。

当循环体为多个语句组成,必须用{}括起来,形成复合语句。

在循环体中应有使循环趋于结束的语句,以避免“死循环”的发生。

下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,gotowhile(s<=10){s=s+i*i;i++;}printf(“%d”,--i);}A) 4 B) 3 C) 5 D) 6对以下程序段,描述正确的是________________。

int x=0,s=0;while(!x!=0) s+=++x;printf(“%d”,s);A) 运行程序段后输出0 B) 运行程序段后输出1C) 程序段中的控制表达式是非法的D) 程序段循环无数次下面程序段的运行结果是[ ]。

第三章 判断题--控制结构

第三章 判断题--控制结构

第三章判断题1.default在switch选择结构中是必需的。

()2.break语句在switch选择结构的default中是必需的。

()3.如果x>y为真或ay && a4.在包含||运算符的表达式中,如果它的一个或两个操作数为真,则该表达式为真。

()5.if结构和if/else结构所做的动作是相同。

()6.想确保当两个条件都为true时才执行某一动作,可以使用逻辑与&&运算符。

()7.若要确定两个条件中是否有一个为true或都为true时,可使用逻辑异或^。

()8.布尔逻辑与和布尔逻辑或运算符的工作方式完全相同。

()9.结构化方法的优点在于,只允许使用7种单入口/单出口的组件。

()10.结构化程序设计提高了程序的清晰简单性,并且它只需使用三种形式的控制结构就足够了。

()第三章选择题1.所有的程序均可以用几种类型控制结构编写:A.顺序结构、选择结构、循环结构B.顺序结构、循环结构C.顺序结构、选择结构D.选择结构、循环结构2.当条件为真和条件为假时,▁▁控制结构可以执行不同的动作。

A.switchB.whileC.forD.if/else3.当事先不知道语句重复执行的次数时,可以用一个▁▁值来终止循环。

A.布尔B.正C.标记D.负4.使整值变量X加1,下面写出的形式不对的是:A.x + +B.+ + xC.x = x + 1D.x = + 15.下面程序的输出结果是:public class Test{void printValue(int m){ do { System .out .println(“The value is”+m);}while(- - m>10);}public static void main(String arg[]){int I=10;Test t= new Test();t.printValue(i);}}A.8B.9C.10D.116.下面程序的那一行可能引发错误:1:public void modify(){2:int I,j,k;3:i=100;4:while( i >0){5:j=i*2;6:System .out .println(“The value of j is”+j); 7:k = k + 1;8:i- -;9:}10:}A.4B.6C.7D.87.下面程序的那一行可能引发错误:1:String str = null;2:if((str != null)&&(str .length() > 10){3:System .out .println(“more than 10”); 4:}5:else if((str != null)&(str.length() < 5){6:System .out .println(“less than 5”);7:}8:else { System .out .println(“end”); }A.1B.2C.5D.88.如果result是布尔变量,下面哪个选项是正确的:A.result = true;B.if(result){//do something…}C.if(result!=0){//do something…}D.result = 1;9.请看下面的程序代码:if(x>0) { System .out .println(“first”);}else if(x<10) { System .out .println(“second”);} else { System .out .println(“third”) }当程序输出“second”时,X的范围为:A.x < = 0B.x < 10 && x > 0C.x > 0D.x >= 1010.请看下面的程序代码:switch(n) {case 0: System .out .println(“first”);case 1:case 2: System .out .println(“second”); break;default: System .out .println(“end”);}当n为何值时,程序段将输出字符串second:A.0B.1C.2D.3第三章程序设计题1.编写一个应用程序,计算和打印从1加到10的累加和。

第3章 程序基本控制结构

第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章 控制结构

第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; }

C语言穷举法经典例题

C语言穷举法经典例题
【讨论】
令z=100-x-y 1%)
只进行101×101= 10201 次运算(前者的
第3章 程序控制结构
第3章 程序控制结构
继续优化
void main() 取x<=14,y<=25 只进行 { 15×26= 390 次运算 int x,y,z; for (x=0;x<=14;x++) for (y=0;y<=25;y++) if (7*x+4*y==100 ) { z=100-x-y; printf("cocks=%d,hens=%d,chickens=%d\n",x,y,z); } }
第3章 程序控制结构
百元买百鸡问题分析
void main() 结果:x=0,y=25,z=75 { x=4,y=18,z=78 int x,y,z; x=8,y=11,z=81 for (x=0;x<=100;x++) x=12,y=4,z=84 for (y=0;y<=100;y++) for (z=0;z<=100;z++) { if (z%3==0 &&x+y+z==100 && 5*x+3*y+z/3==100 ) printf("x=%d,y=%d,z=%d\n",x,y,z); } }
第3章 程序控制结构
穷举法求解韩信点兵
#include <stdio.h> void main() { int x; for (x=1; ;x++) { if (x%5==1 && x%6==5 && x%7==4 && x%11==10) { printf(" x = %d\n", x); } } } /*死循环——永远不会退出的循环*/

第3章 选择结构.

第3章 选择结构.
ch语句,用它们来解决实际 应用中按不同的情况进行不同处理的问题。如根据学生的成 绩,对学生做出不同的等级评价。if选择结构称为单分支选 择结构,选择或忽略一个分支的操作。if/else选择结构称为 双分支选择结构,在两个不同分支中选择。switch选择结构 称为多分支(或多项)选择结构,以多种不同的情况选择多 个不同的操作。 循环类语句包括for循环语句、while循环语句和do循环 语句三种,用它们来解决实际应用中需要重复处理的问题。 如当统计全班同学总分时,就需要重复地做加法,依次把每 个人的分数累加起来。


if、else、switch、while、do和for等都是C++关键字。 这些关键字是该语言保留的,用于实现C++控制结构的不同 特性。关键字不能作为变量名等一些标识符。注意,将关键 字while的拼写变为“While”是个语法错误,因为C++是区分 大小写的语言。while、if和else等所有C++保留关键字只能 包含小写字母。
格式2 :
if (条件表达式) { 语句1; 语句2; …… } 若条件成立时,要执行的操作由多个句子构成, 我们必须把这些句子括在一对花括号{ }内,我们称 这种形式为语句块或复合语句。 程序设计风格提示:书写语句块(也称为复合 语句)时,左右花括号要对齐,组成语句块的各语 句要相对花括号缩进一层并对齐。
第二节 if选择结构
C++提供三种选择结构,即if选择结构、if-else选择结构 和switch选择结构。 一、if语句(单分支结构) 格式1:
if (条件表达式) 语句1;
功能:如果条件表达式的值为真, 即条件成立,语句1将被执行。否则, 语句1将被忽略(不被执行),程序将 按顺序从整个选择结构之后的下一条 语句继续执行。执行流程如图3-1所示 说明:格式中的“条件表达式”必 须用圆括号括起来。

三章程序的控制结构

三章程序的控制结构

else
// 一般情况
{
delta = b*b-4*a*c;
p = -b/(2*a);
q = sqrt(fabs(delta))/(2*a);
if(delta >= 0)
// 实根情况
cout << "x1 = " << p+q << endl << "x2 = " << p-q << endl;
else
{
case 数值1: 语句序列1;
表达式的值等于?
case 数值2: 语句序列2;
数值1
数值2
数值3
case 数值3:
语句序列1 语句序列2
语句序列3

语句序列3;
...
default: 语句序列n;
图3.6 switch语句
}
其他 语句序列n
12
实现真正的多路选择
在每一个case模块的最后加上一个break语句
if(( a==0 ) && ( b==0 ) && ( c==0 )) // 最极端情况
cout << "方程的根可为任意值" << endl;
else if(( a==0 ) && (b != 0))
// 转换为一元一次方程情况
cout << "x1 = x2 = " << -c/b << endl;
10
例 3-3:求一元二次方程的根
#include <iostream>

第三章 结构化程序设计控制结构

第三章 结构化程序设计控制结构

三. 多重判断IF-ELSE IF
IF (条件1) THEN …… 条件1成立时,执行这个模块程序 …… ELSE IF(条件2) THEN …… 条件2成立时,执行这个模块程序 …… ELSE IF(条件3) THEN …… 条件3成立时,执行这个模块程序 …… …… ELSE IF(条件4) THEN …… 条件4成立时,执行这个模块程序 …… ELSE ! ELSE这个模块可以省略 …… 每个条件都不成立时,才执行这个模块程序 …… END IF
PRINT *, "RAIN:" READ *, RAIN PRINT *, "WIND:" READ *, WINDSPEED IF ( RAIN>=500 .OR. WINDSPEED>=10) THEN PRINT *, "停止上班上课" ELSE PRINT *, "照常上班上课" END IF STOP END
* 逻辑运算符:
.NOT.;.AND.;.OR.;.EQV.;.NEQV.;.XOR.
优先级由高到低依次为:算术运算符,关系运算 符和逻辑运算符。

例3-3
PROGRAM EX0403 IMPLICIT NONE INTEGER RAIN, WINDSPEED

例3-8判断象限
PROGRAM EX0308 IMPLICIT NONE REAL X,Y INTEGER ANS WRITE (*,*) "INPUT (X , Y)" READ (*,*) X,Y
IF ( X>0 ) THEN IF (Y>0) THEN ! X>0,Y>0 ANS=1 ELSE IF (Y<0) THEN ! X>0, Y<0 ANS=4 ELSE ! X>0, Y=0 ANS=0 END IF ELSE IF (X<0) THEN IF (Y>0) THEN ! X<0, Y>0 ANS=2 ELSE IF (Y<0) THEN ! X<0, Y<0 ANS=3 ELSE !X<0, Y=0 ANS=0 END IF
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

下面的程序逡辑上有没有问题?
if (a>=b &&a>=c) max=a; if (b>=a &&b>=c) max=b; else max=c
max=a a>=b && a>=c max=b b>=a && b>=c
max=c

输入a,b,c max=a
a>=b && a>=c b>=a && b>=c max=c max=b
thisman='A'
(thisman != 'A') + (thisman =='C') + (thisman =='D') + (thisman != 'D')==3 thisman++
做好事的人是A
做好事的人是B
(thisman != 'A') + (thisman =='C') + (thisman =='D') + (thisman != 'D')==3
1、话费查询 2、密码服务 3、服务信息查询 4、梦网业务查询 8、集团业务 0、人工服务
• 从键盘接收用户输入的选项编号,存储亍 变量press,判定press的值分别执行对应的 操作。
if (press==1) 执行“话费查询”模块 else if (press==2) 执行“密码服务”模块 else if (press==3) 执行“服务信息查询”模块 else if (press==4) 执行“梦网业务查询”模块 else if (press==8) 执行“集团业务”模块 else if (press==0) 执行“人工服务”模块 else 提示“选择错误”
直角三角形
等腰三角形
一般三角形
图3.6 “判断三角形形状”的PAD图
【说明】 ① 判断三角形的类型的顺序是先特殊后一般。在程 序设计中,通常把一些可能的特殊情况处理完了 以后再处理一般情况。在返个程序中,如果把 “等边三角形”不“等腰三角形”对换,将永迖 得丌到“等边三角形”的结果。 ② 在本程序中涉及到复合语句的概念。可以实验一 下,如果把if后面的一对花括号去掉会是什么结果? ③ 在上一章曾提到过输出函数puts,该函数输出一 个字符串(带双引号的一串字符)幵自劢换行。 ④ 注意逡辑运算“不”(&&)、“戒”(||)的表达。
输出 max 图3.3 “求三个整数最大值”解法2的PAD图
③ 如果先求a,b的最大值存亍变量max中,再 求max不c的最大值,返样只需考虑求两个 数的最大值问题,简化了逡辑关系。
④ 把“求两个数的最大数”看成一个函数, 多次调用返个函数就能解决问题。把返个 函数叏名为Max2,我们只需关心送给Max2 什么,经过Max2处理以后得到了什么 .
a b
Max2
a或b
图3.4 函数的入口参数和函数返回值
⑤ 如果把三个数(甚至更多的数)看成一个数 列,我们从第一个数开始考察:看到第1个 数,则返个数就是从开头到此的最大数。 用前N-1个数的最大数不第N个数比较, 则得到前N个数的最大数。如果第N个数到 了最后,就求得所有数的最大数。 用返样的逡辑思维可以用同一种办法求 得若干个数的最大值,求解过程是单调重 复的,返是计算机程序最喜欢也是最容易 做的事。
3.1.2 多分支结构
一般形式: switch( 开关表达式 ) { case 常数表达式1: 语句1; case 常数表达式2: 语句2; …… case 常数表达式N: 语句N; default: 语句N+1; }
• 当“开关表达式”叏值为第i个“常数表达 式”时,则第i个语句就是执行的入口。从 入口一直执行到switch结束,戒者遇到一个 break语句也结束switch;如果“开关表达 式”叏值在罗列的“常数表达式”中找丌 到,则从default后面的语句入口;如果既 找丌到“常数表达式”也没有default,则 结束switch,什么也丌做。
⑤ 程序遇到return语句立即结束本函数,迒回到调 用者。本程序遇到return则结束主程序迒回到操作 系统。如果return语句后面带着表达式,则迒回且 带回表达式的值给调用者,参看例2-3。
【例3-3】四人中有一人做了好事,有下面一段对话, 已知有三个人说了真话,判断是谁做的好事: A:丌是我; B:是C; C:是D; D:他胡说。 【分析】 在未得到答案乊前返四个人都有可能。假设返个做 好事的人是thisman, 变量thisman的叏值是字符 'A'~'D' ,用 'A'~'D' 返四个字符分别去试探他们的 对话,把真话数累加如果为3,则thisman的值即为 所求。
输出 max 图3.2 “求三个整数最大值”的PAD 图
【说明】 ① 上面返个程序是一个很标准的“输入-处理 -输出”思维方式。
② 三个条件语句是幵列关系,也就是说,无 论a,b,c谁是最大值,返三个语句都必须依 次执行。事实上,它们只可能有一个成立 (在三个数相等的情况也只需要其中一个语 句),因此,把它们做成if…else的结构在运 行速度上能得到提高
【分析】 在计算机软件中使用“菜单”是普遍采用的选择方 式。如有下面的菜单提示: 0. 退出程序 A. 华氏转摄氏 B. 摄氏转华氏 在程序运行时,首先在屏幕上列出返个菜单给操 作人员一种提示,再接收操作员的输入,最后根 据输入值选择丌同的功能分支。上面返个例子, “开关表达式”的叏值就是字符'0'、'A'、'B',是 字符类型,符合“开关表达式”的要求。
图3.7 “谁做的好事”的PAD图
【说明】 ① 变量thisman是字符变量,它只叏四个字符,最初的叏值 是'A ',下一个叏值使用了thisman++自增运算,很自然叏 到下一个字符。字符的算术运算是叏其ASCII值。 ② 很显然,返个程序的“重复”部份太多,返种思维方式有 利亍使用后面的“循环”。 ③ 因为thisman == 'D'不thisman != 'D'有且仅有一个为真, 即 (thisman == 'D') + (thisman != 'D')肯定为1,亍是可以 简化整个表达式为thisman != 'A') + (thisman == 'C') + 1==3. 尽管如此,作者仍然推荐紧扣题目的表达方式,可 以提高程序的可读性。 ④ 返个程序中变量thisman的叏值只有四个,所以按题目的 意思丌用计算机也很容易得到答案,但如果叏值很多,靠 人来推导结论也丌是一件容易的事。収挥计算机运算速度 快的特长,“穷丼”解决问题是经常使用的方法,而人 “穷丼”往往是丌愿意甚至丌可能的。
题目的四句话可以分别表述成: thisman != 'A' thisman =='C' thisman =='D' thisman != 'D' 又因为每个关系运算的结果为1戒0,因此根据题的 假设应该有(thisman != 'A') + (thisman =='C') + (thisman =='D') + (thisman != 'D')为3,则thisman 就是做好事的人。 其实就是用变量thisman对叏值 'A'~'D' 穷丼迕行测 试( (thisman != 'A') + (thisman =='C') + (thisman =='D') + (thisman != 'D')==3)是否成立。 比如thisman叏值'A',则第一句是假,第二句假,第 三句假,第四句真,共有1句真,所以丌是 'A' , 亍是变量thisman再叏 'B' 测试…….
输入a,b,c
检查是否都是正数
检查是否形成三角形
判定形成哪种三角形并输出结果
必须是三个正数
输入a,b,c
返回
a<=0 || b<=0 || c<=0
检查是否形成三角形
判定形成哪种三角形并输出结果
必须是三个正数
输入a,b,c 返回 a<=0 || b<=0 || c<=0
输入的三个数不能构成三角形
符合等腰三角形条件
等腰三角形
一般三角形
图3.6 “判断三角形形状”的PAD图
必须是三个正数
输入a,b,c 返回 a<=0 || b<=0 || c<=0
输入的三个数不能构成三角形
返回
a+b<=c || a+c<=b || b+c<=a
等边三角形
a==b && b==c a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a a==b || a==c || b==c
0.退出程序
A.华氏转摄氏
B.摄氏转华氏 请选择: 退出程序
请输入华氏温度:
'0' 'a' 'A' getchar() 'b' 'B' 其他
选择错误
输入 x
摄氏温度是H2C(x) 请输入摄氏温度:
相关文档
最新文档