第3章 程序的控制结构及结构化程序设计方法
c#学习第3章

3.1.2 复合赋值语句
<变量> <双目运算符> = <表达式>; 变量> <双目运算符 双目运算符> <表达式 表达式>; 等价于 <变量> = <变量> <双目运算符> <表达式>; 变量> <变量 <双目运算符 <表达式 变量> 双目运算符> 表达式>; 如:num +=2; 等价于 num=num+2;
例如: 例如: if(x<0) x = -x;
//判定合法性 //判定合法性
//取x的绝对值 //取
if(a+b>c && b+c >a && a+c>b) a+c>b) { //求三角形面积 //求三角形面积 p = (a+b+c)/2; s = Math.sqrt(p*(p-a)*(p-b)*(p-c)); Math.sqrt(p*(p-a)*(p-b)*(p}
【 例 3 -4 】 switch语句编写程序 语句编写程序, 用switch语句编写程序,根据输入的成绩输出 相应的A 等级,其中A 90相应的A、B、C、D和E等级,其中A:90100; 100;B:80-89;C:70-79;D:60-69;E 80-89; 70-79; 60-69; 59。 :0-59。
• 2. if-else语句 if-else语句
• 语法形式: 语法形式:
if (<条件>) (<条件 条件>) <语句1> 语句1> else <语句2> 语句2>
第3章 结构化程序设计

循环体
是 P2 否
图3.7直到型循环结构示意图 直到型循环结构示意图
3.3 表述算法
• 通常用自然语言、计算机语言(代码)、伪代码[1]、传统流程图、 通常用自然语言、计算机语言(代码)、伪代码 、传统流程图、 )、伪代码 N-S流程图、PAD图等不同的方法来描述算法。 流程图、 图等不同的方法来描述算法。 流程图 图等不同的方法来描述算法 • 在例 中,采用了自然语言来表示算法。自然语言就是人们日常使 在例3.1中 采用了自然语言来表示算法。 用的语言,可以是汉语、英语,或其他语言。 用的语言,可以是汉语、英语,或其他语言。用自然语言表示算法通 俗易懂,但文字冗长,容易出现歧义性。自然语言表示的含义往往不 俗易懂,但文字冗长,容易出现歧义性。 太严格,要根据上下文才能判断其正确含义。此外, 太严格,要根据上下文才能判断其正确含义。此外,用自然语言来描 述包含分支和循环的算法,很不方便。因此, 述包含分支和循环的算法,很不方便。因此,除了那些很简单的问题 以外,一般不用自然语言描述算法。 以外,一般不用自然语言描述算法。 • [1] 伪代码是介于自然语言与计算机语言之间的文字符号。一般借助 伪代码是介于自然语言与计算机语言之间的文字符号。 一种高级语言的控制结构,而中间的操作用自然语言描述。 一种高级语言的控制结构,而中间的操作用自然语言描述。
P1 是 循环体
否
• 图3.6当型循环结构示意图 当型循环结构示意图
(2)直到型循环的执行过程为: )直到型循环的执行过程为: • 先执行循环体一次,然后判断控制循环的条件。 先执行循环体一次,然后判断控制循环的条件。 • 条件 成立,则继续上述循环体,直到条件不成立时,结束循环。 条件P2成立,则继续上述循环体,直到条件不成立时,结束循环。 成立
第3章 算法的基本控制结构

C程序设计与应用教程 3.1 C语句概述
3.1.1 C语言的基本语句 2.控制语句 表3-1 C语言的控制语句汇总 if~else switch( )~ while( )~ do~while( ) for( )~ continue break return goto
选择结构 条件语句 控制 开关语句 while循环语句 循环结构 do循环语句 控制 for循环语句 结束本次循环语句 其它控制 终止执行switch或循环语句 语句 从函数返回语句 转向语句
在C语言的基本数据类型中,没有逻辑型。C语言规定: 任何非0的数据都是“真”,0为“假”。逻辑运算的运 算结果和关系运算的结果一样,为“真”即为1,为“假” 即为0。
表达式中如果出现了多个逻辑运算符,C语言规定其优 先级次序为:!最高,&&次之,||最低。逻辑运算符具 有自左至右的结合性。
C程序设计与应用教程 3.3 选择结构的流程控制
C程序设计与应用教程 3.1 C语句概述
3.1.2 三种基本结构和流程控制语句
S1 S2
Y S1
条 件
N S2
条 件Y S1
N
(a)
(b)
(c)
图3-1 三种基本的结构
C程序设计与应用教程 3.1 C语句概述
3.1.2 三种基本结构和流程控制语句
C语言中的语句是按它们在程序中出现的顺 序逐条执行的; 选择结构的实现有if语句和switch语句; 循环结构的实现有while语句、do~while语 句和for语句。
表达式 真 语句
假
图 3-2 不 含 else 的if 语句的执行 流程
C程序设计与应用教程 3.3 选择结构的流程控制
3.3.2 if 语句 比较如下①②两种情况,哪个可以真正实现:如果 x小于y,则交换x和y的值?why???
《C语言程序设计》学习指南

