结构化程序设计应用举例.ppt

上传人:牧羊曲112 文档编号:6599128 上传时间:2023-11-16 格式:PPT 页数:97 大小:317.50KB
返回 下载 相关 举报
结构化程序设计应用举例.ppt_第1页
第1页 / 共97页
结构化程序设计应用举例.ppt_第2页
第2页 / 共97页
结构化程序设计应用举例.ppt_第3页
第3页 / 共97页
结构化程序设计应用举例.ppt_第4页
第4页 / 共97页
结构化程序设计应用举例.ppt_第5页
第5页 / 共97页
点击查看更多>>
资源描述

《结构化程序设计应用举例.ppt》由会员分享,可在线阅读,更多相关《结构化程序设计应用举例.ppt(97页珍藏版)》请在三一办公上搜索。

1、1,第八讲(六)程序调试(七)结构化程序设计综合实例,第3章 结构化程序设计,2,3,Visual FoxPo程序设计的概念,一、什么是程序,Visual FoxPro提供了一种程序执行方式,这种方式就是预选把需要执行的多条命令按一定的结构组成一个有机序列以文件的形式存储在磁盘上,这个文件就称为程序文件或命令文件。,4,其中,把Visual FoxPro提供的命令、函数和控制语句有机的组成一个计算机可执行的序列,这个序列的设计、编码和调试的过程编写调试程序。,使用计算机解决实际问题,通常是先要对问题进行分析并建立数学模型,然后考虑数据的组织方式和算法,并用某一种程序设计语言编写程序,最后调试程

2、序,使之运行后能产生预期的结果。这个过程称为程序设计。,5,二、Visual FoxPro程序设计语言的特点,1、语言丰富、自成体系,2、人机对话功能,3、高效的结构化程序设计功能,Visual FoxPro程序具有顺序、分支、循环三种基本结构。Visual FoxPro的语句没有标号,程序的走向完全靠控制块控制。一般来讲,Visual FoxPro程序由一主控程序和若干子控程序组成。任何一个程序的逻辑结构均可由顺序结构、分支结构、循环结构组合而成。,6,顺序结构,分支选择结构(选择结构),循环结构,1.当型循环结构:当条件成立时反复执行,直到条件不成立;2.直到型循环结构:先执行,再判断条件

3、是否成立,若为假(不成立),继续执行,直到条件为真(成立),用循环结构编程时,要注意出现死循环。,死循环:一种永远也跳不出循环体的循环。,7,!注意:程序的每一行只能书写一条语句,并且一行最多只能有255个字符(包括空格)。如果一条语句一行写不完,可以用“;”续行,每一个语句用回车键结束。,8,9,10,算法,如果需要解决一个实际问题,从拿到任务到得到结果,要经过以下几个阶段:1、分析问题;2、确定处理方案;3、确定操作步骤;4、根据操作步骤编写源程序;5、将程序输入计算机并使之运行;6、整理输出结果,写出有关文档资料。,一、利用计算机处理问题的过程,11,计算机处理一个实际问题的主要过程,1

4、2,二、算法的概念,在上述六个步骤中,第1、2步一般与实际问题的专业有关,第36步则是程序人员的职责。其中最关键的是第3步,即“算法设计”,只要算法是正确的,写程序就不会有太多困难。所谓“算法”,粗略地说,是为解决一个特定问题而采取的确定的、有限的步骤。,三、算法的表示流程图,例2 求一个班学生的平均成绩。设A等(85)12人,B等(70分)16人,C等(60分)6人,D等(50分)5人。,例3 输入一个数x,如果它的值为正,则打印x的值。,例4 输入10个数,把其中的正数打印出来。,13,14,N,Y,15,16,程序的建立与运行,一、Visual FoxPro程序的建立,1、用Visual

5、 FoxPro本身提供的文本编辑器来建立和编辑,命令窗口方式:MODIFY COMMAND,菜单窗口方式:,文件的保存:,2、用WPS建立和编辑VFP程序文件,3、用DOS的EDIT编辑器来建立和编辑VFP程序文件,17,二、Visual FoxPro程序文件的执行,1、命令窗口方式:DO,2、菜单窗口方式,3、直接单击工具栏中的红色惊叹号。,4、右击程序编辑窗口标题栏,弹出快捷菜单,选择执行命令。,18,一、迭加(累加)法,典型算法,19,和积综合计算1、有限个符合条件的整数的和积计算;2、有特殊规律的分数的和的计算;3、逆积式的计算。这类计算要注意两个要点:一是用来表示计算结果的初始化值。

