Visual Basic程序设计 算法_第1页
Visual Basic程序设计 算法_第2页
Visual Basic程序设计 算法_第3页
Visual Basic程序设计 算法_第4页
Visual Basic程序设计 算法_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VisualBasic程序设计

第八讲

补充内容:算法

2011-7-101

2011-7-10>12

一、算法的概念

要利用计算机处理问题,需要编写出使计

算机按人们意愿工作的程序。而程序实质上就

是一组计算机指令。每一条指令使计算机执行

特定的操作。因此,每个学习计算机知识以及

希望利用计算机进行某项工作的人都应学习如

何进行程序设计。

为了有效地进行程序设计,应当至少具有

两方面的知识。即:

1、掌握一门高级语言的语法规则;

2、掌握解题的方法和步骤一算法。

有了正确有效的算法,可以利用任何一种

计算机高级语言编写程序。

1、什么是算法

»为解决一个问题而采用的方法和步骤称为算法。

做任何事情都有一定方法和步骤,例如,打

太极拳有描述太极拳动作的图解,它是“太极拳

的算法”。解决某一问题的计算机算法,应该是

一系列的操作步骤。

A对同一个问题,可以有不同的算法,但算法有优

劣之分,有的算法步骤少,有的算法步骤多。我

们希望得到方法正确,步骤少的算法。

A算法语言只是一种工具,为实际问题设计算法才

是程序设计的核心。

A因此,为了有效地进行解题,不仅需要保证算法

正确,还要考虑算法的质量,选择合适的算法。

2011-7-104

2、算法的特点

A有穷性。一个算法应包含有限的操作步骤,不能

出现死循环。

»确定性。算法中的每一个操作步骤都应当是确定

的,而不应当是含糊不清的。

A可以没有输入,也可以有多个输入。执行算法有

时需要从外界得到信息,这时必须有输入语句。

A有一个或多个输出。算法的目的是为了求解,

“解”一定要通过输出,才能看到结果。

A有效性。算法中的每一个步骤都应当能有效的执

行。并得到确定的结果。

2011-7-105

口算法常用的几种表示方法

A用传统流程表示算法

A用N・S结构化流程表示算法

A用伪代码表示算法

2011-7-106

二、算法常用的几种表示方法

1、用传统流程图表示算法

•传统流程图常用的符号

-起止框[]

-输入输出框//

-判断框

-处理框

-流程线

-连接点

-注释框

2011-7-107

1、用传统流程图表示算法

一传统流程图表示算法的三种结构

•顺序结构

•分支结构

2011-7-10

8

1、用传统流程图表示算法

—传统流程图表示算法的几种结构

■循环结构

-当型循环

-直到型循环

Y

终端语句的下一语句佟端语句的下一语句

当型循环||直到型循环

2011-7.

1、用传统流程图表示算法

例1用流程图表示求5!的算法

解:该问题是求从1到5的连乘积,用变量

T来存放被乘数;用变量I来存放乘数其值

从1到5,使用公式:T=T*I,用循环结构来设

计算法。变量T既存放被乘数又存放乘积。

变量T初值设为1,变量I初值为2每循

环一次,就把它乘到T上,然后变量I再增

加1,直到变量I的值大于5,循环就结束。

此时变量T的值就是所求的值。

流程图如图4“(见下页)

2011-7-1010

图4-1

用变量T存

放乘积,用

变量I代表

第二个乘

数J从2变

到5。

1、用传统流程图表示算法

例2用流程图表示判断2000年~2500年是

否闰年的算法。

解:闰年的条件是:

•能被4整除,但不能被100整除的年份都是

闰年;

•能被100整除,又能被400整除的年份是闰

年。

2011-7-1012

•由于要判断2000〜2500年哪年是否闰年,

所以该问题须用循环结构来设计。

•用变量Y表示年份,变量Y的初值赋为

2000,然后判断是否满足闰年给出的条件。

满足条件的,打印是闰年,不满足条件的,

打印非闰年。

•判断完后,变量Y加1,再继续判断,直

到变量Y的值大于2500。流程图见图4-2

