VF程序设计复习资料.docx
《VF程序设计复习资料.docx》由会员分享,可在线阅读,更多相关《VF程序设计复习资料.docx(51页珍藏版)》请在冰豆网上搜索。
![VF程序设计复习资料.docx](https://file1.bdocx.com/fileroot1/2023-1/22/f03b1bd6-93c0-4e96-9e5c-be828ba41682/f03b1bd6-93c0-4e96-9e5c-be828ba416821.gif)
VF程序设计复习资料
第二部分结构化程序设计语句和算法
一、程序的概念
程序:
是计算机能够分析执行的命令序列的集合。
程序设计:
是计算机用户将解决某一实际问题所用的命令按一定的逻辑顺序编制成程序,并以文件的形式存放于磁盘的过程。
执行程序时,计算机按顺序自动执行程序文件中的命令。
例编程求1+2+3+……+100
clear
s=0
fori=1to100
s=s+i
endfor
?
“s=”,s
return
二、VF语言基础
1.数据类型
1)数值型:
由数字0-9以及正负号(+和-)和小数点(.)组成。
例如:
123,34.56,-100
2)字符型:
英文、汉字、数字、空格和标点符等组成的一串字符。
例如:
”hello”,”goodmorning”。
注意:
其表示方法用""将字符串括起来。
3)逻辑型:
表示的值为真和假两种状态,.T.或.t.表示真,.F.或.f.表示假。
2.常量
1)数值型常量:
例如:
123,34.56,-100
2)字符型常量:
”hello”,”goodmorning”。
3)逻辑型常量:
.T.表示真,.F.表示假。
3.变量
1)概念:
变量是指在程序运行期间其值可以变化的量,一个变量可以存放一个数据。
2)变量名:
每个变量应有一个名字,称为变量名。
(尽量用一个字母作为一个变量名)
如:
x,y,z,i,j等。
注意:
VF中变量不需要定义就可以直接使用。
4.运算符及表达式
●运算符:
用来进行运算的符号;
●表达式:
是指用运算符将变量、数组元素、常量、函数连接组合得到的一组有物理意义的式子。
表达式分为算术表达式、字符表达式、关系表达式和逻辑表达式4类。
表达式和常量一样,是具有数据类型的数据(求值之后),因此一个表达式中的各项必须具有相同类型。
1)算术运算符:
()^%*、/+、-
算术表达式:
10+3*4-152^3x^3/y+a%5
2)字符运算符:
完全连接“+”:
“Ihavea”+“Book”=“IhaveaBook”
包含运算“$”:
“abc”$“abcdef”=.t.
“ABC”$“abcdef”=.f.
3)关系运算符:
<>===<=>=<>
关系表达式:
<表达式><关系运算符><表达式>
关系表达式相当于一个命题,这个命题要么成立,要么不成立,如果成立,命题为真,如果不成立命题为假。
1244.33>=12结果:
.t.
10=20结果:
.f.
”A”<”B”结果:
.t.
”ABC”>”ABD”结果:
.f.
4)逻辑运算符:
!
NOT或.NOT.OR或.OR.AND或.AND.
逻辑表达式:
<关系表达式><逻辑运算符><关系表达式>
逻辑表达式也相当于一个命题,这个命题要么成立,要么不成立,如果成立,命题为真,如果不成立命题为假。
x>5ORy<10.T.或者.F.,取决于x,y的值
推导判断闰年的表达式:
闰年:
能被4整除,但是不能被100整除;或者能被400整除。
(y%4=0andy%100<>0)ory%400=0
5.常用函数
1)取绝对值函数:
abs(数值表达式)
2)取整函数:
int(数值表达式)
功能:
取数值表达式的整数部分。
int(12.3)=12
int(56.78)=56
3)求平方根函数:
sqrt(数值表达式)
4)求字符串长度函数:
len(字符串表达式)
len("hello")=5
len("你好")=4
说明:
一个汉字占两个字符的宽度。
5)取子串函数:
●Left(字符串表达式,长度)
●Right(字符串表达式,长度)
●substr(字符串表达式,起始位置,长度)
功能:
从指定表达式值的指始位置取指定长度的字符串作为函数值。
Substr(“hello”,2,3)结果:
ell
6)计算字串出现次数函数:
Occurs(字符串表达式1,字符串表达式2)
功能:
返回第一个字符串在第二个字符串中出现的次数。
Occurs(“a”,”abcaa”)结果:
3
7)大小写转换函数
Lower(字符串表达式):
Upper(字符串表达式):
8)生成空格字符函数:
space(数值表达式)
功能:
生成若干个空格,空格的个数由数值表达式确定。
Space(5)其作用是产生5个空格
9)数值转换成字符串函数:
str(数值表达式,长度,小数位数)
功能:
将数值表达式的值转换为字符串,转换时根据需要自动四舍五入。
转换后的理想长度应该是数值表达式值的整数部分位数加上小数位数值,再加上一位小数点。
Str(“123.567”,7,3)结果:
123.567
Str(“123.567”,6,2)结果:
123.57
10)随机函数:
rand()
功能:
系统随机产生一个0到1之间的纯小数
产生某个范围的随机整数:
Int(rand()*(终值-初值+1)+初值)
例如:
随机产生两位随机整数。
Int(rand()*(99-10+1)+10)
三程序设计基本语句:
1.变量的赋值:
=
格式:
变量=表达式
功能:
将“=”(赋值号)右边表达式的值赋予左边的变量。
2.输入命令
1)input命令
格式:
input“提示信息”to变量
功能:
在屏幕上显示“提示信息”,并等待用户从键盘上输入表达式,再把表达式的值赋给指定的变量。
2)Accept命令
格式:
accept“提示信息”to变量
功能:
在屏幕上显示[<提示信息>],等待用户从键盘上输入,再把输入内容作为字符串常量赋值给指定的变量。
3.输出命令?
|?
?
格式:
?
表达式1,[<表达式2>…]
功能:
将表达式的结果在当前光标的下一行输出;
格式:
?
?
表达式1,[<表达式2>…]
功能:
将表达式的结果在当前光标位置输出;
四、VF程序基本结构
4.1顺序结构
顺序结构:
就是计算机要按照程序中语句出现的先后次序依次执行各条语句的结构。
顺序结构是程序设计中最常见、使用最多的结构。
顺序结构程序主要由赋值语句、输入语句和输出语句构成。
程序:
1求园的面积
clear
input“r=”tor
s=3.14*r^2
?
s
return
2交换任意两个变量的值
clear
input“x=”tox
input“y=”toy
t=x
x=y
y=t
?
“x=”,x
?
”y=”,y
return
3鸡兔同笼问题。
已知鸡兔的总头数为h,总脚数为f,求鸡兔各有多少只?
clear
input"h="toh
input"f="tof
x=(4*h-f)/2
y=(f-2*h)/2
?
”鸡的个数:
”,x
?
”兔的个数:
”,y
return
三、选择结构
1)IF语句格式:
IF条件表达式
语句序列1
ELSE
语句序列2
ENDIF
功能:
执行该语句时,如果条件表达式的值为.t.,则执行语句序列1,否则执行语句序列2,然后再执行endif之后的语句。
其中else可以省略,即如果语句序列2为空,则没有ELSE以及语句序列1。
程序
1.判断闰年。
从键盘任意输入一年份,判断其是否是闰年,是则输出“是“,不是则输出“否”。
Clear
Input“y=”toy
If(y%4=0andy%100<>0)ory%400=0
?
”是”
Else
?
”否”
endif
return
2.输出3个数中最大值
clear
input"x="tox
input"y="toy
input"z="toz
ifx>=y
m=x
else
m=y
endif
ifmm=z
endif
?
m
return
3.判断一个数是否是水仙花数。
所谓水仙花数是指一个3位数,其每位数字的立方和等于它本身。
clear
input"m="tom
x=int(m/100)
y=int((m%100)/10)
z=m%10
ifx^3+y^3+z^3=m
?
"是"
else
?
"否"
endif
return
2)多分支语句:
DOCASE
CASE逻辑达式1
命令序列1
[CASE逻辑表达式2
命令序列2
…
CASE逻辑表达式n
命令序列N]
[OTHERWISE
命令序列]
ENDCASE
说明:
1)从第一个逻辑表达式开始判断,当找到一个逻辑表达式的值为.T.时,就执行紧跟其后的命令序列,然后执行ENDCASE之后的语句。
2)在一个DOCASE结构中,最多只能执行一个CASE语句后面的语句序列。
如果case后的所有逻辑表达式的值均为.F.,则执行OTHERWISE后面的语句序列。
4.输入一个成绩,输出其等级。
CLEAR
INPUT“请输入学生成绩:
”TOn
DOCASE
CASEn>=90andn<=100
?
“优秀”
CASEn>=80
?
“良好”
CASEn>=70
?
“中等”
CASEn>=60
?
“及格”
OTHERWISE
?
“不及格”
ENDCASE
return
四、循环结构
1)dowhile循环
Dowhile条件
循环体
Enddo
提示:
级数求和问题从累加求和到最难的求和一鼓作气学完。
算法:
1.求1-100的累加和:
s=1+2+3…+100
Clear
i=1
s=0
Dowhilei<=100
s=s+i
i=i+1
Enddo
?
s
return
2.求1-100奇数的和。
Clear
i=1
s=0
Dowhilei<=100
s=s+i
i=i+2
Enddo
?
s
return
3.求1-100偶数的和。
Clear
i=2
s=0
Dowhilei<=100
s=s+i
i=i+2
Enddo
?
s
return
2)For循环
For循环变量=初值TO终值STEP步长
循环体
Endfor
其中步长为1时,STEP1可以省略。
4.将1-3题用for语句实现
1)1-100所有整数的和
Clear
s=0
Fori=1to100
s=s+i
endfor
?
s
Return
2)1-100所有奇数的和
Clear
s=0
Fori=1to100step2
s=s+i
endfor
?
s
Return
3)1-100所有偶数的和
Clear
s=0
Fori=2to100step2
s=s+i
endfor
?
s
Return
强调:
当循环次数确定的时候尽量用for循环实现。
5.求s=1+1/2+1/3+1/4+....+1/100
clear
s=0
fori=1to100
s=s+1/i
endfor
?
"s=",s
Return
6.求s=1-1/2+1/3-1/4+....+1/100
clear
s=0
fori=1to100
s=s+1/i*(-1)^(i+1)
endfor
?
s
Return
7.求s=1-1/2+1/3-1/4+....+1/n,n由键盘输入
clear
input“n=”ton
s=0
fori=1ton
s=s+1/i*(-1)^(i+1)
endfor
?
s
Return
8.求N!
=1×2×3×4…×N,其中N由键盘输入。
Clear
Input“n=”ton
t=1
Fori=1ton
t=t*i
endfor
?
t
return
9.求s=1!
+2!
+……+n!
,n由键盘输入。
(即求阶乘之和)
clear
input"n="ton
s=0
t=1
fori=1ton
t=t*i
s=s+t
endfor
?
s
Return
10.s=1+(1*2)+(1*2*3)+...+(1*2*3*…*10)
此题相当于求:
s=1!
+2!
+……+10!
clear
t=0
s=0
fori=1to10
t=t+i
s=s+t
endfor
?
s
Return
11.s=1+(1+2)+(1+2+3)+...+(1+2+3+4+5+6+7+8+9+10)
clear
t=0
s=0
fori=1to10
t=t+i
s=s+t
endfor
?
s
Return
12.s=1+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+4+5+6+7+8+9+10)
clear
t=0
s=0
fori=1to10
t=t+i
s=s+1/t
endfor
?
s
return
13.计算s=1!
+1/2!
+1/3!
……+1/n!
,n由键盘输入(即求阶乘倒数之和)
clear
input"n="ton
s=0
t=1
fori=1ton
t=t*i
s=s+1/t
endfor
?
s
Return
14.计算s=1!
+1/2!
+1/3!
……+1/n!
(要求1/n!
<10-6为止)
clear
s=0
t=1
i=1
dowhile1/t>=10^(-6)
s=s+1/t
i=i+1
t=t*i
endfor
?
"s=",s
return
15.计算s=1!
-1/2!
+1/3!
-1/4!
……±1/n!
(要求1/n!
<10-6为止)
clear
s=0
t=1
i=1
dowhile1/t>=10^(-6)
s=s+1/t*(-1)^(i+1)
i=i+1
t=t*i
endfor
?
"s=",s
return
16.计算s=x/1!
+x2/2!
+x3/3!
……+xn/n!
,x由键盘输入。
(要求xn/n!
<10-6为止)
Clear
Input“x=”tox
s=0
t=1
i=1
dowhilex^i/t>=10^(-6)
s=s+(x^i/t)
i=i+1
t=t*i
endfor
?
"s=",s
return
17.计算s=x/1!
-x2/2!
+x3/3!
……±xn/n!
(要求xn/n!
<10-6为止)
Clear
Input“x=”tox
s=0
t=1
i=1
dowhilex^i/t>=10^(-6)
s=s+(x^i/t)*(-1)*(i+1)
i=i+1
t=t*i
endfor
?
"s=",s
return
18.ex=1+x+x2/2!
+x3/3!
……+xn/n!
(要求xn/n!
<10-6为止)
Clear
Input“x=”tox
s=1
t=1
i=1
dowhilex^i/t>=10^(-6)
s=s+x^i/t
i=i+1
t=t*i
endfor
?
"s=",s
return
19.求s=2!
+4!
+6!
+8!
+10!
S=0
T=1
Fori=2to10step2
T=t*(i-1)*i
S=s+t
Endfor
?
s
return
20.求s=1/2!
+1/4!
+1/6!
+1/8!
+1/10!
S=0
T=1
Fori=2to10step2
T=t*(i-1)*i
S=s+1/t
Endfor
?
s
return
21.求s=1/2!
-1/4!
+1/6!
-1/8!
+1/10!
S=0
T=1
d=1
Fori=2to10step2
T=t*(i-1)*i
S=s+1/t*d
d=-d
Endfor
?
s
return
22.求s=1!
+3!
+5!
+7!
+9!
可以看成s=1+3!
+5!
+7!
+9!
令s=1,只需求出3!
+5!
+7!
+9!
即可
S=1
T=1
Fori=3to9step2
T=t*(i-1)*i
S=s+t
Endfor
?
s
return
23.求s=1/1!
-1/3!
+1/5!
-1/7!
+1/9!
S=1
T=1
D=1
Fori=3to9step2
T=t*(i-1)*i
S=s+1/t*d
Endfor
?
s
return
24.
25.cos(x)=1-x2/2!
+x4/4!
-x6/6!
……±xn/n!
(精度为10^(-8))
Clear
Input“x=”tox
s=1
t=2
i=2
d=-1
dowhilex^i/t>=10^(-8)
s=s+x^i/t*d
i=i+1
t=t*i
d=-d
endfor
?
"s=",s
return
26.输出所有的水仙花数。
提示:
先判断某个数是否是水仙花数。
clear
forn=100to999
x=int(n/100)
y=int((n%100)/10)
z=n%10
ifx^3+y^3+z^3=nthen
?
n
endif
endfor
return
27.从键盘任意输入一个整数,判断其是否是素数。
除了1和它本身之外不能被任何一个整数所整除的自然数叫质数,又称为素数。
例如3,5,17是素数,而4,6,8,9就不是素数。
特殊:
1既不是质数也不是合数,2是最小的质数。
clear
input"n="ton
fori=2ton-1
ifn%i=0
exit
endif
endfor
ifi=m
?
"是"
else
?
"否"
endif
return
exit作用:
退出循环。
28.以5个为一组输出1-100的整数。
Clear
C=0
fori=1to100
?
?
i
ifi%5=0
?
Endif
endfor
return
29.以5个为一组输出1-100能被3整除的数。
Clear
C=0
fori=1to100
ifi%3=0
?
?
i
c=c+1
ifc%5=0
?
Endif
endif
endfor
return
30.以5个为一组输出100-1000以内的所有素数,并计算这些素数之和。
(两重循环的应用)
分析:
1)先找出所有素数
2)以5个数据为一组显示
3)计算所有素数的和
clear
c=0
s=0
form=100to1000
fori=2tom-1
ifm%i=0
exit
endif
endfor
ifi=m
?
?
m
c=c+1
ifc%5=0
?
endif
s=s+m
endif
endfor
?
“素数的和:
”,s
return
31.百钱买百鸡问题。
公鸡5元一只,母鸡3元一只,小鸡3只一块钱,假设用100元买了100只鸡,问公鸡、母鸡、小鸡各有多少只?
穷举法:
所谓穷举法就是将各种组合的可能性全部一一测试一遍,对每一组合检查它是否符合给定的条件,将符合条件的解全部输出即可。
clear
forx=1to19
fory=1to33
z=100-x-y
ifz%3=0and5*x+3*y+z/3=100
?
x,y,z
endif
endfor
endfor
return
32.请显示如下图所示的九九乘法表。
clear
fori=1to9
forj=1to9
?
?
str(i,1)+"*"+str(j,1)+"="+str(i*j,2)+space(3)
endfor
?
endfor
return
33.要求显示如下乘法表。
clear
s=0
fori=1to4
forj=ito4
?
?
str(i,1)+"*"+str(j,1)+"="+str(i*j,2),space(3)
endfor
?
endfor
return
34.请显示如下图所示的九九乘法表。
clear
fori=1to9
forj=ito9
?
?
str(i,1)+"*"+str(j,1)+"="+str(i*j,2)+space(3)
endfor
?
space(i*9)
endfor
return
35.设计1个程序,要求是:
(1)在键盘上输入1个不小于3的自然数N(例输入10),求出其不到第N个自然数中奇数之和,并输出结果
(2)输出1到第N自然数中所有质数的个数
clear
input"n="ton
ifn<3
?
”请输入大于等于3的数!
”
else
s=0
fori=1ton-1step2
s=s+i
endfor
?
”奇数的和:
”,s
c=0
fori=1ton
forj=2toi-1
ifi%j=0
exit
endif
endfor
ifj=I
c=c+1
endif
endfor
?
”质数的个数”,c
Endif
Return
36.求两个数的最大公约数。
算法(采用辗转相除法):
m除以n(m>n),得余数r;如果r不等于0,则将n赋予m,r赋予n,再用m除以n,得余数r;依次类推,直到r=0为止,此时的n就是最大公约数。
例如:
30和20的最大公约数为10
采用辗转相除法(要求m>n):
1)m除以n,得余数r;
2)如果r不等于0,则将n赋予m,r赋予n,再用m除以n,得余数r;
3)依次类推,直到r=0为止,此时的n就是最大公约数。
Clear
Input"m="tom
Input"n="ton
r=m%n
dowhiler<>0
m=n
n=r
r=m%n
enddo
?
n
Return
37.求两个数的最小公倍数。
M和n的乘积除以最大公约数就是最小公倍数
例如:
30和20的最小公倍数为60
Clear
input"m="tom
input"n="ton
x=m
y=n
r=mod(m,n)
dowhiler<>0
m=n
n=r
r=mod(m,n)
enddo
?
x*y/n
Return
38.猴子摘桃问题。
已知猴子第一天摘了2个桃子,第二天摘的桃子是第一天的2倍多一个;以此类推,第n天摘了多少个桃子?
(递推法)
clear
input"n="t