6、二是计算的过程是否正确。这类问题出现在填空题和改错题中的可能性非常大。主要考核程序设计的基本功。,20,举例:,例1 利用循环结构求1100之和。,MODI COMM EX121.PRG,SET TALK OFF CLEAR S=0 I=1,方法一,21,DO WHILE I=100 S=S+I I=I+1ENDDO10,10 SAY 1-100的和S=;FONT 仿宋体,30 STYLE I;GET S FONT 仿宋体,30;STYLE ISET TALK ONRETURN,22,方法二,SET TALK OFF CLEAR S=0 FOR I=1 TO 100 S=S+I ENDFOR,

7、23,10,10 SAY 1-100的和S=;FONT 仿宋体,30 STYLE I;GET S FONT 仿宋体,30;STYLE ISET TALK ONRETURN,24,循环控制条件恒为真,要使用EXIT语句 结束循环,在这种循环结构中,控制条件恒为真,只能依靠包含在IF ENDIF或DO CASE ENDCASE结构中的EXIT语句来退出循环。,例2:求连乘数1*2*3*4*5,当积大于720时 退出程序。,MODI COMM EX122.PRG,25,SET TALK OFFCLEARI=1S=1DO WHILE.T.S=S*I I=I+1 IF S720 EXIT ENDIF E

8、NDDOI=I-1&最后一个乘数,方法一,26,10,10 SAY 连乘数的积S=;FONT 魏碑体,28 STYLE B;GET S FONT 魏碑体,28;STYLE B FUNCTION B 14,10 SAY“最后一个乘数是”;FONT 魏碑体,28 STYLE B;GET I FONT 魏碑体,28;STYLE B FUNCTION B SET TALK ONRETURN,27,SET TALK OFFCLEARS=1FOR I=1 TO 800 S=S*IIF S720 EXIT ENDIF ENDFOR?”最后一个乘数是”FONT 魏碑体,28 STYLE B,I FONT“”,

9、28?连乘数的积S=“FONT“”,28,S FONT“”,28SET TALK ONRETURN,方法二,28,例3,已知 S1=1,S2=1+2,S3=1+2+3,Sn=1+2+3,+n,编写一程序求 S1+S2+S100的和。,MODI COMM EX738PRG,29,SET TALK OFFCLEARN=1S=0DO WHILE N=100 I=1 SUB=0DO WHILE I=N SUB=SUB+I,30,I=I+1 ENDDO S=S+SUB N=N+1ENDDO?S1+S2+S100=,SSET TALK ONRETURN,31,SET TALK OFFDO WHILE.T.

10、CLEAR ACCEPT 请选择代码:1问候;2 循环 3 退出 TO CHOICE DO CASE CASE CHOICE=1?,例4 根据输入代码执行相应操作,32,?Good!您好!WAIT“请按任一键继续”WINDOW;TIMEOUT 15 CASE CHOICE=2 I=1 S=0 DO WHILE I=100 S=S+I I=I+1 ENDDO,33,?1+2+3+100=,S WAIT“请按任一键继续”WINDOW;TIMEOUT 15 CASE CHOICE=3 EXIT ENDCASE ENDDOSET TALK ONRETURN,【例3.15】求和:,,当n=100时的S值

11、,Y,N,n%3=1,*prog3_15.prg,求和S,SET TALK OFFCLEARS=0FOR n=1 TO 100 IF n%3=1 S=S+1/n ELSE S=S-1/nENDIFENDFOR?”S=”,SSET TALK ON,【例3.16】已知一个数列的前三项为0,0,1,以后各项都是其相邻的前三项之和,求该数列前30项之和。,*prog3_16.prg,求SET TALK OFFCLEARS=1&因为数列前三项的计算不包含在循环体中f1=0f2=0f3=1,FOR n=4 TO 30 ff=f1+f2+f3 S=S+ff f1=f2 f2=f3 f3=ffENDFOR?”