(转下页)

2011-7-1013

1、用传统流程图表示算法

例3用传统流程图表示判断N是否为素数的算法。

解:所谓素数,是指除1和它本身之外,不能被其它

任何整数整除的数。例如:13是一个素数。

判断某个数N(N大于等于3)是否为素数的方

法是渭N作为被除数,用2至U(N・1)各个整数轮流

作除数,如果都不能被整除,则N为素数。

实际上,N不必被2到(N・1)的整数除,只需

被2到N/2间整数除即可,甚至只需被2到K之间

的整数除即可。流程图见图4・3

2011-7-1015

图4-3

判断N是否为素

数。可用变量I

去除N,I从2变

到而,用变量

R来存放余数!

/打印N

“不是素数

1,

16

1、用传统流程表示算法

-一传统流程的弊端

•可读性差。由于算法中允许使用流程线

让程序转来转去,从而使流程图变得毫

无规律,读起来要化很大的精力。也使

人难以理解算法的逻辑。

•算法的可靠性和可维护性差。流程线的

使用使算法变成一团乱麻,毫无规律,

使其可靠性和可维护性差,因而因此流

程图中必须限制箭头的使用。

2011-7-1017

出口出口

2011-7-1018

•循环结构

入口

出口

2011-7-10

1、用传统流程图表示算法

一三种基本结构的特点

•只有一个入口。

•只有一个出口。

•结构中每一部分都有机会被执行。

•结构中不存在“死循环”。

2011-7-1020

2、用N・S结构流程图表示算法

・流程符号:

□顺序结构

♦:♦先执行A框,

再执行B框。

口选择结构

♦:♦当条件P成立时执行A操作。

♦:♦当条件P不成立时执行B操作。

2011-7-1021

2、用N-S结构流程图表示算法

□.循环结构

♦:♦当型循环:当P1

•当P1条件成立时,

反复执行A操作A

•当P1条件不成立时,

不再执行A操作

♦:♦直到型循环:

•反复执行A操作,

A

•直到P2条件成

立时。退出循环。

直到P2

2011-7-1022

2、用N・S结构流程图表示算法

■举例

图4-4

例1、将50名学生中成

绩高于80分的学生的i=>i

学号和成绩打印出来。输入电Gi

解:N-S结构化_______i+I琦i

i>50

流程图如图4-4:

其中:

全量i用来统计学生

人数。

变量Ni,Gi用来表示

学生的学号和分数。

i>50

2011-7-10

2、用N-S结构流程图表示算法

-举例

1111

例2用N-S图表示求[———I—-—H-

的算法。23……99100

解:本例是求多项式的利,用变量sum存放累加

和,由于每项中的符号不一样,须用一个变量

sign来荐放符号;用变量term来吞放某一项。

用变量deno来存放某一项的分母。算法开始,

将变量sum和sign赋值为1,然后分别求sign

和deno得到某一项的值,接着加到和土,毒

求另一项的值,再加到和上,直到deno大于100.

流程图如图4-5所示:

2011-7-1024

1=>sum

2二》dexto

图4-5

1=>sign

用变量sum

存放和,用(-1)*sign=>sign

变量deno存

sign*(1/derto)二)term

放分母,用

Sign存放符

号用term存sum+term=>sum

放每一项。

deno+l=>deno

deno>100

sum

2011-7-10ZJ

2、用N・S结构流程图表示算法

--举例

例3用N・S结构化流程图表示判断2000

年~2500年是否闰年的算法。

(见下页图4-6)

2011-7-1026

2011-7-10

例4用N・S结构化流程图表示判断N是

否为素数的算法。(见下页图4-7)

为了使程序能符合结构化程序设计,

这里设计了一个开关W,使初值为0,若N

能被某一个整数整除,则使W值为1,否则

W值不变。最后根据W的值来确定N是否

为素数,若W值为0,则N为素数,否则N

为非素数。

2011-7-1028

图4-7

这里设计

了一个开关w,

使初值为0,

若N能被某一

个整数整除,

则使W值为1,

否则W值不变。

2011-7-10

