专升本VF程序设计复习资料CH2算法.docx

上传人:b****2 文档编号:12916816 上传时间:2023-04-22 格式:DOCX 页数:34 大小:23.09KB
下载 相关 举报
专升本VF程序设计复习资料CH2算法.docx_第1页
第1页 / 共34页
专升本VF程序设计复习资料CH2算法.docx_第2页
第2页 / 共34页
专升本VF程序设计复习资料CH2算法.docx_第3页
第3页 / 共34页
专升本VF程序设计复习资料CH2算法.docx_第4页
第4页 / 共34页
专升本VF程序设计复习资料CH2算法.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

专升本VF程序设计复习资料CH2算法.docx

《专升本VF程序设计复习资料CH2算法.docx》由会员分享,可在线阅读,更多相关《专升本VF程序设计复习资料CH2算法.docx(34页珍藏版)》请在冰豆网上搜索。

专升本VF程序设计复习资料CH2算法.docx

专升本VF程序设计复习资料CH2算法

CH2结构化程序设计语句和算法

一、顺序结构

1.求园的面积

Clear

Input“请输入园的半径:

”tor

S=pi()*r^2

?

”园的面积是:

”,s

2.鸡兔同笼问题

二、选择结构

2.1if

1.判断闰年

Clear

Input“请输入年份:

”toy

If(y%4=0andy%100<>0)ory%400=0

?

y,”是闰年!

Else

?

y,”是闰年!

endif

cancel

2.2docase

2.判断学生成绩等级

clear

input"请输入学生成绩:

"tox

ifx>100orx<0then

?

"输入成绩必须位于0-100之间"

else

docase

casex>=90

?

"等级为A"

casex>=80

?

"等级为B"

casex>=70

?

"等级为C"

casex>=60

?

"等级为D"

other

?

"等级为E"

endcase

endif

cancel

3.判断一个数是否是水仙花数。

clear

input"m="tom

x=int(m/100)

y=int((m%100)/10)

z=m%10

ifx^3+y^3+z^3=m

?

m,"是水仙花数"

else

?

m,"不是水仙花数"

endif

cancel

三、循环结构

3.1Dowhile循环

1.s=1+2+3….+100

Clear

I=1

S=0

Dowhilei<=100

S=s+i

I=i+1

Enddo

?

”s=”,s

cancel

3.2FOR循环

1.将上例用for语句实现

Clear

S=0

Fori=1to100

S=s+i

Next

?

”s=”,s

Cancel

2.求1-100奇数的和。

Clear

S=0

Fori=1to100step2

S=s+i

Next

?

”s=”,s

Cancel

3.求1-100偶数的和。

Clear

S=0

Fori=2to100step2

S=s+i

Next

?

”s=”,s

Cancel

4.求N!

=1×2×3×4…×N

Clear

Input“请输入n:

”ton

f=1

Fori=1ton

f=f*i

Next

?

”f=”,f

Cancel

5.求级数s=1+1/2-1/3+1/4+....

clear

s=1

d=1

input"输入N:

"ton

fori=2ton

s=s+d*1/i

d=-d

nexti

?

"s=",s

cancel

6.输出整数1-100,要求数据以5个为一组输出。

clear

fori=1to100

?

?

i

ifi%5=0

?

endif

next

cancel

7.求fibnocsi数列。

1,1,2,3,5,8,13,21。

,要求以5个位一组输出前20个数。

clear

f1=1

f2=1

*首先显示前两个数1,1

?

?

f1,f2

fori=3to20

f=f2+f1

?

?

f

f1=f2

f2=f

*以5个为一组显示

ifi%5=0

?

endif

nexti

cancel

8.求两个数(m,n,其中m>n)的最大公倍数和最小公约数。

采用辗转相除法:

m除以n,得余数r;如果r不等于0,则将n赋予m,r赋予n,再用m除以n,得余数r;依次类推,直到r=0为止,此时的n就是最大公约数。

M和n的乘积除以最大公约数就是最小公倍数。

Cancel

input"输入M:

"tom

input"输入N"ton

x=m

y=n

ifn=0then

?

"数据有错,不能为0!

"

exit

endif

r=mod(m,n)

dowhiler>0

m=n

n=r

r=mod(m,n)

enddo

?

"最大公约数是:

",n

?

"最小公倍数是:

",x*y/n

cancel

9.判断某个数是否是素数。

(除了1和它本身之外不能被任何一个整数所整除的自然数叫质数,除去2之外,其它质数都是奇数,又称为素数)