12、S=”,SSET TALK ON,38,二、穷举法 所谓穷举法是从有限个对象中一个一个的进行判断,选择符合要求的对象进行处理。主要有两种处理类型:一是符合要求的对象的统计计算,如个数的计算、累加和的计算、连乘积的计算;二是寻找最大(或最小)对象。穷举法必须使用循环及选择分支结构才能实现其功能。,39,例3.17:我国古代数学家在算经中出了一道题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、鸡雏各几何?”,X+Y+Z=100X*5+Y*3+Z/3=100,40,SET TALK OFFCLEAR?公鸡 母鸡 小鸡FOR X=0 TO 19 FOR Y=0 TO 33

13、 Z=100-X-Y,41,IF 5*X+3*Y+Z/3=100?X,Y,Z ENDIF NEXTNEXT SET TALK ONRETURN,42,例8:从键盘上输入一个整数,判断其是否为素数(质数)。,SET TALK OFFCLEARN=010,30 SAY“请输入一个整数:”;GET NREADFLAG=0,43,FOR I=2 TO SQRT(N)IF N/I=INT(N/I)FLAG=1 ENDIF NEXTIF FLAG=1,44,12,30 SAY LTRIM(STR(N);+不是一个素数ELSE 12,30 SAY LTRIM(STR(N);+是一个素数ENDIFSET TA

14、LK ONRETURN,45,*例题9:求出3100之间的全部素数。,SET TALK OFFCLEARFOR M=3 TO 99 FLAG=0 FOR N=2 TO M-1 IF INT(M/N)=M/N FLAG=1 EXIT ENDIF ENDFOR,方法一,46,IF FLAG=0?M ENDIFENDFOR SET TALK ONRETURN,47,SET TALK OFFCLEARM=3DO WHILE M100 N=2 DO WHILE N=M-1 IF M/N=INT(M/N)EXIT ENDIF IF N=M-1?M ENDIF,方法二,48,N=N+1 ENDDO M=M+

15、1ENDDOSET TALK ONRETURN,49,【例3.19】“水仙花数”是指这样的数,其各位数字的立方和等于该数本身,如153=13+53+33。编写程序求100至999范围内的第二大水仙花数。,MODI COMM EX129.PRG,SET TALK OFFCLEAR,50,SET TALK OFFCLEARmycount=0&计数FOR I=999 TO 100 STEP-1 A=INT(I/100)B=INT(I-100*A)/10)C=I-INT(I/10)*10 IF I=A3+B3+C3 mycount=mycount+1 if mycount=2 exit endif E

16、NDIFNEXT?”100至999范围内的第二大水仙花数为:”,I SET TALK ONRETURN,方法一,51,SET TALK OFFCLEARmycount=0&计数 FOR I=999 TO 100 STEP-1 A=INT(I/100)B=MOD(INT(X/10),10)C=MOD(X,10)IF I=A3+B3+C3 mycount=mycount+1 if mycount=2 exit endif ENDIFNEXT?”100至999范围内的第二大水仙花数为:”,ISET TALK ONRETURN,方法二,52,方法三,SET TALK OFFCLEARmycount=0

17、&计数 FOR I=999 TO 100 STEP-1 s=ALLTRIM(STR(n)&去掉前后导空格的对应于该数值的字符串,以免取到空格 a=RIGHT(s,1)&百位 b=SUBSTR(s,2,1)&十位 c=LEFT(s,1)&个位 IF I=A3+B3+C3 mycount=mycount+1 if mycount=2 exit endifENDIFNEXT?”100至999范围内的第二大水仙花数为:”,I SET TALK ON,53,例14.9:韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1 至5报数,记下最后一个士兵报的数为1;按从1 至6报数,记下最后一个士兵报的数

18、为5;按从1 至7报数,记下最后一个士兵报的数为4;按从1 至11报数,记下最后一个士兵报的数为10。设计程序求至少有多少兵?解:设兵数为X,则X满足下列不定方程组:X=5Y+1 即 mod(x,5)=1 X=1(MOD 5)X=6Z+5 mod(x,6)=5 X=7U+4 mod(x,7)=4 X=11V+10 mod(x,11)=101、注意到X除11余10,于是可设置X从21以步长11开始递增,只要判断前三个条件(方程);2、注意到X+1为11的倍数也为6的倍数,而11与6 互素,因而X+1必为66的倍数。于是取X=65开始以步长66递增,只要判断另两个条件(方程)。3、方程有无穷个解,

19、只要得到第一个解便可退出循环。,54,SET TALK OFFFOR X=21 TO 10000 STEP 11 IF MOD(X,5)=1 AND MOD(X,6)=5 AND MOD(X,7)=4?至少有兵+LTRIM(STR(X)+个 EXIT ENDIFENDFORSET TALK ONRETURN,方法一:,55,方法二:,SET TALK OFFX=65DO WHILE X10000 X=X+66 IF MOD(X,5)=1 AND MOD(X,7)=4?至少有兵+LTRIM(STR(X)+个 EXIT ENDIFENDDORETURN,方法三:?,57,set talk offc

20、learP=0for n=100 to 999 step 2 A=INT(n/100)B=INT(n-100*A)/10)C=N-INT(n/10)*10 if MOD(B+C,10)=A?N P=P+1 ENDIFENDFOR?P=,PSET TALK ONRETURN,5求三位数中,个位数字与十位数字之和除以10所得的余数是百位数字的所有偶数的个数。,58,三、递推法 递推:指在前一个(或几个)结果的基础上推出下一个结果。递推法主要是对数列、数序集进行处理。使用数组是实现递推法的主要手段。,例12.11:编程求Fibonacci数列:1,1,2,3,5,8的前30个数。即 F1=1 F2=

21、1 Fn=Fn-1+Fn-2,59,SET TALK OFFCLEARF1=1F2=1I=1,60,DO WHILE(I=15)?F1,F2 F1=F1+F2 F2=F1+F2 IF I/3=INT(I/3)?ENDIF,61,I=I+1ENDDOSET TALK ONRETURN,62,63,*P85二、程序题1.一个素数,若将其数字位置任意对换后仍为素数,则称为绝对素数。求两位数的绝对素数的和及个数。程序中有两个错误,请改正。&prog21.prg,64,SET TALK OFFCLEAT=0 S=0FOR I=10 TO 99 P=.T.FOR J=2 TO SQRT(I)IF MOD(

22、I,J)=0 P=.F.LOOP&正确语句为 EXITENDIFENDFORIF PA=INT(I/10)B=MOD(I,10)K=B*10+A,方法一,65,W=.T.FOR J=2 TO SQRT(K)IF MOD(K,J)=0W=.F.EXIT ENDIFENDFOR IF W=.F.&正确语句为 IF W 或者 IF W=.T.?I S=S+I T=T+1 ENDIF ENDIFENDFOR?“S=“,S,T=,Tset talk onreturn,66,SET TALK OFFCLEARP=0S=0for m=11 to 99 if prime(m)n=10*mod(m,10)+in

23、t(m/10)if prime(n)?m P=P+1 S=S+Mendifendifendfor?“S=+ALLT(STR(S)FONT,46?P=+ALLT(STR(P)FONT,46CAncel,方法二,67,func primepara nflag=.t.k=int(sqrt(n)j=2do while j=k and flagif mod(n,j)=0flag=.f.endifj=j+1enddoreturn flag,68,P85二、程序题3.若一个自然数恰好是它的平方的末后几位数,则称此数为自同构数。如5和76都是自同构数,因为它们的平方分别是25和5776。求2,99999内所有

24、自同构数之和。set talk offCLEAR?同构数有:for n=2 to 99999 L=LEN(ALLT(STR(N)if n=mod(n2,10L)?n endifendforset talk on,69,SET TALK OFFCLEARSUMX=1FOR K=9 TO 1 STEP-1 SUMX=2*(SUMX+1)ENDFOR?SUMXRETURN,P85二、程序题5.猴子吃桃子问题。小猴子第一天摘下若干个桃子,立即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩余的吃了一半,又多吃了一个。以后每天早上都吃了剩余的一半又一个。到第十天早上想吃桃子时,只剩余一个了。问第一天共

25、摘了多少个,70,*思考题*1:已知S=2+(2+4)+(2+4+8)+求S6000的S的最小值CLEARDIME SUM2(10000)S=0SUM1=0FOR N=1 TO 10000 SUM1=SUM1+2N S=S+SUM1 SUM2(N)=S?SUM2(N)IF S6000 EXIT ENDIFENDFOR?S=,SUM2(N-1)RETURN,71,*2求S=1+1/1!+1/2!+1/3!+1/n!SET TALK OFFCLEARS=1T=1FOR N=1 TO 25 T=T*N S=S+1/TENDFOR?S=,ROUND(S,4)SET TALK ONRETURN,72,*

26、3求100,900之间相差为12 的素数对的个数SET TALK OFFCLEARdime a(400)k=0p=0FOR M=100 TO 900 IF PRI(M)k=k+1 a(k)=m*?A(“+allt(str(K)+)=,A(K)ENDIFENDFOR*?K,73,for i=2 to K if a(i)-a(i-1)=12*?a(i),a(i-1)p=p+1 endifendfor?p=,pSET TALK ONRETURN,74,FUNC PRIPARA NJ=2FL=.T.X=INT(SQRT(N)DO WHILE J=X AND FLIF MOD(N,J)=0FL=.F.E

27、XITENDIFJ=J+1ENDDRETURN FL,75,SET TALK OFFCLEARX=0s=0for n=9 to 499 flag=.t.&假设N为素数 for j=2 to sqrt(n)if mod(n,j)=0&N不为素数 flag=.f.endif endfor if flag=.f.and mod(n,2)0&判断N不是素数且不为偶数?N s=s+n X=X+1 endifendfor?X=,X?s=,sSET TALK ONRETURN,*4-求9-499之间非偶非素数的数之和及个数,76,*5 输出字母金字塔SET TALK OFFCLEARFOR X=1 TO 5

28、?SPACE(40-X)FOR Y=65 TO 64+X*2-1?CHR(Y+X-1)ENDFORENDFORSET TALK ONRETURN,77,set talk offcleark=0for m=700 to 899 for i=2 to m-1 if mod(m,i)=0 exit endif endfor if i=m and 1$str(m)=.T.k=k+1 b=m endif endfor?k,bset talk on return,求(-)素数且至少有一位为1的素数,*改错,78,1*主程序:T1.PRGSET TALK OFFCLEARSTORE AB TO K1,K2D

29、O T2?K1+K2SET TALK ONRETURN,*写出程序运行结果,79,*子程序:T2.PRGPRIVATE K1K1=K2+250?K1RETURN,80,*2SET TALK OFFCLEARSTORE 1 TO XSTORE 2 TO YDO WHILE XX/2 X=1+X2 Y=Y+1,81,LOOP ELSE X=X+1 ENDIFENDDO?X,YSET TALK ONRETURN,82,*3主程序Z.PRG,SET TALK OFFSTORE 2 TO X1,X2,X3X1=X1+1DO Z1?X1+X2+X3RETURN,83,*子程序Z1.PRGX2=X2+1DO

30、 Z2X1=X1+1RETURN,*子程序Z2.PRGX3=X3+1RETURN TO MASTER,84,*4SET TALK OFFX=15Y=7DO SUB WITH X,(Y)?X,YRETURN,85,PROCEDURE SUBPARAMETERS A,BA=A+BB=A-BRETURN,86,SET TALK OFFX=9Y=13Z=FU(X,Y)?ZRETURN,FUNCTION FUPARAMETERS A,BA=A*BRETURN(A),*5,87,*根据题目要求完善程序(1)通过字符串操作竖向显示“伟大祖国”,横向显示“祖国伟大”SET TALK OFFSTORE 伟大祖国 TO VAR1CLEARN=1DO WHILE N8?SUBSTR(VAR1,N,2)N=N+2ENDDO,88,?SUBSTR(VAR1,5,4)?SUBSTR(VAR1,1,4)SET TALK ONRETURN,89,格式输入命令,命令格式:,SAY GET READ SAVE CYCLE TIMEOUT,命令用READ命令来激活当前所有的GET变量,显示并允许修改变量的值。,DEFAULT,90,课堂小结,91,练习,92,作业布置,93,94,95,96,97,实验九结构化程序设计综合实例,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号