第一篇:一级程序(教学用)VFP
第一部分:程序入门
一级
一、选择结构(IF-ELSE-ENDIF)语句格式:IF〈条件〉
〈语句序列1〉 [
ELSE 〈语句序列2〉] ENDIF 说明:IF和ENDIF必须配对使用,而ELSE可选。三个语句应各占一行。若省略ELSE子句,条件为真时,则执行〈语句序列1〉,然后再执行ENDIF后的语句;否则,若条件为假,即执行ENDIF后的语句。
二、循环结构
1、条件循环: 语句格式:
DO WHILE 〈条件表达式〉
〈语句序列1〉
[ LOOP]
〈语句序列2〉
[ EXIT ]
〈语句序列3 〉 ENDDO 说明:系统执行该语句时,先测试条件表达式的值,若为真,则执行循环体,在循环体中修改循环条件,直到条件为假时,脱离循环,执行循环体ENDDO后的语句。若遇到LOOP语句,则直接返回执行DO语句,测试条件以决定是否继续循环。若执行循环体时遇到EXIT语句,则不执行下面的语句,直接跳出循环,执行ENDDO后面的语句。
注意:DO WHILE
必须和ENDDO配合使用,两者缺一不可,DO WHILE语句前一定要有条件变量的初始值。
2、计数循环
FOR 〈循环变量〉=〈循环初值〉TO 〈循环终值〉[STEP〈步长〉]
〈语句序列1〉
[LOOP]
〈语句序列2〉
[EXIT]
〈语句序列3〉 ENDFOR/NEXT 说明:使用和DO WHILE 基本一致,注意步长和ENDFOR语句。
三、程序举例:
A.Eg:求出[10,100]内所有能被2整除的整数的和(2530),个数(46)set talk off clear 简单整除,求和求个数。n=0 &&设置计数变量 s=0 &&设置求和变量 I=10 &&设置循环变量
Do while I<=100 &&循环开始及结束 if mod(i,2)=0 &&判断整除条件
n=n+1 &&满足条件计数变量加1
s=s+i &&满足条件,求和变量增加 endif &&结束条件 I=I+1
&&循环变量累加
Enddo &&此句使循环回到 do while 处 ? n,s &&输出结果 set talk on return
A1.求出[10,100]内所有能被7和9中至少一个数整除的整数的个数(22),和(1250).A2.求出[10,100]内所有能被7但不能被9整除的整数的个数(12),(665)
A3.求出[10,100]内所有能被7和9中的一个且只有一个数整除的整数的个数(21),(1187)
A4.编写程序,求出1~7000以内能被3或者7整除的数的个数(3000)。A5.编写程序,求[1,500]既能被6整除又能被7整除的数之和。(2772)A6.求前[1,100]内能被6或8整除的所有自然数的平方根的和(将第1位小数四舍五入,结果只保留整数)。(162)
A7.将大于1000且能被3和5中至少一个数整除的所有整数按从小到大顺序排列后,求前面20个数之和。(20465)set talk off clear k=1 s=0 &&设置求和变量 x=1000 do while k<=20 x=x+1 if mod(x,3)=0 or mod(x,5)=0 s=s+x &&满足条件,求和变量增加
k=k+1 endif enddo ? s set talk on return
A9 将小于2000且能被4和6中至少一个数整除的所有整数按从小到大顺序排列后,求最后20个数之和。(39390)B类: 简单余数
Eg: 编写程序,求出100到500之间同时满足除5余4和除7余2条件的数的个数及和。(12)(3678)Set talk off S=0 N=0 I=100 Do while I<=500 If mod(I,5)=4 and mod(I,7)=2 S=s+I N=n+1 Endif I=I+1 Enddo ?n,s set talk on return
B!.编写程序,求在10~1000之间所有能被4除余2,被7除余3,被9除余5的数之和。2000 B2.求出[200,800]内被除3余1并且被除5余3的整数的和。20020
C类:退出控制
Eg: 编写程序,求出1到6000之间的能被5整除的前若干个偶数之和,当和值大于650时退出并输出和值。660 Set talk off S=0 For I=1 to 6000
If mod(I,5)=0 and mod(I,2)=0 S=s+I Endif If s>650 Exit Endif Endf ?s
C1: 编写程序,求出1到5000之间的能被7整除的前若干个数之和,当和值大于等于1500时退出并输出和值。1617 C2: 编写程序,已知:S=2+4+8+16+32+„,求S不大于980的最大值。510 Set talk off S=0 For I =1 to 1000 X=2*i S=s+x ?x,s If s>980 Exit Endif Endf ?s-x
C3: 编写程序,已知:S=1+3+5+7+9+„,求S不大于1000的最大值。961 C4: 编写程序,已知:S=2+4+8+16+32+„,求S不大于9000的最大值。8190 C5.已知数列:1,2,4,7,11,16,„,其规律是相邻两项之差依次是1,2,3,4,5,„。试求出此数列中大于5000的最小的项。5051 C6.求出50以内最大的自然数n,使得从1开始的连续n个自然数的倒数之和小于3.5。(18)set talk off clear s=0 for n=1 to 50 s=s+1/n &&先求倒数再求和 if s>=3.5 exit
&&退出循环
endif endfor ? n-1 &&为什么? return
C7: 求出50以内最小的自然数n,使得从1开始的连续n个自然数的倒数之和大于3.6(21)C8: 求出50以内最小的自然数n,使得从1开始的连续n个自然数的立方和小于20000(16)
C9.求出50以内最大的自然数n,使得从101开始的连续n个奇数之和小于2000。(17)set talk off clear s=0 for n=1 to 50 a=99+2*n s=s+a if s>2000 exit endif endfor ? n-1
return
C10.求出100以内使得算式1/(1*2)+1/(2*3)+„+1/(n*(n+1))的值小于0.952的最大的自然数n。19
C11.某国在2000年时人口总数为1亿,若以每年3%的速度递增,试求出至少要到哪一年该国人口总数才会翻一翻。2024 set talk off clear s=1 for n=2001 to 2100 s=s*1.03 if s=2 &&应改为 if s>=2 loop &&应改为
exit endif endfor ? n set talk on return
C12.某国今年的人口总数为1亿,若以每年4%的速度递增,试求出至少要再过几年该国人口总数才会翻一翻。18 C13.一球从100米高处落至平地,并且连续多次再反弹再落下,假设每次反弹的高度都是前一高度的3/4倍,试求出最小的自然数n,使得此球从开始下落至第n次着地时在垂直方向所经过的总路程超过678米。13 set talk off clear h=100 s=0 应改为: s=100 for n=2 to 100 h=h*3/4 s=s+h 应改为: s=s+2*h if s>678 exit endif endfor ? n set talk on return C14.一球从100米高处落至平地,并且连续多次再反弹再落下,假设每次反弹的高度都是前一高度的3/4倍,试求出最大的自然数n,使得此球从开始下落至第n次着地时在垂直方向所经过的总路程不超过590米。6
第二部分:算法举例
D类:多循环控制 穷举法:穷举法就是将所有可能的方案都一一测试,找出其中符合指定要求的。
Eg.把一张一元钞票,换成一分、二分和五分硬币,每种至少1枚,问有多少种方案?(461)
set talk off clea n=0 for yi=1 to 100 && 1分的最少1枚,最多100枚。for er=1 to 50
for wu=1 to 20 if yi+er*2+wu*5=100 n=n+1 endif endfor endfor endfor ? n set talk on return
d1.把一张一元钞票,换成一分、二分和五分硬币,每种至少1枚,问兑换后硬币总数最多的与硬币总数最少的枚数之差是多少?(73)d2.把一张一元钞票,换成一分、二分和五分硬币,每种至少1枚,问兑换后其中 二分的硬币恰有20枚的方案共有多少种?(11)d3.有60个学生一起买小吃,共花钱100元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种
不同的解(去掉某类学生为0的)? 19
D4.有5羊4犬3鸡2兔值钱1496,4羊2犬6鸡3兔值钱1175,3羊1犬7鸡5兔值钱958,2羊3犬5鸡1兔值钱861,求兔值多少钱?(鸡13, 兔29 犬121, 羊177)(修改并调试下列程序)
set talk off for y=1 to 300
for c=1 to 400 for j=1 to 500 for t=1 to 400 if 5*y+4*c+3*j+2*t=1496 and 4*y+2*c+6*j+3*t=1175;
3*y+1*c+7*j+5*t=958 and 2*y+3*c+5*j+1*t=861 ? y,c,j,t endif endf endf
endf
endf set talk on
E类:简单位数运算
Eg:编写程序,求三位数的奇数中,所有各位数字之和是15的倍数的数的和。19731 Set talk off S=0 For I=100 to 999 A=int(I/100)B=int(mod(I,100)/10)C=mod(I,10)If mod(I,2)=1 and mod(a+b+c,15)=0 S=s+I Endif Endf ?s
e1: 编写程序,求三位数的奇数中,所有各位数字之和是12的倍数的数的个数。38 e2: 编写程序,求三位数的偶数中,所有各位数字之和是15的倍数的数的个数。34 e3: 编写程序,计算在0~50的范围内有多少个数,其每位数的乘积小于每位数的和。26 e4: 编写程序,计算1000以内有多少个这样的数,其个位数为6且该数能被9整除。11 e5: 编写程序,统计200~400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数 4 e6: 编写程序,求四位数的偶数中,所有各位数字之和是24的倍数的数的个数。187 set talk off n=0 for I=1000 to 9999 a=int(i/1000)b=int(mod(I,1000)/100)c=int(mod(I,100)/10)d=mod(I,10)if mod(I,2)=0 and mod(a+b+c+d,24)=0
n=n+1 endif endf ?n
e7: 编写程序,求四位数的奇数中,所有各位数字之积(且不为0)是125的倍数的数的和。161095 e8: 编写程序,求在四位数的偶数中,所有各位数字之积(且不为0)是18的倍数的数的和。8638596 e9: 编写程序,计算100-10000以内个位上的数小于百位上的数的所有数之和。23314500(改错并调试下列程序)set talk off clea n=100 for i=100 to 10000 bw=mod(i,1000)gw=mod(i,10)if gw F类:回文数 Eg:所谓回文数是从左至右与从右至左读起来都是一样的数字,如:121是一个回文数。编写程序,求出100-200的范围内所有回文数的和。1460 Set talk off S=0 For I=100 to 200 A=int(i/100)B=int(mod(I,100)/10)c=mod(I,10)If a=c S=s+i endif endf ?s f1: 所谓回文数是从左至右与从右至左读起来都是一样的数字,如:121是一个回文数。编写程序,求在100-900的范围内所有能被3整除的回文数的个数。26 f2: 所谓回文数是从左至右或从右至左读起来都是一样的数字,如:121是一个回文数。编写程序,计算从1981年开始到3000年为止,共有多少个年号是回文数年号。11 f3: 求出[123,456]内恰好有两个数字相同的所有整数之和。26406(改正并调试下列程序)set talk off clear s=0 for x=123 to 456 a=int(x/100)b=int((x-a*100)/10)c=mod(x,1)if a=b and a!=c or a!=b and a=c s=s+x endif endfor ? s set talk on return G 类:水仙花数 Eg: “水仙花数”是指这样的数,其各位数字的立方和等于该数本身。编写程序求100至400的范围内有多少个水仙花数。3 Set talk off n=0 For I=100 to 400 A=int(i/100)B=int(mod(I,100)/10)c=mod(I,10)If a^3+b^3+c^3=i N=n+1 endif endf ?n g1: “水仙花数”是指这样的数,其各位数字的立方和等于该数本身。编写程序求100至999的范围内有多少个水仙花数。4 g2: “水仙花数”是指这样的数,其各位数字的立方和等于该数本身。编写程序,计算从100年开始到2000年为止,共有多少个年号是水仙花数年号。4 g3: 设某四位数的各位数字的平方和等于198,问满足这种条件的最大数和最小数之和是多少?12749(改正并调试下列程序)set talk off clea min1=1000 max1=1000 for x=1000 to 9999 a=int(x/1000)b=int((x-a*1000)/100)c=int(x/100)/10 d=mod(x,10)if a*a+b*b+c*c+d*d=198 if max1 H类:位数及多条件运算 Eg: 编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是8的倍数,且A+B=B+C,即第1位数加上第2位数等于第2位数加上第3位数。110 set talk off n=0 for I=1000 to 9999 a=int(i/1000)b=int(mod(I,1000)/100)c=int(mod(I,100)/10)d=mod(I,10)if mod(I,8)=0 and a+b=b+c n=n+1 endif endf ?n h1: 编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是18的倍数,且C=7,A+B=C+D,即第1位数加上第2位数等于第3位数加上第4位数。9 h2: 编写程序,统计1000~9999之间的所有满足以下条件的四位数的个数。该四位数是一个完全平方数,且其第1位与第3位数字之和为10,第2位与第4位数字之积为12。2 set talk off n=0 for I=1000 to 9999 a=int(i/1000)b=int(mod(I,1000)/100)c=int(mod(I,100)/10)d=mod(I,10)if a+c=10 and b*d= 12 and int(sqrt(i))=sqrt(i)&&注意判定完全平方数 n=n+1 ? i endif endf ?n h3: 编写程序,统计1000~9999之间的所有满足以下条件的四位数的个数。该数是一个完全平方数,且其第1、2位数字之和为10,第3、4位数字之积为18。1 h4: 求满足条件A*B=54321且使A+B的值最小的自然数对A、B中较大的一个数。(提示:设A<=B,当A越大时A+B越小)953 set talk off clear c=54321 k=int(sqrt(c))for a=1 to k b=int(c/a)if a*b=c max=b endif endfor ? max set talk on return h5: 求满足条件A*B=54321的所有自然数对A、B对应的A+B的最小值。(提示:设A<=B,当A越大时A+B越小)1010 h6: 设a=234,b=569,求a/b的精确值中小数点后前40位数字中数字8的个数。(提示:基于人工计算的思想)6 set talk off clear a=234 b=569 n=0 for k=1 to 40 a=a*10 q=int(a/b)if q=8 n=n+1 endif a=mod(a,b) &&余数是下次运算时的被除数 endfor ? n set talk on return h7: 求出将十进制整数98765432等值转换为二进制形式表示后其中数字0的个数。(提示:模拟人工计算的“2除取余”法)14 h8: 求出将十进制整数99887766554等值转换为十六进制形式表示后其中字母C的个数。(提示:模拟人工计算的“16除取余”法)2 h9: 对自然数A、B、C,若A if a*a+b*b=c*c and a &&排除A、B交换的情况。 n=n+1 endif endfor ? n set talk on return h10: 对自然数A、B、C,若A0 and min>z &&取最小值并保证都是正数解 ?min min=z endif endfor ? min set talk on return h14: 求方程9x+4y=2000的所有正整数解的|x-y|的最大值。487 h15: 找满足以下条件: X^2+Y^2=41^2 且X+Y之值最大的二个正整数X,Y, 求X+Y之值.49 h16: 对自然数A、B、C,若A Eg: 编写程序,求一正整数等差数列的前三项的和,该数列前四项之和是 26、之积是880。15 clea set talk off for a1=1 to 7 for d=1 to 7 if a1+(a1+d)+(a1+2*d)+(a1+3*d)=26 and a1*(a1+d)*(a1+2*d)*(a1+3*d)=880 ?a1,d ?a1+(a1+d)+(a1+2*d)endif endf endf i1: 编写程序,求一正整数等差数列的前五项的立方和,该数列前四项之和是 26、之积是880。4720 i2: 已知数列:1、2、4、7、10、15、„,其特点是:相邻两项之差恰好构成自然数列:1、2、3、4、5、„。求此数列的前100项中能被4整除的项的个数。25(改正并调试下列程序)set talk off clear a=1 k=0 for n=1 to 100 a=a+n if mod(n,4)=0 k=k+1 endif endfor ? k set talk on return J类:完数 Eg: 一个数如果刚好与它所有的因子之和相等,则称该数为一个“完数”,如:6=1+2+3,则6就是一个完数。求出200到500之间所有的完数之和。496 set talk off clea s=0 for i=200 to 500 k=0 && k是因子的和变量 for a=1 to i-1 && a是I的真因子 if mod(i,a)=0 k=k+a endif endf if k=I && I的因子求完后,看因子和是否等于原来的数i ?I &&显示有几个完数 s=s+i endif endf ?s j1: 一个数如果刚好与它所有的因子之和相等,则称该数为一个“完数”,如:6=1+2+3,则6就是一个完数。求出1000以内的完数的个数。3 j2: 一个数如果刚好与小于它的所有因子之和相等,则称该数为一个“完数”,求出1000以内的所有完数的平方和。246836 K类:递推 Eg: 已知一个数列的前3个数为0,0,1,以后每个数为前3个数的和,编程序求此数列的第36个数。334745777 set talk off clea f1=0 f2=0 f3=1 for i=4 to 36 f4=f1+f2+f3 f1=f2 f2=f3 f3=f4 endf ?f4 k1: 已知一个数列的前3个数为1,2,3,以后每个数为前3个数的和,编程序求此数列的第20项 101902 k2: 已知一个数列的前3个数为3,4,5,以后每个数为前3个数的和,编程序求此数列的第33项.537346739 k3: 设一数列{f(n)}:f(1)=1,当n>1时f(n)=1/(f(n-1)+1)。试求出此数列的前20项中大于0.618的项的数目。15 (改正并调试下列程序)set talk off clear f=1.00000000 n=0 for k=2 to 20 f=1/f+1 if f>0.618 n=n+1 endif * ? k,f,n endfor ? n set talk on return k4: 设有用26个字母表示的26个表达式:a=1,b=1/(a+1),c=1/(b+2),„,z=1/(y+25)。试求出这26个字母中其值小于0.1的字母个数。16(改正并调试下列程序)set talk off clear lett=1 n=0 for k=1 to 26 lett=1/(lett+k)if lett<0.1 n=n+1 endif endfor ? n set talk on return k5: 已知数列{f(n)}:f(1)=1,f(2)=4,当n=3,4,5,„时,f(n)=3*f(n-1)-f(n-2)。试求出100以内最大的自然数n使得此数列的前n项之和首次大于75364321。19(改正并调试下列程序)set talk off clear dimension f(100)&& 递推可能用数组的方法解决。f(1)=1 f(2)=4 s=0 for n=3 to 100 f(n)=3*f(n-1)-f(n-2)s=s+f(n)if s<75364321 loop endif endfor ? n set talk on return L类:因子 eg: 已知24有8个正整数因子(即:1,2,3,4,6,8,12,24),而24正好被其因子个数8整除。求[100,300]之间能被其因子数目整除的数的个数。19 set talk off clea c=0 && c是累计个数的。for n=100 to 300 s=0 for i=1 to n && I是n的所有因子。if mod(n,i)=0 s=s+1 && s是某个n的因子总个数 endif endfor if mod(n,s)=0 ?n c=c+1 endif endfor ? c set talk on return l1: 已知24有8个正整数因子(即:1,2,3,4,6,8,12,24),而24正好被其因子个数8整除。求[200,300]之间能被其因子数目整除的数中且能被3整除的数之和 1713 l2: 求出45678的所有非平凡因子(即除1和它本身以外的约数)中奇数的个数。7(改正并调试下列程序)set talk off clear a=45678 n=0 for b=3 to a step 2 if mod(b,a)=0 n=n+1 endif endfor ? b set talk on return M类:最大公约数 Eg: 求出179869和196037的最大公约数。2021 set talk off clear a=179869 b=196037 c=0 for d=2 to a if mod(a,d)=0 and mod(b,d)=0 c=max(c,d)?c endif endfor set talk on return m1: 求出20677和42067的最大公约数 713 N类:最小公倍数 Eg: 求出9269和8671的最小公倍数。[ 算法提示:a与b的最小公倍数是a的倍数中第1个被b整除的数 ] 268801 set talk off clear a=9269 b=8671 for k=a to a*b step a &&为什么? if mod(k,b)=0 exit &&为什么保证了最小公倍数。endif endfor ? k set talk on return O类:素数 素数函数: function p para x flag=1 for k=2 to int(sqrt(x)) if mod(x,k)=0 flag=0 exit endi endf retu flag Eg : 编写程序,求出3到200之间的所有非偶数非素数的数之和。5774 clea set talk off s=0 for i=3 to 200 if p(i)=0 and mod(i,2)=1 s=s+i endif endf ?s function p para x flag=1 for k=2 to int(sqrt(x)) if mod(x,k)=0 flag=0 exit endi endf retu flag o1: 编写程序,求出3到100之间的所有非偶数非素数的数的个数。25 o2: 所谓素数是指这样的自然数,除1和它本身外不再有其它因子。编写程序,计算从1981年开始到3000年为止,我们将遇到多少个素数年号。131 o3: 梅森尼数是指能使2^n-1为素数的数n,求[1,21]范围内的梅森尼数的个数?14(改正并调试下列程序)set talk off clea n=0 s=2 for x=2 to 21 s=s*2 flag=1 for i=1 to int(sqrt(x))if mod(s-1,i)=0 flag=0 exit endif endfor if flag=0 n=n+1 endif endfor ? n return 完 VFP程序题 第一套题 一、运行结果题 1、以下程序运行结果是 SET TALK OFF CLEAR A = 5 B = 12 C = 18 IF MAX(A , B)< C ? MAX(A, B) ELSE IF MIN(A , B)< C ? C ELSE ? MIN(A , B) ENDIF ENDIF SET TALK ON RETURN 2、以下程序运行结果是 SET TALK OFF CLEAR USE STCJ DO WHILE ,NOT, EOF() REPLACE 总分 WITH 高数 + 计算机 + 英语 SKIP ENDDO GO BOTTOM ? 学号,总分 USE RETURN 3、以下程序运行结果是 SET TALK OFF SET HEADINGS OFF SELECT 2 USE STCJ INDEX ON 编号 TO GZ21 REPLACE ALL 总分 WITH 高数 + 计算机 + 英语 SELECT 1 USE STDA SET RELATION TO 编号 INTO B DISPLAY FIELDS 姓名,B.总分 FOR 四级通过 OFF CLOSE ALL RETURN 4、以下程序运行结果是 SET TALK OFF SET SAFETY OFF USE STDA INDEX ON 民族 TO XBSY TOTAL ON 民族 TO GZHZ USE GZHZ COUNT TO N ? N SET SAFETY ON SET TALK ON RETURN 5、以下程序运行结果是 SET TALK OFF SET DELETED ON USE STDA DELETE FOR 性别 = “ 男 ” COUNT TO A SET DELETED OFF COUNT TO B DELETE ALL PACK COUNT TO C ? A , B , C SET TALK ON RETURN 6、以下程序运行结果是 SET TALK OFF USE STDA INDEX ON 奖学金 TO GZSY SKIP 2 ? 姓名,奖学金 USE SET TALK ON RETURN 7、以下程序运行结果是 SET TALK OFF SET PROCEDURN TO SP S = 0 DO SP1 WITH 5 , S ? S SET TPROCEDURE TO RETURN * SP PRG PROCEDURE PARAMETERS X , Y N = 1 Y = 1 DO WHILE N < X Y = Y + N N = N + 1 ENDDO RETURN 8、以下程序运行结果是 SET TALK OFF DIMENSION X(2 ,2)X = 5 FOR I = 1 TO 2 FOR J = 1 TO 2 IF I = J X(I , J)ENDIF ?? X(I , J)ENDFOR ENDFOR SET TALK ON RETURN 二、完善程序 1、下列程序计算机 S =1!+ 2!+3!+4!+5!中,填空完成程序。 S = 0 FOR N = 1 TO 5 FOR I = 1 TO N P = P * I ENDFOR ENDFOR ? “SUN =” , S 2、用下列程序找出所有的水仙花数,所谓水仙花数,是指这样一 个三位数,其各位数字的立方和等于该数本身,如 153 = 1^3 +5^3 +3^3,对以下程序填空完成该功能。FOR N = 100 TO 999 A = INT(N / 100) B = C = N – INT(N / 10)* 10 IF N = A^3 +B^3 +C^3 ? N ENDIF ENDFOR RETURN 3、将新表 DB2.DBF 文件中学号重复的记录删掉(只保留一个)SET TALK OFF SET SAFETY OFF USE STDA COPY TO DB2 USE DB2 INDEX ON 学号 TO XH DO WHILE.NOT.EOF()XH = 学号 SKIP DELETE ENDIF ENDDO CLEAR ALL 4、显示STDA.DBF 文件中男同学的记录 SET TALK OFF SET HEADING OFF USE STDA DO WHILE .NOT.EOF() IF ENDIF DISPLAY WAIT ENDDO USE SET TALK ON RETURN 5、将STDA.DBF 表中未通过英语四级考试学生的将赏金取消,通过者奖学金加50元,并显示姓名和奖学金额。SET TALK OFF CLEAR USE STDA DO WHILE.NOT.EOF()IF.NOT.四级通过 REPLACE 奖学 WITH 0 ELSE ? 姓名,奖学金 ENDIF SKIP ENDDO USE SET TALK ON RETURN 6、按学号查询成绩 SET TALK OFF CLEAR SELECT 1 USE STDA INDEX ON 学号 TO IXH SELECT 2 USE STCJ INDEX ON 学号 TO ICJ ACCEPT “请输入查询学号:” TO XH SEEK XH IF FOUND() DISPLAY 学号,A->姓名,总分 ELSE ? “ 查无此人!” ENDIF USE RETURN 7、请阅读下列判断一个自然数是否为质数的程序,并将程序填写完整。 SET TALK OFF INPUT “ 请输入一个大于1 的自然数:” TO N K = 0 J = 2 DO WHILE J < N IF MOD(N , J) J = J +1 LOOP ELSE K = 1 EXIT ENDIF ENDDO IF K = 0 ? + “ 素数” ENDIF ? “ 再见!” SET TALK ON RETURN 8、修改数据表文件 STDA.DBF 中指定同学的四级通过情况。SET TALK OFF USE STDA INDEX TO ISY DO WHILE.T.CLEAR ACCEPT “ 输入待学生的姓名” TO XM SEEK XM IF FOUND() @ 10 , 10 SAY “ 修改” + XM + “ 的四级通过情况:” GET 四级通过 WAIT “ 继续修改?(Y / N)” TO N IF ENDIF ENDDO USE RETURN 9、将数据表文件STDA.DBF 中的第三条记录与第四条记录的内容互换,并显示第三条记录。 SET TALK OFF CLEAR USE STDA GO SCATTER TO A GO SCATTER TO B GO GATHER FROM B DISPLAY GO USE SET TALK ON RETURN 10、如下程序根据键入的学号使用SQL SELECT 语句显示学生的学号、姓名和平均成绩。请在下划线处填写适当的内容,使程序能正确的运行。 DO WHILE.T.CLEAR ACCEPT “请输入学号:” TO KEYNO SELECT STDA.学号,姓名,(高数 +计算机 +英语)/3 AS平均成绩;FROM STDA.STCJ WHERE WAIT “如果退出,请按【Y】键!” TO KEY IF UPPER(KEY)= “ Y” ENDIF ENDDO USE RETURN 三、程序改错题 1、在STDA.DBF 中,查询某人英语四级通过情况,若通过了,则授予学位,否则不授予学位。(1)SET TALK OFF(2)USE STDA (3)ACCEPT “请输入姓名:” TO XM(4)SEEK FOR 姓名 = XM(5)IF EOF() (6)? “查无此人!”(7)RETURN(8)ENDIF (9)IF 英语四级通过 (10)?姓名 + “英语四级通过,授予学位”(11)ELSE (12)?姓名 + “英语四级没通过,不授予学位”(13)ENDIF(14)USE (15)SET TALK ON(16)RETURN 错误的行是 改为: 2、显示 STCJ.DBF 中总分不低于190分的所有学生的姓名和总分字段的值。 (1) SET TALK OFF (2) SET HEAD OFF (3) USE STCJ (4) DO WHILE RECNO()< = RECCOUNT() (5) REPL 总分 WITH 高数 +计算机 +英语 (6) IF 总分> = 190 (7) DISP 学号,总分 OFF (8) ENDIF (9) LOOP (10) ENDDO (11) RETURN 错误的行是: 改为: 3、在STDA.DBF 中,快速查询性别为“男”,“09/12/92”出生的人 (1) SET TALK OFF (2) USE STDA (3) INDEX ON 性别 +入学时间 TO LKL (4) SEEK “男” + “09/12/92” (5) IF .NOT.EOF() (6) DISPLAY (7) ELSE (8) ? “查无此人!” (9) ENDIF (10) USE (11) SET TALK ON (12) RETURN 错误的行是: 改为: 4、求出 STCJ 表中总成绩的最大值和最小值。(1) SET TALK OFF (2) USE STCJ (3) DO WHILE .NOT.EOF() (4) REPLACE 总分 WITH 高数 +计算机+英语 (5) SKIP (6) ENDDO (7) GO TOP (8) STORE 总分 TO MAX , MIN (9) DO WHILE .NOT.EOF() (10) IF MAX >总分 (11) MAX = 总分 (12) ENDIF (13) IF MIN <总分 (14) MIN = 总分 (15) ENDIF (16) SKIP (17) ENDDO (18) ? “最高分:” ,MAX ,”最低分:” , MIN (19)SET TALK ON (20)RETURN 错误的行是: 改为: 第九套题 一、完善程序题 1、将“职工”表中的数据按工资降序排列后生成新表,程序如下: CLOSE ALL SET TALK OFF CLEAR USE 职工 TO 职工1 ON 工资/D USE 职工1 DISPLAY ALL USE RETURN 2、在“职工”表中查找且显示“孙大鹏”的信息,程序如下: SET TALK OFF CLEAR USE 职工 LOCATE IF FOUND()DISPLAY ENDIF USE 3、显示“职工”表中女职工的工资和,程序如下: SET TALK OFF CLEAR SELECT FROM 职工 RETURN 1、设计一个查询表单BD.SCX,其界面如图所示,其中文本框控件 名为TEXT1,表格控件名为GRID1。当在其中输入职工姓名并单击“查询”按钮时,将下边的表格内显示该职工的信息。“查询”按钮的Click 事件代码应如下: THISFORM.GRID1.RECORDSOURCETYPE=4 THISFORM.GRID1.FRCORDSOURCE=”SELECT * FORM 职工 WHERE 姓名 = = ” 5、将“职工”表中第6条记录的“出生日期”改为“12/12/1972”,程序如下: SET TALK OFF CLEAR USE 职工 SKIP 5 出生日期 WITH {^1972/12/12} DISPLAY USE RETURN 五.程序题 在Text1中输入一个3位自然数,分解求和的结果存入Text2中 x= thisform.text1.value a=int【1 】 b=int 【 2】 c=【 3】 s=【 4】 thisform.text2.value=【5 】 x/100(x-a*100)/10 x-a*100-b*10 a+b+c s 2 文本框Text1中输入的值与文本框Text2中输入的值交换 a= thisform.text1.value b= thisform.text2.value d=【1 】 【2 】 【3 】=d thisform.text1.value=【4 】 thisform.text2.value=【 5】 a a=b b a b 3 已知任意一个三角形的三条边为a、b、c,求其面积。 a=thisform.text1.value b=【 1】 c=【 2】 p=(a+b+c)/【3 】 s=【 4】(p*(p-a)*(p-b)*(p-c))thisform.text4.value=【5 】 thisform.text2.value thisform.text3.value 2 sqrt s 4 判断一个学生的计算机考试成绩x属于哪个分数段之间(0-59,60-69,70-79,80-89,90-100)Command1_click事件代码如下: x= thisform.text1.value store 0 to h5,h6,h7,h8,h9 do case case x>=0 and x<=59 h5=h5+1 case 【1 】 and x<=69 h6=h6+1 case x>=70 and x<=79 【 2】 case 【3 】 and x<=89 h8=h8+1 case x>=90 and 【 4】 h9=h9+1 【 5】 thisform.label1.caption=str(h5)+ str(h6)+str(h7)+str(h8)+str(h9)x>=60 h7=h7+1 x>=80 x<=100 endcase 5 假设表单与第二题中的表文件zgqk.dbf 建立了数据环境,在其中按姓名查找职工情况,找到后将其情况在表单上显示,否则在信息框中显示“查无此人”。试完成下面程序。 【 1】 zgqk xm=thisform.text1.value locate for【2 】 if 【 3】eof()thisform.【4 】 else 【5 】(“查无此人”)Endif use xm=姓名 not refresh messagebox 6 求s=1/1^2+1/2^2+„+1/n^2 【 1】 n=thisform.text1.【2 】 FOR i=1 TO 【3 】 s=s+【4 】 next THISFORM.Label3.Caption=【5 】 s=0 value n 1/i^2 str(s)7 计算1+3+5+„„99,并将结果存入文本框Text1中,请填空 【 1】 FOR N=1 TO 【 2】 step 【 3】 s=s+n end【4 】 【5 】 s=0 99 2 for thisform.text1.value=str(s)8 计算1+3+5+„„99,并将结果存入文本框Text1中,请填空 【 1】 FOR N=1 TO 【 2】 if 【 3】(n/2)<> n/2 s=s+n endif end【 4】 【5 】 s=0 99 int for thisform.text1.value=str(s)9 计算2+4+6+„„100,并将结果存入文本框Text1中,请填空 【1 】 FOR N=2 TO 【2 】step 1 if int(n/2)=【 3】 s=s+n 【4 】 endfor 【 5】 s=0 100 n/2 endif thisform.text1.value=str(s)10 求所有的3位正整数除以99的商和余数,并输出。 for i= 【1 】to 【2 】 a= 【 3】 b=【4 】 ?【5 】 Endfor 100 999 int(i/99)i%99 a, b 11 求1!+2!+3!+4!+5!。 S=0 For i=1 to【1 】 t=【2 】 for k=1 to 【 3】 t=t*【4 】 endfor s=s+【 5】 endfor 5 1 I k t 12 计算1+2+3+„„100,并将结果存入文本框Text1中,请填空 【 1】 FOR N=1 TO【 2】step 【 3】 s=s+n 【 4】for 【5 】 s=0 100 1 end thisform.text1.value=str(s)13 统计1至100之间能被7整除的数的个数并求其和,结果用信息框(对话框)输出。Command1_click事件代码如下: k=0 s=0 for i=1 to 100 if 【1 】(I,7)=0 k=k+【 2】 s=s+【3 】 endif endfor a=messagebox(【 4】+【 5】)mod 1 I str(k)str(s)14 在文本框Text1中输入一个字符串,统计其中数字字符的个数,结果存入文本框Text2中。Command1_click事件代码如下: k=0 x=allt(thisform.text1.value)n=【1 】 for i=1 to 【 2】 if subs(x,i,1)>”0” and【3 】 【 4】 endif endfor thisform.text2.value=【 5】 len(x)n subs(x,i,1)>”9” k=k+1 str(k)15.s=求1!+2!+3!+...+20!【1 】 for n=1 to 20 t=1 for m=1 to 【 2】 t=t*【3 】 endfor 【 4】 endfor THISFORM.Text1.Value=【 5】 s=0 n m s=s+t s 16.找出2010至2100之间所有闰年的年份 FOR i=【 1】 TO 【2 】 if i%4=0 AND i%100!=0 OR i%【3 】 ? 【4 】 endif 【5 】 2010 2100 400=0 I ENDFOR 17.设计一个求t=n!的自定义函数 【 1】f(x)t=【 2】 FOR j = 1 to 【3】 t=t*【4 】 endfor return 【 5】 function[###]func 1 x j t 18.求 Fibonacci 数列(1,1,2,3,5„)的前n(n>3)项,并输出 input “n=” to n 【 1】 a(n)a(1)=1 a(2)=1 ? a(1),a(2)for i=3 to 【 2】 a(i)=【 3】+【 4】 ?? a(i-1),a(i-2)end【 5】 dime n a(i-1)a(i-2)for 19.输出zgqk.dbf的基本工资大于600的记录 【 1】zgqk do while not 【 2】 if 【 3】 【 4】 endif 【5 】 enddo use eof()基本工资>600 disp[###]display skip 1.在Text1中输入一个3位自然数,分解求和的结果存入Text2中 2.文本框Text1中输入的值与文本框Text2中输入的值交换 3.已知任意一个三角形的三条边为a、b、c,求其面积。 4.判断一个学生的计算机考试成绩x属于哪个分数段之间(0-59,60-69,70-79,80-89,90-100)287 5.求s=1/1^2+1/2^2+„+1/n^2 6.计算1+3+5+„„99,并将结果存入文本框Text1中,7.计算1+3+5+„„99,并将结果存入文本框Text1中 8.计算2+4+6+„„100,并将结果存入文本框Text1中,9.求所有的3位正整数除以99的商和余数,并输出。 10.编写程序计算:s=1+1/2!+1/3!+„+1/n!,说明:在表单中有一个文本框控件:Text1,用来接收n的值,有一个标签控件:Label1,用来显示S的值,试编写表单的单击事件,实现计算与显示功能,只要求写出事件的主要代码,事件过程的起始语句和结束语句可略去。11.编写程序计算:S=1X2+2X3+„+NX(N+1)。0 12.编写程序计算多项式:1^1+2^2+3^3+„+10^10 0 13.编写程序在表单上显示出:1~15之间的偶数 0 14.编写程序在表单上显示出:5/6+4/5+3/4+2/3+1/2 15.假设表单与第二题中的表文件zgqk.dbf 建立了数据环境,在其中按姓名查找职工情况,找到后将其情况在表单上显示,否则在信息框中显示“查无此人” 读下列程序: CLEAR STORE 1 TO I, J DO WHILE J<5 @ I , J SAY “*” J=J+1 ENDDO CANCEL(1)屏幕显示的起始坐标为___D___。A)1, 5 B)i, j C)0, 0 2)程序执行后,i,j的值分别为__A____A)1, 5 B)i , j C)0, 0 设表文件XS.DBF有10条记录,程序如下: USE XS GO BOTTOM N=3 DO WHILE N>=1 DISPLAY SKIP-1 WAIT N=N-1 ENDDO USE RETURN(1)程序的功能是(D) (A)显示所有记录(B)分别显示前3个记录(C)显示第3个记录(2)退出循环后,N的值是(A)(A)0(B)1(C)3 第9题、阅读下面程序 INPUT“输入年龄” TO NL DO CASE CASA NL<7 ?“童年” CASE NL<18 ?“少年” CASE NL>18 ?“少年” CASE NL>=60 ?“老年” CASE NL>=35 ?“中年” OTHER ?“青年” ENDCASE 由于设计不当,本程序运行结果不对 (1)运行时输入 11,输出的结果是:B A)童年 B)少年 C)青年 D)(2)运行时输入 36,输出的结果是:B A)中年 B)少年 C)青年 D)(D)分别显示后三个(D)4 老年 老年 第10题、DIME A(6)S=0 FOR K=1 TO 6 INPUT“请输入数据:” TO A(K)S=S+A(K)ENDFOR AV=S/6 R=0 FOR K=1 TO 6 IF A(K)>AV ??A(K)R=R+1 ENDIF ENDFOR ?R(1)若输入的数据分别是:1 2 3 4 5 6,则显示的是(D)A)1 2 3 B)2 3 4 C)3 4 5 D)4(2)?R的值是多少(B)A)2 B)3 C)4 D)5 第11题、读下列程序: *MAIPROGRAM CLEA CLEAR ALL X1=“工资-100” Y1=200 Z1=100 DO SUB1 ? 'A处:',X1,Y1,Z1 X1=1 Y1=2 Z1=3 DO SUB2 WITH X1,Z1+10,10 ? 'C处:',X1,Y1,Z1 CANCEL PROCEDURE SUB1 PRIV Z1 Z1=10 X1=300 Y1=2 ? 'B处:',X1,Y1,Z1 Z1=1 RETURN PROCEDURE SUB1 PRIV Z1 Z1=10 X1=300 Y1=2 ? 'B处:',X1,Y1,Z1 Z1=1 RETURN PROCEDURE SUB2 PARA X1,Z1,Y1 X1=X1+10 Y1=Y1+10 X1=X1+10 RETURN(1)程序显示A处的X1,Y1,Z1值分别为___B___。 A)300 200 100 B)300 2 100 C)300 200 10 D)300 2 10(2)程序显示B处的的X1,Y1,Z1值分别为___D___。 A)300 200 10 B)300 200 100 C)300 2 100 D)300 2 10(3)程序显示C处的的X1,Y1,Z1值分别为___D___。 A)21 20 30 B)21 20 3 C)21 2 30 D)21 2 3 二、读程序选择_1(本大题共4道小题,每小题分值6分,共24分。) 第7题、有学生信息表XS.DBF文件,其结构和记录如下: 记录号 学号 姓名 年龄 性别 入学日期 出生地 1 Y001 李明 21 男 09/01/99 重庆 2 Y002 林雨 20 女 09/01/99 成都 现有一程序段: DIMENSION X(3)USE XS SCATTER TO X X(1)=“A003” X(2)=“曾真” X(3)=19 APPEND BLANK GATHER FROM X LIST RETURN(1)运行结果X数组的数据元素的个数是___B___。A)0个 B)3个 C)6个(2)LIST显示记录中,最后一条记录的姓名字段值是__D____。 A)字段值为空 B)林雨 C)李明 D)曾真 第8题、读下列程序: Clear Store 1 To I, A, B Do While I<=3 个 D)1 Do Prog1 ??“P(”+Str(I, 1)+“)=”+Str(A, 2)+“,” I=I+1 Enddo ??“B=”+Str(B, 2)Return Procedure Prog1 A=A*2 B=B+A Return(1)程序的运行结果为(D)。 (A)P(1)=2,P(2)=3,P(3)=4,b=15(B)P(1)=2,P(2)=4,P(3)=6,b=8(C)P(1)=2,P(2)=4,P(3)=6,b=18(D)P(1)=2,P(2)=4,P(3)=8,b=15(2)变量i的最终结果是(C)(A)3(B)5(C)4(D)6 第9题、阅读下面程序: CLEAR OPEN DATABASE emplorer USE compen SCAN FOR RECNO()<=10 IF 姓名='李强' LOOP ENDIF ?姓名,实发工资 ENDSCAN USE CLOSE DATABASE(1)compen是:(D)A.自由表 B.数据库表 C.数据库 D.可能是自由表,也可能是(2)若数据库有50条记录,则程序的功能是:(D)A前10条记录中搜索“李强”的记录 B列出前10条记录 C.每10条记录一屏显示记录,但不显示“李强”的记录 D.列出前10条记录,但是不显示“李强”的 第10题、阅读下面程序: CLEA clear store 1 to i store 2 to j,k do a1 ?“i=”+str(i,2)+“ j=”+str(j,2)+“ k=”+str(k,2)proc a1 i=3*i+2 private i i=2*j+k ?“i=”+str(i,2)+“ j=”+str(j,2)+“ k=”+str(k,2)retu RETURN(1)主程序中“do a1”后的显示语句显示结果为:(C) (A)i=6 j=7 k=2(B)i=5 j=7 k=2(C)i=5 j=2 k=2(D)i=6 j=8 k(2)过程a1中的显示语句将显示:(D) (A)i=6 j=7 k=2(B)i=5 j=7 k=2(C)i=5 j=8 k=2(D)i=6 j=2 k=第7题、CLEAR CLOSE ALL USE 学生 COUNT TO X GO TOP FOR I=1 TO X IF 性别='男' DISP ENDIF SKIP ENDFOR CLOSE ALL(1)该程序的功能是:(C)A)显示一条男同学的记录 B)显示一条女同学的记录 C)显示所有男同学的记录 D)显示所有女同学的记录 (2)程序退出循环的条件是(C)A)记录指针指向文件尾 B)记录指针指向文件头 C)循环次数大于表中记录条数 D)循环次数小于表中记录条数 第8题、阅读下面程序: 有图书数据表TS和订书单表DSD如下: TS:(书号:C3,单价:N6.2 书名C10) 书号 单价 书名 001 12.0 计算机应用 002 10.0 化学 003 15.0 分析化学 DSD:(班级:C6,书号:C3,数量:N3.0, 款项:N7.2) 记录号 班级 书号 数量 款项 1 化95.4 001 47 0.00 2 数94.3 002 74 0.00 3 物96.4 003 67 0.00 4 生95.4 002 47 0.00 5 地94.3 001 67 0.00 6 物94.3 002 67 0.00 7 数94.3 001 74 0.00 8 化95.4 003 47 0.00 9 数94.3 003 74 0.00 程序: CLEA ALL SELE 1 USE Ts ALIAS SHU INDEX on 书号 tag TSSH SELE 2 USE dsd alias shdn SET RELA TO 书号 INTO SHU REPL ALL 款项 WITH数量*shu.单价 LIST DO WHIL.T.ACCE “输入0退出” TO BJ IF BJ ='0' EXIT ENDI ACCE“输入书号” TO SH LOCAT FOR 书号=SH DISP ?“书号”+书号+str(款项)+“元。” ENDD clea all RETURN(1)do while循环中locate操作的表是:(B)(A)数据表TS(B)数据表DSD(C)系统临时表aaa(D)系统临时表cursor aaa(2)运行时输入书号“003”,则输出为:_C(A)分别显示书号为“003”的所有款项(B)显示书号为“003”的所有款项之和(C)显示书号为“003”的第一条记录的款(D)输入错误,没有输出 第9题、读下列程序: &&MAIN.PRG PUBLIC X,Y SET PROC TO KK X=20 Y=50 DO A1 ?X,Y SET PROC TO RETU *过程文件kk.prg Proc a1 Private x X=30 Local y Do a2 ?x,y Return Proc a2 X=“kkk” Y=“mmm” Return 第一次显示的X,Y的值是(B)A)KKK 30 B)KKK.F.C)KKK 50 D)30.F.第二次显示的X,Y的值是(B)A)20 50 B)20 MMM C)30 50 D)30 MMM 第10题、读程序: CLEAR CLOSE ALL SELE 2 USE CJ INDEX ON 学号 TO XH SELE 1 USE XS SET RELATION TO 学号 INTO B SET SKIP TO B replace b.成绩 with b.成绩*1.1 for a.姓名=“王小平”(1)在以上程序中(A)A)表CJ是子表 B)表XS是子表 C)表XS是主表也可以是子表 D)无法确(2)该程序的功能是B A)修改王小平的成绩为1.1分 B)修改王小平的成绩为原成绩的1.1C)修改字段名成绩为成绩1.1 D)显示王小平的记录 第11题、有以下三段程序 *Main.PRG CLEA K1=10 K2=20 DO SuB ?K1,K2 &&(1)DO Sub1 With K2+10,K1 ?K1,K2 &&(3)RETU PROC SUB PRIV K1 K1=K2+1 K2=K1+1 RETU PROC Sub1 PARA Xl,x2 X1=10 X2=20 X1=STR(X1,2)+STR(X2,2)X2=X1+STR(X2,2)?X1,X2 &&(2)RETU(1)程序运行到(1)处显示的结果是(D)(A)10 20 b)20 30(C)10 30(D)l0 2(2)程序运行到(2)处显示的结果是(B)A)1020 102010(B)1020 102020(C)1010 101010(D)1020 101010(3)程序运行到(3)处显示的结果是(D)(A)101010 22(B)102020 30(C)102020 40(D)102020 22 第7题、I=0 DO WHILE I<10 IF INT(I/2)=I/2 I=I+3 ENDIF I=I+2 ENDDO ?I RETU(1)上述程序执行后,共循环了__C____次。A)10 B)5 C)4 D)死循环(2)上述程序执行后,屏幕显示为___B___。A)10 B)11 C)9 D)13 第7题、读下列程序: k=1 DO WHILE k<=21 k=k+2 ?STR(k,2)IF k=9 EXIT ENDIF ENDD(1)程序循环了多少次__A____。A)4 B)3 C)6 D)5(2)程序执行的结果是___C___。A)1 3 5 7 B)2 4 6 8 C)3 5 7 9 第8题、读下列程序: CLEAR FOR K=1 TO 4 A=“$” FOR J=1 TO k A=A+STR(K,1)ENDFOR @K,5 SAY A ENDFOR WAIT RETURN(1)程序运行的结果是___B___。 A)$1 B)$1 $22 $22 $122333 $333 $4444 C)$122333 D)$(2)程序运行到WAIT处,变量K与J的值分别是___D___A)1, 1 B)4, 4 C)4, 1 第9题、如下程序显示的结果是()。s=1 i=0 do while i<8 s=s+i i=i+2 enddo ?s(1)S的值为(D)A)10 B)11 C)12 D)13(2)程序循环次数为:(B)A)3 B)4 C)5 D)6 第10题、阅读下面程序: CLEAR OPEN DATABASE emplorer USE compen SCAN FOR RECNO()<=10 IF 姓名='李强' LOOP ENDIF ?姓名,实发工资 ENDSCAN USE CLOSE DATABASE(1)compen是:(D)A.自由表 B.数据库表 C.数据库 D.可能是自由表,也可能是数据(2)若数据库有50条记录,则程序的功能是:(D) A. 前10条记录中搜索“李强”的记录 B.列出前10条记录 C.每10条记录一屏显示记李强“的记录 D.列出前10条记录,但是不显示”李强“的记录 第7题、读下列程序: USE GZ Y='Y' DO WHILE Y$'Yy' CLEA ACCE '请输入姓名' TO XM INDEX ON 职称 TO ZX FOR 姓名=ALLT(XM)L=3 M=10 DO WHILE.NOT.EOF()@ L,M GET 姓名 @ L,M+20 GET 基本工资 L=L+2 SKIP ENDDO WAIT '下一个(Y/N)?' TO Y ENDDO USE RETU(1)这个程序的功能是___B___。A)输入 B)查询(C)修改(D)统计(2)程序中变量Y的作用是___A___。 A)控制整个程序循环 B)把指针指向下一条记录 C)等待 D)没有作用 第9题、有如下程序段: DO CASE CASE X>100 ?? ”1“ CASE X>200 ?? ”2“ OTHERWISE ?? ”3“ ENDCASE(1)若在X=300的情况下执行这个程序段,屏幕上将显示A A)1 B)2 C)12 D)3(2)输入下列什么数据时,屏幕上将显示字符 3 A A)100 B)200 C)300 D)400 第7题、有如下教师授课表: 教师号 主讲课程 t1101 数据结构 t1102 C语言 t1103 网页制作 t1104 计算机网络 t1105 计算机网络 t1105 C语言 t1105 数据库 下列程序段的输出结果是 CLOSE DATA a=0 USE教师 GO TOP DO WHILE.NOT.EOF()IF主讲课程=”数据结构“.OR.主讲课程=”C语言“ a=a+1 ELSE DISP ENDIF SKIP ENDDO ?a 1 A A)3 B)4 C)5 D)6(2)命令DISP一共显示的记录条数是:A)3 B)4 C)5 D)6 第8题、读下列程序并进行判断。S=0 I=1 Do While I<4 Accept ”请输入字符串: “ To X If ”A“ $ X S=S+1 Endif I=I+1 Enddo ?S Return(1)运行时输入 ”abcd“, ”ABCD“, ”aBcD “, 输出 S的值是(B)(A)2(B)1(C)3((2)运行时输入”ABCD“, ”ABcd“, ”cdab“, 输出 S的值是(C)(A)1(B)4(C)2(D)第7题、如下程序显示的结果是()。s=1 i=0 do while i<8 s=s+i i=i+2 enddo ?s(1)S的值为(D)A)10 B)11 C)12 D)13(2)程序循环次数为:(B)A)3 B)4 C)5 D)6 第8题、CLEAR N=10 FOR J=1 TO 3 ?STR(J,2)+')' ??SPACE(6*J)FOR K=1 TO 3-J+1 ?? STR(J*K,6)N=N+2 ENDFOR ? ENDFOR RETURN(1)输出的图形为:(C) A.1)1 B.1)1 2 3 C.1)1 2 3 D.1)1 2 3 2)2 4 2)2 4 2)2 4 2)4 6 8 3)3 6 9 3)3 3)3 3)9 12 15(2)程序结束时,N的值是:(A)A.22 B.9 C.10 D.15 第9题、设表文件XS.DBF有10条记录,程序如下: USE XS GO BOTTOM N=3 DO WHILE N>=1 DISPLAY SKIP-1 WAIT N=N-1 ENDDO USE RETURN(1)程序的功能是(D) (A)显示所有记录(B)分别显示前3个记录(C)显示第3个记录(D)分别显示后三(2)退出循环后,N的值是(A)(A)0(B)1(C)3(D)4 读下列程序: USE GZ Y='Y' DO WHILE Y$'Yy' CLEA ACCE '请输入姓名' TO XM INDEX ON 职称 TO ZX FOR 姓名=ALLT(XM) L=3 M=10 DO WHILE.NOT.EOF()@ L,M GET 姓名 @ L,M+20 GET 基本工 L=L+2 SKIP ENDDO WAIT '下一个(Y/N)?' TO Y ENDDO USE RETU(1)这个程序的功能是___B___。A)输入 B)查询(C)修改(D)统计(2)程序中变量Y的作用是___A___。 A)控制整个程序循环 B)把指针指向下一条 录C)等待 D)没有作用 第8题、已知proc.prg程序清单如下:(12)n=10 t=15 S=1 M=0 DO proc_1 WITH n M=M+S DO proc_1 WITH T M=M+S ?M CANC proc_1.prg程序清单如下: PARAMETERS a S=1 FOR K=1 TO A S=S*K ENDFOR RETURN(1)程序proc.prg的功能是(C)A)输出N 和T的乘积 B)输出N 和T的阶乘 C)输出N 和T的阶乘之和D)输出N 和T的值(2)在程序中变量S是(D)A)全局变量 B)私有变量 C)本地变量 D)局部变量 读程序 clear use 学生 locate for 入校总分>=580 do while.not.eof()disp continu enddo ?'结束' Cancel(1)该程序的功能是:(B)A)显示表中一条入总分大于580分的学生记录 B)显示表中所有入校总分大于580分的学生记录C)显示表中一条学生记录D)显示表中所有的学生记录 (2)循环结束后,表中记录指针指向(B)A)文件头 B)文件尾 C)末记录 D)首记录 USE XSDA N=1 XH=”200201“ DO WHILE N<=120 APPEND BLANK REPL 学号 WITH STR(VAL(XH)+N,6)N=N+1 ENDDO USE CANCEL(1)上述程序数据库中,”学号“这个字段是__A___A)字符型 B)数值型 C)日期型 D(2)该程序的功能是____D__。 A)修改表文件的字段 B)修改表文件原有记录中学号字段的值 C)增加表文件的字段 D)追加新记录并填充学号字段的值 (3)程序运行到最后,变量N的值是___C___。A)1 B)120 C)121 D)0 现有表文件STUD.DBF,表中有:学号(C/6),姓名(C/8),性别(C/2),出生日期(D/8)等字段干条,根据已有的表文件运行下面程序: SET TALK OFF CLEAR USE STUD INDEX ON TRIM(姓名)TO ISTUD S=.T.DO WHILE S XM=SPACE(8)ACCEPT ‘请输入姓名:’ TO XM IF LEN(TRIM(XM))=0 EXIT ENDIF SEEK XM IF.NOT.EOF()@3,10 SAY “学号” @3,20 SAY 学号 @5,5 SAY “姓名”+姓名 @7,5 SAY “性别”+性别 @9,5 SAY “出生日期:” @ 9,20 SAY 出生日期 ELSE @20,3 SAY “没有找到该姓名的学生” S=.F.ENDIF WAIT ENDDO CANCEL(1)程序中的索引关键字和索引文件名分别为__B____。 A)学号, STUD.DBF B)姓名,ISTUD.DBF C)学号, ISTUD.IDX D)姓名,ISTUD.IDX(2)程序中用SEEK进行___C___查找。A)顺序 B)条件 C)索引 D)范围(3)执行EXIT命令的条件是____C___。 A)输入姓名后直接按 C)输入姓名,又按空格键,再按 A=“Abcde” N=LEN(A)I=1 DO WHILE I<=N B=SUBSTR(A,I,1)IF ISLOW(B)B=CHR(ASC(B)-32)A=STUFF(A,I,1,B)ENDIF I=I+2 ENDDO ?A RETURN(1)程序运行的结果是___D___。A)abcde B)ABCDE C)abCdE D)AbCdE(2)程序循环的次数是___C___。A)5 B)4 C)3 D)6 读下列程序: USE 学生 I=1 FILEN=”” DO WHILE I<=9 FILEN=”S”+STR(I,1)+”.DBF” COPY TO &FILEN I=I+1 ENDDO USE(1)程序运行的结果是___C___。A)无结果 B)拷贝了1个文件C)拷贝了9个文件 了10个文件 (2)拷贝所产生的新文件名是___D___。A)S.DBF B)FILEN C)&FILEN D)S1.DBF~S9.D 有如下程序段: USE CLASS LOCATE FOR 政治面目=”团员“ DO WHILE FOUND()DISPLAY CONTINUE ENDDO该程序的功能是:C A)显示团员的一条记录 B)显示非团员的一条记录C)显示团员的所有记录D)显示非团员的所程序退出循环的条件是A A)FOUND()函数返回值为B)FOUND()函数返回值为假 C)与 FOUND()函数的值无关D)EOF()函数返回值为真 有如下程序段: DO CASE CASE X>100 ?? ”1“ CASE X>200 ?? ”2“ OTHERWISE ?? ”3" ENDCASE(1)若在X=300的情况下执行这个程序段,屏幕上将显示A A)1 B)2 C)12 D)3(2)输入下列什么数据时,屏幕上将显示字符 3 A A)100 B)200 C)300 D)400 读程序 1、CLEAR M=0 FOR X=1 TO 10 IF MOD(X,3)=0 M=M+X ENDIF ENDFOR ? M RETURN(1)该程序的功能是:求1到10之间B A.能被3整除数的个数 B.能被3整除数C.不能被3整除数的个数 D.不能被3整除数的和 (2)该程序执行的结果是:C A.3 B.10 C.18 D.37 &&MAIN.PRG &&P1.PRG X1=1 PARA W1,W2 X2=2 PRIVATE W1 DO P1 WITH X1,X2 W1=W1*3 ?’X1=’+STR(X1,1)W2=W2*4 ??’X2=’+STR(X2,1)RETURN X1=1 X2=2 DO P1 WITH X1,X1+X2 ?’X1=’+STR(X1,1)??’X2=’+STR(X2,1) RETURN(1)第一次显示X1,X2的值是B A 1 , 8 B 3 , 8 C.1 , 1 D.8 , 8(2)第二次显示X1,X2的值是C A 1 , 2 B 3 , 1 C 3 , 2 D.1 , 3 CLEAR DIME A(20)P=1 FOR N=1 TO 20 INPUT“请输入数据:“ TO A(N)ENDFOR FOR L=1 TO 19 FOR M=L+1 TO 20 IF A(L)<=A(M)T=A(L)A(L)=A(M)A(M)=T ENDIF ENDFOR ??A(I)ENDFOR 程序完成的功能是将20个数组元素值A A 排序后按从大到小的顺序输出 B 排序后按从小到大的顺序输出C. 倒序输出 D.按自然顺序输出 将DIME A(20)改成 DIME A(10)后,B A. 出现“数组重复定义”的错误 B. 出现“数组下标越界”的错误 C. 程序功能不变,只是输出10个数组元素值 D. 程序功能不变,仍然输出20个数组元素值 CLEAR CLOSE ALL USE 学生 SCAN IF性别=’男’ DISP ENDIF N=N+1 ENDSCAN ?N CLOSE ALL CANC(1)D A)该程序显示一条男同学的记录 B)该程序显示一条女同学的记录 C)该程序显示全班同学的记录 D))该程序显示全班男同学的记录(2)命令?N 显示的是C A)男同学的记录个数 B)女同学的记录个数 C)全班同学的记录个数 D)无法确定 USE SB SORT TO RQX ON 启用日期/D FIELDS 编号,名称,启用日期 FOR NOT 主要设备 USE RQX LIST USE SB SORT TO BMX ON 部门/D,价格 FOR 主要设备 USE BMX LIST RETURN(1)程序执行到第一个LIST命令时,输出结果是C (A)将主要设备按编号,名称,启用日期分别升序排序。(B)将主要设备按编号,名称,启用日期分别降序排序。(C)将非主要设备按启用日期降序排序。(D)将非主要设备按启用日期升序排序。 (2)程序执行到第二个LIST命令时,输出结果是B (A)将主要设备按部门升序排序,当部门相同时,按价格降序排序。(B)将主要设备按部门降序排序,当部门相同时,按价格升序排序。(C)将主要设备按部门降序排序,当部门相同时,按价格升序排序。(D)将主要设备按部门升序排序,当部门相同时,按价格降序排序。 共有3个数据库文件TB1.DBF, TB2.DBF, TB3.DBF,下面程序功能是把每个库文件的末尾记录删掉。序,将程序填写完整。N=1 DO WHILE N<=3 TB=“TB“+STR(N,1)USE &TB GO BOTTOM DELETE PACK N=N+1 ENDDO 该程序的功能是B(A)将数据表的末记录作物理删除(B)将数据表的末记录作逻辑删除(C)将数据表的首记录作物理删除(D)将数据表的首记录作逻辑删除 该程序一共删除了()表中的记录C(A)1个(B)2个(C)3个 (D)4个 阅读下面程序: 有图书数据表TS和订书单表DSD如下: TS:(书号:C3,单价:N6.2 书名C10) 书号 单价 书名 001 12.0 计算机应用 002 10.0 化学 003 15.0 分析化学 DSD:(班级:C6,书号:C3,数量:N3.0, 款项:N7.2) 记录号 班级 书号 数量 款项 1 化95.4 001 47 0.00 2 数94.3 002 74 0.00 3 物96.4 003 67 0.00 4 生95.4 002 47 0.00 5 地94.3 001 67 0.00 6 物94.3 002 67 0.00 7 数94.3 001 74 0.00 8 化95.4 003 47 0.00 9 数94.3 003 74 0.00 程序: CLEA ALL SELE 1 USE Ts ALIAS SHU INDEX on 书号 tag TSSH SELE 2 USE dsd alias shdn SET RELA TO 书号 INTO SHU REPL ALL 款项 WITH数量*shu.单价 LIST DO WHIL.T.ACCE “输入0退出” TO BJ IF BJ =’0’ EXIT ENDI ACCE“输入书号” TO SH LOCAT FOR 书号=SH DISP ENDI ?“书号”+书号+str(款项)+”元。” ENDD clea all RETURN(1)do while循环中locate操作的表是:B A数据表TS B数据表DSD C系统临时表aaa D系统临时表cursor aaa(2)运行时输入书号“003”,则输出为:_C(A)分别显示书号为“003”的所有款项(B)显示书号为“003”的所有款项之和(C显示书号为“003”的第一条记录的款项(D)输入错误,没有输出 阅读下面程序: CLEAR T=65 R=20 INPUT “请输入图形的行数N=” TO N I=1 DO WHILE I<=N J=1 DO WHILE J<=2*I-1 @I,J+R SAY CHR(T)J=J+1 IF J<=I T=T+1 ELSE T=T-1 ENDIF ENDDO I=I+1 R=R-1 T=65 ENDDO RETURN(1)运行程序后输出图形C (A)A(B)A BBB ABC CCCCC ABCDE DDDDDDD ABCDEFG EEEEEEEEEEEE ABCDEFGHIJ „„„„„„„ „„„„„„ (C)A A ABA BAB ABCBA CBABC ABCDCBA DCBABCD ABCDEDCBA EDCBABCDE „„„„„„„ „„„„„„„(2)语句@I,J+R SAY CHR(T)中函数CHR()的功能是D(A)从字符T中取出子串(B)返回字符T的ACSⅡ码值(C)返回字符T的ACSⅡ码字符 (D)返回<数值表达式>表示的ACSⅡ码字符 : CLEA BM=SPACE(10)@5,10 SAY“请输入表名:”GET BM READ BM=ALLTRIM(BM)IF FILE(“&BM..DBF”)USE &BM BROWSE ELSE WAIT“文件不存在!” WINDOW NOWAIT ENDIF USE RETURN(1)程序的功能是C(A)浏览任意一个打开的表文件(B)修改任意一个打开的表(c)浏览指定表文件BM(D)修改指定表文件BM(2)函数FILE(“&BM..DBF”)的功能是C(A)测试指定的文件的类型正确否(B)指定文件类型为(C)测试指定的文件存在否(D)指定文件为&BM..DBF 有图书目录数脚sml,dbf和入库流水单表skc.dbf如下 sml.dbf:(5条记录)书号 书名 作者 出版社 1 计算机基础 杨振山 高等教育 2 计算机原理 费利民 西安交大 3 C语言设计 赵国民 上海 4 C语言教程 张 扬 四川 5 C++教程 张 敏 高等教育 skc.dbf:(5条记录)书号 单价 数量 金额 入库日期 1 15.00 30 450.00 20030818 2 11.00 21 231.00 20030818 3 22.00 30 660.00 20030818 4 19.00 30 570.00 20031218 5 22.21 23 510.83 20031218 程序: CLEAR @1,15 SAY ‘新书入库’ Y=’Y’ DO WHILE upper(Y)=”Y” SM=SPACE(14)ZZ=SPACE(8)CBS=SPACE(10)@3,10 SAY ’书名’ GET SM @3,30 SAY ’作者’ GET ZZ @3,45 SAY,出版社 GET CBS READ SELE 1 USE SML LOCA FOR TRIM(书名)=TRIM(SM)AND TRIM(作者)=TRIM(ZZ)AND TRIM(出版;社)=TRIM(CBS)IF FOUND()SH=书号 ELSE SKIP-1 SH=STR(val(书号)+1,4)APPE blan REPL书名WITH SM,书号WITH SH,作者WITH ZZ,出版社with cbs ENDIF SELE 2 USE skc APPE BLAN REPL书号with sh @4,10 SAY ‘单价’ GET单价 @4,30 SAY ‘购人数’ GET数量 READ REPL金额 WITH 单价*数量 REPL入库日期 WITH date()WAIT “是否继续(Y/N)” to Y ENDD CLOSE DATA 设运行时依次输入下列数据: 代数 张三 清华 22.00 31 几何 李四 北大 33.00 32 概率 王五 南开 44.00 33 几何 李四 北大 33.00 41 代数 张三 清华 22.00 56(1)此时sml表中的记录条数和最大记录号分别为C A 10条,10 B 10条,5 C 8条,8 D 8(2)SKC表中记录数为C(A)10(B)5(C)8(D)7 clear dimension k(2,3)i=l ? do while i<=2 j=l do while j<=3 k(i,j)=i*j ??k(i,i)??” ” j=j+1 enddo ? i=i+1 enddo(1)运行程序后,屏幕的显示结果是A (A)1 2 3(B)1 2 2 4 6 3 2(C)1 2 3(D)1 2 3 1 2 3 2 4 9(2)如果将dimension k(2,3)语句改为:dimension K(2,2)后,A(A)出现“数组重复定义”的错误(B)出现“数组下标超界”的错误 (C)程序功能不变,只输出4个数组元素(D)程序功能不变,仍然输出6个数组元素 阅读下列程序 CLEAR M=0 FOR K=0 TO 2 FOR J=3-k TO 3+K @K,J SAY STR(K,2)+STR(J,1)M=M+1 NEXT K NEXT 1 ?M RETURN(1)输出图形为: A (A)03(B)03(C)03(D)0 3 14 14 14 1 4 25 25 25 2 5(2)程序结束时,M的值是: B(A)11(B)9(C)10(D)8 读下列程序: J=0 CLEAR FOR K=1 TO 4 FOR R=1 TO 5-K ??“” &&此处括号内有1个空格 ENDFOR FOR M=1 TO 2*K-1 ??STR(K,1)J=J+1 ENDFOR ? ENDFOR ? J(1)程序运行的结果是:A A)1 B)1 C)2 D)1 222 121 121 212 33333 1331 1331 31113 4444444 144441 144441 4111114(2)程序结束时,J的 值为C A)7 B)17 C)16 D)6 SUM=0 N=0 DO WHILE N< 100 N=N+1 SUM=SUM+N ENDDO ?’SUM=’,SUM(1)该程序的功能是B A)计算1+100的值 B)计算1+2+3+„+100的值 C)计算1+99的值 C)计算1+2+3+„+99的值(2)循环结束后,N的值为A A)100 B)99 C)101 D)102 Clea FOR N=1 TO 4 FOR I=1 TO 2*N-1 IF I<=N @ N,10-N+I SAY STR(I,1) ELSE @ N,COL()SAY STR(2*N-I,1) ENDI ENDF ENDF Canc(1)该程序的显示的是:B A)1 B)1 C)1 D)1 222 121 212 121 33333 12321 31213 13331 4444444 1234321 4123214 1444441(2)循环结束后,N的值为C A)3 B)4 C)5 D)6 INPUT”请输入数据1:“ TO X INPUT”请输入数据2:“ TO Y INPUT”请输入数据3:“ TO Z IF X>Y N=Y ELSE N=X ENDI IF N (1)A)输入的最大值 B)输入的最小值 C)输入的中间值 D)输入的任意值 有一学生情况表STU,表中有成绩字段 以下程序的功能是: N=0 S=0 USE STU 输入的任 D)SCAN FOR 成绩>=560 S=S+成绩 N=N+1 ENDS S=S/N USE ?S CANC 程序中命令?S,S 表示的是D A)表中成绩大于560分的人数 B)统计表中成绩小于560分的人数 C)表中成绩大于560分的人的总分数 D)表中成绩大于560分的人的平均分数 有一学生情况表STU,表中有成绩字段 以下程序的功能是: N=0 S=0 USE STU SCAN FOR 团员 S=S+成绩 N=N+1 ENDS S=S/N USE ?S CANC 程序中命令?S,S 表示的是D A)表中团员人数 B)表中非团员的人数 C)表中团员总分数 D)均分数 第一课 编一个“心灵感应”小游戏 我们的课程从这个小游戏开始吧。一些名词在这里不做解释,广大网友漫漫理解,或者自己去查一些资料,下面我就来介绍如何用Visual Foxpro 6.0来编制这个游戏。 1、在硬盘上建一个文件夹,例如D:DEMO。 2、启动Visual Foxpro 6.0,选择:“文件”——“新建”,出现“新建对话框”(图示1-1),文件类型选“项目”,按“新建文件”按钮,选择项目文件名“demo”(自己随便起名),保存在D:DEMO下(图示1-2),按“保存”按钮后,出现项目管理器,这样一个项目就建成了,项目名就是“demo”以后的一切操作都在这个项目内。项目管理器由两个文件组成,扩展名分别是“PJX”和“PJT”。(图示1-3)在这个项目内可以建立数据库、表单、程序、菜单等。 3、选择“文档”——“表单”,按“新建”按钮。出现(图示1-4) 4、按“新建表单”按钮,出现(图示1-5)。表单就是将来运行后出现的窗口或对话框,上图就是一个表单。下面我们就在这个表单上创建心灵感应游戏。 5、在Form1的属性(表单的属性一般在创建一个新表单后自动出现,若没有可右击表单,选择“属性”即可)中选择属性Caption(标题)将默认值“Form1”改为“心灵感应”(图示1-6),表单的标题就改为“心灵感应”。但表单的名字应叫“Form1”,要想更改请改属性——Name。 6、在d:demo下新建一文件夹pic,存入一些需要的图标、图片等,在Form1的属性中选择属性Icon的值为d:demopicmsgbox02.ico(图示1-7)。双击“Icon”或点击夹,选择msgbox02.ico图标,按“确定”按钮。 按钮,打开d:demopic文件 7、关闭表单设计器,出现(图示1-8),按“是”,出现(图示1-9),取文件名为xlgy,建一文件夹d:demoform将文件xlgy.scx保存到该文件夹里。则在项目管理器的表单中出现一个xlgy表单(图示1-10)。(你也可以全部编完再保存) 8、选中xlgy表单,按“修改”键,又返回表单编辑状态。调整表单窗口大小(可用鼠标拖拉),在表单控件工具栏的“图象”图标上点击一下,在表单上拖出一个长方形,即图片显示区域,其picture属性为d:demopicpkbm1.jpg(图示1-11); 在表单控件工具栏选“标签”图标,在表单上的图象下面拖出一个长方形,其capion属性为“本程序可以感应你在想什么。”,字体大小fontsize为“16”,你也可以设定其他属性,如:字体(fontname)、字体颜色(fontcolor)等;再建两个按钮“command1和command2”,其属性caption分别为“开始”、“退出”。(图示1-12) 9、双击“退出按钮”,在click过程中输入thisform.release或release thisform,意思为:当鼠标单击“退出”按钮时释放表单。下面你可以按!图标运行此表单,点击“退出”按钮,即可退出此表单。 10、下面我们要在“开始”按钮的click过程中输入一些命令,完成我们要做的工作。我们先做几张图片pk1.jpg(图示1-13)、pk2.jpg(图示14)、pkbm2.jpg(图示15),在“开始”按钮的click过程中输入如下命令: ThisForm.image1.picture='picpk1.jpg' &&将图片换成pk1.jpg this.caption='继续' &&将“开始”按钮名改为“继续”,因为在command1.click内,所以可用this代替thisform.command1 thisform.command2.enabled=.f.&&将“退出”按钮设为不可用 thisform.label1.caption='请在上面的扑克牌中选一张,记在心里。按继续键。' &&改变label1的内容 wait '' &&程序暂停,等你按任意键,“''”是两个单引号,不能缺少.ThisForm.image1.picture='picpkbm1.jpg' thisform.label1.caption='请你默念三遍。按继续键。' wait '' ThisForm.image1.picture='picpk2.jpg' thisform.label1.caption='我知道你记的是哪一张,我把它去掉了!' wait '' ThisForm.image1.picture='picpkbm2.jpg' thisform.label1.caption='' this.caption='再来一次' thisform.command2.enabled=.t.&&将“退出”按钮设为可用 retu &&重新运行 注: &&...为程序注释,它在程序运行时不执行。 11、到此为止,“心灵感应”就编完了,你可以运行此表单看看运行结果。 二:行程序或点击菜单、按钮等方法使它们运行。这一课,我将向大家介绍主菜单、快捷菜单和主程序。 一、主菜单的设计 1、在项目管理器中的“其它”中选中“菜单”,按“新建”按钮,出现新建菜单选择窗口(图2-1); 按“菜单”按钮,出现菜单编辑窗口,在“菜单名称”中分别输入“文件( 以上的六个菜单项中都有“<”,它的作用是建立一个热键:Alt加“<”后面的第一个英文字母,在当前窗口按“Alt+F”打开“文件”菜单,相当于鼠标点击。 2、点击游戏菜单后的“创建”按钮,编辑“游戏”的下一级菜单(图2-3),在“心灵感应”中选择“命令”,在命令框中输入“do form xlgy”,作用是打开xlgy表单。在其后面还有一个选项,点击选项按钮出现选项对话框,使“键标签”的文本框获得焦点,按Ctrl+G(图2-4)建立一个快捷键。快捷键与热键不同,热键只在当前窗口起作用,快捷键无论当前是什么窗口都起作用。例如:在主窗口中按 Ctrl+G,可以直接运行“心灵感应”表单,相当于用鼠标选择菜单中的“游戏”,再选择“心灵感应”。 3、反回到“菜单栏”,在“退出”的命令框中输入clear event命令。 4、按“预览”按钮,可以预览一下设计的菜单。 5、选择“菜单”中的“生成”,(图2-41) 出现图2-42,按“是”按钮,出现图2-43,菜单名为:main,保存在d:demo下,出现图2-44 按“生成”按钮。菜单建好了,可以关闭菜单设计器了。 二、快捷菜单的设计 1、在项目管理器中的“其它”中选中“菜单”,按“新建”按钮,出现新建菜单选择窗口,按“快捷菜单”按钮,建立快捷菜单yji.mnx:(图2-5) 2、保存菜单yji.mnx,生成菜单程序文件yji.mpr,在以后的库房管理软件中会用到。 三、主程序设计 1、选择“代码”——“程序”,按“新建”按钮,输入如下程序: CLEAR SET EXCL ON SET TALK OFF SET MESSAGE ON SET CENT ON RELEASE WINDOW 常用 &&关闭常用窗口 PUBLIC MYPATH &&定义全局变量MYPATH MYPATH=LEFT(SYS(16),RAT(“",SYS(16)))&&提取当前路径 SET DEFA TO(MYPATH)SET PATH TO data;form;pic &&指明路径 _SCREEN.backcolor=iif(mod(day(date()),2)=0,rgb(80,230,210),rgb(70,140,180))&&设置屏幕背景颜色,单、双号背景颜色不同 MODIFY WINDOW SCREEN TITLE ” xxx软件 Ver x.x 作者:王永成 “+;” 今天是:“+dtoc(date())+” “+cdow(date())&&设置主窗口标题 _SCREEN.ICON=”..picmsgbox02.ico“ &&设置主窗口图标 ZOOM WINDOW SCREEN MAX &&主窗口最大化 deactivate window ”项目管理器“ &&关闭项目管理器 do main.mpr &&运行主菜单程序 read event 2、保存主程序main.prg 3、右击主程序,选择“设置主文件”。 4、运行主程序看一看结果。 三:“猜数游戏”。 1、新建一表单csyx(图3-1),表单的caption属性为“猜数游戏”,背景颜色(BackColor)及各表单控件的字体颜色等,各位朋友可按个人的爱好选择。 2、命令按钮command1~command13的caption属性分别为:“确定”,“退格”,“新一局”,“0”...“9”。 3、文本框Text1的FontSize为26;FontColor为250,250,0;BackColor为0,128,128;ContorlSource为ctet1(变量ctet1的值与text1的值相关联)。 4、文本框Text2的FontColor为250,250,0;ContorlSource为jlun;BackStyle为“0-透明”;BorderStyle为“0-无”。 5、文本框t1~t10,zq1~zq10,cw1~cw10(name=t1...,zq1...,cw1...cw10),(controlsource=t1...),FontColor为250,250,0;BackStyle为“0-透明”;BorderStyle为“0-无”。 6、标签Label1~Label3的caption属性分别为:“选择的数”,“位置正确”,“位置错误”。 7、标签Label4的caption属性为:=”说明:选择4个数按确定键,在右侧显示这4位数有几位数与你要猜的数位置相同,“+chr(13)+” 有几位数包含在要猜的数中,但位置不同。根据以上提示猜出是哪4位数。“,其中chr(13)是一个回车换行命令,“=”和英文引号(单、双都行)不能少;BackStyle为“0-透明”。 8、标签L1~L10的caption属性分别为:“第一次”...“第十次”;BackStyle为“0-透明”。 9、表面工作做完了,下面我们来输入一些命令(程序),双击表单出现表单过程编辑框,在Init过程中输入如下命令: public ctx1,ctx2,ctx3,ctx4,ctet1,ctet2,n,zq,cw,p &&设置全局变量 zq=0 &&设置初始值 cw=0 ctet1='' ctet2='' n=0 thisform.command3.click()&&执行命令按钮(command3)的click过程,相当于点击”新一局“按钮。 10、双击按钮“0”(command4),在其click过程中输入如下命令: ctet2='0' do panduan &&执行panduan.prg程序 thisform.refresh 11、按钮“1”~“9”的click过程中的命令与按钮“0”的click过程中的命令的不同之处就是ctet2的值,即ctet2='1'...ctet2='9'。 12、因为在按钮“0”~“9”的click过程中都执行一些相同的命令,所以我们把这些命令提出来,作为一个程序来调用(也可以在表单中创建一个方法程序,请参见第九课),可以简化程序的设计。选择“代码”——“程序”按“新建”按钮,新建程序panduan.prg: if len(allt(ctet1))<>4 &&判断text1的值的长度,如果不是4位,执行下面的命令.if!ctet2$ctet1 &&判断按下的按钮的数值是否已被选过,若所选的数不包涵在已选的数值内.ctet1=ctet1+ctet2 &&把选定的数加在后面.endif endif 13、双击按钮“确定”(command1),在其click过程中输入如下命令: zq=0 &&正确值zq=0 cw=0 &&错误值cw=0 if len(allt(ctet1))<>4 &&如果text1的值不是4 位 wait window at 16,25 ”数据不够4 位“ &&提示 return &&返回 endif p=p+1 if ctx1$ctet1 &&判断cte1值是否在所选定的4位数中.(ctet1及ctet2、ctet3、ctet4的值是在表单运行时或点击了“新一局”按钮时机器随机产生的4位数值。) if ctx1=substr(ctet1,1,1)zq=zq+1 else cw=cw+1 endif endif if ctx2$ctet1 if ctx2=substr(ctet1,2,1)zq=zq+1 else cw=cw+1 endif endif if ctx3$ctet1 if ctx3=substr(ctet1,3,1)zq=zq+1 else cw=cw+1 endif endif if ctx4$ctet1 if ctx4=substr(ctet1,4,1)zq=zq+1 else cw=cw+1 endif endif do case case p=1 thisform.l1.visible=.t.thisform.t1.visible=.t.thisform.zq1.visible=.t.thisform.cw1.visible=.t.t1=ctet1 zq1=zq cw1=cw if zq=4 jlun=”你真能蒙!“ endif case p=2 thisform.l2.visible=.t.thisform.t2.visible=.t.thisform.zq2.visible=.t.thisform.cw2.visible=.t.t2=ctet1 zq2=zq cw2=cw if zq=4 jlun=”太棒了,你真能蒙!“ endif case p=3 thisform.l3.visible=.t.thisform.t3.visible=.t.thisform.zq3.visible=.t.thisform.cw3.visible=.t.t3=ctet1 zq3=zq cw3=cw if zq=4 jlun=”太棒了,蒙的吧?!“ endif case p=4 thisform.l4.visible=.t.thisform.t4.visible=.t.thisform.zq4.visible=.t.thisform.cw4.visible=.t.t4=ctet1 zq4=zq cw4=cw if zq=4 jlun=”太棒了,您是教授吗?“ endif case p=5 thisform.l5.visible=.t.thisform.t5.visible=.t.thisform.zq5.visible=.t.thisform.cw5.visible=.t.t5=ctet1 zq5=zq cw5=cw if zq=4 jlun=”大学生水平,很可以!“ endif case p=6 thisform.l6.visible=.t.thisform.t6.visible=.t.thisform.zq6.visible=.t.thisform.cw6.visible=.t.t6=ctet1 zq6=zq cw6=cw if zq=4 jlun=”智商不低吗!“ endif case p=7 thisform.l7.visible=.t.thisform.t7.visible=.t.thisform.zq7.visible=.t.thisform.cw7.visible=.t.t7=ctet1 zq7=zq cw7=cw if zq=4 jlun=”还算可以,要努力呀!“ endif case p=8 thisform.l8.visible=.t.thisform.t8.visible=.t.thisform.zq8.visible=.t.thisform.cw8.visible=.t.t8=ctet1 zq8=zq cw8=cw if zq=4 jlun=”一般人到这儿都能找到!“ endif case p=9 thisform.l9.visible=.t.thisform.t9.visible=.t.thisform.zq9.visible=.t.thisform.cw9.visible=.t.t9=ctet1 zq9=zq cw9=cw if zq=4 jlun=”太一般了!“ endif case p=10 thisform.l10.visible=.t.thisform.t10.visible=.t.thisform.zq10.visible=.t.thisform.cw10.visible=.t.t10=ctet1 zq10=zq cw10=cw if zq=4 jlun=”到现在才早找出来?!智商有问题!“ else jlun=”智商太低了,再来一次?“ endif endcase ctet1=”“ thisform.refresh 14、双击按钮“新一局”(command3),在其click过程中输入如下命令: jlun=”“ thisform.l1.visible=.f.thisform.t1.visible=.f.thisform.zq1.visible=.f.thisform.cw1.visible=.f.thisform.l10.visible=.f.thisform.t10.visible=.f.thisform.zq10.visible=.f.thisform.cw10.visible=.f.thisform.l2.visible=.f.thisform.t2.visible=.f.thisform.zq2.visible=.f.thisform.cw2.visible=.f.thisform.l3.visible=.f.thisform.t3.visible=.f.thisform.zq3.visible=.f.thisform.cw3.visible=.f.thisform.l4.visible=.f.thisform.t4.visible=.f.thisform.zq4.visible=.f.thisform.cw4.visible=.f.thisform.l5.visible=.f.thisform.t5.visible=.f.thisform.zq5.visible=.f.thisform.cw5.visible=.f.thisform.l6.visible=.f.thisform.t6.visible=.f.thisform.zq6.visible=.f.thisform.cw6.visible=.f.thisform.l7.visible=.f.thisform.t7.visible=.f.thisform.zq7.visible=.f.thisform.cw7.visible=.f.thisform.l8.visible=.f.thisform.t8.visible=.f.thisform.zq8.visible=.f.thisform.cw8.visible=.f.thisform.l9.visible=.f.thisform.t9.visible=.f.thisform.zq9.visible=.f.thisform.cw9.visible=.f.p=0 ctext='1234567890' for i=1 to 4 n=11-i cn1=rand()cn=int(cn1*n)+1 if cn=0 cn=1 endif txx='ctx'+allt(str(i))&txx=substr(ctext,cn,1)if cn=1 ctext1=right(ctext,(10-i))else if cn=11-i ctext1=left(ctext,(10-i))else ctext1=left(ctext,cn-1)+right(ctext,(11-i-cn))endif endif ctext=ctext1 endfor thisform.text1.value=”" thisform.refresh 15、双击按钮“退格”(command2),在其click过程中输入如下命令: if len(allt(ctet1))<>0 &&长度不为0 ctet1=left(ctet1,len(allt(ctet1))-1)&&删除后面的一为数 endif thisform.refresh 16、修改主菜单,在“游戏”的猜数游戏后填加命令:do form csyx,别忘了生成程序文件。 17、因为表单和程序不在同一目录下,所以单独运行表单会出现找不到某程序的错误,我们需要运行主程序main.prg,来看看运行结果。第二篇:VFP程序题
第三篇:vfp程序题总结
第四篇:VFP读程序选择题
第五篇:vfp教学实例