第5章 程序设计基础.docx

上传人:b****1 文档编号:2404344 上传时间:2022-10-29 格式:DOCX 页数:17 大小:55.51KB
下载 相关 举报
第5章 程序设计基础.docx_第1页
第1页 / 共17页
第5章 程序设计基础.docx_第2页
第2页 / 共17页
第5章 程序设计基础.docx_第3页
第3页 / 共17页
第5章 程序设计基础.docx_第4页
第4页 / 共17页
第5章 程序设计基础.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

第5章 程序设计基础.docx

《第5章 程序设计基础.docx》由会员分享,可在线阅读,更多相关《第5章 程序设计基础.docx(17页珍藏版)》请在冰豆网上搜索。

第5章 程序设计基础.docx

第5章程序设计基础

第五章程序设计基础

5.1程序设计概述

程序设计是利用系统所提供的设计工具,按照程序设计语言的规范描述解决问题的算法并进行程序编写的过程。

这个过程包括分析,设计,编码,测试和排错等不同阶段。

程序设计的方法主要有两类:

⏹结构化程序设计(structuredprogramming,SP)

⏹面向对象的程序设计(object-orientedprogramming,OOP)

面向对象的程序设计是通过对类、子类和对象等的设计来体现的,类是面向对象程序设计技术的核心。

类:

定义了对象特征以及对象外观和行为的模板,类有如下特征:

◆封装性:

隐藏了类中对象的内部数据或操作细节,只看到外表信息。

◆继承性:

任何类都可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了新的功能。

体现了面向对象设计方法的共享机制。

◆多态性:

相同的操作可作用于多种类型的对象上,并获得不同的结果。

◆抽象性:

提取一个类或对象与众不同的特征,而不对该类或对象的所有信息进行处理。

 

5.2结构化程序设计

结构化程序设计:

是指根据不同的情况和条件,控制程序去执行相应操作的语句序列

程序控制结构主要有:

顺序结构,分支结构,循环结构和子程序,任何一个程序可以含有多种程序结构

5.2.1创建,修改与运行程序

1.创建和修改程序文件

VFP程序是包含一系列命令的文本文件,扩展名为.Prg

创建程序文件:

⑴.通过菜单创建:

⑵.通过命令:

ModifyCommand程序名

2.运行程序

(1)在项目管理器/常用工具栏运行

(2)Do程序名with参数

注意点:

在VFP中,一旦运行程序文件,系统会自动地对程序文件(.prg)进行编译,生成“伪编译”程序(.fxp),执行程序时,系统实质上是执行.FXP文件

 

5.2.2顺序结构

顺序结构:

是指程序运行时按照语句排列的先后顺序,一条一条地依次执行。

举例1:

**计算园面积**

p=3.1415926&&园周率

r=10&&园的半径

s=p*r^2

l=2*p*r

?

'园面积为'+alltrim(str(s,10,2))

?

'园周长为'+alltrim(str(l,10,2))

5.2.3分支结构

所谓分支结构:

是指程序运行过程中,根据条件执行不同的操作。

两种实现分支语句:

IFELSEENDIF

DOCASEENDCASE

条件语句:

情况语句:

IF条件1

命令组1

[ELSE

命令组2]

ENDIF

DOCASE

CASE条件1

命令组1

CASE条件2

命令组2

[OTHERWISE

其它命令组]

ENDCASE

举例2:

***根据X的正负情况决定Y的值(1,-1)

ifx>0

y=1

else

y=-1

endif

?

y

 

举例3:

***求解一元二次方程的根(三个参数分别对应于一元二次方程的系数,parameters语句用于接收程序的参数)

Parametersa,b,c

Ifa=0

=messagebox(“二次项目系数不能为零”,48)

Return&&该语句的作用是结束当前程序的执行并返回

Endif

Delta=b*b-4*a*c

Ifdelta>0

?

”方程有两个不等的实数根:

?

?

(-b+sqrt(delta))/(2*a)

?

?

(-b-sqrt(delta))/(2*a)

Else

Ifdelta=0

?

”方程有两个相等的实数根:

?

?

–b/2*a

Else

?

”方程有两个复根:

Real_part=–b/2*a

Img_part=sqrt(-delta)/(2*a)

?

alltrim(str(real_part,6,2))+”+”+allt(str(img_part,6,2))+”i”

?

alltrim(str(real_part,6,2))+”-”+allt(str(img_part,6,2))+”i”

Endif

Endif

举例4:

***根据给定的成绩输出成绩所在的等级

X=82

Docase

Casex>=90

?

”优秀”

Casex>=80

?

”良好”

Casex>=70

?

”中等”

Casex>=60

?

”及格”

Casex<60

?

”不及格”

Endcase

 

5.2.4循环结构

循环就是使得一组语句重复执行若干次,可以预先指定要循环的次数,也可以根据某个条件控制循环,有三种循环结构:

FORENDFOR;

DOWHILEENDDO;

SCANENDSCAN;

1.FORENDFOR循环:

若预先知道循环的次数

FOR循环(预知循环次数)

FORnvar=初值TO终值[STEP步长]

循环体语句

ENDFOR|NEXT

nvar是用来作为计数器使用的循环变量,计数器有初值和终值

在循环体中可以包含LOOP和EXIT语句:

LOOP语句:

是短路语句,用于将控制直接返回给FOR语句,即忽略LOOP后的循环体语句,以进入新的一次循环;

