FORTRAN90程序设计教程 第1章 FORTRAN程序设计基础.ppt
fortran90程序设计chapter1
第一章 程序设计概述对于计算机系统,如果说CPU 是心脏,那么程序就是其灵魂。
了解程序和掌握程序设计是驾驭和运用计算机系统的重要一环。
本章主要介绍程序设计的一些基本知识、基本概念和基本方法,为学习和掌握FORTRAN 90程序设计奠定基础。
1.1 程序设计语言任何一个计算机系统都是按照人们用某种程序设计语言编写的程序进行工作的,人们通过程序设计语言编写的程序来指挥和控制计算机运行。
程序设计语言是人与计算机进行交流的有效工具,伴随计算机诞生而诞生,伴随计算机发展而发展,在计算机科学技术的发展过程中,发挥了巨大作用。
1.1.1 程序设计语言分类从计算机诞生之日起,程序设计语言从低级语言到高级语言,从传统语言到现代语言不断向前发展,新的、功能强大的程序设计语言不断涌现。
现在,世界上正在使用的各种程序设计语言不少于百种。
程序设计语言属于人工语言、形式语言、非自然语言。
分为低级语言和高级语言两种。
低级语言又分为机器语言和汇编语言。
机器语言是一种计算机能直接理解、识别和执行的程序设计语言,它由0和1两个二进制符号按照确定的规则描述和表达。
例如:计算2+3-4,并从屏幕上输出,用机器语言描述的程序为:上述程序是用MCS-48微型计算机上配置的机器语言编写。
机器语言与具体的计算机硬件系统有关,不同种类的计算机配置有不同的机器语言,如同不同国家、不同民族有不同的自然语言一样。
某一类型计算机的机器语言在其它种类计算机上不能被识别、理解和执行。
对计算机来说,识别、理解和执行机器语言可谓得心应手,但对人类来说真是苦不堪言。
世界上也只有极少数非常专业的计算机专家才能使用机器语言编写程序,绝大多数人不用机器语言编写程序,但是了解一点机器语言知识也有一定益处。
机器语言的最大优点是计算机能直接识别、理解和执行,有极高的运行效率,在一些嵌入式控制系统中有时会使用机器语言编写的程序。
机器语言有明显缺点,人们难以理解、阅读、编写机器语言程序,机器语言程序其可靠性难以保证,不易维护,可移植性很差。
FORTRAN语言程序设计ppt课件
do i=1,10 !循环语句
s=s+i
!循环体
enddo
上述循环所要执行的重复操作是: s=s+i (即循环体),但每一次循环时,循环 体的操作数据s,i的值是不同的。
.
精选2021版课件
8
2.3 算法的表示方法
(1)传统流程图 即用有向线段将描述算法步骤的各功能框连接起来.如下图所示:
A B 图(a)顺序结构
1.逻辑常量仅有两个,.TRUE.(真)和.FALSE.(假)。注意:逻辑常量 两侧的两个小数点不能省略。逻辑型常量是具有逻辑型数据类型的非数 值数据,又称为逻辑值或布尔值。
2.对于逻辑值.TRUE.,在其存储单元字节内每位为“1”,可视为整数值 -1;对于逻辑值.FALSE.,在其存储单元字节内每位为“0”,可视为整数 值0,它们均能参与整数运算。如7+.FALSE.,结果仍为7。1+.TRUE., 结果则为0。
数组、函数、过程等实体的名称。
名称的定义(即语法描述):由英文字母开头的31个以内 的字母、数字、下划线(_)以及美元符字符序列组成。
例:NUMBER、x1、root_2、y$ _ab、5xy、x.y
5.2.2 保留字 一个语句中的特定单词,如PROGRAM、END、IF、ENDIF、
DO、ENDDO等,称为语句保留字。 说明: FORTRAN90程序中允许用保留字作为其它实体的名 称,但是一般不提倡。
1x10-10
注意:单独的指数部分不能构成一个实型常量。 例:E5
5.6.2.3 复型常量
表示普通代数中的复数。即: a ± bi(其中a是实部, b是虚部)
一般形式:(a,b)
例:(-3,5)
!表示复数:-3+5i
FORTRAN90程序设计1[1]
程序设计举例
算法
算法是计算机软件中的一个基本概念,它是对解决实际问题的方法和步
骤的描述。设计算法是程序设计的核心,也是编写程序的基础。
正确的算法有以下几个显著特点:
(1)有穷性(flniteness)。 (2)确定性(certainty)。 (3)有效性(effcctivencss)。 (4)有零个或多个输入(input)。 (5)有一个或多个输出(output)。
简单的FORTRAN90程序分析
(6)空格并不是随处都可以使用的,一个像关键字、变量和常量名以 及操作符等的字符,其内部是不能使用空格的,空格会使字符失去其原 有的含义。 (7)FORTRAN90的注释语句是以感叹号为标志的,一行中感叹号后的 所有字符都被编译器作为注释语句而忽略。注释语句可以单独占一行, 也可在程序的其他语句后面出现。在FORTRAN90中,空行被作为注释 语句。 (8)如果遇到一条语句的长度超过了FORTRAN90所允许的行最大长度, 需要写成几行,FORTRAN90提供了一个续行符 ( & ) ,通过在语句末尾 添加续行符,编译器就会把下一行作为续行来处理。如果是把一个如关 键字这样的字符分成两行,那么需要在下行语句的开头再加一个续行符。
CHARACTER ( LEN = 10 ) :: STRING 子字符串是字符串中的若干个连续字符的集合。子字符
CHARACTER (LEN = 5 ) :: SUBSTRING 串的表示方法如下: CHARACTER (LEN = 1 ) :: CHAR STRING=’JANEJORDE’ 字符串变量名([FIRST-POSITION] : [END-POSITION]) ! SUBSTRING的值为“JANE” SUBSTRING=STRING ( :5 ) 缺省的开始位置是1,缺省的结束位置是字符串的长度。 SUBSTRING=STRING ( 5:6 ) ! SUBSTRING的值为“J” 如果开始位置大于结束位置则子字符串为空,即它的长 SUBSTRING=STRING ( 3:7 ) ! SUBSTRING的值为“NEJO” N=7 度为0。 CHAR=’ABCDEFGHIJK’ ( N:N ) ! CHAR的值为“G”
01章FORTRAN程序设计基础精品PPT课件
16
1.2.2 算法的描述
算法的描述有许多方法,常用的有:自然 语言、一般流程图、N-S图等。前面例1.1~ 例1.2的算法是用自然语言──汉语描述的,其 优点是通俗易懂,但它不太直观,描述不够 简洁,且容易产生二义性。在实际应用中常 用流程图表示算法。
17
1. 一般流程图
一般流程图是一种传统的算法描述方法,它用不同 的几何图形来代表不同性质的操作。例如,用矩形框 表示要进行的操作,用菱形框表示判断,用流程线将 各步操作连接起来并指示算法的执行方向。一般流程 图的主要优点是直观性强,初学者容易掌握。缺点是 对流程线的使用没有严格限制,如毫无限制地使流程 任意转来转去,将使流程图变得毫无规律,难以阅读。 为了提高算法可读性和可维护性,必须限制无规则的 转移,使算法结构规范化。
9
什么叫程序设计?
对于初学者来说,往往把程序设计简单地理解 为只是编写一个程序。这是不全面的。“程序设计” 反映了利用计算机解决问题的全过程,包含多方面 的内容,而编写程序只是其中的一个方面。使用计 算机解决实际问题,通常是先要对问题进行分析并 建立数学模型,然后考虑数据的组织方式和算法, 并用某一种程序设计语言编写程序,最后调试程序, 使之运行后能产生预期的结果。这个过程称为程序 设计。
x →max
i+1→i
n
n
输出max
20
2. 程序的三种基本结构
1966年Bohra和Jacopini提出了组成结构化算 法的三种基本结构,即顺序结构、选择结构和循 环结构。
《高级语言程序设计(Fortran)》
Tel: E-mail:
1
计算机是在“程序”的控制下进行自动工作的, 它解决任何实际问题都依赖于解决问题的程序。
fortran 90(1)
之陳印斌第一讲Fortran 程序设计基础(1)2009年10月9日星期五之陳印斌授课教师♦陈斌–动力工程多相流国家重点实验室205房间–82667326–chenbin@–♦教材——《Fortran 90/95高级程序设计》之陳印斌History♦John Backus (1924-2007)♦19 岁的时候从军学习工程和医科♦26 岁从纽约的哥伦比亚大学获得数学学士学位♦在毕业之前,他就幸运地进入IBM 公司,并在那裡开始学习操作电脑。
四年之后,1953 年12 月,职位并不怎么高的Backus 向主管提出了他的FORTRAN 计划并获得支持。
♦尽管他的完工期一再延宕,IBM 却一再容许、一再给他加钱、加人、加空间和设备。
第一份可以上市的FORTRAN compiler 在1957 年4 月才出现。
但是其成效果然斐然,立刻成为工程、科学界的最主要程序语言,直到今天大致还是如此。
之陳印斌History♦FORTRAN 0–1954, IBM♦FORTRAN 1 –1957年4月发布,具备了当今FORTRAN标准的基本结构,如允许浮点运算、数组说明、DO循环控制结构及输入输出语句等♦FORTRAN II–发布于1958年春季,对FORTRAN Ⅰ做了很多重要扩充,如允许复型与双精度浮点运算、子程序、输入输出的格式说明等,并加强了诊断功能♦FORTRAN III–没有正式公布。
功能增强,如允许布尔表达式、函数和子例程名可以作为参量传递,允许处理字母数字数据等♦FORTRAN IV –发布于1962年,去除了FORTRAN中与机器相关的一些语言特征,66年成为美国标准(Fortran 66)♦FORTRAN 77–发布于1978年4月。
扩充了字符处理功能使之能应用于非数值运算行领域。
还增加了块IF语句、ELSE语句、END IF语句等,使写出的程序趋于结构化,可读性加强。
此外还增强了输入输出功能和文件处理能力,对FORTRAN 66标准中的许多部分做了改进(如允许不同类型的混合运算,数组下界可以是负数和零,数组下标表达式可以为任意的整型表达式等)之陳印斌History♦FORTRAN 90–19901.自由格式的源程序,不再受老式面向卡片输入的固定栏目布局限制;2.模块化数据与过程定义机制提供了一种数据与过程包装的强有力的而又安全的形式;3.从内部数据类型中派生出用户定义的数据类型;4.数组操作机制;5.指针机制,允许创建与操作动态数据结构;6.允许使用多种字符类型,满足各国字符处理的需要;7.提供了过程的递归调用机制;8.提供了附加的控制结构,如do……enddo, do while等。
F90第一章
《FORTRAN90程序设计》课多媒体课件
第一章 程序设计概述
1. 2. 3. 4.
程序设计语言 程序与程序设计 算法的基本概念和特征 程序设计方法
《FORTRAN90程序设计》课多媒体课件
1.1 程序设计语言
概述 分类
概念
描述
程序设计语言是人与计算机进行交 流的工具。 计算机系统按照某种程序设计语言 编写出的程序进行工作 , 人类通过程序 来指挥和控制计算机系统。
sum+I=>sum
N
I+1=>I 输出sum 结束
第一章 程序设计概述
1.4 程序设计方法
概述 模块化方法
结构化方法
面向对象方法
要求设计出的程序具有正确性、 可靠性、可读性、可理解性、可 修改性和可维护性 程序设计方法:面向过程(模块 化、结构化)、面向对象。
1.4 程序设计方法/概述
概述 模块化方法
结构化方法
面向对象方法
传统程序设计方法以功能和操作作为 驱动,数据从属于操作,不利于有效 的分析问题;算法和程序结构与求解 的实际问题不完全一致,降低了程序 的可读性、可维护性和可修改性。
面向对象方法针对具体问题进行分析, 对数据实体进行类定义,对其中的数 据和操作进行封装和隐蔽处理,创建 对象实例。运行对象实例可完成问题 的求解。
第一章 程序设计概述
1.4 程序设计方法
概述 模块化方法
结构化程序设计强调程序设计风格 和程序结构的规范化。
结构化方法
面向对象方法
两大特征:一是使用三种基本控制 结构;二是采用自顶向下和逐步求 精方法。
第一章FORTRAN90概述
Y=2000
Y不能被 4整除
Y
N
Y不能被100 整除
N
N
打印Y “不是闰年” Y能被 400整除
Y
打印Y “是闰年”
Y
打印Y “是闰年” 打印Y “不是闰年”
Y=Y+1
Y
Y≤2500
N 结束
3.2 用N-S图表示算法
成立
P
不成立
A B 顺序结构
A
B
选择结构
当P1 A A 直到P2
当型循环
直到型循环
变量
•变量:在程序运行过程中其值可以发生变化。 每个变量都会分配到一个相应的存储空间,这个 空间就是该变量的存储地址,是相对固定的。
变量必须有名字和类型,它的值可以变化,与其类 型密切相关 变量名是变量的标志。 命名规则:以字母开头,由字母、数字、下划线组 成的字符串,允许长度为31个字符,并且不区分大小 写字母:Ab和 aB 是同一变量。 同一个程序模块中不能有相同名字的两个变量。 最好不要用FORTRAN中用到的名字作变量名。 FORTRAN中所有名字都遵守命名规则
例:求三个数(5,10,23)的平均值。
PROGRAM TEST ! 计算三个数的平均值 A=5;B=10;C=23 ave=(A+B+C)/3 write(*,*) 'AVE=',ave
END PROGRA&
&M TEST !注意续行方法
§1.5 FORTRAN 90字符集 FORTRAN90字符集包括:
§1.3 FORTRAN
90语言的特点
对FORTRAN77的扩充主要有:
引入数组运算
提高数值计算功能 内在数据类型参数化 用户定义的数据类型、运算和赋值 引入模块数据及过程定义的功能 引入指针概念
FORTRAN90第1章
【方法】 采取自顶向下、逐步求精、模块化设 计和结构化编码的分析方法。
4 结构化程序设计
【自顶向下】 是指对设计的系统要有一个全面的理解,从问题的 全局入手,把一个复杂问题分解成若干个相互独立的子 问题,然后对每个子问题再作进一步的分解,如此反复, 直到每个问题都容易解决为止。 【逐步求精】 是指程序设计的过程是一个渐进的过程,先把一个 子问题用一个程序模块来描述,再把每个模块的功能逐 步分解细化为一系列的具体步骤,以至能用某种程序设 计语言的基本控制语句来实现。逐步求精总是和自顶向 下结合使用,一般把逐步求精看作是自顶向下设计的具 体表现。
• 算法:对解决一个实际问题而采取 的方法和步骤的描述 • 数据结构+算法=程序 • 算法分类:
数值运算算法和非数据运算算法
算法基本特征
• (1)输入性 • (2)输出性 • (3)确定性 • (4)有效性
• (1)正确性 • (2)可读性 • (3)健壮性 • (4)效率与低存储量需求
4 结构化程序设计
【模块化设计】 其设计思想实际上是一种“分而治之”思想,把一 个大任务分为若干个子任务。一般来讲,一个程序由一 个主控模块和若干个子模块组成。
4 结构化程序设计
【结构化编码 】 在设计好一个结构化的算法之后,还 要善于进行结构化编码。所谓编码就是将 已设计好的算法用计算机语言来表示,即 根据已经细化的算法正确地写出计算机程 序。
2 算法的描述
(1)用自然语言表示 (2)用传统流程图表示 (3)用N_S流程图表示 (4)用伪代码表示
流程图表示算法
常用的符号:
起始框
数据输入输出框 处理框图
流程线
判断框
连接点
流程图表示算法三种基本结构
Visual Fortran90程序设计基础第1、2章
34_2
34_SHORT
12345678998765432_4
下划线后面的量就是种别参数,没有下划线的数都具 有缺省种别。
为了保证计算机内数的范围够用,就要通过给定种别 参数来约定。种别参数是由内在询问函数KIND送回的。提 供的最小范围是由内在函数Selected_int_kind送回的。表 示十进制幂的范围是由内在函数range送回的。
在记号内部,也不许随意地使用空格。例SIN(X)与S I N(X)不同。 记号与记号之间的空格可以随意地使用。
•
多个空格在语法上与一个空格的作用相同。
一个记号与相邻关键字、名字、常数或标号之间,应当用一个或多个空格 分开,以避免错误,同时也使结构清晰。
Fortran的数据类型(1)
什么是数据类型?
§1.2程序设计语言 填补了人与计算机交流的鸿沟
程序设计语言 有问题需要计 算机解决的人 交流的鸿沟 计算机硬件仅仅 知道0和1 有问题需要计 算机解决的人 计算机硬件仅仅 知道0和1
程序设计语言的分类
1.机器语言:二进制代码形式,可以被计算机直接执 行,不可移植 2.汇编语言:用助记符来代替机器指令,容易记忆, 不可移植 3.高级语言:接近自然语言(英语)的程序设计语言, 又称算法语言,易学、易用、易维护,可移植性好 例:FORTRAN、BASIC、PASCAL、C、LISP、 PROLOG等
• 例:selected_int_kind(6)可以返回范围在-106~+106
(不包括两端点值)的所有整数的种别值。
•为使程序具有可移植性,可将K6说明成符号常数, 作为种别常数来使用。
INTEGER, parameter::k6=selected_int_kind(6)
Fortran课件第一章
当型循环传统流程图
当型循环 N——S 图
b) 直到型循环——先执行循环体 A 块一次; P 为假 当 (F) 时,反复执行循环体 A 块;当 P 为真(T)时,退出循环 体 A 块,流程转到下面的语句。注:也可以让 P 为真时, 执行循环,P 为假时,退出循环。
三、结构化程序设计方法 结构化程序设计方法,就是结合计算机语言的特点,把算法结 构化的程序设计方法。具体说来,就是规定一些基本结构,由基 本结构来组织更复杂的算法。 结构化程序设计方法中的三种基本结构:1)顺序结构,2)选 择结构,3)循环结构。 1) 顺序结构——顺序执行 A 块和 B 块。
A B A B
例 fortest101.f90
! Free Format Demo program main writቤተ መጻሕፍቲ ባይዱ(*,*) „Hi‟ write(*,*)& „John‟ write(*,10) 10 format(„Fine!‟) stop end program main
注释:程序 fortest101.f90 中,第一行有感叹号“!,说明“! ” ” 之后且同行的文本为注释部分;第四行程序代码后面的“&” ,说 明第五行“„John‟”是它的继续行;第七行的格式语句的标号“10” 写在前面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 . . . ... 72 73 C F I X E D F O R M A T p r o g r a m m a i n w r i t e ( * , * ) „ H i „ w r i t e ( * , * ) # „ J o h n „ w r i t e ( * , 1 0 ) 1 0 f o r m a t („ f i n e ! „ ) s t o p e n d Fortran 源程序必须包含且只能包含一个主函数(program 主 函数名…end 或 program 主函数名…end program 主函数名) 。 Fortran 程序由主函数开始执行,由主函数调用其他函数,最后返 回主函数结束。
第一章FORTRAN程序设计基础.ppt
四个基本步骤:
(1)分析问题,确定数学模型或方法。 (2)设计算法,画出流程图。 (3)选择编程工具,编写程序。 (4)调试程序,分析输出结果。
问题3 什么是算法?
解决问题的方法和步骤称为算法。 问题的算法: 算法=方法+步骤
思考
求任意三角形的面积? 求一元二次方程的实根?
方法:用海伦公式 步骤: ①给出三条边a,b,c ②p=(a+b+c)除以2 ③s=p*(p-a)*(p-b)*(p-c)的开方根 ④输出s
REAL R,P,S
!定义三个实型变量
READ *,R
!输入圆的半径
P=2*3.14159*R
!计算圆的周长
S=3.14159*R*R
!计算圆的面积
PRINT *,R,P,S
!输出圆的周长和面积
END
FORTRAN 程序结构
一个FORTRAN程序由若干个程序单元 组成。程序单元可以是主程序、外部子程 序,也可以是模块,其中模块包含可被其 他程序访问的各种程序实体。
(3)计算u的值。
(4)输出u的值。
例1.2 输入十个数,要求找出其中最大的数。
方法: 设max单元用于存放最大数,先将输入
的第一个数放在max中,再将输入的第二个数 与max相比较,大者送到max,然后将第三个 数与max相比,大者放在max中,…,一直到 比完九次为止。
例1.2的算法
(1) 输入一个数,放在存储单元max中。 (2) 设置用来统计比较次数的单元i,初值置1。 (3) 若i≤9,做第(4)步,否则做第(8)步。 (4) 输入一个数,放在存储单元x中。 (5) 比较max和x中的数,若x>max,则将x的值送 给max,否则,max值不变。 (6) i增加1。 (7) 返回到第(3)步。 (8) 输出max中的数,此时max中的数就是十个数 中最大的数。
第一章FORTRAN程序设计基础精品PPT课件
FORTRAN程序设计基础
计算机是在“程序”的控制下进行自动工作 的,它解决任何实际问题都依赖于解决问题的程 序。
学习FORTRAN程序设计的目的,就是要学 会利用FORTRAN语言编写出适合自己实际需要 的程序,让计算机完成自己指定的任务。
本章将介绍:
• 程序设计的基本概念
• FORTRAN 语言的发展
1. 一般流程图
一般流程图是一种传统的算法描述方法,它 用不同的几何图形来代表不同性质的操作。例 如,用矩形框表示要进行的操作,用菱形框表 示判断,用流程线将各步操作连接起来并指示 算法的执行方向。一般流程图的主要优点是直 观性强,初学者容易掌握。缺点是对流程线的 使用没有严格限制,如毫无限制地使流程任意 转来转去,将使流程图变得毫无规律,难以阅 读。为了提高算法可读性和可维护性,必须限 制无规则的转移,使算法结构规范化。
例1.1 求 u x y x y
其中
a2 b2 ab xa2 b2 ab
这一题的算法并不难,可写成:
a b
y
a
4
b
a b
(1)从键盘输入a、b的值。
(2)如果a<b,则 xa2b2,yaa bb,
否则 xa2b2,y 4 。
(3)计算u的值。
ab
(4)输出u的值。
ab ab
例1.2 输入十个数,要求找出其中最大的数。
(3) 有效性。算法中的每一步操作必须是可执行 的。
(4) 要有数据输入。算法中操作的对象是数据, 因此应提供有关数据。
(5) 要有结果输出。算法的目的是用来解决一个 给定的问题,因此应提供输出结果,否则算法 就2没有实际意义。
1.2.2 算法的描述
算法的描述有许多方法,常用的有:自然语言、一般流 程图、N-S图等。前面例1.1~例1.3的算法是用自然语言── 汉语描述的,其优点是通俗易懂,但它不太直观,描述不够 简洁,且容易产生二义性。在实际应用中常用流程图表示算 法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自顶向下
自顶向下是指对设计的系统要有一个全面 的理解,从问题的全局入手,把一个复杂 问题分解成若干个相互独立的子问题,然 后对每个子问题再作进一步的分解,如此 重复,直到每个问题都容易解决为止。
逐步求精
逐步求精是指程序设计的过程是一个渐进 的过程,先把一个子问题用一个程序模块 来描述,再把每个模块的功能逐步分解细 化为一系列的具体步骤,以致能用某种程 序设计语言的基本控制语句来实现。逐步 求精总是和自顶向下结合使用,一般把逐 步求精看作自顶向下设计的具体体现。
例1.3 求两个正整数m和n的最大公约数。
m,n的最大公约数即是所有能同时除尽 m,n的数中的最大数。求两个正整数的最大 公约数常用展转相除法。由于m和n是两个 正整数,因此存在q,r,使m=n×q+r (q≥0,r≥0,r<n)。如果r=0,则n即是m和n的最 大公约数。否则,可以证明n和r的最大公 约数就是m和n的最大公约数。用同样的方 法求n和r的最大公约数。如此继续下去, 直到余数为0。
n
x →max
i+1 →i
输出max
1.3 程序设计方法
1.3.1 结构化程序设计
随着计算机技术的不断发展,人们对程序设 计方法的研究也在不断深入。早期程序设计的好 坏常以运行速度快、占用内存少为主要标准,然 而在计算机的运算速度大大提高,存储容量不断 扩大的情况下,程序具有良好的结构成为第一要 求,一个结构良好的程序虽然在效率上不一定最 好,但结构清晰,易于阅读和理解,便于验证其 正确性。这对传统的程序设计方法提出了严重的 挑战,从而促使了结构化程序设计方法的产生。
例1.4 用一般流程图来描述例1.1的算法。
输入a、b
y
x a2 b2
y ab a b
a<b?
n
x a2 b2 y 4
a b
u x y x y
输出u
例 1.2 的 算 法 。
输入max 1→i
i≤9? y
输入x
x>max? y
x →max
i+1→i
n n输出max源自2. 程序的三种基本结构两数最大公约数为 G,则一级算法如 图所示。
M从2变化到333
N=667-M
求G
求L
L=120*G?
Y
N
输出M、N
求最大公约数及最小公倍数
对参数A和B(A<B),使K从A开始变化,找 到一个能同时整除A与B的K,K就是最大 公约数。而求最小公倍数是:若干个B之和, 若能被A整除,则该和便是A和B的最小公 倍数。
具体要经过以下四个基本步骤:
(1)分析问题,确定数学模型或方法。 (2)设计算法,画出流程图。 (3)选择编程工具,编写程序。 (4)调试程序,分析输出结果。
1.2 算法及其描述
1.2.1 算法的概念
在日常生活中,我们做任何一件事情,都是 按照一定规则,一步一步地进行的,这些解决问 题的方法和步骤称为算法。比如工厂生产一部机 器,先把零件按一道道工序进行加工,然后,把 各种零件按一定法则组装起来,生产机器的工艺 流程就是算法。同样,我们要编写解决问题的程 序,首先应设计算法,任何一个程序都依赖于特 定的算法,有了算法,再来编写程序是很容易的 事情。
结构化程序设计
自20世纪60年代由荷兰学者E.W.Dijkstra提出 以来,经受了实践的检验,同时也在实践中不断 发展和完善,成为软件开发的重要方法,在程序 设计方法学中已占有十分重要的位置。用这种方 法设计的程序结构清晰,易于阅读和理解,便于 调试和维护。
结构化程序设计采用自顶向下、逐步求精和 模块化的分析方法。
例1.1
求
u xy x y
其中
a 2 b2
x
a
2
b2
ab ab
a b
y
a
4
b
a b
ab ab
这一题的算法并不难,可写成:
(1)从键盘输入a、b的值。
(2)如果a<b,则
, x a2 b2 , y a b ab
否则 。 x a2 b2 , y 4 ab
(3)计算u的值。
(4)输出u的值。
模块化
子模块1
主控模块
子模块2
…
…
子模块n
子模块21
子模块22
…
子模块2m
结构化程序设计的过程就是…将问题求解由抽
象逐步具体化的过程。这种方法符合人们解决复
杂问题的普遍规律,可以显著提高程序设计的质
量和效率。
例1.6 计算 s=1+(1+2!)+(1+2!+3!)+…+(1+2!+…+10!)
这是求若干项之和的问题
1.1 程序与程序设计
计算机解题的“程序”是用计算机能识 别的语言所描述的解决实际问题的方法和 步骤。计算机能直接识别的语言是机器语 言,但机器语言用二进制代码表示机器指 令,且机器指令跟具体的计算机结构有关, 程序直观性差、通用性不强。所以初学者 一般都学习利用一种高级语言来编写程序。 FORTRAN语言便是在科学计算领域应用十 分广泛的一种高级语言。
S=0 I从1~10
求F S=S+F 输出S
F=0 J从1~ I
求F1 F=F+F1
F1=1 K从1~J F1=F1*K
例1.7 两个自然数之和是667,且它们的最 小公倍数与最大公约数之比是120:1,例如 115和552,求这样的自然数。
设两个自然数分别 为M和N=667-M (2<=M<=333),两 数最小公倍数为L,
K从A变化到1
A和B能同 时被K整除?
Y
N
返回K值
K=B
当K不能被A整除时
K=K+B 返回K值
例1.8 验证哥德巴赫猜想:任何大于2的偶数 都是两个素数之和。
给出每一个偶数N,验证能否表示成两个素数之和, 如果不能,输出No,否则继续验证下一个偶数N。
接下来的的问题是如何把N分解为N1和N2(N=N1+N2) 以及如何判断N1和N2是素数。
(4)结构中无死循环。 结构化定理表明,任何一个复杂问题的程序,
都可以用以上三种基本结构组成。具有单入口单 出口性质的基本结构之间形成顺序执行关系,使 不同基本结构之间的接口关系简单,相互依赖性 少,从而呈现出清晰的结构。
3. N-S图
由于传统流程图的缺点,1973年美国学者 I.Nassi和B.Shneiderman提出了一种新的流程图工 具─N-S图。N-S图以三种基本结构作为构成算法 的基本元素,每一种基本结构用一个矩形框来表 示,而且取消了流程线,各基本结构之间保持顺 序执行关系。N-S图可以保证程序具有良好的结
构,所以N-S图又叫做结构化流程图。
S1
P
当P满足时
S2
YN
S3
S1 S2
S
例1.5 用N-S图来描述例1.1的算法。
输入a、b
Y
a<b?
N
x a2 b2
x a2 b2
y ab a b
y 4 ab
u x y x y
输出u
例1.2的算法。
输入max 1→i
当i≤9时 输入x
x>max?
y
(3) 有效性。算法中的每一步操作必须是可执行 的。
(4) 要有数据输入。算法中操作的对象是数据, 因此应提供有关数据。
(5) 要有结果输出。算法的目的是用来解决一个 给定的问题,因此应提供输出结果,否则算法 就2没有实际意义。
1.2.2 算法的描述
算法的描述有许多方法,常用的有:自 然语言、一般流程图、N-S图等。前面例 1.1~例1.3的算法是用自然语言──汉语描述 的,其优点是通俗易懂,但它不太直观, 描述不够简洁,且容易产生二义性。在实 际应用中常用流程图表示算法。
1966年Bohra和Jacopini提出了组成结构化 算法的三种基本结构,即顺序结构、选择 结构和循环结构。
顺序结构
顺序结构是最简单的一种基本结构,依次 顺序执行不同的程序块。
S1
S2
S3
选择结构
Y
N
P
选择结构根据条件
满足或不满足而去
S1
S2
执行不同的程序块。
当条件P满足时执 行A程序块,否则 执行B程序块。
循环结构
循环结构是指重复执行某 些操作,重复执行的部分称 为循环体。判断条件是否满 足,当条件P满足时反复执 行A程序块,每执行一次测 试一次P,直到P不满足为止, 跳出循环体执行它下面的基 本结构。
N P
Y S
三种基本程序结构的共同特点:
(1)只有一个入口。 (2)只有一个出口。 (3)结构中无死语句,即结构内的每一部分都有机 会被执行。
判断M是否素数的算法
根据素数的定义来判断。素数是大于1,且除了1和它本 身以外,不能被其他任何整数所整除的整数。为了判断 整数M是否为素数,一个最简单的办法用2、3、4、5、...、 M-1这些数逐个去除M,看能否除尽,如果全都除不尽, 则M是素数,否则,只要其中一个数能除尽,则M不是素 数。当M较大时,用这种方法,除的次数太多,可以有许 多改进办法,以减少除的次数,提高运行效率。其中的 一种是:用2、3、4、…、 M 去除,如果都除不尽,则M 是素数,这是因为如果小于等于 M 的数都不能除尽M, 则大于 M 的数也不能除尽M。用反证法证明。设有大 于 M 的数J能除尽M,则它的商K必小于 M ,且K能除 尽M(商为J)。这与原命题矛盾,假设不成立。
把N分解为N1和N2的方法很多,一种方法是,N1从2 变化到N/2,且N2=N-N1。为了判断N1和N2是否素数, 可以分别引入逻辑变量L1和L2,N1是素数时,L1为 真,否则为假,N2是素数时,L2为真,否则为假。二 级算法如图1.13(b)所示,其中判断N1或N2是否素数可 采用子程序技术。