安徽专升本冲刺班程序设计笔记整理.docx
- 文档编号:4714164
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:24
- 大小:31.14KB
安徽专升本冲刺班程序设计笔记整理.docx
《安徽专升本冲刺班程序设计笔记整理.docx》由会员分享,可在线阅读,更多相关《安徽专升本冲刺班程序设计笔记整理.docx(24页珍藏版)》请在冰豆网上搜索。
安徽专升本冲刺班程序设计笔记整理
程序设计笔记:
在VFP编程环境下,每个程序都以CLEAR(清屏)、SETTALKOFF(对话关闭)两条语句打头,以SETTALKON(对话打开)结尾。
若题目没有明显要求的数据输入,可通过实例化添加具体输入数据得以验证(正式考试时可以忽略)。
程序整体流程线索是:
数据输入数据处理数据输出,三大部分组成。
程序设计的解题思路:
●分析题目确定输入内容(要处理的数据)和输出内容(处理后的数据)。
(实例化验证)
●将问题转换为数学问题或数学模型。
●转换为计算机的解决方法。
(算法)
算法汇总:
(算法实现中省略Clear等固定语句)
1、两个变量值互换。
设一个临时变量tem,通过tem=xx=yy=tem完成。
2、分段函数的判断,一般都是自变量和因变量的相互关系,对x的判断有相应的y取值与之对应。
类似于初中方程式。
(1)完成下面分段函数的计算,程序运行时用户从键盘输入一个数值X,在屏幕上输出Y值。
InputToX
IfX>0
Y=X^2
Else
IfX=0
Y=0
Else
Y=-X^2
EndI
EndI
?
Y
(2)某书店开展优惠售书活动,收费方法如下:
0.9x(x≤100)
y=0.8x(100<x≤500)其中:
x表示原价,y表示实际收费。
0.7x(x>500)
试编写程序,要求从键盘输入x,计算输出y。
InputToX
IfX<=100
Y=0.9*X
Else
IfX<=500
Y=0.8*X
Else
Y=0.7*X
EndI
EndI
?
Y
(3)计算分段函数
InputToX
IfX<>0
Y=X+Sqrt(X^2+1)
Else
Y=X-X^3+3*X
EndI
?
Y
(4)假设邮费计算方法为:
100克以内(含100克)收费5元,超过100克的部分每克加收0.2元。
试编写程序,要求从键盘输入邮寄物品重量,并计算出邮费。
InputToX
IfX<=100
Y=5
Else
Y=5+(X-100)*0.2
EndI
?
Y
(5)某商场为了促销,采用购物打折的办法。
1)在1000元以上者,按九五折优惠;
2)在2000元以上者,按九折优惠;
3)在3000元以上者,按八五折优惠;
4)在5000元以上者,按八折优惠。
编写程序,输入购物款数,计算并输出优惠价。
此处我们考虑隐含有1000元以下的情况,不打折
InputToX
IfX<1000
Y=X
Else
IfX<2000
Y=0.95*X
Else
IfX<3000
Y=0.9*X
Else
IfX<5000
Y=0.85*X
Else
Y=0.8*X
EndI
EndI
EndI
EndI
?
Y
(6)现有一元二次方程:
ax^2+bx+c=0,其中a、b、c、是整数,且a0。
若存在实根,则输出“在实数范围内有解”;若不存在实根,则输出“在实数范围内无解”。
Ifb^2-4*a*c>=0
?
“在实数范围内有解”
Else
?
“在实数范围内无解”
EndI
3、累加计算。
在循环体外对累加和变量初始化,在循环体内使用变量=变量+步长控制。
编程模板:
CLEAR
SETTALKOFF
S=*****&&累加和变量开始值
P=*****&&累加和的通项式开始值
ForI=*****To*****&&循环变量的范围,累加项个数
P=*****&&累加和的通项式或递推公式,难点!
!
S=S+T&&在其基础上累加
EndFor
?
S&&输出结果
SETTALKON
(1)求∑I=1+2+3+4+…..+100
分析:
循环变量I:
123……100
当前项值P:
123……100
通项公式P=I
S=0
ForI=1To100
S=S+I
EndFor
?
S
(2)试使用循环结构编程计算y=21+22+……+210,并求出结果
分析:
循环变量I:
123……10
当前项值P:
212223……210
通项公式P=2I
S=0
ForI=1To10
P=2^I
S=S+P
EndFor
?
S
(3)编程求s=1*2+3*4+5*6+……+99*100的值,并输出结果。
分析:
循环变量I:
123……50
当前项值P:
1*23*45*6……99*100
通项公式P=(2*I-1)*(2*I)
S=0
ForI=1To10
P=(2*I-1)*(2*I)
S=S+P
EndFor
?
S
(4)试使用循环结构编程计算y=2^1+2^2+……+2^10,并求出结果。
分析:
同题2
(5)求1+x+2x^2+3x^3+…+nx^n
分析:
循环变量I:
123……n
当前项值P:
x2x^23x^3……nx^n
(为了便于后面累加计算,我们从数列的第二个位置起认定为P的第一项,此时与循环变量的关系非常“完美”,但第一个位置的1必须先放到累加和变量中)
通项公式P=I*x^I
S=1
ForI=1Ton
P=I*x^I
S=S+P
EndFor
?
S
注:
此题中变量n和x都是未知量,若需要验证可在程序头部添加对x和n的输入语句,但在考试时卷面只需要书写上述代码即可。
(6)求1,-1/2,1/3,-1/4,1/5,-1/6。
。
。
。
。
。
数列的前20项和
分析:
循环变量I:
123……20
当前项值P:
(+1)/1(-1)/2(+1)/3……(-1)/20
通项公式P=(-1)*(I+1)/I
S=0
ForI=1To20
P=(-1)*(I+1)/I
S=S+P
EndFor
?
S
注:
此题关键是找到正负号的变化与当前值的关系(-1)*(I+1)。
(7)某班有45名同学参加“专升本”考试。
现要求从键盘输入全班一门课的成绩,并输出该课程的平均分、及格人数和及格率。
分析:
输入语句需要重复多次,放循环体内部,此时循环变量只起到控制循环次数的作用;求平均分前提是先求出总分;及格人数需要通过循环体内部的条件判断进行计数。
S=0
N=0
ForI=1To45
InputToX
S=S+X
IfX>=60
N=N+1
EndI
EndFor
?
S/45,N,N/45
(8)求S=1+(1+2)+(1+2+3)+…+(1+2+3+…10)
分析:
循环变量I:
123……10
当前项值P:
11+21+2+3……1+2+3+…10
此时P的递推公式P=P+I,我们所说的递推公式是从前一项得到后一项,那么第二项由第一项得到,第三项由第二项得到,第一项的值应该由第零项得到,但没有所谓的第零项,我们只能通过公式P=P+I来反推当右边的P取什么开始值时,能得到第一项的值并赋给P,I为1,结果为1,所以P开始值取0
S=0
P=0&&这条语句是反推过来的
ForI=1To10
P=P+I
S=S+P
EndFor
?
S
(9)求Sn=a+aa+aaa+aaaa……其中a是一个数字,a的个数为n,a和n由键盘输入
分析:
此类题目要先实例化,假设a是2,n是3,先将题目理解
循环变量I:
123
当前项值P:
222222递推公式是P=P*10+2
那么不失一般性
循环变量I:
123……n
当前项值P:
aaaaaa……aa…a(n个a)
递推公式是P=P*10+a
和上题一样,我们通过公式P=P+I来反推当右边的P取什么开始值时,能得到第一项的值并赋给P,I为1,结果为a,所以P开始值取0
InputToa
InputTon
S=0
P=0&&这条语句是反推过来的
ForI=1Ton
P=P*10+a
S=S+P
EndFor
?
S
(10)求E的值(E=1+1/1!
+1/2!
+1/3!
+……+1/N!
精确到1E-6)
分析:
首先确定循环类型,因为不知道要计算多少项值,我们一般使用条件型DoWhile循环,循环终止条件是当前项的大小要小于1E-6,此为计算机中精确的概念。
循环变量I:
123……
当前项值P:
1/1!
1/2!
1/3!
……递推公式是P=P/I
(为了便于后面累加计算,我们从数列的第二个位置起认定为P的第一项,此时与循环变量的关系非常“完美”,但第一个位置的1必须先放到累加和变量中)
和上题一样,我们通过公式P=P/I来反推当右边的P取什么开始值时,能得到第一项的值并赋给P,I为1,结果为1,所以P开始值取1
S=1
P=1&&这条语句是反推过来的
I=1&&DoWhile中循环变量的初值
DoWhileP>=1E-6&&终止条件是小于1E-6,那么进入循环的条件就是大于等于1E-6
P=P/I
S=S+P
I=I+1
EndDo
?
S
累加中通项公式的确定。
一种是与循环变量的关系如2*i-1,第二中是前后数的层级关系如Pn=Pn-1*10+2(数学公式),在计算机中实现就是P=P*10+2。
4、判断条件的多样化。
对应题目:
字符判断(转换为ASCII值后进行)
大写字母字符,小写字母字符,数字字符,字符串逐个字符判断
键入一串字符(换行符结束),用循环语句将其中的大小写英文字母互换后输出
分析:
字符串中字符的剥离需使用函数SubStr,如SubStr(“Hello”,2,1)指从字符串“Hello”第二个位置取一个字符,那么结果就是字符e了。
通过和循环变量结合使用SubStr(“Hello”,I,1)可以依次剥离出每个字符
字符的链接操作类似于累加,字符串变量S=S+P可以将当前字符P和之前的S串链接后赋值给S,形成一个新串
InputToC&&变量C为输入的字符串
S=””&&字符串初始化
ForI=1ToLen(C)
W=SubStr(C,I,1)&&变量W为当前剥离出来的字符
IfASC(W)>=65.And.ASC(W)<=90
P=Lower(W)
EndI
IfASC(W)>=97.And.ASC(W)<=122
P=Upper(W)
EndI
S=S+P
EndFor
?
S
输入一字符串,检查是否回文(回文是指正反序相同,如,LeveL)
分析:
设定标志变量,假设开始时标志为.T.,当不是回文的判断条件成立时就修改标志变量为.F.,最后依据标志变量的值来判断是否回文
InputToC&&变量C为输入的字符串
Flag=.T.&&标志变量假设为.T.
N=Len(C)
ForI=1ToInt(N/2)&&回文比较次数是字符个数的一半
W=SubStr(C,I,1)&&变量W为从前往后剥离出来的字符
P=SubStr(C,N+1-I,1)&&变量P为从后往前剥离出来的字符
IfW<>P
Flag=.F.&&当条件满足时意味着不是回文,修改标志变量
Exit
EndI
EndFor
IfFlag=.T.
?
”YES”
Else
?
”NO”
EndI
输入一个字符串,将左边数字字符串转化为数值
分析:
从左边开始剥离字符串字符,判断为数字字符时,进行链接操作,最后通过Val函数来转换为数值
InputToC&&变量C为输入的字符串
S=””&&字符串初始化
ForI=1ToLen(C)
W=SubStr(C,I,1)
IfASC(W)>=48.And.ASC(W)<=57
S=S+W
Else
Exit&&若条件不满足,则当前字符是非数字字符,退出
EndI
EndFor
IfFlag=.T.
?
”YES”
Else
?
”NO”
EndI
奇偶数,某数的倍数,整除(对该数进行取余运算)
能被7整除的奇数,个位数字为6且能被3整除
水仙花数(各位数字的立方和等于该数本身,如:
153=13+53+33)
分析:
数字剥离是通过X%10剥离出个位数字,Int((X/10))%10剥离出十位数字,Int((X/100))%10剥离出百位数字,依此递推。
判断一个数是水仙花数并输出的代码是:
InputToX
a=X%10
b=Int((X/10))%10
c=Int((X/100))%10
IfX=a^3+b^3+c^3
?
X
EndI
那么,对一批数据的判断就是在上述程序上加上循环语句就可以了,
ForI=100To999
a=I%10
b=Int((I/10))%10
c=Int((I/100))%10
IfI=a^3+b^3+c^3
?
I
EndI
EndFor
素数(从1到自身之间的数一旦可以整除,则判断非素数,强行退出)200-300间素数
分析:
设定标志变量,假设开始时即为素数,标志为.T.,当不是素数的判断条件成立时就修改标志变量为.F.,最后依据标志变量的值来判断是否素数
素数的判定是从2开始到其自身-1,依次判断是否能被该数整除,条件成立时修改标志变量
判断一个数是素数并输出的代码是:
InputToX
Flag=.T.
ForI=2ToX-1
IfX%I=0
Flag=.F.
EndI
EndFor
IfFlag=.T.
?
X&&输出该数
EndI
那么,对一批数据的判断就是在上述程序上加上循环语句就可以了,输出200-300间素数
ForI=200To300
ForJ=2ToI-1
IfI%J=0
Flag=.F.
EndI
EndFor
IfFlag=.T.
?
I
EndI
EndFor
完全数(完数指该数等于其不含本身的因子之和,,如6=1+2+3)
分析:
完全数的判定是从1开始到其自身-1,依次判断是否能被该数整除,条件成立时求累加和,最后用判断该数是否和累加和相等。
题目:
求出输出1-100间完全数
ForI=1To100
S=0
ForJ=1ToI-1
IfI%J=0
S=S+J
EndI
EndFor
IfI=S
?
I
EndI
EndFor
同构数(恰好出现在其平方数的右端。
如:
376*376=141376,6*6=36)
分析:
将数转换为字符分离出来,先得到该数的数字位数,再通过对其平方数的右边取子串,判断后得出结果。
如:
Len(Str(376))结果为3;Right(Str(141376),3)从右边取三位就是”376”
InputToX&&X是数值变量
W=X*X
N=Len(Str(X))
C=Right(Str(W),N)&&C是字符串变量
IfX=Val(C)
?
X
EndI
最大公约数(如:
36和24的最大公约数为12)
分析:
承认其算法X(较大数变量)Y(较小数变量)T(余数变量)
36288
将较小数赋给X,余数赋给Y
2884
840
当余数为零时,此时较小数变量就是最大公约数的值
InputToM
InputToN
X=Max(M,N)
Y=Min(M,N)
DoWhileX%Y<>0
T=X%Y
X=Y
Y=T
EndDo
?
Y
注:
若求最小公倍数,只在这个基础上通过公式(M*N)/Y即可
Fibonacci数(1,1,2,3,5,8……)
分析:
递推公式的应用,每个值由前两个数来确定。
f1=1
f2=1
?
?
f1
?
?
f2&&先将第一个数和第二个数输出
ForI=3To20
f=f1+f2
f1=f2
f2=f
?
?
f&&不换行输出当前值
ifI%4=0&&每输出四个数换行
?
endi
EndFor
5、最值计算(最大数/最小数)。
方法一:
当数的个数比较少时运用函数MAX或者MIN;
(1)从键盘输入三个整数x、y、z,输出其中最小的数。
InputTox
InputToy
InputToz
?
Min(x,y,z)
(2)整型变量a,b,c中分别存放各不相同的数值。
编写程序,实现a,b,c从大到小排序,并以此顺序输出排序后的三个数。
m=a
n=b
k=c
a=Max(m,n,k)
b=(m+n+k)-Max(m,n,k)-Min(m,n,k)
c=Min(m,n,k)
?
a,b,c
方法二:
求数组中最值(及下标),一般假设第一个元素为最值,(其下标也对应为最值元素下标),然后将该数与数组中其他元素逐一比较,若有比最值大或小的元素,马上就赋值,(同时也交换最值下标)。
(1)在一个10元素的数组中,找到最大值及其下标。
Dimea(10)
nMax=a
(1)&&假设第一个数为最大数
iMax=1
ForI=2To10
Ifa(I)>nMax&&条件为真则赋值给nMax
nMax=a(I)
iMax=I
EndI
EndFor
?
nMax,I
(2)有一个3×5的矩阵,试编写程序,要求从键盘上输入数据,求其中数值最大的那个元素
Dimea(3,5)
ForI=1To3
ForJ=1To5
InputToa(I,J)
EndFor
EndFor
nMax=a(1,1)&&假设第一个数为最大数
ForI=1To3
ForJ=1To5
Ifa(I,J)>nMax&&条件为真则赋值给nMax
nMax=a(I,J)
EndI
EndFor
EndFor
?
nMax
(3)设有十位评委给某位选手打分,以去掉一个最高分和一个最低分后的平均分作为该选手的成绩。
试编写程序,要求从键盘输入评委的评分并存入到数组中,计算并输出选手成绩。
Dimea(10)
ForI=1To10
InputToa(I)
EndFor
nMax=a
(1)&&假设第一个数既为最大数也为最小数
nMin=a
(1)
S=0
ForI=1To10
S=S+a(I)
Ifa(I)>nMax
nMax=a(I)
EndI
Ifa(I) nMin=a(I) EndI EndFor ? (S-nMax-nMin)/8 6、数列排序。 (2、3个数可使用函数简单实现),一般情况下使用双重循环完成,外循环的次数为需要排列数的个数,内循环次数为每个数比较的次数。 给定10个数,排序(升序或降序) 1、3、5、7、9、0、2、4、6、8 升序: 0,1,2,3,4,5,6,7,8,9 降序: 9,8,7,6,5,4,3,2,1,0 冒泡排序算法实现: 自下而上实现(相临比较) 定义一维数组 外循环: I=1。 。 。 9(控制循环次数) 内循环: J=10。 。 。 I+1,相临两数比较,可能交换 分析: 先确定要求多少次最值(即外层循环的趟数),在每一趟中需要比较的次数要根据外层循环变量来书写,这种关系是: 外层循环变量I: 123……9 内层循环次数J: 987……1关系是10-I次 因为是从后往前比较,所以J的取值应该是初值从10开始,终值就取到I+1 Dimea(10) ForI=1To9 ForJ=10ToI+1Step-1 Ifa(J)>a(J-1) T=a(J) a(J)=a(J-1) a(J-1)=T EndI EndF EndF 7、数组的应用。 数组下标和循环变量的结合使用。 数组类型编程模板: CLEAR SETTALKOFF DIMEA(N)&&数组定义 FORI=1TON A(I)=****&&数组输入 ENDFOR FORI=1TON **** …… ****&&数组处理 ENDFOR FORI=1TON ? ? A(I)&&数组输出 ENDFOR (1)已有按从小到大的顺序排列的10个数,现输入一个数,要求插入到数列中。 插入后数列仍然按从小到大顺序排列。 分析: 数组插入一般都是从后往前进行 INPUT“输入一个数: ”TOX FORi=10TO1STEP-1 IFA(i)>X A(i+1)=A(i) ELSE A(i+1)=X EXIT ENDIF ENDF (2)有一个3×5的矩阵,试编写程序,要求从键盘上输入数据,求其中数值最大的那个元素,然后输出该元素值及其所在的行号和列号 FORi=1TO3 FORj=1TO5 INPUTTOA(i,j) ENDF ENDF nMAX=A(1,1) iMAX=1 jMAX=1 FORi=1TO3 FORj=1TO5 IFA(i,j)>nMAX nMAX=A(i,j) iMAX=i jMAX=j ENDI ENDF ENDF ? ”最大数及其行列号为: ”,nMAX,iMAX,jMAX (3)数组a中存放10个由小到大排列的数,现从键盘输入一个数x,要求删除a数组中与其相同的数,并将后续的数依次前移,最后输出剩余的数 分析: 数组删除元素从前往后进行 INPUT“输入一个数: ”TOX j=1&&数组B的下标变量 FORi=1TO10 IFA(i)<>X B(j)=A(i) j=j+1 ENDI ENDF FORi=1TOj-1 ? B(i) ENDF (4)编程求一个3*4数组的所有元素的平均值及最大值,并输出结果 S=0 FORi=1TO3 FORj=1TO4 INPUTTOA(i,j) ENDF ENDF nMAX=A(1,1) FORi=1TO3 FORj=1TO4 IFA(i,j)>nMAX nMAX=A(i,j) ENDI S=S+A(i,j) ENDF ENDF ? ”计算结果为: ”,S/12,nMAX (5)删除一维数组中重复元素。 clear dimea(n),b(n),c(n) fori=1ton b(n)=0 endf&&设置每个变量的标志位 fori=1ton-1 ifa(i)=a(i+1) b(i+1)=1&&对标志位进行修改 endif endf j=1 fori=1ton ifb(i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 安徽 冲刺 程序设计 笔记 整理