EXIT语句:

是退出语句,用于将控制传递给ENDFOR语句后的第一条语句,即跳出语句;

FOR循环的执行过程:

(1)将初值赋给循环变量nvar;

(2)判断循环变量的值是否超出终值,若超出终值,则结束循环,否则执行循环体;

(3)计算循环变量的值:

循环变量=循环变量+步长;

(4)转到

(2)步骤执行。

举例5:

求1到100的所有整数的和(所有奇数,所有偶数之和)

n=100

s=0

forI=1tonstep1

s=s+I

endfor

?

alltrim(str(n))+”以内的整数和s=”,s

举例6:

求100的阶乘(1*2*3*……*99*100)

p=1

forI=1ton

p=p*I

endfor

?

alltrim(str(n))+”以内的阶乘p=”,p

举例7:

将英文字母组成的字符串加密(如果大写则用其后面的第四个代替原子母,如果小写则用其后面的第二个代替原子母)

M=space(0)

Cstring=”China”

Fori=1tolen(cstring)

Nc=asc(substr(cstring,I,1))

Ifnc>64andnc<91

M=m+chr(nc+4)

Else

M=m+chr(nc+2)

Endif

Endfor

Waitwindowscstring+”字符加密后为:

”+m

举例8:

求1—100之间非3的倍数的所有奇数之和。

s=0

forI=1to100step2

ifmod(I,3)=0

loop

endif

s=s+I

endfor

?

”1-100之间非3的倍数的所有奇数之和为”,s

2.DOWHILEENDDO循环:

如果预先不能确定循环的次数,而要根据某一条件决定是否结束循环,则可用DOWHILE循环

DOWHILE循环

DOWHILE条件1

循环体语句

ENDDO

举例9.将由ASCII码字符组成的字符串进行反序显示,任意字符呢?

store“abcdefg”toc,cc

p=space(0)

dowhilelen(c)>0

p=left(c,1)+p

c=substr(c,2)

enddo

?

cc+”的反序为:

”+p

举例10.将由任意字符(包括汉字)组成的字符串进行反序显示

store“abcdefg汉语”toc,cc

p=space(0)

dowhilelen(c)>0

x=asc(left(c,1))

ifx>127

I=2

Else

I=1

endif

p=left(c,i)+p

ifi=1

c=substr(c,2)

else

c=substr(c,3)

endif

enddo

?

cc+”的反序为:

”+p

举例11.程序功能:

计算数列1,1/2,1/3,1/4……,1/n之和,当某一项的值与前一项的值之差小于0.001时停止计算。

CLEAR

n=1

m=1

nSum=0

DOWHILE.T.

nSum=nSum+1/n

m=1/n

n=n+1

IFm-1/n<0.001

exit

ENDIF

ENDDO

?

"该数列的和为:

",nSum

3.SCANENDSCAN循环:

仅用于处理表的记录,若对表中所有记录执行某一操作,可以用该语句

SCAN循环语句

SCAN[scope][FOR条件]

循环体语句

ENDSCAN

举例12.统计籍贯为江苏南京的学生人数

usexs

s=0

scan

ifxs.jg=”江苏南京”

s=s+1

endif

endscan

?

”籍贯为江苏南京的学生人数”,s

 

5.2.5过程与自定义函数

用户可以将经常执行的具有某种功能的一段代码独立出来,将其作为一个过程或用户自定义函数。

如果需要多次用到该功能,就不必多次编写代码,而只需调用这个过程或自定义函数。

过程通常用于实现某一处理功能,而函数用于实现某一处理功能并且有返回值。

只是定义上有点区别,在可以实现的功能和调用方法上没有区别

子程序的形式可以是一个程序文件,也可以是一个过程或自定义函数。

1.过程与自定义函数的定义

过程定义语法:

PROCEDURE过程名

Parameters参数列表

命令组

[return[表达式]]

ENDPROC

函数定义语法:

FUNCTION函数名

Parameters参数列表

命令组

[return[表达式]]

ENDFUNC

说明:

1。

Parameters用来传递参数

2.Return用于指定过程或自定义函数的返回值,缺省时,返回值为真(.T.)

2.过程与函数的创建方法

方法一:

在命令窗口中输入:

MODIFYCOMMAND程序名

方法二:

单击文件菜单→新建→程序→新文件→在编辑窗口中编辑程序→完成后关闭→给出合适的程序名及保存位置。

程序的注释:

方法1:

*|NOTE<注释内容>可出现在程序中的任何地方

方法2:

&&<注释内容>一般用于命令的尾部

给程序加注释的目的是为了提高程序的可读性。

用户创建的过程或自定义函数可以存储在数据库的存储过程中,或以一个程序文件保存一个或多个过程或自定义函数,如果过程或自定义函数存在于单独的程序文件中,该程序文件称为过程文件。

3.过程与自定义函数的调用

方法一:

用DO命令

do过程名[in程序文件名][with实际参数列表]

方法二:

用函数的调用方法。

Functionname(实际参数列表)

方法三:

利用SETPROCEDURETO命令打开程序文件。

SETPROCEDURETOprogramname1

doprocedurename[withparameterlist]

举例13以下自定义函数ntoc()功能是将0-9之间的阿拉伯数字转换为一个“零-九”之间的中文数字。

functionntoc

parametersn

localcstring

cstring=”零一二三四五六七八九”

returnsubstr(cstring,n*2+1,2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1