重庆专升本计算机VF程序设计
2008年重庆市普通高校“专升本”大学计算机复习资料 VFO程序设计复习
1程序设计概述
一、程序的概念
概念:具有一定功能的计算机能执行的指令的集合。
例1:显示表XSDA可编写成如下命令序
SET DEFA TO F:\表
USE XSDA
LIST
CLOSE ALL
例2:求a=3,b=2,c=5 求a+b-c=?
程序test.prg 代码如下:
a=3
b=2
c=5
x=a+b-c
?x
二、常见的程序设计方法
1、 结构化程序设计(模块化)
结构化程序设计是一个面向过程的概念。把一个实际问题分为两部分,即数据和过程。通过动态的程序执行过程来对静态的数据进行处理,得出正确的结果。由VFP命令和程序设计命令的组合,需编制和调试;
2、 面向对象的程序设计
3、结构化程序设计它是面向过程程序设计的另一种描述,面向过程程序设计有如下特点: ?整个程序分为若干个模块,模块之间相衔接,且相对独立。?第个模块只有一个入口和一个出口。?第个模块都能单独执行,且在有限时间内执行完。?采用自顶向下、逐步求精的方法。
三、程序三大基本结构
1、顺序结构:执行是按命令出现的先后顺序执行。
2、分支结构:按给定的条件成立与否来决定程序起向,分单向选择分支、双向选择分支和多路分支。有以下两种
IF 语句 DO CASE
ENDIF ENDCASE
3、循环结构:程序的执行发生了自下而上的往复,某一程序段将重复执行。 有以下三种 Do While For SCAN
ENDDO ENDFOR ENDSCAN
四、算法和流程图
算法:解决某一问题的方法与步骤。见教材例。
流程图:算法的描述,除用自然语言描述外,计算机领域常用流程图(ANSI图和N,S图)描述。见教材例。
例如:乐山到成都怎么去,
21、 解一元二次方程的算法。Ax+bx+c=0, 求x
2、 求出1-100之间的质数。 X / => 2 到 SQRT(X )
- 1 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
2程序的建立和执行 一、程序的扩展名:PRG
实质:文本文件(ASCII编码)执行时,会产生编译文件FXP后让计算机执行。
二、程序文件的建立和编辑
1、命令方式:
MODI COMM 程序名.PRG (.PRG可省)
2、菜单方式;
文件 => 新建 => 程序
3、项目管理器中建立的方法:
建立项目管理器 => 新建程序
4、其他方法:
其它可编辑文本的软件: 记事本\写字板\WORD\其它程序编辑器 注意: 希望编写程序之前事先设置好默认目录(set defa to ……)然后我们编写的程序就会
自动存储在那个目录中。
例如:set defa to d:\ks modi comm Test (相当于是:modi comm D:\ks\test.prg)
三、 程序的执行
1、命令方式
命令格式:DO [盘符][路径]程序名
2、菜单方式:
“程序”菜单->“运行”命令
在“运行”窗口中输入被运行的程序文件名,即可运行程序。 四、VFP程序的分类:数学类程序、涉及到表操作的程序 如果本程序是涉及到表操作的程序,那么:
1、在程序开始部分可以先加语句CLEAR 和 CLOSE ALL 2、程序最后可以使用命令CLOSE ALL
3、然后使用RETURN或CANCEL或QUIT
例:找出并显示所有三好生
CLEAR
CLOSE ALL
USE 学生
LOCATE FOR 三好生
DO WHILE NOT EOF()
DISP
CONTINUE
ENDDO
CLOSE ALL
RETUREN
3顺序程序设计与常用语句 一、程序设计中的常用语句
1、输入命令
(1)赋值命令
- 2 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
命令一:
STORE <表达式> TO <内存变量>
命令二:
<内存变量>= <表达式>
(2)交互式输入命令(注意:输入数据是在程序执行的时候 ) INPUT [提示信息] TO <内存变量>ACCEPT [提示信息] TO <内存变量>WAIT [提
示信息] [TO <内存变量>] [TIMEOUT <等待时间> 说明: ?提示信息是C型, 它会在屏幕上原样输出 . ?WAIT命令的功能:暂停程序执行,显示提示信息等待用户按键。 Wait命令中 输入的只
能是一个字符(C型)。
? Input 适用于全部类型内存变量,输入时需要加定界符 ? Accept只适用于C型,并且C型不加定界符 注意:Input和accept在编写程序时语句都一样,只是执行程序(do)时,主屏幕上
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
输
入的类型和格式不同。
例1:输入a、b、c的值,对2ax+b=c 求 x的值。 Clear
Input “现在计算2ax+b=c,请输入a的值:” to a Input “请输入b的值:” to b
Input “请输入c的值:” to c
x=(c-b)/(2*a)
?‟x的值为:‟,x &&比较使用? ‟x的值为:‟+str(x,3)有何区别 return
例2、查找学生.dbf中的指定记录
clear
close all
use 学生
list
accept “请输入您想查找的姓名: ” to xm
Locate for 姓名=XM &&或命令 SEEK XM if found()
DISP
else
?‟对不起,没有找到此人‟
endif
list
close all
Return
思考:如果accept换成input,输入的时候该怎么输入, 例3、删除学生.dbf中的指定记录
clear
close all
use 学生
- 3 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
list
input “请输入您想删除的记录号: ” to x
dele reco x
wait “你想彻底删除这条记录吗,(y/n)” to ask
if ask=‟Y‟ or ask=‟y‟
pack
endif
list
close all
注意区分交换方式和程序方式:有的命令可以在两种状态下执行(例如:刚才的输入命令),
但有些命令只能在程序方式下执行(例如:循环语句和分支语句) (3)格式输入命令
格式一:
@行,列 say 提示信息
格式二:
@行,列 say 提示信息 get 变量
…… READ
格式三:
@行,列 say 提示信息 get 变量 default常量
功能:在屏幕指定的坐标位置上显示提示信息,然后通过READ命令激活GET子句的变量值。
说明:?GET后的变量可以是内存变量或当前打开的数据文件中的字段变量,若是内存变量,
应在执行该命令前对内存变量赋值,否则就必须使用default
参数
转速和进给参数表a氧化沟运行参数高温蒸汽处理医疗废物pid参数自整定算法口腔医院集中消毒供应
赋初值。 ?输入的值类型应该与初值类型相同。?READ命令与GET命令必须配合使用。多个GET
命令可以只用一个READ命令配合。如果没有read则表示只显示
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
,不输入值。 例1:编写程序完成在学生.DBF中追加记录
CLEAR
USE 学生
APPEND BLANK
@5,20 SAY “学号” GET 学号
@5,40 SAY “姓名” GET 姓名
@7,20 SAY “性别” GET 性别
@7,40 SAY “出生年月” GET 出生年月
@9,20 SAY “入校总分” GET 入校总分
@9,40 SAY “三好生” GET 三好生
READ
CLEAR
LIST
CLOSE ALL
RETURN
例2:编程求长方形的面积。
CLEAR
X=0 &&X为内存变量,赋初值
Y=0
- 4 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料 @1,5 SAY “计算长方形的面积”
@2,5 SAY “输入长方形的长:” GET X &&第2行5列显示提示信息并等待输入 @3,5 SAY “输入长方形的宽:” GET Y &&第3行5列显示提示信息并等待输入 READ &&从键盘输入X,Y的值
S=X*Y &&计算长方形的面积
? “长方形的面积:”,S &&显示长方形的面积
CANCEL
思考题1:如将上述例1程序改为按照指定学号来修改记录应该怎样做?(答案见课件后)3、输出命令
?:非格式输出命令
?和,,
?:格式化输出命令
@行,列 say 表达式
说明:行和列都可以是表达式,常常可以使用函数ROW( ) 和 COL( ) ROW( )表示返回当前行的行号 COL( )表示返回当前列的列号例1:
N=1
CH=“VF程序设计”
@N,26 SAY SPACE(60)
@N+1,26 SAY CH
例2:循环输入值
clear
dime xh(10)
store 0 to xh
@10,10 say '请输入数字:' get xh(1)
i=2
do while i<=10
@row()+1,10 say '请输入数字:' get xh(i)
i=i+1
enddo
read
list memo like xh
4、其他程序运行命令
(1)终止程序执行命令
CANCEL 、QUIT 和 RETURN
QUIT: 退出程序运行并且退出 Visual Foxpro
CANCEL : 退出程序运行
RETURN: 返回上级程序调用点,如果是主程序就表示退出程序。主程序可缺省此命令返回(结束),即默认使用了return
注意:上述命令执行完后都会自动clear memory。但是如果有数据库和表打开不会自动关闭,所以使用数据库和表后在程序结束时我们常常需要加命令: close all (2)清屏命令
CLEAR
(3)注释命令( NOTE 、* 和 &&)
注释的含义:程序员对程序语句功能的说明,执行程序的时候不执行注释中的内容,注释只
- 5 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
起到一个对语句说明的目的。一般复杂程序中应有30%以上的注释。
(4)TEXT语句:原样输出(参考
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
143例4.15) (5)系统设置命令
set … on/off 或者是 set … to
1、设置会话状态
SET TALK ON/OFF
2、设置跟踪状态
SET ECHO ON/OFF
3、设置打印状态
SET PRINTER ON/OFF 4、设置定向输出状态
SET DEVICE TO SCREEN 5、设置精确比较状态
SET EXACT TO ON/OFF 6、设置日期格式
SET DATE ANSI
7、色绘制系统提供的保护状态
SET SAFETY ON/OFF 8、设置删除记录标记状态(掌握)
SET DELETED ON/OFF 功能:屏蔽或处理有删除标记的记录 说明:在命令格式中选择ON时,各命令当不对有删除标记的记录进行操作,但索引除外。
系统默认值为OFF
思考题1答案:
CLEAR
USE 学生
ACCEPT "请输入需修改记录的学号:" TO NUM
LOCATE FOR 学号=NUM
@5,20 SAY "学号" GET 学号
@5,40 SAY "姓名" GET 姓名
@7,20 SAY "性别" GET 性别
@7,40 SAY "出生年月" GET 出生年月 @9,20 SAY "入校总分" GET 入校总分 @9,40 SAY "三好生" GET 三好生 READ
CLEAR
LIST
CLOSE ALL
RETURN
4顺序结构和分支结构
一、顺序结构
2例1:求圆的面积(公式S=ΠR)
CLEAR
- 6 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
INPUT “请输入半径R的值:” TO R
S=3.1416*R*R
,”圆面积为:” ,S
CANCEL
二、分支结构(选择结构)
1、IF语句
(1)单向选择: 双向选择: IF 条件 IF 条件
执行语句 执行语句 ENDIF ELSE
执行语句
ENDIF
(2)单向选择分支
例如:求任意一个数值的绝对值
CLEAR
SET TALK OFF
INPUT “请输入数值:” TO N
IF N<0
N= - N
ENDIF
,”|N|的绝对值为:”,N
CANCEL
(3)双向选择分支
例1:用户输入数据表文件名,判断它存在否,如果存在则打开数据表文件并显示表中的全部
记录
clear
accept '请输入数据库文件名:' to heng &&想想为什么不用input if file(heng+„.dbf‟) &&了解file()的使用方法
use &heng &&想想这儿为什么要用&代换
list
else
?'sorry,文件不存在:( '
endif
close all &&关闭所有打开的表,如果不涉及多工作区,可以只使用use
例2:判断输入的整数为奇数还是偶数。
CLEAR
INPUT “请输入整数:” TO N
IF N%2=0 &&该表达式还可用 MOD(N,2)=0来表示
?STR(N,4)+”是偶数”
ELSE
?STR(N,4)+”是奇数”ENDIF
CANCEL
(4) IF语句的嵌套
例如:将用户输入的小写英文字母转化成大写
- 7 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
CLEAR
ACCEPT “请输入1个字母:” TO STR1
IF STR1>=‟a‟ AND STR1<=‟z‟
STR1=UPPER(STR1)
?SPACE(40)+STR1
ELSE
IF STR1>=‟A‟ AND STR1<=‟Z‟
?SPACE(40)+STR1
ELSE
?‟您输入的不是英文字母‟
ENDIF
ENDIF
2、多向选择
DO CASE
CASE <条件表达式1>
<命令序列1>
CASE <条件表达式2>
<命令序列2>
……
OTHERWISE &&其它情况
<命令序列>
ENDCASE
说明:OTHERWISE 可以没有.
例1:比较A、B的大小
CLEAR
INPUT “请输入A的值:” TO A
INPUT “请输入B的值:” TO B
DO CASE
CASE A>B
?”A 大于B”
CASE A
50 AND X<=100
Y=10
- 8 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
CASE X>100 AND X<=200
Y=20
CASE X>200 AND X<=500
Y=40
OTHERWISE
Y=50
ENDCASE
?‟对不起, 您需要付款: ’,Y,‟元人民币‟
5循环程序设计
1、条件循环
格式一:DO WHILE 条件
命令序列
ENDDO
格式二: DO WHILE 条件
语句序列
[LOOP]
语句序列
[EXIT]
语句序列
ENDDO
要退出循环,需要条件为假的时候(条件=.F.时)
说明:(1) LOOP和EXIT 命令一般放在IF条件中,也可以出现在循环体内的任何位置。若执行循环体时遇到LOOP命令,则直接返回执行DO命令,测试条件以决定是否继续循环。若遇到EXIT命令,则不执行下面的命令序列,直接跳出循环,执行ENDDO后面的命令。 (2)条件表达式的值确定了循环是否继续,当条件表达式的值始终为真(即永真循环),则应使用EXIT命令来控制循环结束
例1:将字符“欢迎进入乐山师范学院”从屏幕的顶部移至底部 CLEAR
CH=“欢迎进入乐山师范学院”N=1
DO WHILE N<=23
@N,26 SAY SPACE(60)
@N+1,26 SAY CH
T=INKEY(0.2) &&等待0.2秒
N=N+1
ENDDO
RETURN
注:INKEY ([<数值表达式>])
功能:等待用户按键或鼠标输入,等待时间由数值表达式确定(单位为秒)返回由按键而产生的一个整数值.
例2:实现显示出全部的男生
CLEAR
CLOSE ALL
USE 学生
- 9 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料 DO WHILE NOT EOF()
IF 性别=‟男‟
DISP
ENDIF
SKIP
ENDDO
CLOSE ALL
LOOP循环实例
例1:
I=0
DO WHILE I<10
I=I+1
IF INT(I/2)=I/2
LOOP
ENDIF
?”*”ENDDO
例2:
CLOSE ALL
CLEAR
USE 学生
DO WHILE NOT EOF()
DISP
WAIT „你想修改本记录吗,(Y/N)‟ TO X
IF X=‟N‟ OR X=„n‟
SKIP
LOOP
ENDIF
EDIT
SKIP
ENDDO
CLOSE ALL
程序执行到WAIT语句后,如果用户输入的是‟N‟或‟n‟,那么就LOOP(也就跳过本次循环,不执行后面的EDIT)
永真循环
DO WHILE .T. DO WHILE .T.
IF Y>0 IF Y>0
EXIT QUIT ENDIF ENDIF ENDDO ENDDO 如果Y>0,则退出本循环 如果Y>0,则退出程序,退出VF DO WHILE .T. DO WHILE .T.
IF Y>0 IF Y>0
RETURN CANCEL ENDIF ENDIF
- 10 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料 ENDDO ENDDO 如果Y>0,则退出程序返回上层 如果Y>0,则退出程序,回到VF中上述语句LOOP、EXIT、QUIT、RETURN、CANCEL等也可以在后面讲的其它循环语句中使用。 例1:通过键盘输入三角形的边长,若边长正确,立即在屏幕上显示三角形的面积,若边长不正确,重新输入边长,若输入的边长中任意一边为0则程序立即结束。
CLEAR
?”现在计算三角型的面积,如果想退出程序请输入0。”
DO WHILE .T.
INPUT “请输入边长a:” TO A
INPUT “请输入边长b:” TO B
INPUT “请输入边长c:” TO C
IF A=0 OR B=0 OR C=0
?‟结束‟
RETURN
ENDIF
IF A+B<=C OR A+C<=B OR B+C<=A
?‟错误的三角型,请重新输入~‟ LOOP
ENDIF
S=(A+B+C)/2
AREA=SQRT(S*(S-A)*(S-B)*(S-C))
?‟该三角型的面积是:‟,area
ENDDO
例2:有下列表:book(书名 C(20),作者 C(8),出版日期 D,内容简介 M)编写程序:查询关于 foxpro 的图书.
USE BOOK
LOCATE FOR „foxpro‟ $ 书名
IF ! FOUND()
?‟没有关于foxpro的图书‟
ELSE
` DO WHILE ! EOF()
CLEAR
?书名,作者,出版日期
?内容介绍
WAIT “是否继续查找?(Y/N)” TO M
IF M$‟nN‟
EXIT
ENDIF
CONTINUE
ENDDO
?”全部显示完成”
ENDIF
2、计数循环
FOR 循环变量=初值 TO 终值 [STEP 步长]
语句序列
- 11 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
ENDFOR
说明: (1)当省略步长值时,系统默认步长值为1.当初值小于终止值时,步长值为正值,当初值大
于终值时,步长值为负值.步长值不能为0,否则会造成死循环.
(2)可在循环体内嵌入[LOOP]和[EXIT]命令,功能和用法与条件循环中该命令的用法相同.
例1:求1~100的和
SUM=0
FOR n=1 TO 100
SUM=SUM+n
ENDFOR
?‟1~100的总和为:‟,SUM
使用DO WHILE 实现:
SUM=0
n=1
DO WHILE n<=100
SUM=SUM+n
n=n+1
ENDDO
?‟1~100的总和为:‟,SUM
FOR和IF语句嵌套
例2:求1到N之间能被3整除的数的和
CLEAR
M=0
INPUT “请输入N的值:” TO N
FOR X=1 TO N
IF MOD(X,3)=0
M=M+X
ENDIF
ENFOR
,”M的值为:”,M
RETURN
例3: 找出2-100之间所有的质数算法研究: FOR I=1 TO 100
如果此数是质数
显示这个数
ENDFOR
判断一个数是不是质数,应该看它是否能被其它数整除. 当一个数I , 从I从2到 SQRT(X) 都没有数能被整除,那么它就是
FOR J=2 TO INT(SQRT(I))
IF I MOD J=0
EXIT
ENDIF
ENDFOR
IF J> INT(SQRT(I)) ?I,‟是质数‟
- 12 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
ENDIF
特别: 2是个质数.
综上所叙述:
完成程序为:
CLEAR
?‟2是质数‟
FOR I=3 TO 10
FOR J=2 TO INT(SQRT(I))
IF MOD(I,J)=0
EXIT
ENDIF
ENDFOR
IF J> INT(SQRT(I))
?I,‟是质数‟
ENDIF
ENDFOR
3、库文件扫描循环
SCAN 范围 FOR/WHILE 条件
语句序列
ENDSCAN
例1:查询所有入校总分在570以上的人. CLEAR
CLOSE ALL
USE 学生
SCAN FOR 入校总分>570
DISP
ENDSCAN
CLOSE ALL
例2:用户可以循环输入并查找入校总分,直到输入的是负数就退出.
CLEAR
CLOSE ALL
USE 学生
INPUT “请输入你要查找的入校总分,输入负数则退出: ” TO X DO WHILE X>=0
SCAN FOR 入校总分=X
DISP
ENDSCAN
INPUT “请输入你要查找的入校总分: ” TO X ENDDO
例3:编写程序,对于学生.dbf能够在程序末尾循环插入新记录 (掌握)
CLEAR
CLOSE ALL
USE 学生
DO WHILE .T.
- 13 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
APPE BLANK
@5,20 SAY '学号' GET 学号
@5,40 SAY '姓名' GET 姓名
@7,20 SAY '性别' GET 性别
@7,30 SAY '出生年月' GET 出生年月
@9,20 SAY '入校总分' GET 入校总分
READ
WAIT '你想继续插入新记录吗?(Y/N) : ' TO X
IF X='N' OR X='n'
EXIT
ENDIF
CLEAR
ENDDO
CLEAR
LIST
CLOSE ALL
例4:编写程序,该程序能够顺序修改表学生.DBF中的所有数据。(掌握) (要求:必须
使用 @行,列 say ... get .. 进行数据修改) CLEAR
CLOSE ALL
USE 学生
DO WHILE .T.
if eof()
exit
endif
@5,20 SAY '学号' GET 学号
@5,40 SAY '姓名' GET 姓名
@7,20 SAY '性别' GET 性别
@7,30 SAY '出生年月' GET 出生年月
@9,20 SAY '入校总分' GET 入校总分
READ
WAIT '你想继续修改记录吗?(Y/N) : ' TO X
IF X='N' OR X='n'
EXIT
ENDIF
CLEAR
SKIP
ENDDO
CLEAR
LIST
CLOSE ALL
4、多重循环
例1:输入n的值,求1+1/2!+1/3!+1/4!+….+1/n! ( 阶乘 n!=1*2*3*4....*(n-1)*n )
CLEAR
- 14 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
SUM=0
MUL=1
INPUT "请输入n的值: " TO N FOR i=1 TO N
FOR j=1 TO i
MUL=MUL*J
ENDFOR
SUM= SUM+1/MUL ENDFOR
?'求得的总和为: ',SUM 例2:打印九九表
方法一:CLEAR
FOR A=1 T0 9
FOR B=1 TO A
T=A*B
??STR(B,1)+“*”+STR(A,1)+“=”+STR(T,2)+“ ”
ENDFOR
? ” “
ENDFOR
RETURN
方法二:CLEAR
@1,1 say "*"
for a=1 to 9
@a+1,1say str(a,1) next
for b=1 to 9
@1,b*3 say str(b,1)
for c=1 to b
p=c*b
@b+1,c*3 say str(p,2)
next
next
cancel
例3:图形打印
CLEAR
for a=1 to 5
for c=1 to a 内外循 ??“*" 循环 next 环
?
next
Cancel
说明:打印图形时,一般外循环控制打印行数,内循环控制每一行打印图形个数。
- 15 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
6数组的应用
一、 数组的定义
DIMENTION 数组名(数值表达式1,[数组表达式2...])
定义后单元默认值为.F.
二、一维数组
1、定义一个一维数组:
dime a(10) ---定义一个10数组,且所有单元默认值为.F.
2、赋值:
例如:
a=''
a(1)=20
a(3)={^2002/09/23} a(7)=.T.
....
循环赋值:
dime a(10)
i=1
do while i<=10
input '请输入数:' to a(i)
i=i+1
enddo
或者是:
for i=1 to 10
input '请输入数:' to a(i) Endfor
3、显示值:
for i=1 to 10
?a(i)
endfor
使用do while大家思考
方法2:list memo like a 二、二维数组
例如:dime s(5,4)
1、赋值:
例如: s=0
s(3,4)=.t.
s(12)=„AYA' && 相当于S(3,4)=„AYA' 2、循环赋值
for i=1 to 5
for j=1 to 4
input '输入值:' to a(i,j)
endfor
endfor
- 16 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
3、显示值:
for i=1 to 5
for j=1 to 4
??a(i,j)+space(2)
endfor
endfor
三、举例
输入10 个数,将它们按照从大到小的顺序排列 算法研究:
方法1:连续的两两比较
方法2:将每个数和最后一个数比较
程序
clear
dime a(10)
?'输入10个数: '
for i=1 to 10
input "请输入: " to a(i) endfor
for i=1 to 9
for j=1 to i
if a(j)>a(i+1)
t=a(i+1)
a(i+1)=a(j)
a(j)=t
endif
endfor
endfor
list memo like a
例2:将1、2、3、…10顺序输入一维数组,实现顺序输出和逆序输出。DIME A(10)
FOR I=1 TO 10
A(I)=I
ENDFOR
FOR I=1 TO 10
,A(I)
ENDFOR
FOR J=10 TO 1 STEP –1
,A(J)
ENDFOR
例3:排序问题 (要求:不一定能编写,但是重点地方能填空,基本方法要能理解)
输入5 个数,将它们按照从大到小的顺序排列 算法: (软件技术支持 第263页)
稳定的算法:
插入法排序(将一个数据插入到已经排列好的序列中)
冒泡排序(比较每次产生最大数)
归并排序(两两合并 [ ] [ ] [ ] [ ] )
- 17 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
不稳定的算法:(相同数据位置可能交换)
选择排序(通过交换位置,最小的放在第一,次小的第二……) 实现算法:
冒泡排序
n个数要比较n-1趟
(2) 每趟要比较的次数为 : n-趟数
(3)每次比较: 如果当前数 a(j)大于后一个数 a(j+1) 那么就交换,否则不交换
clear dime a(5)
?'输入5个数: '
for i=1 to 5
input "请输入: " to a(i)
endfor
for i=1 to 4 && 外循环是行(趟数), 内循环是列(比较次数)
for j=1 to 5-I
if a(j)>a(j+1)
t=a(j+1)
a(j+1)=a(j)
a(j)=t
endif
endfor
endfor
FOR I=1 TO 5
?A(I)
ENDFOR
对N个数排序(从小到大)
clear
input "请问你想对多少个数进行排序, " to n dime a(n)
?'请输入',n,'个数: '
for i=1 to n
input "请输入: " to a(i)
endfor
for i=1 to n-1
for j=1 to n-i
if a(j)>a(j+1)
t=a(j+1)
a(j+1)=a(j)
a(j)=t
endif
endfor
endfor
算法二:每次比较将当前数和最后一个数据比
clear input “请问你想对多少个数进行排序, ” to n dime a(n)
- 18 - 重庆专升本网 内部资料
2008年重庆市普通高校“专升本”大学计算机复习资料
?'请输入',n,'个数: '
for i=1 to n
input "请输入: " to a(i)
endfor
for i=1 to n-1
for j=1 to n-i
if a(j)>a(n-i+1)
t= a(n-i+1)
a(n-i+1)=a(j)
a(j)=t
endif
endfor
endfor
list memo like a
算法三:
clear
input “请问你想对多少个数进行排序, ” to n dime a(n)
?'请输入',n,'个数: '
for i=1 to n
input "请输入: " to a(i)
endfor
for i=1 to n-1
for j=1 to n-i
if a(j)
本文档为【重庆专升本计算机VF程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。