第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
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); }
VB第3章_控制结构
8
type参数及功能
常数 vbOKOnly VbOKCancel VbAbortRetryIgnore VbYesNoCancel 值 0 1 2 3 显示OK按钮 显示OK及Cancel 按钮 显示Abort、Retry 及 Ignore 按钮 显示显示 Yes、No 及 Cancel 按钮 功能描述
Print "B" Else Print "C" End If ElseIf score >= 60 Then Print "D" Else Print "E" End If End Sub
'此处为小于70分的情况
22
3.2.3 Select Case语句
格式:
说明: 变量或表达式:数值型或字符表达 式 表达式列表:与“变量或表达式” 的类型必须相同,可以是下面4种类型
End Sub
28
求和运行结果
29
例3.10 实现计算器函数区中求阶乘(n!) Private Sub Cmd_n_Click( ) Dim i, n, s As Long s=1 n = Val(InputBox("输入n(1-12)", "求n!")) For i = 1 To n s=s*i Next MsgBox s, 0, "n!" End Sub
7
3.1.2 数据的输入、输出函数
2. 输出函数MsgBox
格式 :MsgBox(prompt [,type][,title][,helpFile,context]) 说明:
① prompt是字符串类型,提示
② type是一个整数值或符号常量,用来控制在对话 框内显示的按钮、图标的类型。 如上例中输出: MsgBox s, 0, "Area"
08第八讲
⑤若当前执行的单元U并未提供相应的异常
处理程序,异常将被传播: 若U是一个分程序, 那
么终止U的执行, 并在包围U的单元内隐式引发
这个异常; 若U是一个程序包体, 那么异常传播
给包含这个程序包说明的单元
1. if语句
①ALGOL 60的选择结构引起二义性
if x>0 then if x<10 then x:=0 else x:=1000
②PL/1和Pascal的“最近匹配原则” ③ ALGOL 68中if语句的结束符号fi ④ ALGOL 68和Ada对else if 进行缩写
2. 多重选择 ①PL/1的select结构 SELECT: WHEN(A)S1; WHEN(B)S2; WHEN(C)S3; OTHERWISE S4; END
③变参和全局变量表示同一数据对象时,也 会引起别名 procedure swap(var x:integer); /*a是全局变量*/ begin x:=x+a; a:=x-a; x:=x-a; end; 调用 swap(a); 将产生不正确的结果
④别名也影响编译器生成优化的代码
a:=(x-y*z)+w
②多种语言的case语句
var operator:char; operand1,operand2,result:boolean; …… case operator of ‘.’:result:=operand1 and operand2; ‘+’:result:=operand1 or operand2; ‘=’:result:=operand1 = operand2; end
第三章 控制结构
第一节 语句级控制结构
控制结构:程序员用来规定程序各个成分
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章专家系统控制
专家控制的理想目标(续)
(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章 模糊控制
期望值
+ - 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 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中选择较大的一个输出。
自动控制原理第三章
(1)延迟时间 t d :曲线第一次达到终值一半 所需的时间。 (2)上升时间 t :响应曲线从终值10%上 升到90%所需的时间;对于欠阻尼系统 可定义为响应从零第一次上升到终值所 需的时间。 (3)峰值时间 t p :响应超过终值到达第一个 峰值所需的时间。 ) (4)超调量M :响应的最大偏离量c(t 与终值 c (∞ ) 之差的百分比,即
图3-10
0 < ζ < 1 时的单位阶跃响应
0 < ζ < 1情况下二阶系统单位阶跃响应的暂态
性能的各项指标。 ①上升时间 tr :是指在暂态过程中第一次达 到稳态值的时间。
π − arctan
tr = 1−ζ 2
ζ
2
ωn 1 − ζ
=
1
ωd
(π − arctan
1− ζ 2
ζ
)
tp
②峰值时间t p :是指响应由零上升到第一个峰 值所需的时间。
3.3.2 单位阶跃响应
对于单位阶跃输入r(t)=1(t),R(s)=1/s,得到系统 的输出为
2 ωn s + 2ζωn 1 C ( s) = Φ( s) R( s) = = − 2 2 2 2 s ( s + 2ζωn s + ωn ) s s + 2ζωn s + ωn
当 ζ 为不同值时,所对应的响应具有不同 的形式。 (1)当 ζ = 0时,为零阻尼情况,系统的输出 为 ω 1 s
(t ≥ 0)
1 − t T
e(t ) = r (t ) − c(t ) = Tt − T (1 − e
2
)
表3-1 一阶系统对典型输入信号的响应
传递函数 输入信号 输出响应
第三章作业-程序控制结构教程文件
第三章程序控制结构通过本章实验作业应达目标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()函数使用。
第3章 数字控制技术
-分割原则:应保证线段所连的曲线与原图形的误 差在允许范围之内。
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语言程序设计》课程教案表算法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) 程序段循环无数次下面程序段的运行结果是[ ]。
第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; }
C语言题库(2020版)第3章算法和控制结构(设计无答案)?√
#include<stdio.h> int main ( ) { int i,k; for (k=0,i=5; i<=1000; i+=5) { m=i; while (_____) { k++; m=m/5 ; } } printf("%d\n",k); return 0; } 【参考答案】 m%5==0
2. 下面程序按公式求和并输出结果,请填空使程序完整。 #include<stdio.h> int main ( ) { __ __; int k ; for (k=1 ; k<=100 ; k++)
s+=k ; for (k=1 ; k<=50 ; k++)
s+=k*k ; for (k=1 ; k<=10 ; k++)
11.C 语言中 while 和 do-while 循环的主要区别是( B )。
12. 若有定义语句 int a,b;double x;
则下列选项中没有错误是( B )
13. 设 j 和 k都是 int 类型,则下面的 for 循环语句( C )。 for(j=0,k=0;j<=9&&k!=876;j++) scanf("%d",&k); A. 最多执行 9次 B. 循环体一次也不执行 C.最多执行 10次 D.是无限循环
{ s = 1;
for(j = k; j < 6; j++) s += j;
}
printf( “%d\n”, s);
A.15 C.24
B.10 D.9
第3章 选择结构.
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所示 说明:格式中的“条件表达式”必 须用圆括号括起来。
第3章 程序的控制结构.ppt
3.2 C语句概述
前面设计好的算法在计算机中主要是通过各种语言所提供 的语句来实现。和其它高级语言一样,C语言的语句用来向计 算机系统发出操作指令。一个语句经编译后产生若干
C语言中的语句可以分为以下五类: 1.函数调用语句 由函数名、实际参数加上分号“;”组成。其一般形式为:
3.1.2 算法的表示
例:判定2000~2500年中的每一年是否闰年, 并将结果输出。
分析:闰年的条件是:(1)能被4整除,但不能 被100整除的年份都是闰年,如1996,2004年 是闰年;(2)能被100整除,又能被400整除的 年份是闰年。如1600,2000年是闰年。不符合 这两个条件的年份不是闰年。
9
开始
sum=0
i=1 N
i<=100 Y sum=sum+i
i=i+1
输出sum的值
结束 图3-1 例3-2算法描述
缺点:难以阅读、修改,使算法的 可靠性和可维护性难以保证。 传统流程图的流解程决:办法:必须限制箭头的滥用, 即不允许无规律地使流程随意转向, 只能顺序地进行下去。
这种如同乱麻一样的算法称为BS型算法,意为 一碗面条(A Bowl of Spaghetti),乱无头绪。
s1: 计算 1 + 2; ss29:9使: 得sums1=+su3m; +100; s再3:次使观得察s2上+述4的; 算法,可以考虑再使用一个变量i来表 示加数,让i从2开始,不断地做sum=sum+i 这一个相同的 循环计操算作10,0以直内到自i超然过数10的0为和止,。需于要是99可个以步得骤到。改进的算法 如下即:s99: s98 + 100。
8
3.1.2 算法的表示
三章程序的控制结构
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4)复合语句:
将一组语句括在一对{ }中。如下面是一 个复合语句。
{ z=x+y; t=z/100; printf("%f",t);
} 注意:①复合语句的最后一个语句中最后的“;” 不能省,复合语句的{ }之后不能有“;”。
②复合语句 中可以是简单语句、复合语 句、空语句。
5)程序流程控制语句
为了实现三种基本结构中的选择结构 与循环结构及有关的辅助功能,C语言提 供了四种流程控制语句。
(1) 选择控制语句:if、switch
(2) 循环控制语句:for、while、do-while
(3) 转移控制语句:break、continue、 goto (4) 函数返回语句:return
C语言中的程序都不会是简单的顺序结构, 而是顺序、选择、循环三种结构的复杂组合。 在C语言中,有一组相关的控制语句,用以实 现选择结构与循环结构:
结构按一定的规律组成。
①顺序结构 A B 操作步骤按书 写的顺序执行 A=3; B=4; C=A+B;
②选择结构 T A
P
F B
If (x!=0) y=sin(x)/x; else y=1;
③循环结构
当P为真 A 先判断,后执行 S=0; n=1; While(n<=100) { S=S+n; n++; } A 直到P为假 先执行,后判断 S=0; n=1; do { S=S+n; n++; }while(n<=100);
例3-3:使用基本格式说明%d、%o、%x输 出整型数据。 #include <stdio.h>int main( ) { int a = 15; printf(”%d,%o,%x\n”, a, a, a); printf(”%5d”, a); return 0; } 运行结果如下: 15,17,f 15
§ 3.1
1、 C语句分类:
概述
C语言通过语句来实现三种结构,这
些语句可以归纳为五类,分别是表达式语
句、函数调用语句、空语句、复合语句和
程序流程控制语句。
1)表达式语句:表达式+“;” 例:“count=0;” 2)函数调用语句: 例:“printf(“hello!”);” 3)空语句: 例如: while(getchar( ) != ’\n’) { ; }
于是算法最后可以写成: 1) 输入A,B,C。 2) 若A > B,则MAX ← A;否则MAX←B。 3) 若C > MAX,则MAX← C。 4) 输出MAX,MAX即为最大数。
这样的算法已经可以很方便地转化为
相应的程序语句了。
【例1-4】 计算1到100的累加和,写出其算法
自然语言描述
1.定义两个变量S和n
3. 注意赋值表达式和赋值语句的区别。
赋值表达式是一种表达式,它可以 出现在任何允许表达式出现的地方,而 赋值语句则不能。如:
if((x=y+5)>0) { z=x; } 合法 if((x=y+5;)>0) { z=x; } 非法
4. 如果赋值运算符“=”两边的数据类型 不相同,在赋值的时候要进行类型转换。
(2) o格式符,以八进制数形式输出整数。输出的 数值不带符号。
例如:
int a=-1;
printf("%d,%o",a,a);
-1在内存中的存放形式(以补码形式存放)如下: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 输出为: -1,177777
不会输出带负号的八进制整数。对长整数
关于输入输出
C语言本身不提供输入输出语句,
输入和输出操作是由函数来实现的。 在c标准函数库中提供了一些输入输 出函数,例如,printf函数和scanf 函数。在使用它们时,千万不要误认 为它们是C语言提供的“输入输出语 句”。
C语言函数库中有一批“标准输入输 出函数” ,其中有: putchar(输出字符) getchar(输入字符) printf(格式输出) scanf(格式输入)• 计算机算法分类Fra bibliotek–数值算法
• • 求方程的根 求函数的定积分
–非数值算法
• 图书检索
•
人事管理
算法的特性:有穷性、确定性、有效性等
常用的算法描述方法:
1.带序号的自然语言描述(易懂却不直观)
2.流程图:灵活、自由、形象、直观,可 表示任何算法
输入输出
处理
判断
起止
连接点
流程线
3.N-S图(盒图):特点:完全去掉了带箭 头的流程线,算法的所有处理步骤都写在一 个大矩形框(表示简单、符合结构化思想)
③ %ld:输出长整型数据。
例如: long a=135790; printf(“%ld”,a); 输出结果为:135790
对长整型数据也可以指定字段宽度:
“%8ld”——>□□135790
一个int型数据可以用%d或%ld格式输出。
#include<stdio.h> void main() { int a , b; long c; a=123456789; c=123456789; b=123; printf(“a=%d,c=%8ld,b=%8d”,a,c,b); }
第三章 控制结构
第三章
控制结构
内容提要
三种基本结构介绍
顺序语句
选择语句
循环语句
程序的灵魂——算法
• 算法:为解决一个问题而采取的方法和步 骤,就称为算法。 著名计算机科学家沃思Nikiklaus Wirth提出:程序=算法+数据结构。 算法是解决“做什么”和“怎么做” 的问题。程序中的操作语句,实际上就是 算法的体现。显然,不了解算法就谈不上 程序设计。
#include<stdio.h>
3.2.2字符输入输出函数
1、 putchar()函数
例3-1:#include <stdio.h> int main( ) 函数的作用是向终端输出一 putchar { 个字符:例如 putchar(c);它输出字符变 putchar(’\101’); 量cputchar(’*’); 的值。c可以是字符型变量或整型变量。 putchat(’A’); putchar(’*’); 运行结果如下: putchar(65); return 0; A*A*A }
puts(输出字符串)
gets(输入字符串)。
若要使用C语言中的函数库,必须在程序 的开头位置用预编译命令“#include”将有 关的“头文件”(函数库文件)包括到用户 源文件中。在头文件中包含了与用到的函数 有关的信息。例如使用标准输入输出库函数 时,要用到“stdio.h”文件。因此,在调用 标准输入输出库函数时,程序的开头应有以 下预编译命令:
选择控制语句: if、switch…case
循环控制语句: for、while、do…while
转移控制语句: break、continue、goto
§ 3.2
顺序结构程序设计
3.2.1 赋值语句
赋值表达式加上一个分号就构成了赋 值语句。 例: 语句格式:
A=3; 变量 = 表达式; B=4;
(long型)可以用“%lo”格式输出。同样可以指 定字段宽度,如 printf(“%8o”,a)
输出为:□□177777。
(3) x格式符,以十六进制数形式输出整数。 同样不会出现负的十六进制数。例如:
int a=-1;
printf("%x,%o,%d",a,a,a);
输出结果为
ffff,177777,-1
3.2.3 格式输入输出函数
1、格式输入输出函数printf()
它的作用是向终端输出若干个任意类 型的数据。printf函数的一般格式为 printf(格式控制,输出表列);如: printf("%d,%c\n",i,c);
括弧内包括两部分: 例如:
(1) “格式控制”是用双引号括起来的字符串, printf(“%d %d”,a,b) 也称“转换控制字符串”,它包括两种信息: ① 格式说明,由“%”和格式字符组成,如%d, 格式说明 输出列表 %f等。它的作用是将输出的数据转换为指定的格 式输出。格式说明总是由“%”字符开始的。 printf(“a= %d b=%d”,a,b) ② 普通字符,即需要原样输出的字符。例如 上面printf函数中双引号内的逗号、空格和换行 格式说明 输出列表 符。 (2) “输出列表”是需要输出的一些数据,可 以是表达式。
0 S 1 n n ≤100? S+ n S n+ 1 n
伪代码描述
0 S
1 n
If n ≤100
S+ n S
n+ 1 n
print S
输出S的值
结构化程序设计方法
结构化程序的三种基本结构 1966年提出三种基本结构,用这三种 基本结构作为表示一种良好算法的基本单 元:顺序、选择、循环 任何复杂的算法都是由这三种基本的
2 、 getchar() 函数 注意 :(1)getchar 函数没有参数。
此函数的作用是从终端 (或系统隐含 (2) 函数的值就是从输入设备得到的字 例3-2: )输入一个字符。 符。 指定的输入设备 #include <stdio . h> getchar 函数没有参数,其一般形式为: (3)getchar 函数只能接收一个字符, void main() getchar()。函数的值就是从输入设备得 当输入多个字符时,多余的字符作废。 { 到的字符。 (按回车后才开始接收字符) char c; (4) getchar 函数得到的字符可以赋给 c=getchar() ; 一个字符变量或整型变量,也可以不赋给 putchar(c); } 任何变量,作为表达式的一部分。