1 / 43

第六章

第六章. 结构化程序设计. 6.1 程序的建立与编辑. 6.1.1 基本概念 程序 : 程序是一组能够完成特定任务的命令序列 , 这些命令按照一定的结构有机地组合在一起 , 并以文件的形式存储在磁盘上 , 故又称为程序文件 . Visual FoxPro 程序文件 , 是一个以 (.PRG) 为扩展名的文本文件 . 执行程序时 , 从第一条命令开始按照程序结构连续执行 , 直至结束 . 6.1.2 建立编辑运行程序文件

lali
Download Presentation

第六章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第六章 结构化程序设计

  2. 6.1 程序的建立与编辑 6.1.1基本概念 程序:程序是一组能够完成特定任务的命令序列,这些命令按照一定的结构有机地组合在一起,并以文件的形式存储在磁盘上,故又称为程序文件. Visual FoxPro 程序文件,是一个以(.PRG)为扩展名的文本文件.执行程序时,从第一条命令开始按照程序结构连续执行,直至结束. 6.1.2建立编辑运行程序文件 在Visual FoxPro 系统环境下,建立、编辑程序文件有三种方式:项目管理器方式、菜单方式、命令方式。

  3. 6. 2 程序设计常用命令 6.2.1基本命令 注释命令 (1):note注释内容 (2):* (3)&&注释内容

  4. 6.2.2输入/输出命令 1.基本输出命令 ? ?? 例:有如下一个程序 ?"今天是:",DATE( ) ??"现在的时间是:",TIME( ) ?"HAPPY BIRTHDAY TO YOU !"

  5. 2.单字符输入命令 格式:WAIT [字符串] [TO 内存变量] [WINDOWS] [ TIMEOUT 数值表达式] 功能:暂停程序的执行,等待用户键入单个字符后再继续程序的执行。 例:有如下一个程序 wait "谢谢使用Visual FoxPro 6.0!" ; windows timeout 3

  6. 3. 字符串输入命令 格式:accept 字符串表达式 to 内存变量 注意:此命令只限于输入字符型数据。输入时内容不需要加定界符。 例:有如下一个程序 accept "请输入姓名:" to cname ?cname

  7. 4. 表达式输入命令 格式:input 字符串表达式 to 内存变量 注意:该命令可用于各种类型数据的输入。 输入字符型数据需要加定界符。 例:有如下一个程序 input “请输入姓名:” to cname input “请输入年龄:" to nage input “请输入出生日期:” to ddate ?cname,nage,ddate

  8. 5.格式输入输出命令 @行号,列号 SAY 表达式 例: clear cnum="01010105" n=19 da={^1981-12-23} @2,10 say cnum @3,10 say "我叫王小力" @4,10 say "学号是:"+cnum @5,10 say "年龄是:"+str(n) @6,10 say "出生日期是:"+dtoc(da)

  9. 6. 3 程序的基本控制结构 顺序,选择,循环三种基本结构 一.顺序结构 按照程序语句一条一条的顺序的往下执行。 二.分支结构 根据不同的条件,选择执行不同的程序语句,用来解决有选择,有转移的诸多问题。 三.循环结构 使一些语名重复地执行若干次。

  10. 6.3.1顺序结构 [新例]:解方程组求X,Y的值. AX+BY=C DX+EY=F 分析得: Y=(CD-FA)/(BD-EA) X=(C-BY)/A

  11. 程序语句如下: input "请输入A的值" TO A input "请输入B的值" TO B input "请输入C的值" TO C input "请输入D的值" TO D input "请输入E的值" TO E input "请输入F的值" TO F Y=(C*D-F*A)/(B*D-E*A) X=(C-B*Y)/A ?X,Y

  12. [书例6.1]:查找学生表中有没有叫于莉丽这个人,显示有关信息。[书例6.1]:查找学生表中有没有叫于莉丽这个人,显示有关信息。 程序语句如下: clear use 学生 loca for 姓名="于莉丽" disp 学号,姓名,性别,出生日期,系别 use return

  13. 书例程序流程图: 开始 清除屏幕 打开学生表 查找名为张杰的记录 显示该学生的情况 关闭学生表 结束

  14. 顺序结构练习: 编写一个程序,程序功能是:任意输入四个数,找出四个数的最大值和最小值。 提示:可利用max( ),min( )函数。 例如:?max(4,5,6,2)值为6

  15. 6.3.2分支结构 它是非常重要的语名,基本形式有三种。 1.单分支结构 语句格式: if 条件表达式 命令行序列 endif 功能:若条件表达式的值为真,则顺序执行命令序列;否则跳过命令序列,直接执行endif后面的命令。

  16. [书例6.2]:查找学生表某同学的信息。 clear use 学生 accept "请输入学生姓名:" to cname loca for 姓名=cname if found( ) ?"学号"+学号 ?"姓名"+姓名 ?"出生日期:"+dtoc( 出生日期) endif use return

  17. 2.双分支结构 if 条件表达式 命令行序列1 else 命令行序列2 endif 语句格式: 功能:即根据用户设置的条件表达式的值,选择两个操作中的一个来执行.

  18. 例6.3:编写一个程序,程序功能是:任意查询一个人,找到则显示其信息,找不到则显示无此人.例6.3:编写一个程序,程序功能是:任意查询一个人,找到则显示其信息,找不到则显示无此人. clear use 学生 accept "请输入学生姓名:" to cname locate for 姓名=cname if found( ) ?"学号"+学号 ?"姓名"+姓名 ?"出生日期:"+dtoc( 出生日期) else ?"无此人" endif use return

  19. 开始 书例程序流程图: 清除屏幕 打开学生表 输入学生姓名 找到否? 显示该学生信息 显示提示信息 关闭学生表 结束

  20. IF语名嵌套 例6.4:根据输入的X值,计算下面分段函数的值,并显示结果。 input "请输入X的值" to x if x<1 y=2*x-5 else if x<10 y=2*x else y=2*x+5 endif endif ?y

  21. 多分支结构 即根据多个条件表达式的值,选择执行多个操作中的一个对应执行。 input "请输入X的值" to x do case case x<1 y=2*x-5 casex>=1.and.x<10 y=2*x case x>=10 y=2*x+5 endcase ?y

  22. 语句格式: DO CASE CASE 条件表达式1 命令行序列1 CASE 条件表达式2 命令行序列2 …… CASE 条件表达式N 命令行序列N [OTHERWISE 命令行序列N+1] ENDCASE

  23. 例6.5:输入某学生成绩,并判断其成绩等级: (见书160页)。 DO CASE 语句练习: 计算y的值: 当x<0时, y=2*x 当x>=0.and.x<2时,y=x**2 当x>=2.and.x<3时,y=1-x 当x>=3.and.x<6时,y=(x+5)**2 当x>=6时, y=x*(x+5)

  24. 6.3.3循环结构 DO WHILE <条件表达式> <命令序列1> [LOOP] <命令序列2> [EXIT] <命令序列3> ENDDO

  25. DO WHILE型循环也叫当型循环.即根据条件表达式的值,决定循环体内的执行次数.最简单的循环格式为: DO WHILE <条件表达式> <命令行序列> ENDDO

  26. 新例:读程序写出结果。 x=1 do while x<50 ?x x=x*3 enddo

  27. 例6.6:计算1+2+…+100 • s=0 • i=1 • do while i<=100 • s=s+i • i=i+1 • enddo • ?s 注意:S=S+i,i=i+1 在这里等号是赋值的作用, 先计算等式右边的表达式,然后把结果赋给等号左边的变量。 练习计算100以内的奇数和。 练习计算100以内的偶数和。

  28. 练习1:读程序写结果: y=0 do while y<=40 y=y+1 if y/7=int(y/7) ?y endif enddo Int为取整函数,对括号中的表达式取出整数部分。

  29. 练习2:读程序写结果: t=“abcdefg” i=1 do while i<6 ?substr(t,6-i,1) i=i+1 enddo substr(t,6-i,1)意思是:对字符 串t取子串,从第6-i个位置取, 取1个字符串。

  30. Exit命令在程序当中的应用。 • 例: • i=0 • do while .t. • ?"同学们你们好" • i=i+1 • if i=10 • exit • endif • enddo Exit :退出DO WHILE 循环。

  31. loop命令在程序当中的应用。 • i=1 • s=0 • do while i<=100 • if i/2=int(i/2) • i=i+1 • loop • endif • s=s+i • i=i+1 • enddo • ?s LOOP :返回DO WHILE 循环,重新判断条件是否正确。

  32. 例6.7:统计学生表中男女生人数。 • use 学生 • store 0 to s1,s2 • do while !eof( ) • if 性别="男" • s1=s1+1 • else • s2=s2+1 • endif • skip • enddo • ?"男生人数"+STR(s1) • ?"女生人数"+STR(s2) • use

  33. 书例6.8: store "Y" to cans use 学生 do while .t. accept "请输入学生姓名" to cname loca for 姓名=cname if found( ) ?"学号:"+学号 ?"姓名"+姓名 ?"出生日期"+DTOC(出生日期) else ?"没有"+cname+"这个学生" endif wait "是否继续查找(YN)?" TO cans if upper(cans)="Y" ? loop else exit endif enddo ?"程序结束,谢谢使用" use

  34. 2.计数循环控制语句 • 语句格式: • FOR 循环变量=循环变量初值 TO 循环变量终值 STEP 循环变量步长 • 命令行序列 • ENDFOR/NEXT 使用DO WHILE循环: i=1 s=0 do while i<=100 s=s+i i=i+1 enddo ?s • 例:计算1+2+…+100 • s=0 • for i=1 to 100 • s=s+i • endfor • ?s

  35. 例:计算100以内的偶数和. • for i=2 to 100 step 2 • s=s+i • endfor • ?s

  36. 编程练习:判断一个数是否为素数。 input "请输入一个数:" to n flag=1 for i=2 to n-1 if mod(n,i)=0 flag=0 exit endif endfor if flag=1 ?"这个数是素数" else ? "这个数不是素数" endif

  37. SCAN 循环结构 专用于处理数据表中的记录 格式:scan for 条件 命令序列1 [loop 命令序列2] [exit 命令序列3] endscan 功能:在当前表的指定范围内自动地逐条移动记录指针,直到条件为假或到达文件尾部。

  38. 例6.10:用scan统计学生表中男女生人数。 use 学生 store 0 to s1,s2 scan if 性别="男" s1=s1+1 else s2=s2+1 endif endscan ?"男生人数"+str(s1) ?"女生人数"+str(s2) use

  39. 4.多重循环 例6.11打印九九乘法口诀表。 clea for i =1 to 9 for j=1 to i ??space(3)+ str(j,1)+"*"+str(i,1)+"="+str(j*i,2) endfor ? endfor

  40. 例:输入10个数,找出最小值。 dime a(10) for i=1 to 10 input "请输入数据" to a(i) endfor for i=2 to 10 if a(1)>a(i) a(1)=a(i) endif endfor ? a(1)

  41. 课后练习1:任意输入20个数,统计其中正数、负数、零的个数。课后练习1:任意输入20个数,统计其中正数、负数、零的个数。 store 0 to x1,x2,x3 dime a(20) for i=1 to 20 input "请输入数据" to a(i) endfor for i=1 to 20 do case case a(i)>0 x1=x1+1 case a(i)=0 x2=x2+1 case a(i)<0 x3=x3+1 endcase endfor ?x1,x2,x3

  42. 课后练习:182页上机练习的第四题。 计算∏的值 s=0 for n=1 to 1000 s=s+(1/(4*n-3)-1/(4*n-1)) endfor ?s

  43. 程序结束谢谢收看

More Related