学习指南一、学习资源与学习方法C语言程序设计是计算机专业的一门基础课程,本课程主要是培养学生利用计算机处理问题的思维方式和结构化程序设计的基本方法。
掌握C语言进行程序设计,对于理解程序设计的基本方法,以及日后学习计算机学科的其他知识内容都是至关重要的。
在资源建设上,根据学生的学习条件差异和学习基础的差异,提供多种形式的学习资源,如教师全程授课视频、期末辅导光盘、网络交互平台、教材和参考资料。
还提供了一些在深度和广度上有一定扩展的资源,如在每一章中都提供了扩展知识供有能力的学生学习,在一些知识点链接了一些课外阅读资源,从深度和广度上满足不同层次学生的不同需求。
(1)立体化教材及学习资源建设和研制了以国家十一五规划教材为基础,知识点导学系统、电子教案、全程课程录像、网络课件、在线测试、考试系统和试题库、资源库、网上教学支撑软件平台等丰富的立体化教学资源,它们各自自成体系又相互关联,各种媒体互相补充,充分发挥了各自的优势,满足了远程计算机专业学习者的需求。
学习资源全部放在教学网站上,实现资源共享,为每个学生提供一个网络帐号,实现网上交互答疑和交流。
尤其是资源库应用系统,将已有的各种数字媒体资源融合在一起,为学生提供直观的导学;同时还为教师提供教学帮助。
学生可以通过资源库的信息索引快速找到要学习知识点的所有资源列表,从中选择所需媒体。
(2)基于课程知识体系的视频讲授结合网络教育的教学对象为成人、学习方式为业余学习的特点,网络学习者学习时间不连贯、不固定的特征,网络课件的设计都是以知识点为基本单元,采用化整为零的思想,按照课程的每个章、单元、知识点进行课程视频的录制,每个知识点设计10~20分钟左右的时长,保证学习者能够利用零散时间学习。
(3)增加交互性和案例教学考虑到远程教学师生分离,学生以自学为主,因此在教学资源设计上注意增加交互性。
例如,专门做了媒体资源库,包括大量动画演示和视频录像,使课件更加生动。
C语言程序设计框图

第3章 控制结构
说明:
switch后面的表达式的值类型可以是整型、字符型或枚 举型。 当表达式的值与某个case中的常量表达式的值相等时, 就执行相应的case后的语句序列,直到遇到break语句或到 达switch结构末尾。 多个连续的case语句可以共用一个语句序列。 case 后的不同常量表达式的值不能相等。 break的作用是改变程序在switch结构中的执行流程, 将程序流程跳出switch语句,转到switch语句后的下一条语 句去执行。 switch语句中允许嵌套switch语句。
C语言程序设计电子教案
3.1 程序结构框图
3.1.3 N-S图
3种基本结构的N-S图
第3章 控制结构
顺序结构: 分支结构:
它是按照语句 它是根据给定条件
出现的先后顺 进行判断,选择其
序依次执行的 中的一个分支执行
。如上图所示 ,先执行A模 块,再执行B
。如上图所示,P 表示条件,当P成 立时执行分支A模 块,否则执行分支
复合语句:由一对大括号括起来的一条或多条语句。
被括起来的语句可以是这4类的任何一类语句,常用于函数
体或循环体。
C语言程序设计电子教案
3.2 二分支结构
3.2.1 二分支if语句
第3章 控制结构
基本形式:
if (表达式) 语句1;
else 语句2;
真(非0)表达式
假 (0)
语句1
语句2
例如: if(x>y)
C语言程序设计电子教案
第3章 控制结构
第3章 控制结构
返回总目录
C语言程序设计电子教案
目录
3.1 程序结构框图 3.2 二分支结构 3.3 多分支结构 3.4 循环结构 3.5 break与continue语句 3.6
c语言第三章ppt课件