在程序设计中,经常要记录一些状态,作为判断的条件。

因此需要在程序中设置一些标志,通常标志是整型变量。

如:

设置变量f用于记录是否为素数,

f=0是素数;

f=1不是素数。

程序:

clear

input"m="tom

f=.T.

fori=2tom-1

ifm%i=0

f=.F.

exit

endif

next

iff=.T.

?

"yes"

else

?

"no"

endif

cancel

10.输出100-1000以内的所有素数,并计算这些素数之和。

(输出时按照每行5个数据方式输出)。

(在3.2中6题的基础上进行扩充)

clear

count=0

s=0

form=100to1000

f=.T.

fori=2tom-1

ifm%i=0

f=.F.

exit

endif

next

iff=.T.

?

?

m

count=count+1

ifcount%5=0

?

endif

endif

s=s+m

next

?

"s=",s

cancel

12、显示所有的水仙花数。

clear

form=100to999

x=int(m/100)

y=int((m%100)/10)

z=m%10

ifx^3+y^3+z^3=m

?

m,"yes"

endif

next

cancel

12、猴子摘桃问题。

已知猴子第一天摘了2个桃子,第二天摘的桃子是第一天的2倍多一个;以此类推,第n天摘了多少个桃子?

clear

input"请输入第几天:

"ton

x=2

fori=2ton

x=x*2+1

next

?

"共摘了:

",x

cancel

13、计算t=1!

+2!

+……+n!

(即求阶乘之和)

clear

input"n="ton

sum=0

fori=1ton

f=1

forj=1toi

f=f*j

next

sum=sum+f

next

?

"sum=",sum

Cancel

14、计算t=1!

+1/2!

+1/3!

……+1/n!

(即求阶乘之和)

clear

input"n="ton

sum=0

fori=1ton

f=1

forj=1toi

f=f*j

next

sum=sum+1/f

next

?

"sum=",sum

Cancel

15、穷举法:

百钱买百鸡问题。

clear

forx=1to19

fory=1to33

z=100-x-y

ifz%3=0

if5*x+3*y+z/3=100

?

x,y,z

endif

endif

next

next

cancel

16、设计1个程序,要求是:

(查找算法、统计、求和、找素数或质数)

(1)在键盘上输入1个不小于3的自然数N(例输入10),求出其不到第N个自然数中奇数之和,并输出结果

(2)输出1到第N自然数中所有质数的个数

clear

input"n="ton

s=0

x=0

ifn<3then

?

"请输入大于等于3的数"

else

fori=3tonstep2

s=s+i

next

form=2ton

f=.T.

fori=2tom/2

ifm%i=0

f=.F.

exit

endif

next

iff=.T.

x=x+1

endif

next

endif

?

"奇数和为:

",s

?

"质数个数为:

",x

cancel

17、从键盘随机输入一字符串,统计该字符串中字母字符,数字字符和其他字符出现的次数。

clear

input"请输入字符串:

"toa

x=0

y=0

z=0

fori=1tolen(a)

b=substr(a,i,1)

docase

caseupper(b)>="A"andupper(b)<="Z"

x=x+1

caseb>="0"a_ndb<="9"

y=y+1

otherwise

z=z+1

endcase

next

?

"字母:

",x

?

"数字:

",y

?

"其他字符",z

cancel

四、数组

1.1一维数组

1)定义:

Dimensionarr(n)

下标从1开始,

2)一维数组的赋值和输出

*利用键盘输入数据值

dimena(10)

fori=1to10

input"输入数据:

"toa(i)

next

fori=1to10

?

?

a(i)

next

cancel

*利用rand()函数随机产生10-99的随机整数

dimena(10)

fori=1to10

a(i)=int(rand()*(99-10+1)+10)

?

?

a(i)

next

1.将具有n个元素的一维数组的值按逆序重新存放。

clear

input"请输入元素个数:

"ton

dimena(n)

*数组元素赋初值

fori=1ton

input"输入数据:

"toa(i)

next

*输出数组元素值

fori=1ton

?

?

a(i)

next

fori=1toint(n/2)

temp=a(i)

a(i)=a(n-i+1)

a(n-i+1)=temp

next

*换行

?

fori=1ton

?

?

a(i)

next

cancel

2.从键盘输入10个数,从中找出最大和最小的数,以及它们的位置。

求最小数和其位置:

clear

dimena(10)

fori=1to10

input"输入数据:

"toa(i)

next

minx=a

(1)

minp=1

fori=2to10