3、用伪代码表示算法

■一什么是伪代码

伪代码是用介于自然语言和计算机

语言之间的文字和符号来描述算法。它

如同一篇文章一样,自下而上地写下来。

每一行(或几行)表示一个基本操作。

它不用图形符号,因此书写方便、格式

紧凑,易学好懂,便于修改,也便于向

计算机语言(即程序)过渡。

2011-7-1030

3、用伪代码表示算法

伪代码表示算法的几种结构

•分支选择结构

IF(条件)THEN

语句组1

ELSE

语句组2

ENDIF

•循环结构

DOWHILE(条件)

循环体

2。“后NDDO31

3、用伪代码表示算法

-一举例

例1.用伪代码设计算法判断N是否为素数。

解:判断某个数N是否为素数的方法是潸N作为被

除数,用2到仄各个整数轮流作除数,如果

都不能被整除,则N为素数。

为了使程序能符合结构化程序设计,这里设计

了一个开关W,使初值为0,若N能被某一个整

数整除,则使W值为1,否则W值不变。最后

根据W的值来确定N是否为素数,若W值为0,

则N为素数,否则N为非素数。

2011-7-10

Y<A>1设

3、用伪代码表示算法

-一举例

解:用伪代码设计算法如下:

BEGIN(算法开始)

inputN

0=>W

2=>l

DOWHILEI<4NANDW=0

N/l余数=>R

IFR=0THEN1=>W

ELSEl+1=>l(转下页)

2011-7-1033

ENDIF

ENDDO

IFW=0THENp•rintN,“是素

数”

ELSEprintN,“不是素数”

ENDIF

END(算法结束)衿

2011-7-1034

3用伪代码表示算法

一一举例

例2用伪代码设计算法用下面公式求sinx的值。

X4«-1X4/7+1

sinx=x--------1--------——+...-----------------1--------------

3!5!7!(4〃一1)!(4〃+1)!

解:

该多项式可以写成下列形式:

3572n-1

•XXX1X

sinx=x--------1--------------\~...+(—1).

3!5!7!(2〃—1)!

2011-7-1035

该问题是求多项式的和。

•用变量SUM来存放和,初值赋为X。

•用变量S来存放符号,初值赋为1。

•用变量D来存放每一项的分母,初值赋为L

•用变量T来存放每一项的分子,初值赋为1。

•用变量TERM来存放每一项。

•用变量K控制内循环次数,初值赋为1。

•用变量i控制外循环次数,初值赋为2。

算法使用了双重循环,外层循环用来求

出每一项,并把它加到和上。内循环是分别

求出每一项的分子和分母。

2011-7-1036

求第I项的程序段为:i从2变化到N

内循环是分别求出第i项的分子和分母。

WHILEK<2*i-1DO

D=D*K一D用来存放分母(2*i・1)!

T=T*X一T用来存放分子(X)⑵⑴

K=K+1

ENDDO

用下列算法求第i项的值:

S=(-1)*S

TERM=S*T/D

把求出第i项加到和中

SUM=SUM+TERM

完整的算法如下页所示:

2011-7-1037

解:用伪代码设计算法如下:

法一.BEGIN(算法开始)

输入N,X

X=>SUM

1=>S

2=>i

WHILEi<NDO

D=1

T=1

K=1

WHILEK<2*i-1DO

D=D*K

T=T*X

K=K+1

ENDDO

2011-7-1038

S=(-1)*S

TERM=S*T/D

SUM=SUM+TERM

1=1+1

ENDDO

PRINTSUM

END(算法结束)

2011-7-10

法二:

BEGIN(算法开始)/-----------------------\

输入X,N当当2时,D=2*3

X=>SUM当1=4时,D=4*5

X=>TERM当1=6时,0=6*7

T=X**2当1=8时,D=8*9

i=2

D=1

DOWHILEi<=2*N-1

D=i*(i+1)

TERM=TREM*T/D

TERM=TERM*(-1)

SUM=SUM+TERM

i=i+2

ENDDO

PRINTSUM

END(算法结束)

2011-7-10

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论