§3.3 赋值语句
“=“是一个运算符 注意赋值表达式与赋值语句的区别
§3.4 输入输出在c中的实现
输入输出是以计算机主机为主体而言 输入输出是由函数来实现的
库函数:由厂商预先编写好,并编译成目标文件 使用库函数时,用预编译命令“#include”将有
关的“头文件”包含到用户源文件中。
#include <stdio.h> printf,scanf可不加#include命令
%m.ne和%-m.ne ,n指小数部分的小数位数 printf(“%e%10e%10.2e%.2e%-10.2e”,f,f,f, f,f); 设f=123.456,输出结果为
1.23456e+02 1.23456e+02 1.2e+02 1.2e+02 1.2e+02 ❖g格式符,用来输出实数,根据数值的大小,自动选
printf(“%f %10f %10.2f %.2f %-10.2f \n”,f,f,f,f,f) ;
运} 行结果:
123.456001 123.456001 123.46 123.46 123.46
❖e格式符:以指数形式输出实数 %e ,不指定输出数据所占宽度和数字部分的小数位数。 数值按规范化指数形式输出。 如:printf(“%e”,123.456);输出结果为1.23456e+02
❖格式控制:包含两种信息 格式说明: %格式字符 ,用于指定输出格式
普通字符或转义序列:原样输出
❖输出表列:要输出的数据(可以没有,也可以是表达 式,多个时以“,”分隔
printf(参数1,参数2,参数3……参数n )
格式字符
❖d格式符:输出十进制整数 %d ,按整型数据的实际长度输出 %md,m为指定的输出字段的宽度。如果数据的位数 小于m,则左端补空格,否则按实际位数输出 例:printf(“%4d,%4d”,a,b); 若a=123,b=12345,则输出结果为▂123,12345 %ld,输出长整型数据 例:long a=135790;printf(“%ld”,a); 也可以指定字段宽度,如%8ld
结构化程序设计的三种基本结构

结构化程序设计共有以下3种基本结构: 顺序结构 分支结构 (选择结构 )
循环结构,
(1)顺序结构,如图3.1(a)所示,该结构先执行A,再 执行B,两者是顺序执行的关系
A B 流程图
A B
N-S结构图
(2)分支结构,也叫选择结构,如图3.1(b)所示, 该结构先判断条件是否成立,当条件成立时执 行A,否则执行B。该结构只能执行A或B其中之 一
例如: m和n是整形变量,则: scanf (“%d%d”,m,n );是错误的, 应将“m,n”改为“&m,&n” 。
②如果在“格式控制串”中除了格式标识符、修饰符和格式 说明符以外还有其他字符,则应在输入数据时输入与这些字 符相同的字符。例如: scanf ("%d,%d",&m,&n );
输入时两个整数之间应加入“,”: 234,123↙ 因为,在scanf函数中的“格式控制串”中使用了逗号分 隔,所以必须在234后面加一个逗号。
表3.2 scanf函数常用的格式说明符
格式说明符 d o x c s f
功能说明 表示输入带符号的十进制整数 表示输入无符号八进制整数 表示输入十六进制无符号整数 表示输入单个字符 表示输入多个字符,即一个字符串 表示输入实数,可以用小数形式输入
表3.2 scanf函数常用③从键盘输入的数据类型和个数必须与参数表中的数 据类型和个数相匹配。例如:
scanf (“%d,%d”,&m,&n ); 输入数据时的形式:
234,10.5↙ (错误,因为数据类型不匹配) 234,105,123↙ (错误,因为数据个数不匹配) 234,123↙ (正确) ④可以指定输入数据所占的列数,系统自动按指定列 数截取数据。例如:
第3章程序设计初步第1-7节

第3章程序设计初步第1-7节一、选择题1、C语言中用于结构化程序设计的3种基本结构是( D )A) for,while,do-while B) if,for,continueC) if,switch,break D)顺序结构、选择结构、循环结构2、流程控制语句的基本控制结构有三种,不属于这一种结构的是( D )。
A) 顺序结构 B) 选择结构 C) 循环结构 D) 计算结构3、输入输出格式控制是在哪个头文件中定义的?( B )。
A) iostream B) iomanip C) istream D) ostream4、输入输出时需要包含哪个头文件?( A )。
A) iostream B) iomanip C) istream D) ostream5、对于语句cout<<endl<<x;中的各个组成部分,下列叙述中错误的是( D )。
A)”cout”是一个输出流对象 B) ”endl”的作用是输出回车换行C)”x”是一个变量 D) ”<<”称作提取运算符解析:”>>”称作提取运算符. ”<<”称作插入运算符6、下列有关输入、输出的说法错误的是( C )。
A) C++语言本身没有提供输入、输出语句B) C++语言中输入输出功能是通过输入输出流库中的流对象cin和cout实现的C) 函数putchar()只能用来输出字符型变量的内容D) 函数getchar()一次只能输入一个字符7、在ios中提供控制格式的标志位中,哪个是转换为十六进制形式的标志位?(A )。
A) hex B) oct C) dec D) left8、关系表达式的求值结果为( B )。
A)1或-1 B)1或0 C)任意正整数或0 D)任意负整数或09、设变量a和b的值满足a<b,判断变量x的值是否位于闭区间[a,b]的表达式是(C )。
A)a<x<y B)a<=x<=b C)x>=a&&x<=b D)a<x&&x<b10、能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是( D )。
2009第三章 C语言语句与结构化程序的三种基本结构