ifminx>a(i)

minx=a(i)

minp=i

endif

next

?

"min=",minx

?

"position=",minp

cancel

求最大数和其位置:

clear

dimena(10)

fori=1to10

input"输入数据:

"toa(i)

next

maxx=a

(1)

maxp=1

fori=2to10

ifmaxx

maxx=a(i)

maxp=i

endif

next

?

"max=",maxx

?

"position=",maxp

cancel

3.随机产生n个两位整数,按由小到大的顺序排列并显示输出。

(排序算法--选择法排序)

clear

dimensiona(10)

fori=1to10

a(i)=int(rand()*90+1)

?

a(i)

next

?

fori=1to9

minx=a(i)

minp=i

forj=i+1to10

ifminx>a(j)

minx=a(j)

minp=j

endif

next

ifminp<>i

temp=a(minp)

a(minp)=a(i)

a(i)=temp

endif

next

fori=1to10

?

a(i)

next

cancel

4.冒泡法排序

clear

dimensiona(10)

fori=1to10

a(i)=int(rand()*90+1)

?

a(i)

next

?

fori=1to9

forj=1to10-i

ifa(j)>a(j+1)then

temp=a(j)

a(j)=a(j+1)

a(j+1)=temp

endif

next

next

fori=1to10

?

a(i)

next

cancel

5.随机产生20个20-99之间的整数,先按照每行5个数据方式输出,再进行升序排列,再按照每行5个数据方式输出

clear

dimensiona(10)

*数组赋值

fori=1to10

a(i)=int(rand()*90+1)

?

?

a(i)

ifi%5=0

?

endif

next

*排序

fori=1to9

minx=a(i)

minp=i

forj=ito10

ifminx>a(j)

minx=a(j)

minp=j

endif

next

ifminp<>i

temp=a(minp)

a(minp)=a(i)

a(i)=temp

endif

next

*换行

?

*排序结果输出

fori=1to10

?

?

a(i)

ifi%5=0

?

endif

next

cancel

6.(对字符串排序处理)有5个英文单词,分别为:

Word,Excel,Powerpoint,Type,Angle,要求设计出如下程序:

(1)在键盘上输入数N(本例输入5),把英文单词放入名为a大小为N的数组中

(2)显示出X数组中的英文单词

(3)对数组中的英文单词从小到大排序

(4)显示出排序后X数组中英文单词

clear

input"请输入字符串总个数:

"ton

dimena(n)

fori=1ton

input"请依次输入字符串:

"toa(i)

next

fori=1ton

?

a(i)

next

?

"排序后的字符串为:

"

fori=1ton-1

minword=left(a(i),1)

minp=i

forj=i+1ton_

ifminword>left(a(j),1)

minword=left(a(j),1)

minp=j

endif

next

ifminp<>i

temp=a(i)

a(i)=a(minp)

a(minp)=temp

endif

next

fori=1ton

?

a(i)

next

cancel

7.查找算法(顺序查找.prg)

又称线性查找,是一种最简单的查找方法。

从第1个元素到最后1个元素,逐个进行比较,直至找到为止。

clear

dimea(10)

fori=1to10

a(i)=int(rand()*100)

?

?

a(i)

nexti

input"输入要查找的数:

"tox

fori=1to10

ifa(i)=x

?

"找到:

",x,i

cancel

endif

nexti

?

"没有找到!

"

cancel

