1、 打开STUD表,按姓名查询任一学生的信息。若找到,显示该生信息;否则,显示“查无此人!”。 解:clear use stud accept "请输入姓名:" to xm loca for 姓名=xm if found() disp else "查无此人!" endif use 2、 计算1!+2!+3!+……+10!之和。 解:s=0 k=1
for i=1 to 10
k=k*i
s=s+k
endfor
s
解释:第一次运行时: s=0;k=1; 进入for循环,i=1,k=k*i(1=1*1),s=s+k(1=0+1);此时k=1,s=1; 第二次运行: 进入for循环,i=2,k=k*i(2=1*2),s=s+k(3=1+2);此时k=2,s=3; 第三次运行: 进入for循环,i=3,k=k*i(6=2*3),s=s+k(9=3+6);此时k=6,s=9; ………………………… s就是每次循环的总和,k就是每次运算的(1!,即第一次k=1!,第二次k=2!,第N次,k=N!)。 3、编写程序求,(1)3!+8!+11! (2)(4!+7!)*3! (3)求100以内能被3整除的数 解:(1)s=0 k=1
for i=1 to 3
k=k*i
endfor
t=1
for i=1 to 8
t=t*i
endfor
p=1
for i=1 to 11
p=p*i
endfor
s=s+k+t+p
"3!+8!+11!=",s (2)s=0 k=1
for i=1 to 4
k=k*i
endfor
t=1
for i=1 to 7
t=t*i
endfor
p=1
for i=1 to 3
p=p*i
endfor
s=(k+t)*p
"(4!+7!)*3!=",s (3)for i=1 to 100 if i/3=int(i/3) i endif endfor 4、100以内所有能被3整除的整数的和。 解:clear s=0 for i=1 to 100 if i%3=0 s=s+i endif endfor "100以内所有能被3整除的整数的和是:",s 5、(1) 1~100奇数求和, (2) 1~100求和 解:(1)题程序如下: set talk off
s=0
i=1
do while i<=100
s=s+i
i=i+2
enddo
s
(2)题程序如下: set talk off
s=0
i=1
do while i<=100
s=s+i
i=i+1
enddo
s
6、显示出100至200的所有奇数并每行显示6个 解:clea A=0 FOR I=100 to 200 if mod(i,2)#0 A=A+1 IF A=6 I A=0 ELSE I ENDI endi endf retu 7、VF编程,1到100之间,所有即是3的倍数又是7倍数的自然数之和 解:s=0 for i=1 to 100
if ((i%3=0) and (i%7=0))
s=s+i
endif
next i
s
8、任意输入三个数,按从大到小或从小到大顺序排列。 解:dimension a(3) input "3个数" to a(1) input "3个数" to a(2) input "3个数" to a(3) for i=1 to 2
for j=2 to 3
if a(i)<a(j) then
s=a(i)
a(i)=a(j)
a(j)=s
endif
endfor
endfor
a(1),a(2),a(3)
9、一: 求一个学生表(XSB)中男女入学成绩的平均分, 用Do while语句实现 二:求一个成绩表(CJB)中,有成绩和等级两个字段,要求根据学生的成绩确定等级,具体规定如下: 成绩在85分以上的等级为“优秀”,成绩在70分以上的等级为“良好”,成绩在60以上的等级为“及格”,低于60的等级为“不及格”。 解:如果非要用dowhile 语句请用下面那个,一个一个统计 set talk off
use xsb
count to m for 性别="男" count to n for 性别="女" sum 入学成绩 to a for 性别="男" sum 入学成绩 to b for 性别="女" "男生入学成绩平均分为:",a/m "女生入学成绩平均分为:",b/n set talk on
retu
*---------------------------------------
set talk off
clea
m=0
n=0
a=0
b=0
use xsb
go top
do while !eof()
if 性别="男" m=m+1
a=a+入学成绩 else
n=n+1
b=b+入学成绩 endif
skip
enddo
"男生入学成绩平均分为:",a/m "女生入学成绩平均分为:",b/n set talk on
retu
第二题:clear use cjb
cj=成绩 do while not eof()
do case
case cj>=85
replace 等级 with "优秀" case cj>=70.and.cj<85
replace 等级 with "良好" case cj>=60.and.cj<70
replace 等级 with "及格" case cj<60.and.cj>0
replace 等级 with "不及格" endcase
skip
enddo
use
return
10、s=1*2*3*4*……*n 求s不大于400000时n的最大值。 解:clear s=1 n=1 do while .t. s=s*n if s>=400000 exit endif n=n+1 enddo n-1 11、求1!+2!+3!+4!+5!+...10!详细的编程。 解:CLEAR s=0 b=1 FOR i=1 TO 10 FOR j=1 TO i b=b*j ENDFOR s=s+b b=1 ENDFOR s 12、1~100间能被3或5整除的整数的和? 解:set talk on clear sum=0 FOR i =1 TO 100 if i%3=0 or i%5=0 sum=sum+i ENDIF endfor "和为:",sum SET TALK off 13、编程求出1到300以内能被3或7整除的数的平方和。 解:clea s=0
for i=1 to 300
if i%3=0.or.i%7=0
s=s+i*i
endif
endfor
s
retu
14、(1).输入一年份,判断是否为闰年。 (2).帮我编一个求“打折商品”的程序。 解:(1)clear set talk off
input "请输入年份:"to n msg="年不是闰年" if mod(n,4)=0 and mod(n,100)<>0 or mod(n,400)=0
msg="年是闰年"
endif
n,msg
set talk on
(2)clear SET TALK OFF
INPUT "请输入商品价格:" TO A INPUT "请输入折扣数:" TO C S=A*0.1*C
"折后价格为:",S SET TALK ON
15、一:顾客订购机票,若买到二十张以上,则优惠15%若买到十张以上,则优惠10%。现要求编一个程序在顾客输入定票数后直接现实价格 二:在学生表中找到张三的资料,若入校总分大于540,则现实其学号,出生年月,专业 解:一、clear input "请输入定票数:" to x do case
case x<10
y=x
case x>=10 and x<20
y=0.9*x
other
y=0.85*x
endcase
"应付价格为:",y 二、clear use 学生表 loca for 姓名="张三" if 入校总分>540 学号,出生年月,专业 endif
use
16、用vf编程输出如下图形: ************* *********** ********* ******* ***** *** * 解:clear for i=7 to 1 step -1 space(7-i) for j=2*i-1 to 1 step -1 "*" endfor Endfor 17、vf 用循环语句编程 输出下面图形: * * **** *** *** *** ***** ***** ** ****** ******* * 解:CLEAR FOR i=1 TO 8 STEP 2 FOR a=1 TO i "*" ENDFOR " " FOR b=1 TO i "*" ENDFOR " " FOR c=1 TO (8+1-i)/2 "*" ENDFOR Endfor 18、用循环语句编写计算10! 解:set talk off clear t=1 for n=1 to 10 t=t*n endfor '10!=',t Return 19、n=0 do while .T. 条件为真是建立循环 n=n+1 循环一次,N增加1 if n/30=int(n/30) 判断N是否能被30整除 n 可以整除,显示N的值 if n>=90 继续判断N是否大于等于90 exit 大于等于90时执行EXIT退出DO while循环语句 endif endif enddo return 结果为30,60,90.当等于90时.第二个IF语句条件成立,执行EIXT退出整个DO while 语句 20、由键盘输入一个字符串,要求逆序输出该字符串. 解:CLEAR ACCEPT "请输入一个字符串:" TO S1 A=LEN(S1) I=A S2="" DO WHILE I>=1 S2=S2+SUBSTR(S1,I,1) I=I-1 ENDDO "这个字符串的逆序是:",S2 21、用if做 从键盘输入三个数,按从大到小排列后,放入A.B.C.中,并输出A.B.C. clear
"请输入3个数" input "第一个 " to a input "第二个 " to b input "第三个 " to c if a<b
d=a
a=b
b=d
endif
if a<c
d=a
a=c
c=d
endif
if b<c
d=b
b=c
c=d
endif
"a="+LTRIM(STR(a)),"b="+LTRIM(STR(b)),"c="+LTRIM(STR(c))
return
22、用do case做 在scorese表中查找指定身份证号码的学生,并按他的“语文成绩”给出相应的评语 语文成绩 100-90 优秀 89-70 良好 69-60 合格 60以下 不合格 解:clear use scorese accept "查询学生身份证号码:" to nu locate for 身份证号=nu do case case 语文成绩<60 "不合格" case 语文成绩<69 "合格" case 语文成绩<89 "良好" case 语文成绩<=100 "优秀" endcase return 23、当x>=0时y=8*x+2,当x<0时y=2-8*x计算y的值 用do while 解:do while .t. input to x if x>=0 y=8*x+2 else y=2-8*x endif y wait "是否继续y/n" to s if s="n" or s="N" exit endif enddo 24、从键盘输入数据A(可以是C,D,N,L和Y型等),通过类型判断,输入其数据类型的汉字说明(如A的值为“OK!”,那么输出应为:OK!--字符型数据)。 解:clear input "请输入数据" to A T=vartype(A)
A
do case
case T='C'
"--字符型" case T='D'
"--日期型" case T='G'
"--通用性" case T='Y'
"--货币型" case T='T'
"日期时间型" case T='L'
"--逻辑型" case T='N'
"--数值型" endcase
return
25、VFP中,if语句 do case语句 等区别。 解:和do case都是条件型语句: IF是只有两种情况下使用的,就是,如果条件成立,怎么处理,否则,怎么处理,当然,里面还可以再有嵌套。 而DO CASE则表示,当什么情况下,怎么处理;当什么情况下怎么处理;。。。可以执行的是多条件,里面也可以再加嵌套。 26、在VFP中怎么用 DO WHILE语句编程 显示所有100以内的6的倍数的数,并求这些数的和 解:s=0 i=1 do while i<=100 if mod(i,6)=0 i s=s+i endif i=i+1 enddo "和",s 27、用VFP编程。给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。用if 语句。 解:clear input "输入考试成绩" to chj if chj<60 dj="E" else if chj<70 dj="D" else if chj<80 dj="C" else if chj<90 dj="B" else dj="A" endif endif endif endif dj 28、用条件语句编写程序求下面的分段函数Y的值 VF。 当x<2时 ,y=x; 当2<=x<=10时 y=x; 当x>10时 y=-3x; clear input "请输入x的值:" to x do case case x<2 y=x case x>=2 and x<=10 y=x &&这里可能是你的题写错了,怎么两个都是y=x,你自己看到题把这改下 case x>10 y=-3*x endcase "y的值是:",y 29、编程打印由数字组成的图案,图案如下。 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 解:dimen a(6,6) for i=1 to 6 for j=1 to i a(j,1)=1 a(j,2)=2 a(j,3)=3 a(j,4)=4 a(j,5)=5 a(j,6)=6 endfor endf for i=1 to 6 for j=1 to i a(i,j) endfo Endf 30、for循环也叫当型循环,意思是当条件成立时执行的循环。 do while 循环也叫直到型循环,意思是直到条件不成立结束循环。 scan循环也叫表扫描循环,根据当前表的记录数进行循环,每循环一次表记录指针下移一个记录,直到数据表结束 31、打印学生表(学生.dbf),中全体女生的信息。(姓名,性别,年龄,专业,等内容 解:1、用scan for...endscan 语句 use 学生 scan all for 性别="女" 姓名,性别,年龄,专业 endscan 2、用do while...enddo语句 use 学生 do while !eof() if 性别="女" 姓名,性别,年龄,专业 endif skip enddo 31、vf中,do while !eof(),是什么意思呀 解:!指不等于 eof()函数用于测试指针是否指向文件尾. ! eof() 等价于 not eof() do while !eof() 循环语句,判断是指针是否到文件尾. 条件成功,建立循环,否则直接跳出循环体. 32、1、首先,EOF(x)是一个函数,它的返回的函数值是boolean型:当数据指针指向文件末尾时,它的值为true,当指针未指向文件末尾时它的值为false. 函数中的x是一个整型数,代表打开文件时定义的文件号。 一般eof函数跟读取顺序文件相联系,以防到达文件末尾时还要读取数据而出现错误。使用方法是:先打开文件,每读一个数据后用eof判断是否到了文件末尾,如果不到则继续读取,如果到达结尾(eof()=true)则说明已经到达文件末尾,不存在没有读取的数据了,所以立即停止读取。 2、not eof(1)的含义:“1”表示打开文件时使用的通道号为1#。它的意思是当文件正在读取时,如果指针没有到达结尾,eof(1)=false,根据布尔代数运算规则,not eof(1)的值为true;而当指针到达文件结尾时,not eof(1)的值为false。 3、do while not eof(1)是一个循环语句,它的循环条件是not eof(1)=true,刚才分析过,这个取值表示指针没有到达文件结尾。而停止循环的条件是not eof(1)=false,这个值只有当指针文件到达尾部时才取得。 所以,这个循环条件是指:当指针没有到达文件结尾时,继续循环,而一旦指针到达文件结尾,则停止循环。 举一个读取顺序文件的例子吧: open d:\a.txt for input as #1
do while not eof(1)
input #1,a
loop
这样就把文件d:\a.txt 中的数据全部读了一遍。当然读取之后再做什么运算或赋值是还要另外编程解决地。 33、在VB中 do while not eof(1)..................loop.....是什么意思 解:1 eof()函数为判断是否到文件尾函数,当到尾时eof()函数为真,不到尾时函数值为假。 2 do While是当型循环,当条件满足时执行循环体,条件不满足时退出循环。 所以 not eof()为真代表没到文件尾,所以此句为没到文件尾就执行循环体。 34、for ...to,用在知道循环次数的时候比较方便 DO WHILE....LOOP 用在在循环时判断条件,条件满足执行,不满足就退出 例如你要计算1+2+3+...+100的值则用for to 要计算1+2+3+4+5+...什么时候大于1000,并返回最后一个数时用DO WHILE....LOOP 35、用VF, do while 求等差数列和 解:SET TALK OFF i=4 s=0 DO WHILE i<=14 s=s+i i=i+2 ENDDO "和是:",s SET TALK ON 36、用vf的DO WHILE语句怎么编写乘法口诀 解:CLEAR i = 1 DO WHILE i <= 9 j =1 DO WHILE j <= i STR(j,2) + " * " + STR(i,1) + " = " + STR(i * j,2) + " " j = j + 1 ENDDO i = i + 1 CHR(13) + CHR(10) ENDDO |
|