3.2.1 表达式语句
赋值表达式语句的一般格式: <变量名> = <表达式>; 其中 “=”是赋值号, 其意义是将赋值号右边表 达式的值赋到赋值号左边的变量中去。 如: x = 5; 表示将5赋给变量x x = x+20;表示将x的内容+20再赋给x
3.2.2 数据的输出
C语言的输入和输出是通过调用I/O函数来完成 的,常用的有三对:
2. %s格式符和附加的格式说明符“m .n ”一起
使用, 其中“.n”这个附加的格式说明符是使对
输出的字符串截取n位字符。
3.2.2 数据的输出
例如: main() { printf(”%3s,%7.2s,%.4s,%- 5.3s\n”,
“china”,”china”,”china”,”china”),
3.2.3 数据的输入
scanf()函数
用于接受键盘输入的各种类型的多个数据。 scanf (格式控制字符串, 变量地址表列) ; 在scanf()函数中格式控制字符串的含义与printf() 函数中略有不同(参见P64表3.3) 输入的格式说明字符有: 格式控制问题 %d %o %x %c %s %f %e
3.2.3 数据的输入
例如:关于格式说明符的使用的例子.
?
P66 4、scanf()函数在使用时应该 注意的问题+例3.7
输入:12345678901234 输出:1 , 234 , 789012 ,34.000000 输入:12345678901234 输出: , 12 , 345.000000
3.2.3 数据的输入
getchar( )函数
函数功能:从键盘读取用户输入的一个字符, 并 将该字符的ASCII码值作为函数返回值。 注: 用户在输入字符后, 再按回车键, 输入的内 容才能被getchar()函数处理。
VFP-程序设计

补充: 1.显示xsda.dbf中在1978年以后出生的记录。
DISPLAY FOR 出生年月>{1978/12/31} 或:DISPLAY FOR year(出生年月)>1978
2.显示xsda.dbf中所有是团员的记录。
LIST FOR 团员否
13
二、执行 1.菜单方式:Program->Do… 在弹出的Do 对话框中选择程序文件并执行。 2.命令方式: do <命令文件名> 例4-3:执行例4-1创建的程序文件 do a.prg 例4-3:执行例4-2创建的程序文件 do LT2
操作
36
几点说明 a.IF--ELSE—ENDIF三者要匹配 b.ELSE,ENDIF要独占一行 c.ENDIF总是离与它最近的IF语句匹配。
37
2.多分支(情况分支语句)
<命令格式> DO CASE 情况n 其他 情况1 情况2 CASE <条件表达式1> 条件1 条件2 条件3 条件n F <语句序列1> T CASE <条件表达式2> B B1 B2 B3 Bn <语句序列2> …… [OTHERWISE <语句序列>] ENDCASE
SR>3000?
计算所得税: ZS=SR*0
计算所得税 ZS=SR*0.2
显示个人所得税
结束
35
SET TALK OFF INPUT „请输入收入情况:’ TO SR IF SR>9000 <- 9000以上 ZS=SR*0.4 ELSE IF SR>6000 <- 6000~ 9000 ZS=SR*0.3 ELSE IF SR>3000 <- 3000~6000 ZS=SR*0.2 ELSE <- 0~3000 ZS=0 ENDIF ENDIF ENDIF ?‟应征税为:‘,ZS
第三章软件工程结构化分析

get f1 A
f4 f6
f3 f2
主模块 (C、D、E)
f7
将f3变换成f7和f8
f7
f8
C
D
E
put f7
put f8
f9 f8 f10
F put f9 G put f10
f10
f11
H put f11
主模块 (C、D、E)
get f3
将f3变换成f7和f8
put f7
put f8
get f2 B
随着设计的逐步深入,对软件结构进一步细化,称为详 细设计(或过程设计)。
因此,软件设计分为:概要设计、详细设计两个阶段。
█ 概要设计 通过仔细分析“软件需求规格说明”,适当地对软件
进行功能分解,从而将系统分解为一系列功能模块,并 设计出完成预定功能的模块结构。(层次结构) █ 详细设计
具体针对每个模块,确定完成每个模块功能所需要的 算法和数据结构等。 (实现过程)
每个模块完成一个特定的子功能,所有模块按某种方法组 装成为一个整体,从而实现整个系统所要求的功能。
说明:模块化是软件开发过程中解决复杂问题的重要手段。
开发大而复杂的系统,进行适当的分解,不但可降低系 统复杂性,还可减少开发工作量,总体上降低开发成本, 提高软件生产率。
是否将系统无限分解,最后开发工作量就趋于零?
第4章 结构化设计
学习内容: 1、结构化设计的定义与目标 2、结构化设计与结构化分析的关系 3、结构化设计的分类与任务 4、结构化设计的概念和原理
了解: 结构化设计与结构化分析的关系
掌握: 结构化设计的概念与原理
一、结构化设计的定义与目标
在需求分析基础上,采用结构化方法进行软件系统的设
C++程序设计-第三章-结构化程序设计:条件分支结构

else语句2
例:判断一个数是正数还是负数
3、if语句的形式:多条件分支
格式:if(表达式1)语句1
else if(表达式2)语句2
else if(表达式3)语句3
……
else if(表达式m)语句m
例:判断一个数的正、负、零
4、if语句的嵌套
5、条件运算符和条件表达式
If(a>b)max=a;
}→max=(a>b)?a:b;
else max=b;
复习思考题:
作业:P8610
上机调试
教学参考资料:
谭浩强《C++程序设计》(第2版)
教学效果分析:
学生对VB可视化编程方式有深入的了解,对对象、类、事件、属性、方法有初步认识,学会VB通用属性设置和窗体的属性、方法和事件,并利用这些进编写一些小程序。
教学方案
授课题目
第三章结构化程序设计:条件分支结构
课型
理论讲解
课次
第8次
教学目的、要求:
1、掌握选择分支语句程序的语法特点
2、掌握if语句的编程方法
教学重点及难点:
1、if语句的嵌套运用
2、多条件分支语句的嵌套运用
教学过程设计:
【课程引入】课前回顾,知识点说明
【课程讲解】
1、if语句:单向分支
格式:if(表达式)语句
c语言第3章

