安徽专升本冲刺班程序设计笔记整理.docx

上传人:b****6 文档编号:4714164 上传时间:2022-12-07 格式:DOCX 页数:24 大小:31.14KB
下载 相关 举报
安徽专升本冲刺班程序设计笔记整理.docx_第1页
第1页 / 共24页
安徽专升本冲刺班程序设计笔记整理.docx_第2页
第2页 / 共24页
安徽专升本冲刺班程序设计笔记整理.docx_第3页
第3页 / 共24页
安徽专升本冲刺班程序设计笔记整理.docx_第4页
第4页 / 共24页
安徽专升本冲刺班程序设计笔记整理.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

安徽专升本冲刺班程序设计笔记整理.docx

《安徽专升本冲刺班程序设计笔记整理.docx》由会员分享,可在线阅读,更多相关《安徽专升本冲刺班程序设计笔记整理.docx(24页珍藏版)》请在冰豆网上搜索。

安徽专升本冲刺班程序设计笔记整理.docx

安徽专升本冲刺班程序设计笔记整理

程序设计笔记:

在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

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

当前位置:首页 > 高中教育 > 理化生

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

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