第6章程序设计内容课件



《第6章程序设计内容课件》由会员分享,可在线阅读,更多相关《第6章程序设计内容课件(118页珍藏版)》请在装配图网上搜索。
1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,,,*,6.9 顺序结构程序设计,一、,顺序结构:根据程序中语句的书写顺序依次逐条执行。流程图如下:,,,,,,,,,,,,,,,语句1,语句2,,,,例6.1查找某个学生信息(lz1),Open database 教学管理,Use 学生,Accept “请输入学生姓名:” to name,Locate for 姓名=name,Display,Use,return,,,,,分类:,简单分支语句(IF-ENDIF),选择分支语句(IF-ELSE-ENDIF),结构分支(do case-endcase,6.10
2、 分支结构,,,1.简单分支语句(Lz1),格式:IF ,,ENDIF,,,IF,,,,,,.T.,,,,,条件?,,语句块,ENDIF,.F.,单向IF语句流程图,,,功能:计算条件表达式的值,若为真(.T.),则执行语句块中的语句;若为假(.F.),不执行语句块。无论执行还是不执行,程序都将转向ENDIF下一条语句继续执行。,说明:,(1) IF 和 ENDIF必须配对出现,且分两行书写。,(2) 条件表达式可以是关系表达式或逻辑表达式。,,,例6.2,Open database 教学管理(lz2),Use 学生,Accept “请输入学生姓名:” to name,Locate for 姓
3、名=name,If found(),Display,Endif,?“结束”,Use,return,,,例6.3,Use zgda(lz3),Locate for 基本工资<650.00,If .not. Eof(),display,Endif,,,,,,2.选择分支语句,格式:IF ,,ELSE,,ENDIF,,条件?,语句块1,语句块2,IF,,.T.,,.F.,ENDIF,双向IF语句流程图:,,,功能:条件成立,执行;条件不成立,执行。然后程序转向ENDIF下一条语句继续执行。,说明:,(1) 无论条件是否成立,在语句块A和B之间必执行一个,且只能执行一个。,(2) 该语句可以解决一入口
4、,二分支问题,,,,Input “x=” to x,if x0,y=sin(x)+sqrt(x*x+1),else,y=cos(x) - x^3+3* x,endif,?”x=”,x,”y=”,y,(LZ4),Input "x=" to x,if x=0,,y=cos(x) - x^3+3* x,endif,y=sin(x)+sqrt(x*x+1,),Input "x=" to x,y=cos(x) - x^3+3* x,if x0,y=sin(x)+sqrt(x*x+1),endif,?x,y,,,例6.37铁路托运行李,假设每张车票可按每公斤0.5元托运50公斤以内的行李,如果超过5
5、0公斤时,超过的部分每公斤加价0.8元。计算公式和程序如下:p143,X=0.5×W 当W≤50公斤,X=0.5×50+0.8×(w-50) 当W>50公斤,Set talk off,Input “请输入行李的重量为:” to w,If w<=50,x=0.5*w,Else,x=0.5*50+0.8*(w-50),Endif,?”行李的重量为:”+str(w,6,2)+”公斤,其运费为:”+str(x,6,2)+”元”,,,,例6.4,输入乘出租车的公里数,求乘车费(计费标准:2.5公里以内6元;2.5公里以外,每超
6、过1公里,增加到1.2元,要求四舍五入到元)。(lz5),* PROG6.PRG,CLEAR,INPUT “请输入公里数:” TO X,IF X>2.5,PAY=(X-2.5)*1.2+6,ELSE,PAY=6,ENDIF,? "应付费",ROUND(PAY,0), "元",CANCEL,,,,例6.5 在学生信息.DBF中查找某人,若找到,显示该记录;若找不到,显示“查无此人!”。(lz6),* PROG7.PRG,SET TALK OFF,USE 学生,ACCEPT "输入待查找人的姓名: " TO NAME,LOCATE FOR 姓名=NAME,IF FOUND(),DISP,ELSE,
7、? "查无此人! ",ENDIF,USE,SET TALK ON,CANCEL,,,,有学生成绩表:现要统计60分以下有多少人,60到69分的有多少人,70-89分的有多少人,90分以上的有多少人。,,,,3. IF语句的嵌套,IF-ELSE-ENDIF语句中的语句块里可以包含任何合法的语句,也可以包含另一条IF语句,这就构成了IF语句的嵌套。嵌套IF语句可以解决一入口,三,分支,甚至更多,分支,的问题。嵌套形式可以是多种多样的,以下是其中的一种,:,IF ,,ELSE,IF ,,ELSE,,ENDIF,ENDIF,,,语句块3,.F.,ELSE,条件2,语句块2,条件1,语句块1,IF,.T
8、.,.F.,ELSE,IF,.T.,END IF,,,,If 大学英语>=90,a=a+1,Else,If 大学英语>=70,b=b+1,else,If 大学英语>=60,c=c+1,else,d=d+1,endif,Endif,endif,,If 大学英语<60,d=d+1,Else,If 大学英语<70,b=b+1,else,If 大学英语<90,c=c+1,else,d=d+1,endif,Endif,endif,,,If 大学英语>60,d=d+1,Else,If 大学英语>70,c=c+1,else,If 大学英语>90,b=b+1,else,a=a+1,endif
9、,Endif,endif,,这样可以不可以?,,,4.结构分支语句,格式:,DO CASE,CASE ,,CASE ,,……,CASE ,,[OTHERWISE,],ENDCASE,,条件1,,条件2,条件n-1,,语句块n,语句块1,语句块n-1,DO CASE,ENDCASE,OTHERWISE,语句块2,.T.,.T.,.F.,.F.,.F.,.T.,,,功能:依次检测条件表达式的值,一旦某一条件满足,执行相应语句块,然后转到ENDCASE下一条语句。如果所有条件表达式的值都为假,倘若无OTHERWISE子句,则不执行任何语句,直接转到ENDCASE下一条语句;如若有OTHERWISE子
10、句,则无条件执行OTHERWISE与ENDCASE之间的语句块,然后转到ENDCASE下一条语句。,说明:,(1)如果有两个或两个以上的条件为真,则只执行第一个条件表达式为真的CASE后的语句组,之后即转去执行ENDCASE之后的语句而不会再去判断下一个CASE中的条件。,,,,Do case,,case,大学英语>=90,a=a+1,,case,大学英语>=70.and.大学英语<90,b=b+1,,case,大学英语>=60,c=c+1,,otherwise,d=d+1,,endcase,,,,也可以这样做,Do case,,case,大学英语<60,d=d+1,,case,大学英语<70
11、,c=c+1,,case,大学英语<90,b=b+1,,otherwise,a=a+1,,emdcase,,,,有学生这样写,大家分析一下?,Do case,case 大学英语>=60,a=a+1,case 大学英语>=70,b=b+1,case 大学英语>=90,c=c+1,otherwise,d=d+1,emdcase,,结果是什么?,,,1.当型循环语句,格式:DO WHILE ,,ENDDO,,6.11 循环结构,初始设置,条件满足吗?,循环体语句,[LOOP],[EXIT],.F.,.T.,DO WHILE,ENDDO,,,功能:当的值为真(.T.)时,执行循环体中的语句,一旦
12、的值为假(.F.),程序跳出循环体,转到ENDDO下一条语句继续执行。,说明:,(1)如果条件永远成立,形成死循环。为了避免死循环,在循环体中必须要有语句能够改变条件表达式的值。,(2)当循环次数事先未知时,使用DO WHILE-ENDDO语句。,(3)循环体中,可以出现LOOP语句。遇到LOOP语句时,程序立即转向DO WHILE循环起始语句,而不再执行LOOP下面的循环体语句。,,,(4) 循环体中,可以出现EXIT语句。遇到EXIT语句时,程序立即跳出本层循环,转向逻辑上的下一条语句继续执行。设置EXIT语句,也是防止死循环的一种方法。,DO WHILE 语句的流程图,,,,,,例6.1
13、1,Clear LZ7,use 学生成绩,store 0 to a,b,c,d,do while .not.eof(),Do case,case 大学英语>=90,a=a+1,case 大学英语>=70,b=b+1,case 大学英语>=60,c=c+1,otherwise,d=d+1,endcase,skip,enddo,?a,b,c,d,,,,STORE 0 TO C, W (LZ8)(用IF语句改写),USE ZGDA,DO WHILE .NOT.EOF( ),DO CASE,CASE (年龄<45).AND.职称="讲师",W=W+1,CASE (年龄
14、<45) .AND.职称="副教授",C=C+1,ENDCASE,SKIP,ENDDO,? “45岁以下的讲师人数为: ",W,? “45岁以下的副教授人数为: ",C,SET TALK ON,CANCEL,例6.12统计职工表中,职称是”讲师”和副教授,年龄在45岁以下的教师人数.,,,例6.3 求N!=1×2×3×……×N(lzn),input "n=" to n,s=1,i=1,do while i<=n,,s=s*i,,,i=i+1,enddo,?str(N,4)+"!="+ltrim(str(s)),循环结束 i的值是多少?,,,例6.14 统计学生.DBF中1979年以后
15、出生的人数,并显示他们的记录。(lz11),SET TALK OFF,CLEAR,USE 学生,N=0 && 记数器通常初始化为0,DO WHILE .NOT. EOF(),IF 出生日期>={^1979-01-01},DISP,N=N+1 && 记数器,ENDIF,SKIP && 修改记录指针,漏写该句,程序死循环,ENDDO,? "1979年以后出生的人数为"+STR(N,2)+ "人",USE,SET TALK ON,CANCEL,,,,例6.15 完善例6.7,使程序能多次查找学生的记录,一旦输入N,立即结束查找。lz9,USE 学生,x
16、="Y",DO WHILE UPPER(x)= "Y",ACCEPT "输入待查找学生的姓名: " TO NAME,LOCATE FOR 姓名=NAME,IF .NOT. EOF(),DISP,ELSE,? "查无此人! ",ENDIF,WAIT "是否继续查找(Y/N)? " TO x,ENDDO,? "结束查找",USE,CANCEL,,,,例6.16 键盘输入两个整数,求它们的最大公约数和最小公倍数。(lz12),INPUT "输入一个整数:" TO M,INPUT "输入另一个整数:" TO N,M1=M,N1=N,T=MOD(M,N),DO WHILE T#0,M=N,N=T,T=M
17、OD(M,N),ENDDO,? "最大公约数为: ",STR(N,4),? "最小公倍数为: ", STR(M1*N1/N,4),CANCEL,,,,辗转相减求两个自然数m,n的最大公约数.lz12a,,,m=m-n m>n,n=n-m n>m,m,n 为公约数 m=n,,,1.转跳语句(LOOP),在DO WHILE-ENDDO循环体内提供了一条短路语句,可以起到转跳作用,语句格式:,Do while ,…,if ,LOOP,endif,…,enddo,语句功能:,中断本次循环体的执行,跳回到D
18、O WHILE的开始处,重复条件的判断.但要注意具有多重循环的程序中,只返回到与它本身所处的本层循环体相匹配的DO WHILE语句.,,,Do while ,Do while ,…,if ,LOOP,endif,…,enddo,loop,Enddo,,,【例6.17】,工资小于160元的增加10元,SET TALK OFF,USE DA2,DO WHILE .NOT.EOF( ),if 工资>=160,SKIP,LOOP,ENDIF,REPLACE 工资 WITH 工资+10,SKIP,ENDDO,,,,【例6.18】lz10,求0~100之间奇数之和,SET TALK
19、 OFF,X=0,Y=0,DO WHILE X<100,X=X+1,IF INT(X/2)=X/2,LOOP,ELSE,Y=Y+X,ENDIF,ENDDO,? "0~100之间的奇数之和为: ", Y,SET TALK ON,CANCEL,,,,2.出口语句(EXIT),如果在循环的中途,需要结束循环而转到本层循环的后继命令去执行,可以用出口命令,语句格式:,EXIT,语句功能:,终止DO WHILE-ENDDO的正常循环,无条件地转到ENDDO的后继命令去执行,多重循环,只能跳出一层,,,【例6.19】,计算1+2+3+…+100的和,SET TALK OFF,N=1,S
20、=0,DO WHILE .T.,IF N>100,EXIT,ENDIF,S=S+N,N=N+1,ENDDO,? “S=”,S,,,2.FOR-EndFor循环语句,格式:FOR = TO [STEP ],,ENDFOR,,,循环变量超过终值?,FOR,循环变量=初值,循环体,[LOOP],[EXIT],循环变量+步长,ENDFOR,.T.,.F.,记数型循环语句流程图,,,功能:语句执行时,首先循环变量赋以初值,与终值比较,若超过终值,则循环体一次也不执行,直接跳到循环终止语句ENDFOR的下一条语句;若不超过终值,则依次执行循环体语句,遇到ENDFOR后,程序转回到FOR循环初始语句
21、。然后循环变量加上步长,再判断是否超过终值,只要不超过终值就执行循环体。一旦超过终值,程序退出循环体,继续执行ENDFOR的下一条语句。,说明:,(1)步长可正可负。若步长为1,可以省略STEP子句。,,,(2)计数型循环语句用于循环次数事先已知的场合。循环次数可按下式来计算:,INT(ABS((终值-初值)/步长))+1,(3)循环体内可以出现 LOOP和EXIT语句,其功能如前所述。,(4)循环结束语句一般用ENDFOR,,,,例6.20,找出表中年龄最大的记录(lz13),SET TALK OFF,USE ZGDA,MAX=年龄,J=RECCOUNT() 指表中所含
22、的记录的总数,FOR I=2 TO J,SKIP,IF MAX<年龄,MAX=年龄,RSC=RECNO(),ENDIF,ENDFOR,USE,? RSC,MAX,,,3.SCAN ENDSCAN循环语句,格式: SCAN [] [FOR ],,ENDSCAN,功能:对打开的数据表,在规定的范围内,对符合条件的记录逐条进行循环体语句规定的操作。每执行一次,指针下移,直到文件尾为止。,说明:,(1)scan循环语句专门用来对数据表操作。SCAN-ENDSCAN语句有自动修改指针和判断是否到达文件尾的功能。因此,用SCAN-ENDSCAN语句比用DO WHILE-ENDDO语句处理数据表速
23、度快,而且编程既方便又简洁。,(2)循环体中可以出现[LOOP]和[EXIT] 语句,作用如前所述。,,,,,例6.23 用SCAN-ENDSCAN语句统计XSDA.DBF中1979年以后出生的学生人数,并显示他们的记录。(试与例6.14进行比较)lz14,SET TALK OFF,CLEAR,USE 学生,N=0,SCAN FOR 出生日期>={^1979-01-01},DISP,N=N+1,ENDSCAN,? "1979年以后出生的人数为"+STR(N,2)+ "人",USE,SET TALK ON,CANCEL,,,,例6.24在教学管理.DBC中有数据库表学生成绩.DBF,计算学生的总
24、分,并按如下规定填写等级字段:lz15,总分>=250 为“优秀” 210≤总分<249为“良好”,180≤总分<209为“一般” 总分<180为“差”,OPEN DATABASE XJGL,USE 学生成绩,LIST,REPL ALL 总分 WITH 数学+大学英语+语文,SCAN,DO CASE,CASE 总分>=250,REPL 等级 WITH "优秀",CASE 总分>=210 && 不必写成:总分>=210 AND 总分<250,REPL 等级 WITH "良好",,,,,CASE 总分>=180,REPL 等级 WITH "一般",OTHERWISE,REPL
25、 等级 WITH "差",ENDCASE,ENDSCAN,LIST,CLOSE DATABASE,CANCEL,,,,,USE 学生成绩,REPL ALL 总分 WITH 数学+大学英语+语文,go top,do while .not.eof(),DO CASE,CASE 总分>=250,REPL 等级 WITH "优秀",CASE 总分>=210 && 不必写成:总分>=210 AND 总分<250,REPL 等级 WITH "良好",CASE 总分>=180,REPL 等级 WITH "一般",OTHERWISE,REPL 等级 WITH "差",ENDCASE,skip,enddo
26、,LIST,CANCEL,,,,4.循环的嵌套,如果单层循环里的循环体中又包含另一层循环,即循环内套循环,就构成了二重循环。同理,还有三重循环或更多重循环。三种形式的循环可以互相嵌套,但既然嵌套,必须是完全嵌套,不能交叉嵌套。,Do while ,语句1…,do while ,语句2...,enddo,语句3..,Enddo,,,,,,例6.21 打印如图所示的图形,* PROG21.PRG,FOR I=1 TO 4 && 打印4行,FOR J=1 TO 5 && 每行打印5个字符,?? "*",ENDFOR,?,ENDFOR,显示结果如下: *****,*****,*****,**
27、***,,,,例6.22 打印图形,* PROG22.PRG,FOR I=1 TO 5 && 打印5行,FOR J=1 TO I && 每行打印字符数与I有关,?? "*",ENDFOR,?,ENDFOR,运行结果如下:,*,**,***,****,*****,,,,,例6.23 打印图形lz16,* PROG23.PRG,FOR I=5 TO 1 STEP –1 && 打印5行,STEP用负值,FOR J=1 TO I,?? "*",ENDFOR,?,ENDFOR,?,CANCEL,结果如下: *****,****,***,**,*,,,,,例6.24 打印图形lz17,*
28、 PROG24.PRG,FOR I=1 TO 5 && 打印5行,??SPACE(5-I),FOR J=1 TO 2*I-1 && 随I改变,打印1,3,5,7,9列,?? "*",ENDFOR,?,ENDFOR,结果如下: *,***,*****,*******,*********,,,clear,FOR I=1 TO 5,? SPACE(20-i),FOR J=1 TO i*2-1,?? "*",ENDFOR,ENDFOR,,,例6.25 打印图形,* PROG25.PRG,FOR I=5 TO 1 STEP –1 && 打印倒三角,STEP为负值,? S
29、PACE(5-I) && 换行效果与例6.24相同,FOR J=1 TO 2*I-1,?? "*",ENDFOR,ENDFOR,结果如下: *********,*******,*****,***,*,,,clear,FOR I=1 TO 5,? SPACE(20+i),FOR J=1 TO (5-i)*2+1,?? "*",ENDFOR,ENDFOR,,,clear,input "n=" to n,FOR I=1 TO n,? SPACE(50+I),FOR J=1 TO 2*n-2*i+1,?? "*",ENDFOR,ENDFOR,,,,例6.26 打印图形,*
30、PROG26.PRG,FOR I=1 TO 5 && 打印前5行,? SPACE(10-I) && 使图形向右移5列,FOR J=1 TO 2*I-1 && 打印呈三角形,??CHR(64+I) && 打印大写字母,ENDFOR,ENDFOR,FOR I=4 TO 1 STEP –1 && 打印后4行,?SPACE(10-I) && 先换行,再输出,FOR J=1 TO 2*I-1,??CHR(64+I),ENDFOR,ENDFOR,,,,结果如下:,A,BBB,CCCCC,DDDDDDD,EEEEEEEEE,DDDDD
31、DD,CCCCC,BBB,A,,,,,例6.27 打印九九乘法表lz18 lz9,??SPACE(4)+ "*" && 输出第一行,FOR I=1 TO 9,??STR(I,5),ENDFOR,?,FOR I=1 TO 50 && 输出一条由50个“-”组成的直线,??“-”,ENDFOR,?,FOR A=1 TO 9,??STR(A,5),FOR B=1 TO A,??STR(A*B,5),ENDFOR,?,ENDFOR,CANCEL,,,,,,,,数组,一、数组:,名字相同、用下标区分的内存变量称为数组。,二、数组的定义,数组名的取法和一般的变量名取法相同,数组名和简单变量不
32、能同名.,定义数组命令:,DIMENSION [,]),[,(…],命令功能:定义一个或多个内存变量数组。,,,,说明:,最多可有3600个元素,显示内存时只算一个变量,数组下标起始值是1,数组元素隐含的逻辑值为“假”,**二维数组,可用一维下标来存取。这是由于在内存中,二维数组元素是按行列次序排列,它们每个元素都可看作单独一个内存变量使用,,,,主要有以下特点:,(1)数组元素的类型,由所赋的值来决定,(2)数组变量可以不带下标使用,在赋值语句的右边,表示该数组第一个元素,在赋值语句的左边,表示该数组所有元素,(3)数组和数据表之间可相互转换,即数据表中数据可以转换为数组数据,数组数据也可以
33、转换为数据表中的数据,,,,数组实例,DIMENSION a(2,3),? A4,? A(2,1),? A6,? A(2,3),,A(1,1) A(1,2) A(1,3),,1,,2 3,A(2,1) A(2,2) A(2,3),,4 5 6,数组实例,DIMENSION a(2,3),,,二、数组的赋值,格式:,STORE 〈表达式〉 TO 〈数组名〉,〈数组名〉=〈表达式〉,命令功能:,将表达式的值赋给数组变量,上述两个命令是完全等价的,给数组赋值还可用ACCEPT、INPUT、WAIT语句,,,,
34、Dime s(3,5)lz23,For i= 1 to 3,For j=1 to 5,Input “第”+str(I,1)+”行第”+str(j,1)+”个元素” to s(I,j),Endfor,Endfor,For i= 1 to 3,For j=1 to 5,??s(I,j),Endfor,?,Endfor,,,clear,dime a(10),for i= 1 to 10,a(i)=int(rand()*20)+1,??a(i),endfor,max=a(1),imax=1,for i=2 to 10,if a(i)>max,max=a(i),imax=i,endif,endfor,
35、?max,imax,,产生10个1-20之间的随机数,找出其中最大的数lz24,,,2,4,6,8,10,1,3,5,7,9,9,7,5,3,1,10,8,6,4,2,交换前,交换后,,For i=1 to int(10/2),T=a(i),A(i)=a(10-i+1),A(10-i+1)=t,Endfor,For i=1 to 10,??a(i),Endfor,lz25,,,,表与数组之间交换数据,1.当前记录复制到数组,命令格式:,Scatter to [fields],将表中当前记录复制到指定的数组.,在复制时,第一个字段值传送给第一个数组元素,第二个字段值传给第二个数组元素,依次类推
36、.如果没有数组 ,则自动创建数组,如果已创建的数组元素个数比字段个数多,则多余的数组元素保持原值;如果已创建的数组元素个数比字段个数少,则自动扩展数组,使得数组元素个数与字段个数相等.,2.数组内容复制到当前记录,命令格式:,Gather from [fields ],将数组中的数据复制到当前记录.,,,第一个数组元素复制到第一个字段,第二个数组元素复制到第二个字段,依次类推,各个数组元素与对应字段的数据类型必须一致.如果数组元素个数比字段个数少,多出的字段保持原值,如果数组元素个数比字段个数多,多出的数组元素不复制.,,,,两条记录换位置,use 学生lz20,list,dimensi
37、on a(1),b(1),x="Y",do while upper(x)="Y",input "第一条记录" to m,input "第二条记录" to n,go m,,,,scatter to a,go n,scatter to b,gather from a,go m,gather from b,wait "继续吗(Y/N?)" to x,enddo,,,,,例:现有数据库DD.DBF,其结构如下:订单号 N(3,0),客户号 C(3),签单日期 D,金额 N(6,2)。数据库TJ2.DBF 结构如下:月份 N(2,0),数量 N(2,0),总金额 N(8,2),编程序统计出各个月份所
38、签订单的数量及其总金额,并将结果按月份的升序放在库文件TJ2.DBF。(vf5),,,,set talk off,dime a(12,2),a=0,use dd,do while .not. eof(),a(month(签单日期),1)=a(month(签单日期),1)+1,a(month(签单日期),2)=a(month(签单日期),2)+金额,skip,enddo,,,,i=1,use tj1,do while i<=12,if a(i,1)0,appe blank,repl 月份 with i,数量 with a(i,1),金额 with a(i,2),endif,i=i+1
39、,enddo,list,sort on 金额 to tj2,use tj2,list,,,,现有数据库,学生成绩,.dbf,有如下结构:lz21,学号(c,8),姓名(c,8),大学英语(n,4),语文(n,4),数学(n,4)。编程序统计出每10分间隔的三门功课的人数,并以下列形式显示:,分数段 大学英语人数 语文人数 数学人数,0—9 ** ** **,10—19 ** ** **,20—29
40、 ** ** **,…..,90—100 ** ** **(vf11),,,,use 学生成绩,dime s(10,3),s=0,do while .not.eof(),s(int(大学英语/10)+1,1)= s(int(大学英语/10)+1,1)+1,s(int(语文/10)+1,2)= s(int(语文/10)+1,2)+1,s(int(数学/10)+1,3)= s(int(数学/10)+1,3)+1,skip,enddo,clear,,,,?"分数段
41、 英语人数 语文人数 数学人数",i=1,do while i<=10,?str((i-1)*10,2)+"--"+str(i*10-1,3),j=1,do while j<=3,??s(i,j),j=j+1,enddo,i=i+1,enddo,retu,,,,例6.28 求100~200之间的所有素数之和。,SUM=0,FOR I=101 TO 199 STEP 2 && 除了2以外,所有素数都是奇数,N=SQRT(I),FOR J=2 TO N,IF MOD(I,J)=0,EXIT && 一俟除尽,退出本层循环,ENDIF,ENDFOR,I
42、F J>N && 意味着每个数都除不尽,SUM=SUM+I,ENDIF,ENDFOR,? "100~200之间的所有素数之和为: ",SUM,CANCEL,,,,例6.29 求出100~999之间的所有水仙花数。,* PROG29.PRG,FOR I=1 TO 9,FOR J=0 TO 9,FOR K=0 TO 9,S=100*I+10*J+K,IF I^3+J^3+K^3=S,?S,ENDIF,NEXT,NEXT,NEXT,CANCEL,结果有四个数,分别为153,370,371和407。,,,,例6.30 求Fibonacci数列(1,1,2,3,5,8,13……)的第8,15,
43、19项的值。lz22,分析:Fibonacci数列的特点是第一项是1,第二项是1,从第三项开始,每一项等于前两项之和。利用数组是解决这类问题的最佳方法。我们将数列中的前若干项依次装入数组元素中,需要输出哪一项就输出哪个数组元素。,* PROG30.PRG,DIMENSION F(19),F(1)=1,F(2)=1,FOR I=3 TO 19,F(I)=F(I-2)+F(I-1),ENDFOR,?F(8),F(15),F(19),CANCEL,,,,例6.31 产生10个1~20之间的随机整数,并将它们按升序排序后输出。,DIMENSION A(10),RAND(-1)
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。