3.2.2 例题与分析
例题3.3 根据输入的加或减运算符,输出任意两个
分析本题的含义是根据用户从键盘输入的加运算符 或减运算符,在屏幕上输出相应的运算结果。首先 对题目进行分析和分解,然后再进行代码设计。问 题分析如图3.1
整型变量iop1, iop2 整型变量result 字符型变量operator
1 (x 0) y 0 (x 0)
1 (x 0)
为了避免此种情况,采用办法与情况1相似。改变 if...else的匹配关系,将情况2的代码修改如下,即 可正确表示符号函数。
if(x < 0) y = -1;
else if (x!=0) y = 1;
else y = 0;
例题3.6 求一元二次方程ax2+bx+ c = 0 分析由代数知识可知,方程的解有3种不同的情况,
/* 获得运算符 */
printf("please enter tow numbers:");/* 获得操作数 */
scanf("%d%d", &iop1, &iop2); if(operator == '+')/*由运算符决定不同运算*/
result = iop1 + iop2;
else
result = iop1 - iop2; printf("\n%d %c %d = %d\n", iop1, operator, iop2, result); /* 输出结果 */ }
方法1 main() {
int x, y; printf("please input a integer:"); scanf("%d", &x); if (x > 0) y = 1; else if (x == 0)
C语言第3章_

o,x
f
e g c
计算机基础教学部
17
二、printf格式符说明
■ 另外,还有其他格式符如:
■m
■l ■ 将在需要的时候用实例讲解。
计算机基础教学部
18
二、printf一般格式
■
%[标志][输出最小宽度][.精度][长度]格式字符
#include <stdio.h> #include <stdio.h> main() main() { { 输出结果:10,3.4 int a=10; 10 3.4 int a=10; 输出结果:103.4 float b=3.4; float b=3.4; printf(“%d%f\n”,a,b);/*a是int类型,用%d格 printf(“%d ,%f\n”,a,b); 式, b是float类型,用 %f格式*/ } printf(“%d%6.2f\n”,a,b) }
}
计算机基础教学部
23
四、格式输入函数scanf
输入数据赋给变量:
#include <stdio.h> #include <stdio.h> #include <stdio.h> #include <stdio.h> main() main() main() #include <stdio.h> main() { { { main() { int a,b; float h,w; int a;{ float b; scanf(“%d%d”,&a,&b); printf(“请输入身高(米):”); scanf(“%d”,&a); double c; scanf(“%f”,&b); scanf(“%f”,&h); } scanf(“%lf”,&c); } } printf(“请输入体重(千克):”); } scanf(“%f”,&w); printf(“肥胖指数为:%.2f\n”,w/h/h);
第三章 顺序结构程序设计

