D:2010-12-21 T:19:50:00 IP:192.168.1.200
作者: 张顺海 | 今日(2010.12.21日)授课回顾
1.程序设计结构:
顺序结构、分支结构、循环结构
2.分支结构
单分支、双分支、多分支
3.循环结构
do whil .....enddo (多用于未知循环次数的循环)
for .........endfor/next(多用于已知循环次数的循环)
scan ........endsczn (多用于数据库表格的扫描)
4.上节实训实例讲解(一条龙数字排列)
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
源程序:
set talk off
for i=1 to 4
for j=1 to 5
if mod(i,2)=1
?? (i-1)*5+j
else
?? i*5+1-j
endif
?
endfor
endfor
5.练习
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
for i=1 to 4
for j=1 to 5
?? j
next
?
next
************************
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
for i=1 to 4
for j=1 to 5
?? (i-1)*5+j
next
?
next
*******************
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
for i=1 to 4
for j=1 to 5
?? (i-1)*5+j
next
?
next
6.作业分析(杨辉三角)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
规律:
1.指定行上有与行数一致的个数,例如第5行上有5个数;
2.每行的首尾为1;
3.从第三行开始,每行的第2个数到倒数第二个数的规律为,等于上一行对应位置上的数与该数前边数字之和;
4.由此推出此数列的前10行。
参考:
dime a(10,10)
for i=1 to 10
a(i,1)=1
a(i,i)=1
endfor
for i=3 to 10
for j=2 to i-1
a(i,j)=a(i-1,j)+a(i-1,j-1)
next
next
for i=1 to 10
for j=1 to i
?? a(i,j)
endfor
?
next
7.认真分析今天的题目,以小组为单位分析、沟通。 |
D:2010-12-19 T:8:53:00 IP:188.188.2.1
作者: 张顺海 | 重点总结:(同学们问题较多的问题)
1.dime s(3,4)
s(2,3)=[2+3]
? type(s(7))
结果应该是:N
分析:
二维数组可以被一维数组形式访问。这里的s(2,3)和s(7)正好是互访的。(一维数组不能被二维访问)
给s(2,3)赋值为[2+3]是字符型的。
type()函数要求自变量为C型,即相当于type("E")的形式,type(s(7))-->type(s(2,3))-->type("2+3")-->相当于测试2+3的类型,结果为N。
2.m=234,n=100,c="m+n",? 1+&c的值为:
分析:&为宏替换,即将它替换成它的值
即:1+&c-->1+m+n-->335
注意不等于:1+&c-->1+"m+n"-->结果不正确
3.list for 单价>100 和list while 单价>100执行后都为使eof()为真。(前者是,后者不一定)
因为,后者,依赖于当前指针的位置。
4.year(),month(),day()返回值为N型
即:year()返回年份,其他的是月份,日。 |
D:2010-12-19 T:8:10:00 IP:188.188.2.1
作者: 张顺海 | 2010.12.18 内容回顾
一、几种循环形式
1.scan....endscan(专门用于处理dbf文件)
clea &&清屏
use tushu &&打开图书表格
set head off &&设置显示标题
i=0 &&计数器,设置为0
scan &&循环开始
if "国"$书名 &&判断书名中是否有‘国字’
disp spac(10),书名,单价,版别 &&如果含有,则显示10个空格,然后显示三个信息,可不可以用disp
i=i+1 &&计数器加1,后边要用到
if mod(i,10)=0 &&如果够10条记录,等0.5秒
wait '' timeout 2 &&这里的空串,不显示任何信息,如果省略则会有“按任意键继续的字样”
endif &&结束
set head off &&设置去掉记录上字段的标题
endif &&条件结束
endscan &&循环结束
? "共有",i,"条符合条件的记录" &&显示计数的结果。
retu &&返回程序
2.程序段,训练对循环的控制
set talk off &&打开屏幕回显(只有foxbase中有效)
clea
text
***************************************
第一段程序"
1) 显示出如下数列
1 3 5 7 9 11 13 15 17 19
***************************************
endtext
?
i=1
do whil i<=10
?? i*2-1 &&数值型的结果,格式不易控制
i=i+1
enddo
?
i=1
do whil i<=10
?? str(i*2-1,3) &&转换成字符串再处理,格式易控制
i=i+1
enddo
wait
clea
text
***************************************
第二段程序
前10个数"
1 1 2 3 5 8 13 21 34 55
***************************************
endtext
i=3
j=1
k=1
? str(j,3),str(k,3)
do whil i<=10
c=j+k
?? str(c,3)
j=k
k=c
i=i+1
enddo
?
? &&换行
wait
clea
text
***************************************
第三段程序
3)这样排列的前20个数
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
***************************************
endtext
?
for i=1 to 4
for j=1 to 5
if mod(i,2)=1
?? str((i-1)*5+j,3)
else
?? str(i*5-j+1 ,3)
endif
next
?
endfor
?
for i=1 to 4
for j=1 to 5
?? iif(mod(i,2)=1,str((i-1)*5+j,3),str(i*5-j+1 ,3))
endfor
?
endfor
set talk on
retu
二、综合实例
set talk off
set esca off &&使ESC无效,即让程序不响应ESC按键,如果程序调试阶段请不要这样设,不然死循环,就不能出来了.
use tushu
do whil .t.
clea
sm=spac(50)
@15,20 say "请输入您要查询的书名(智能查找)" get sm
*在屏幕的第15行,20列开始输出提示信息,并获得数据
*并将结果放入变量sm中
read
*激活变量
sm=allt(sm) &&将变量去掉前后的空格,再赋值给它
if sm="000" &&如果输入的是书名为"000"则退出程序(本次循环)
exit
endif
if empty(sm) &&如果没有输入则重新输入(就是结束本次循环,继续下次新循环)
loop
endif
locate for sm$书名 &&定位
if found()
xx=16
c=0 &&计数器初始化,设为零
do whil .not.eof()
c=c+1 &&计数器自加1
ss=allt(书名+allt(str(单价))+版别)
@xx,20 say ss
if xx<=40
xx=xx+1 &&行变化,一直到最大到41行
else
@16,20 to 41,80 scro up by 1 &&过了41行,就滚动,每次一行
wait "" timeout 0.2 &&自动控制,间隔0.2秒,如果没有时间就自动滚屏,类似list
endif
cont
enddo
c=allt(str(c)) &&将统计结果(N型)转换成(C型),用来使用&(宏替换)
@42,20 say "本次共有&C.本符合条件的记录"
else
@42,20 say "查无此书[&sm.]" &&请大家想想这里的宏替换有什么用
endif
wait ""
enddo
clea
@ 15,20 say "谢谢您的使用,再见" &&在指定位置输出信息
wait "" &&让操作都看清上边的提示信息,等待用记按键,因为下边有一个清屏命令.
clea
set talk off
set esca on
retu
三、重点
1.循环控制的几种形式(进入循环、变量变化、退出)。
2.如何控制屏幕的输入、输出位置(参照第二部分)
3.注意几个知识点:
set esca on/off; @x,y say N get sm /read;
iif(x>y,z,m); acce/locate/found()/cont;
4.wait '' timeout 0.5
5..not.eof()/found()的使用
6.do while .t./exit/loop/enddo的使用
7.组成小级分析程序段落
四、相应资料、源程序代码访问网站
地址:http://192.168.8.40/ch01
五、作业
上机调试相应程序段,分析代码、代码之间的关联、用途,分组分析,相互促进。
|
D:2010-12-17 T:12:53:00 IP:192.168.8.40
作者: 张顺海 | 2010.12.17日讲课内容
1.程序的设计结构:
1)顺序结构
2)选择结构
3)循环结构
2.顺序结构特点:
每一条语句,均被执行,且执行一次。
执行到没有语句可执行为止,退出。或者执行return。
3.选择结构特点:
语法表现形式:1)单分支 2)双分支付 3)多分支
实例:
If <条件>
语句块
Endif
If <条件>
语句块1
Else
语句块2
Endif
Do case
case <条件1>
语句块1
case <条件2>
语句块2
case <条件3>
语句块3
case <条件n>
语句块n
[[Otherwise]
语句块n+1]
Endcase
特点:一选一;二选一;多选一;
如果条件不立,可能没有语句被执行。
3.书上的实例:
1)电费计算
set talk off
input “输入用电量” to x
if x<=300
y=x*0.52
else
y=300*0.52+(x-300)*0.70
endif
? "电费为:",y
set talk off
retu
2)查找业务人员是否为经理
set talk off
use 业务员
acce "请输入要查询的人员ID" to ryid
locate for 业务员ID=ryid
if .not.eof()
if 职务="业务经理"
? "是业务经理"
else
? "不是业务经理"
endif
else
? "查无此人"
endif
use
set talk on
retu
3)循环(显示1-10)
set talk off
i=1
do whil i<=10
?? i
i=i+1
enddo
?
for j=1 to 10 step 1
?? j
endfor
?
for k=1 to 10
??k
next
?
for l=10 to 1 step -1
?? 11-L
endfor
set talk off
retu
4.练习和作业
1)
显示出如下数列
1 3 5 7 9 11 13 15 17 19
2)前10个数
1 1 2 3 5 8 13 21 34 55
3)这样排列的前20个数
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
4)从图书表(tushu.dbf)中的"书名"中找出含有指定信息的书,并把书的详细信息及查询结果显示出来.
例如:输入"三国",那把书名中含有"三国"的所有图书信息显示出来,并在下面统计出结果,如"此次查询共查询到**本书".
书名为"000"时退出程序.
程序文件名为:cx.prg. |