8.查找算法(折半查找.prg"):

先排序,后查找,是查找一个已排好序的表的最好方法。

算法思想:

   将有序数列的中点设置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。

即通过一次比较,将查找区间缩小一半。

   二分查找是一种高效的查找方法。

它可以明显减少比较次数,提高查找效率。

但是,二分查找的先决条件是查找表中的数据元素必须有序。

clear

dimena(10)

*数组初始化

fori=1to10

a(i)=int(rand()*100+1)

?

?

a(i)

next

*利用选择法排序

?

fori=1to9

minnum=a(i)

p=i

forj=i+1to10

ifminnum>a(j)then

minnum=a(j)

p=j

endif

next

ifp<>ithen

temp=a(i)

a(i)=a(p)

a(p)=temp

endif

?

a(i)

nexti

*折半查找

input"pleaseinputnumber;"tok

l=1

h=10

flag=0

dowhilel<=h

m=int((h+l)/2)

ifa(m)=kthen

flag=1

exit

endif

ifa(m)>kthen

h=m-1

else

l=m+1

endif

enddo

ifflag=1then

?

"find"

else

?

"notfind"

endif

cancel

9.有序数列的插入算法。

(在定义数组时就多定义一个元素,如n=9,dimea(10))

(有序数列插入1.prg)

算法:

先将数列排好序,再将要插入的数据从数列中最后一个元素开始比较,如果数列中的元素大于待插入数据,则将数列中的数据后移,如果小于待插入数据则停止比较;然后再将待插入数据放入比它小的数据的后面。

clear

*输入数据到数组

input"输入n="ton

dimea(n+1)

fori=1ton

input"依次输入数据:

"toa(i)

next

*显示输入的数据

fori=1ton

?

?

a(i)

next

*排序

fori=1ton-1

forj=1ton-i

ifa(j)>a(j+1)

temp=a(j+1)

a(j+1)=a(j)

a(j)=temp

endif

next

next

*显示排序后的数据

?

fori=1ton

?

?

a(i)

next

*输入要插入的数据

input"请输入要插入的数据:

"tok

fori=nto1step-1

ifa(i)>k

a(i+1)=a(i)

else

exit

endif

next

a(i+1)=k

*显示插入后的结果

fori=1ton+1

?

?

a(i)

next

cancel

10.有序序列删除操作

算法:

先将数列排好序,再从第一个元素开始,找到后将待删除数据后面的数据依次前移。

clear

*输入数据到数组

input"输入n="ton

dimea(n)

fori=1ton

input"依次输入数据:

"toa(i)

next

*显示输入数据值

fori=1ton

?

?

a(i)

next

*排序

fori=1ton-1

forj=1ton-i

ifa(j)>a(j+1)

temp=a(j+1)

a(j+1)=a(j)

a(j)=temp

endif

next

next

*显示排序后的数据

?

fori=1ton

?

?

a(i)

next

*输入要删除的数据

input"请输入要删除的数据:

"tok

flag=.f.

fori=1ton

ifa(i)=k

flag=.t.

exit

endif

next

ifflag=.t.

forj=i+1ton

a(j-1)=a(j)

?

*显示删除后的序列

fori=1ton-1

?

?

a(i)

next

next

else

?

"没有需要删除的数据!

"

endif

11.字符串处理(插入、删除、连接和比较)与有序数列的插入、删除操作相似,但不需要排序

插入:

clear

*输入数据到数组

input"请输入字符串:

"tostr1

n=len(str1)

dimea(n+1)

*将字符串中的字符依次给数组a的各个元素

fori=1ton

a(i)=substr(str1,i,1)

next

*输入要插入的字符

input"请输入要插入的字符:

"tomychar

fori=nto1step-1

ifa(i)>mychar

a(i+1)=a(i)

else

exit

endif

next

a(i+1)=mychar

*显示插入后的结果

fori=1ton+1

?

?

a(i)

next

cancel

删除

clear

*输入数据到数组

input"请输入字符串:

"tostr1

n=len(str1)

dimea(n)

*将字符串中的字符依次给数组a的各个元素

fori=1ton

a(i)=substr(str1,i,1)

next

*输入要删除的字符

input"请输入要删除的字符:

"tomychar

flag=.f.

fori=1ton

ifa(i)=mychar

flag=.t.

exit

endif

next

ifflag=.t.

forj=i+1ton

a(j-1)=a(j)

next

*显示删除后的结果

fori=1ton-1

?

?

a(i)

next

else

?

"没有找到需要删除的字符!

"

endif

cancel

4.2二维数组

1)定义:

dimea(3,4)表示定义了一个3行4列的数组,共有3*4=12个元素,每个元素引用a(i,j)表示;

a(1,1)

a(1,2)

a(1,3)

a(1,4)

a(2,1)

a(2,2)

a(2,3)

a(2,1)

a(3,1)

a(3,2)

a(3,3)

a(3,4)

2)二维数组初始化

Fori=1to3

Forj=1to4

Input“请依次输入元素值:

”toa(i,j)

next

next

其中input语句也可以改为由随机函数rand()来赋值:

a(i,j)=int(rand()*(终值-初值+1)+初值)

3)二维数组输出

Fori=1to3

Forj=1to4

?

?

a(i,j)

Next

?

next

1.生成如图矩阵

 

clear

dimea(5,5)

fori=1to5

forj=1to5

docase

casei

a(i,j)=2

casei=j

a(i,j)=1

otherwise

a(i,j)=3

endcase

nextj

nexti

fori=1to5

forj=1to5

?

?

a(i,j)

nextj

?

nexti

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1