步骤1:0 => s; 步骤2:1 => I; 步骤3:s+i => s; 步骤4:i+1 => I; 步骤5:如果i≤1000,转到步骤3,否则结束。 在上面的算法中,符号s、i表示变量,符号“=>” 表示给变量赋值。步骤1和步骤2表示给变量s和i 赋初始值为0和1;步骤3将变量i的当前值累加到 变量s中;步骤4使变量i在原值的基础上增加1; 步骤5判断i的值如果小于等于1000,重复做步骤 3和步骤4,构成一个循环,而当i的值不小于等于 1000时,循环结束,这时,变量s的值就是要求 的计算结果。
2.函数调用语句 函数调用语句由一次函数调用加一个分号(语句结 束标志)构成。例如: printf("This is a C Program."); 3.表达式语句 表达式语句由表达式后加一个分号构成。 表达式能构成语句是C语言的一大特色。最典型的 表达式语句是在赋值表达式后加一个分号构成的赋值 语 句 。 例 如 , “ num=5” 是 一 个 赋 值 表 达 式 , 而 “num=5;”却是一个赋值语句。
3.3 格式化输出函数printf()
程序运行中,有时候需要从外部设备(例如键盘)上得 到一些原始数据,程序计算结束后,通常要把计算结果发 送到外部设备(例如显示器)上,以便人们对结果进行分析。 我们把程序从外部设备上获得数据的操作称为“输入”, 而把程序发送数据到外部设备的操作称为“输出”。 不像其他的高级语言,C语言没有专门的输入/输出语 句,输入/输出的操作是通过调用C语言的库函数来实现的。 printf()函数是最常用的输出函数,它的作用是向计算机系 统默认的输出设备(一般指显示器)输出一个或多个任意指 定类型的数据。
3.1.2 算法的特征 通常,一个算法必须具备以下五个基本特征: (1) 有穷性。一个算法必须在它所涉及的每一种情 形下,都能在执行有限次的操作之后结束。 (2) 确定性。算法的每一步,其顺序和内容都必须 严格定义,而不能有任何的歧义。 (3) 有零个或多个输入。输入是算法实施前需要从 外界取得的信息,有些算法需要有多个输入,而有些 算法不需要输入,即零个输入。 (4) 有一个或多个输出。输出就是算法实施后得到 的结果,显然,没有输出的算法是没有意义的。 (5) 可行性。算法的每一步都必须是可行的,也就 是说,是能够由计算机执行的。
第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、有效性:每一步都应当能有效地进行并得到确定的结果。
4、有0个或多个输入。 5、有1个或多个输出。
3.1.2 简单算法举例
例1:求12345。
算法一: S1:求12 ,得2; 算法二: S1:p=1
S2:将S1得的2再乘3,得6;
S3:将S2得的6再乘4,得24; S4:将24再乘5,得120,结果。
(2)只有一个出口 (3)结构内的每一部分都有机会被执行
(4)结构内不存在“死循环”
3.2 顺序结构程序设计
一、顺序结构概念: 顺序结构是最简单的C语言程序结构,也是C语言程序中 最常用的程序结构,主要由表达式语句组成。 特点: 完全按照语句出现的先后顺序执行程序。
3.2 顺序结构程序设计
二、顺序结构流程图表示: 传统流程图:
A B
N-S流程图:
A B
3.2 顺序结构程序设计
三、应用举例:
例3.1:假设银行定期存款的年利率r为2.25%,存款期为n年, 存款本金为m元,求n年后可得到的本利之和。 用N-S图表示的算法: 输入n和m的值 利用公式total=m*(1+r) 计算本利之和total 输出计算结果total
n
真
表达式2
真
假
表达式3
真
假
else if(表达式m) 语句m else 语句m+1
适合于解决多分支选择问题
语句1
语句2
语句3
语句4
3.3 选择结构程序设计
例3.4 从键盘输入你和你朋友的年龄,编程判断谁的年龄 最大,并打印他的年龄。
算法1: 用不带else子句的if语句编程。 N-S流程图: Y 输出yours his>yours 读入 yours,his yours>=his N
程序见eg3_2
3.2 顺序结构程序设计
例3.3:编程计算方程ax 2+bx+c=0的根,a,b,c 由键盘输入, 2 假设b -4ac> 0。 分析: 一元二次方程的求根公式:
x1, 2
b b 2 4ac b b 2 4ac 2a 2a 2a
b p 2a x1 p q
S3:s=s+n
S4:n=n+2 S4:n=n+1
<100,返回到S3, S5:若n 100,返回到S3, 否则结束。
3.1.2 简单算法举例
例3: 求1-2+3-4……-100 算法: S1:sign=1 S2:n=2 S3:s=1 S4:sign=(-1) sign S5:s=s+sign n
S2:i=2
S3:p =pi S4:i=i+1 S5:若i5,返回S3, 否则结束,得出结果 p为5!。
比较两个算法: 算法一:繁琐,数目大时步骤太多。
算法二:利用循环算法,借助两个变量,可求任意数的阶乘,提高通用性。
3.1.2 简单算法举例
例2: 求1+2+3+4……+100
算法:
S1:n=2 S1:n=1 S2:s=0 思考: 1+3+5+7+……+99 2+4+6+8+…..+100
3.2 顺序结构程序设计
程序清单: #include <math.h> main( ) { int m,n; float r=0.0225,total; printf(“Please enter n,m:”); scanf(“%d,%d”,&n,&m); total=m*pow(1+r,n); printf(“Total=%f\n”,total); } 运行结果: Please enter n,m:1,500 Total=511.250000
Y
程序见eg3_4_1 输出his
N
3.3 选择结构程序设计
算法2: 用带有else子句的if语句编程。 N-S流程图: 读入 yours,his Y yours>=his 输出his N
输出yours
程序见eg3_4_2
3.3 选择结构程序设计
算法3: 用条件表达式实现。 条件表达式: 表达式1 ? 表达式2 : 表达式3 N-S流程图: 读入 yours,his Y yours>=his max=his N
3.2 顺序结构程序设计
C程序结构框架:
以#开始的编译预处理命令行 main( ) { 局部变量说明语句;
执行语句序列;
}
注: 编译预处理命令不是C语 句,每条指令单独占一行, 同一行不能有其它的编译指 令或C语句。
包含头文件的方式:#include <文件名> #include “文件名”
3.2 顺序结构程序设计
Y
S4:i+1 i
S5:若i 5,返回S3,否则 结束,得出结果 p为5!。
P=P*i
i=i+1 打印P
结束
3.1.3 算法的表示方法
三、N-S结构化流程图 取消改进流程图中的流程线,这种算法被迫只能从上到下顺 序执行,从而避免了算法流程的任意转向,保证了程序的质量。 优点:既形象直观,又节省篇幅,基本结构及算法的表示均在 一个矩形框内,尤其适于表示结构化程序的设计。 所谓结构化程序设计就是由基本结构顺序组成的,基本结 构之间无跳转。
第三章 程序的控制结构与 结构化程序设计方法
3.1 算法与算法的表示方法
3.2 顺序结构程序设计
3.3 选择结构程序设计
3.4 循环结构程序设计
3.1 算法与算法的表示方法
本章主要内容: 1.了解算法的表示方法及其在程序设计中的重要地位. 2.掌握 C 语言的基本控制结构和基本控制语句. 3.掌握用 C 语言的基本控制语句进行顺序,选择和 循环结构程序的设计. 4.掌握一些常用的算法,如递推法,迭代法,穷举法等. 5.了解结构化程序设计的基本思想
-x
x>0 x=0 x>0
3.3 选择结构程序设计
选择结构的流程图表示
入口 真 假 真
P
P A B
假
A
B
出口
N-S 流程图
传统流程图
3.3 选择结构程序设计
选择结构种类
单分支的选择结构 双分支的选择结构 多分支的选择结构 嵌套的if语句或switch语句
3.3 选择结构程序设计
条件语句
if 形式 if(表达式) 语句A 适合于解决单分支选择问题
表达式 真
假
语句
if ~ else 形式 if(表达式)语句1 else 语句2 适合于解决双分支选择问题
真
表达式
假
语句1
语句2
3.3 选择结构程序设计
else~if 形式
表达式1
假
if(表达式1) 语句1 else if(表达式2) 语句2 …
S6:n=n+1
S7:若n 100,返回到S4,
否则结束。
3.1.3 算法的表示方法
一、自然语言表示 二、流程图表示
处理框
输入输出框
起止框
判断框
连接符
流程线
3.1.3 算法的表示方法
例1中求5!的算法用流程图表示:
算法: 开始 P=1 i=2 p
N
S1:p=1
S2:i=2 S3:p i
i5
四、伪代码表示: 伪码是指介于自然语言和计算机语言之间的一种代码, 是帮助程序员制定算法的智能化语言,它不能在计算机上 运行,但是使用起来比较灵活,无固定格式和规范,只要 写出来自己或别人能看懂即可,而且比较容易转换为计算 机程序。
3.1.3 算法的表示方法
例:用伪码表示的计算n!的算法 input n if n<0 print “input error!” goto end else fac=1 i=1 loop: fac=fac*i i=i+1 if i<=n goto loop print fac end
3.1.3 算法的表示方法
例1中求5!用N-S图表示:
p=1 i=2 p=p*i i=i+1 直到 i>5为假 打印p
用C实现
main( ) { int i,p; p=1; i=2; do { p=p*i; i=i+1; }while(i<5) printf(“%d”,p); }
3.1.3 算法的表示方法
返回
3.2 顺序结构程序设计
三种基本结构: 为了使流程图便于理解和阅读,限制无规律的任意转 向,结构化程序设计规定了三种基本结构,即:顺序结构、 选择结构、循环结构。然后由这些基本结构按一定规律组 成一个算法结构,整个算法的结构由上而下地将各个基本 结构顺序排列起来的。 三种基本结构的特点:
(1)只有一个入口
max=yoБайду номын сангаасrs
输出max 程序见eg3_4_3
3.3 选择结构程序设计
例3.5 体型判断。判断某人是否属于肥胖,可根据身高 与体重等因素来判断,按照“体指数”对肥胖程度进 行划分: 2 体指数t = 体重w /(身高h ) (其中,w单位为kg,h单位为m) 当 t<18 时,为低体重; 当 t介于18和25 之间时,为正常体重; 当 t介于25和27 之间时,为超重体重; 当 t>27 时,为肥胖。
算法3:用在else子句中嵌入if语句的形式编程。 N-S流程图: 输入身高h和体重w 计算体指数t
Y
t<18
N
t<25
Y
低体重