重庆普通专升本《计算机程序设计》中常用算法复习.docx
《重庆普通专升本《计算机程序设计》中常用算法复习.docx》由会员分享,可在线阅读,更多相关《重庆普通专升本《计算机程序设计》中常用算法复习.docx(10页珍藏版)》请在冰豆网上搜索。
重庆普通专升本《计算机程序设计》中常用算法复习
重庆普通专升本《计算机程序设计》中常用算法复习
一、常用算法有8个方面:
1、递推算法(级数、数列求和、二分法、梯形法、穷举法等)
2、排序算法(选择法排序、冒泡法)
3、查找算法(顺序查找、折半查找、统计、求和、计数)
4、有序数列的插入、删除操作
5、求解算法(最大数、最小数、素数、最大公约数、最小公倍数)
6、矩阵的处理(生成矩阵、交换和基本运算)
7、递归算法(求阶乘、最大公约数)
8、字符串处理(插入、删除、连接和比较)
二、常用算法的应用举例:
(有21个程序)
1、计算S=1+2+…+100的值。
(求和、统计)
2、找出100~999之间的所有“水仙花数”(穷举法、统计)
3、从键盘输入10个数,然后找出其中的最大值和最小值。
(找最大数、最小数)
4、任意输入n个数,按由小到大的顺序排列并显示输出。
(排序算法--选择法排序)
5、(对字符串排序处理)有5个英文单词,分别为:
Word,Excel,Powerpoint,Type,Angle,要求设计出如下程序:
(1)在键盘上输入数N(本例输入5),把英文单词放入名为X大小为N的数组中
(2)显示出X数组中的英文单词
(3)对数组中的英文单词从小到大排序
(4)显示出排序后X数组中英文单词
6、求5的阶乘值(5!
=?
)
7、计算t=1!
+2!
+……+10!
(即求阶乘之和)。
计算t=1!
+2!
+……+10!
即求阶乘之和(双循环)。
8、多项式S=1+2+22+23+……+232,请设计一个程序,求S的值。
9、除了1和它本身之外不能被任何一个整数所整除的自然数叫质数,除去2之外,其它质数都是奇数,又称为素数。
请设计一个程序,在屏幕上输出3——150之间的所有素数。
10、设计1个程序,要求是:
(查找算法、统计、求和、找素数或质数)
(1)在键盘上输入1个不小于3的自然数N(例输入10),求出其不到第N个自然数中奇数之和,并输出结果
(2)输出1到第N自然数中所有质数的个数
11、穷举法,整钱找零.prg
程序如下:
*
(1)穷举法整钱找零.prg"、
*整钱找零:
100=x1*10+x2*5+x3*1
*x1,x2,x3>=1,x1+x2+x3=20
forx1=1to10
forx2=1to20
x3=20-x1-x2
if100=x1*10+x2*5+x3*1andx3>0then
?
x1,x2,x3
endif
nextx2
nextx1
12、求级数.prg
程序如下:
*求级数1.prg"
*s=1+1/2-1/3+1/4+....
s=1
d=1
clear
input"输入N:
"ton
fori=2ton
s=s+d*1/i
d=-d
?
S
nexti
?
"s=",s
13、求数列.prg
程序如下:
*求数列2.prg"
fibnocsi数列
f1=1
f2=1
?
?
f1,f2
fori=1to20
f2=f2+f1
f1=f2-f1
?
?
f2
nexti
14、生成矩阵.prg
程序如下:
*(4)生成矩阵.prg"
clear
dimea(5,5)
fori=1to5
forj=1to5
docase
caseia(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
15、查找算法(顺序查找.prg)
程序如下:
*
(1)顺序查找.prg"
clear
dimea(10)
fori=1to10
a(i)=int(rand()*100)
?
?
a(i)
nexti
input"输入要查找的数:
"tox
fori=1to10
ifa(i)=x
?
"找到:
",x,i
return
endif
nexti
?
"没有找到!
"
16、查找算法(折半查找.prg")
程序如下:
*
(2)折半查找.prg"(先排序,后查找)
clear
dimea(10)
n=10
fori=1to10
a(i)=int(rand()*100)
?
?
a(i)
next
*排序
fork=1ton-1
forj=k+1ton
ifa(k)>a(j)
t=a(k)
a(k)=a(j)
a(j)=t
endif
endfor
?
a(k)
endfor
?
a(n)
return
*折半查找
input"输入要查找的数:
"tox
l=1
h=10
dowhilel<=h
m=int((l+h)/2)
ifa(m)=xthen
exit
else
ifa(m)>xthen
h=m-1
else
l=m+1
endif
endif
enddo
ifl<=hthen
?
"找到",M,a(m)
else
?
"没有找到!
"
endif
17、求解算法(最大公约数)
程序如下:
*
(1)最大公约数
input"输入M:
"tom
input"输入N"ton
ifn=0then
?
"数据有错!
"
exit
endif
r=mod(m,n)
dowhiler>0
m=n
n=r
r=mod(m,n)
enddo
?
"最大公约数是:
",n
18、求解算法(最小公倍数)
程序如下:
*
(2)最小公倍数
input"输入M:
"tom
input"输入N"ton
a=m
b=n
ifn=0then
?
"数据有错!
"
exit
endif
r=mod(m,n)
dowhiler>0
m=n
n=r
r=mod(m,n)
enddo
?
"最大公约数是:
",n
?
"最小公倍数是:
",a*b/n
19、有序数列的插入操作
程序如下:
*有序序列插入操作.prg"
settalkoff
clear
*定义数组
input'输入n=?
'ton
dimea(10)
*给数组提供值
fork=1ton
input'逐个输入数据'toa(k)
endfor
*排序开始
fork=1ton-1
forj=k+1ton
ifa(k)>a(j)
t=a(k)
a(k)=a(j)
a(j)=t
endif
endfor
?
a(k)
endfor
?
a(n)
*插入数据
input"输入要插入的数:
"tox
a(7)=x
fori=nto1step-1
ifa(i)>xthen
a(i+1)=a(i)
else
exit
endif
nexti
a(i+1)=x
?
"插入一个元素后:
"
fori=1ton+1
?
?
a(i)
nexti
20、有序数列的删除操作
程序如下:
*有序序列删除操作.prg"
clear
dimea(11)
n=10
fori=1to10
a(i)=int(rand()*100)
?
?
a(i)
next
fori=1ton-1
forj=ntoi+1step-1
ifa(j)t=a(j)
a(j)=a(j-1)
a(j-1)=t
endif
nextj
nexti
?
"sort:
"
fori=1ton
?
?
a(i)
nexti
*找出删除位置
input"输入要删除的位置数:
"tox
ifx>10orx<1then
?
"输入位置有错!
"
return
endif
fori=xto9
ifa(i)>xthen
a(i)=a(i+1)
else
exit
endif
nexti
?
"删除一个元素后:
"
fori=1ton-1
?
?
a(i)
nexti
说明:
字符串处理(插入、删除、连接和比较)与有序数列的插入、删除操作相似。