程序设计基础专题一.docx

上传人:b****5 文档编号:3947089 上传时间:2022-11-26 格式:DOCX 页数:21 大小:21.87KB
下载 相关 举报
程序设计基础专题一.docx_第1页
第1页 / 共21页
程序设计基础专题一.docx_第2页
第2页 / 共21页
程序设计基础专题一.docx_第3页
第3页 / 共21页
程序设计基础专题一.docx_第4页
第4页 / 共21页
程序设计基础专题一.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

程序设计基础专题一.docx

《程序设计基础专题一.docx》由会员分享,可在线阅读,更多相关《程序设计基础专题一.docx(21页珍藏版)》请在冰豆网上搜索。

程序设计基础专题一.docx

程序设计基础专题一

程序设计基础——专题

(一)

第一部分数学问题

一、基本算法:

数学数值问题的基本运算主要涉及到的算法有:

累加、累乘、整除和求余数。

1、累加

主要是通过循环变量来控制循环结构,一般有两个变量,一是循环变量I和累加值变量S。

主要语句有:

S=0&&为累加合值初始化

FORI=[初始值]TO[终止值]STEP[步长]&&或DOWHILE<条件表达式>

循环体内语句系列

S=S+F(I)

ENDFOR&&或ENDDO

S&&输出累加合值S

2、累乘

主要是通过循环变量来控制循环结构,一般有两个变量,一是循环变量I和累乘值变量S。

T=1&&为累乘值初始化

FORI=[初始值]TO[终止值]STEP[步长]&&或DOWHILE<条件表达式>

循环体内语句系列

T=T*F(I)

ENDFOR&&或ENDDO

T&&输出累加合值S

3、整除

主要采用取整函数INT()、求余函数MOD()和求余运算符%。

设X,Y均为整型数值表达式,判断X是否被Y整除的表达式的常用方法有:

(1)INT(X/Y)=X/Y

(2)MOD(X,Y)=0

(3)X%Y=0

(4)X-Y*INT(X/Y)=0

4、求余数

主要采用取整函数INT()、求余函数MOD()和求余运算符%。

设X,Y均为整型数值表达式,求X被Y整除后余数的表达式的常用方法有:

(1)X-INT(X/Y)

(2)MOD(X,Y)

(3)X%Y

5、两个变量值的置换

对两个数的置换,主要处理的是将两个变量的值进行互换。

设有两个变量X,Y,通过中间变量T和赋值语句后,将X和Y变量值互换。

T=X

X=Y

Y=T

6、求一组数的最大值和最小值

设在数组A有10个元素,且都已赋值,现要求这10个元素中的最大值,可采用两两相互比较后再使用两变量值置换的语句来完成。

其主要算法有:

MAX=A

(1)&&创建最大值变量MAX,并将A

(1)赋值给MAX

MIN=A

(1)&&创建最大值变量MAX,并将A

(1)赋值给MAX

FORI=2TO10&&将数组的每一个变量与MAX或MIN比较后,改变MAX和MIN的值

IFA(I)>MAX

MAX=A(I)

ENDIF

IFA(I)<=MIN

MIN=A(I)

ENDIF

ENDFOR

?

MAX,MIN&&输出最大值和最小值

7、求两个数的最大公约数和最小公倍数

用2至这两个数的最小值之内任何一个数作为一个循环变量去除这两个数,若能找到一个数能同时被这两个数整除。

则这个数就是他们的最大公约数,而这两个的乘积除以最大公约数后得到的值就是这两个数的最小公倍数。

设有两个变量X,Y,中间变量I,主要的算法有:

N=MIN(X,Y)

FORI=NTO1STEP–1

IFX/I=INT(X/I)ANDINT(Y/I)=Y/I

GYS=I

EXIT

ENDIF

ENDFOR

”最大公约数为:

”,GYS

?

”最小公倍数为:

”,X*Y/GYS

8、判断X是否是素数(质数、完数)

素数:

除被1和本身整除外不能被其他数整除。

用2至X之内的任一数去除X,若找到一个数能被X整除,则表示X不是素数,否则X是一个素数。

常用算法:

FORI=2TOX-1

IFX%I=0或INT(X/I)=X/I或MOD(X,I)=0

EXIT

ENDIF

ENDFOR

IFI=X

X,“是一个素数”

ELSE

X,“不是一个素数”

ENDIF

9、从十进制整数中取出数码

将该数值除10后取余数,可得到该数值中的个位数码,然后用该数值除以10后的商去替代该数值,再除以10取其余数,得到十位数数码,依次类推,直到得到的商为零为止。

设X是一个整数,其常用的得法有:

I=1

DOWHILEN>0

P=MOD(N,10)取某位的数码

?

”该数值从右往左第”+STR(I)+”位的数码为:

”,P

N=INT(N/10)

IFN=0

EXIT

ENDIF

ENDDO

10、判断一个数是否是一个正整数、奇数或偶数

(1)正整数

IFINT(X)=XANDABS(X)=X

X,“是一个正整数!

ELSE

X,“不是一个正整数!

ENDIF

(2)奇、偶数

IFINT(X)=XANDINT(X/2)=X/2

X,“是一个偶数!

ESLE

X,“是一个奇数!

ENDIF

二、典型例题

1、求1到10所有自然数之和(程序运行后的结果是否是55)

SETTALKOFF

S=0

FORI=1TO10

S=S+I

ENDFOR

?

"1到10之和为:

",S&&改成?

"1到10之和为:

",S行吗?

请说明理由

CLEAR

SETTALKON

问题:

(1)求从1到100的所有奇数(或偶数)之和

(2)求从1到X的所有自然数之和,其中X的值可由用户通过键盘输入。

(3)求出从1到N之间所有整数的平方和并输出结果。

(4)上述程序采用DOWHILE……ENDDO应如何编写?

2、求10!

SETTALKOFF

CLEAR

T=0

FORI=1TO10

T=T*I

ENDFOR

?

"10!

为:

",T

SETTALKON

3、求从正整数K到M值的阶乘之和,其中K和M值均由用户通过键盘输入。

SETTALKOFF

CLEAR

INPUT"K="TOK&&改成ACCEPT"K="TOK行吗,请说明理由

S=0

FORI=KTOM

T=1

FORJ=1TOI

T=T*J

ENDFOR

S=S+T

ENDFOR

INPUT"M="TOM

?

STR(K,2)+"!

+…"+STR(M,2)+"!

=",S

SETTALKON

4、给定程序:

Y=X-X3/3!

+X5/5!

-X7/7!

+……

其中表达式的项目有10项

X值由用户通过键盘中输入,请求出Y的值

SETTALKOFF

S=0

P=1

FORI=1TO10

K=2*I-1

FZ=X^K

FM=1

FORJ=1TOK

FM=FM*J

ENDFOR

S=S+P*FZ/FM

P=-P

ENDFOR

?

"Y的值为:

",S

INPUT"X="TOX

SETTALKON

问题:

(1)利用公式SIN(X)=X-X3/3!

+X5/5!

-X7/7!

+……,直到最后一项的绝对值小于等于10-5为止。

(2)利用公式ex=1+x+x2/2!

+x3/3!

+……+xn/n!

,输入x和N,计算ex的近似值

5、素数问题

输出从3到10以内的自然数中所有素数

SETTALKOFF

M=3

DOWHILEM<10

N=2FORN=2TOM-1

DOWHILEN

IFINT(M/N)=M/NEXIT

EXITENDIF

ENDIFENDFOR

N=N+1IFN=M

ENDDO?

M

IFN=MENDIF

?

M

ENDIF

M=M+1

ENDDO

SETTALKON

问题:

(1)求出从1到100的所有素数的个数。

(2)求出从1到100的所有素数之和。

6、对输入的正整数,判别其中包含指定数码的个数(如2312132中包含数码2的个数为3)。

SETTALKOFF

INPUT“M=”TOM&&输入正整数

INPUT“N=”TON&&输入在正整数中包含的数码

S=0&&采用累加

DOWHILE.T.&&采用永真循环方式

Y=MOD(M,10)

IFY=N

S=S+1

ENDIF

M=INT(M/10)

IFM=0

EXIT

ENDIF

ENDDO

S

SETTALKON

7、从键盘中输入10个数,去掉一个最大数和最小数,然后求平均值

SETTALKOFF

CLEAR

INPUT“N=”TON

STORENTOMAX,MIN,S

FORI=1TO9

INPUT“N=”TON

IFMAX

MAX=N

ENDIF

IFMIN>N

MIN=N

ENDIF

S=S+N

ENDFOR

?

”平均值=”,(S-MAX-MIN)/8

SETTALKON

问题:

(1)从键盘中输入A,B,C3个数值,将它们从小到大排列后输出。

(2)对任意输入20个数,按从小到大进行排列。

8、数组问题:

该程序主要实现对矩阵的转置

SETTALKOFF

INPUT“N=”TON

DIMEA(N,N)

FORI=1TON

FORJ=1TON

INPUT“A(“+STR(I,1)+”,”+STR(J,1)+”)=”TOA(I,J)

ENDFOR

ENDFOR

FORI=1TON

FORJ=1TOI

T=A(I,J)

A(I,J)=A(J,I)

A(J,I)=T

ENDFOR

ENDFOR

SETTALKON

问题:

(1)课本P155页的程序阅读题第4题

(2)

第二部分字符信息处理

一、基本算法:

1、常用的字符处理函数

(1)SPACE(N)

(2)LEN(S)

(3)SUBSTR(S,N1,N2)

(4)C=C+P&&C,P均为字符型变量

(5)CHR(ASC(C)+N)

(6)ALLTRIM(STR(N1,N2,N3))

(7)STR(N1,N2,N3)

(8)IIF(条件表达式,C1,C2)

2、字符串的粘合

C=”ABCDE”字符串&&由用户输入初始化的字符串

S=””或S=SPACE(0)

L=LEN(C)

FORI=1TOL

S=S+SUBSTR(C,I,1)&&改成S=SUBSTR(C,I,1)+S有何不同,

ENDFOR

?

C+”--”+S

3、阿拉伯数字转换为中文大写数字

INPUT“N=”TON

L=LEN(ALLTRIM(STR(N)))

C=”o一二三四五六七八九”&&C=”零壹贰叁肆伍陆柒捌玖”

S=””

FORI=1TOL

P=MOD(N,10)

S=SUBSTR(C,2*I+1,2)+S

N=INT(N/10)

ENDFOR

?

ALLTRIM(STR(N))+”--”+S

4、图案的输出

主要采用SPACE(N)来控制每行中的首字符在屏幕中的位置和字符间的间隔。

采用STR(N)函数将数值型数据转换为字符型;采用SUBSTR(C,N1,N2)函数对字符串进行取子串。

特殊图案采用CHR(ASC(C)+N)进行不同字符的输出,尤其是英文字母的输出。

例:

采用正直角三角形的形式输入九九乘法表

FORI=1TO9

SPACE(6*(9-I))

FORJ=1TOI

STR(I,1)+”*”+STR(J,1)+”=”+STR(I*J,2)

ENDFOR

ENDFOR

二、典型例题

1、编写一个程序,显示输出给定的字符串表达式倒置字符串(包含数字字符串、英文字母字符串和汉字字符串)。

SETTALKOFF

CLEAR

ACCEPT"请输入字符串"TOC

S=""

L=LEN(C)

FORI=1TOL

S=SUBSTR(C,I,1)+S

ENDFOR

?

C+"---->"+S

SETTALKON

2、编写一个口令验证程序,要求有三次输入口令的机会,输入正确,显示“欢迎使用本系统”,否则显示“你无权使用本系统”。

口令可采用固定字符串,也可以采用在已有的表文件读取相关的字段值。

SETTALKOFF

CLEAR

I=1

DOWHILEI<=3

ACCEPT"请输入口令"topass

IFALLTRIM(PASS)=="ABCD"

?

"欢迎使用本系统!

"

EXIT

ELSE

?

"口令错误!

请重输"

ENDIF

I=I+1

IFI>3

?

"你无权使用本系统!

"

ENDIF

ENDDO

SETTALKON

3、编写一个程序,将数字日期转换成中文大写形式

SETTALKOFF

CLEAR

INPUT"请输入日期"toRIQI

Y=YEAR(RIQI)

M=MONTH(RIQI)

D=DAY(RIQI)

C="O一二三四五六七八九"

S=""

FORI=1TO4

P=MOD(Y,10)

S=SUBSTR(C,2*P+1,2)+S

Y=INT(Y/10)

ENDFOR

S=S+"年"

S=S+IIF(M<10,SUBSTR(C,2*M+1,2),"十"+SUBSTR(C,2*MOD(M,10)+1,2))

S=S+"月"

DOCASE

CASED<10

S=S+SUBSTR(C,2*D+1,2)

CASED=10

S=S+"十"

CASED<=19

S=S+SUBSTR(C,2*MOD(D,10)+1,2)

OTHERWISE

S=S+SUBSTR(C,2*INT(D/10)+1,2)+"十"+;

IIF(MOD(D,10)=0,"",SUBSTR(C,2*MOD(D,10)+1,2))

ENDCASE

S=S+"日"

?

DTOC(RIQI)+"---->"+S

SETTALKON

4、编写一个程序,将输入的金额采用中文大写形式输出。

SETTALKOFF

CLEAR

INPUT"请输入金额"TOJINER

P=JINER*100

M=ROUND(P,0)

C1="零壹贰叁肆伍陆柒捌玖"

C2="分角元拾佰仟万拾佰仟亿拾佰仟"

I=0

C=SPACE(0)

DOWHILE.T.

N=MOD(M,10)

C=SUBSTR(C1,2*N+1,2)+SUBSTR(C2,2*I+1,2)+C

I=I+1

M=INT(M/10)

IFM=0

EXIT

ENDIF

ENDDO

?

STR(JINER,19,4)+"---->"+C

SETTALKON

5、阅读程序,写出程序运行的结果:

主要是图案的输出,

(1)数字图案的输出:

采用数组形式。

SETTALKOFF

CLEAR

INPUT"N="TON

DIMEA(N,N)

P=N

DOWHILEN>0

A(N,N)=1

A(N,1)=1

N=N-1

ENDDO

FORI=3TOP

FORJ=2TOI-1

A(I,J)=A(I-1,J-1)+A(I-1,J)

ENDFOR

ENDFOR

FORI=1TOP

?

SPACE(3*(P-I+1))

FORJ=1TOI

?

?

STR(A(I,J),3)

ENDFOR

?

ENDFOR

SETTALKON

(2)字母图案的输出:

采用CHR(ASC(C)+N)函数。

SETTALKOFF

CLEAR

INPUT"N="TON

FORI=1TON

?

SPACE(N-I+1)

FORJ=1TO2*I-1

?

?

CHR(ASC('A')+I-1)

ENDFOR

ENDFOR

FORP=N-1TO1STEP-1

?

SPACE(N-P+1)

FORK=1TO2*P-1

?

?

CHR(ASC('A')+P-1)

ENDFOR

ENDFOR

SETTALKON

第三部分表文件信息处理

一、基本函数

1、宏替换:

&

2、名称表达式:

(变量名)

3、FILE(S):

判断文件是否存在,若存在,该函数返回.T.,否则返回.F.。

4、FOUND()函数一般与记录查找命令结合使用。

5、FCOUNT():

表示当前表的字段数

6、FSIZE:

表示当前表的字段总长度

7、RECNO():

返回当前表的当前记录号

8、RECCOUNT():

返回当前表的总记录数

9、DELETE():

若当前记录已作删除标记,该函数返回.T.,否则返回.F.

10、BOF()或EOF():

用来测试表文件开始状态或结束状态。

11、SETFILTERTO逻辑表达式

二、基本算法与典型例题

1、文件的查询、打开、关闭和删除

SETTALKOFF

CLEAR

DOWHILE.T.

ACCEPT”请输入要删除的表文件名(扩展名略):

”TOFILENAME

FILENAME=TRIM(LTRIM(FILENAME))+”.DBF”

IF!

FILE(FILENAME)&&判断文件是否存在

ACCEPT“该文件不存在!

继续吗?

(Y/N)”TOYN

IFUPPER(YN)=”N”

EXIT

ENDIF

ELSE

USE(FILENAME)&&打开表文件

LIST

WAIT“是这个文件吗?

(Y/N)”TOYN

IFLOWER(YN)=”y”

USE&&关闭表文件

DELETEFILE&FILENAME&&删除表文件

EXIT

ELSE

WAIT”继续吗?

(Y/N)”TOYN

IFLOWER(Y/N)=”n”

USE

EXIT

ENDIF

ENDIF

ENDIF

ENDDO

SETTALKON

问题:

阅读和理解课本P103中的程序

2、表文件内的字段的添加、删除和查询

(1)添加新记录

SETTALKOFF

CLEAR

DOWHILE.T.

ACCEPT"请输入学生学号:

"TOXH

ACCEPT"请输入学生姓名:

"TONAME

INPUT"请输入性别(逻辑型):

"TOXB

INPUT"请输入出生年月"TODATE

INPUT"请输入学生奖学金"TOJXJ

USE学生

APPENDBLANK

REPLACE学号WITHXH,姓名WITHNAME,性别WITHXB,出生年月;

WITHDATE,奖学金WITHJXJ

WAIT"是否继续输入学生信息(Y/N)"TOYN

IFUPPER(YN)="Y"

LOOP

ELSE

EXIT

ENDIF

ENDDO

SETTALKON

(2)删除指定的记录

SETTALKOFF

CLEAR

DOWHILE.T.

ACCEPT"请输入要删除的学号"TOXH

USE学生

LOCAFOR学号=XH

IF!

FOUND()

?

"你指定的学生并不存在!

"

ELSE

DELE

SETDELETEON

ENDIF

WAIT"是否继续(Y/N)"TOYN

IFLOWER(YN)="Y"

LOOP

ELSE

EXIT

ENDIF

ENDDO

SETDELETEOFF

USE

SETTALKON

(3)查询记录

SETTALKOFF

CLEAR

ACCEPT"请输入学生学号"TOXH

USE成绩

LOCAFOR学号=XH

DOWHILE!

EOF()

DISP

CONTINUE

ENDDO

SETTALKON

3、统计字段数、显示字段名。

SETTALKOFF

CLEAR

ACCEPT"请输入表文件名(扩展名略)"TOFILENAME

FILENAME=FILENAME+".DBF"

IF!

FILE(FILENAME)

?

"你所指定的表文件在当前文件夹内并不存在!

"

ELSE

USE(FILENAME)

FORI=1TOFCOUNT()

?

FIELDS(I)

ENDFOR

?

”该表文件共有”+STR(RECCOUNT())+”条记录”

ACCEPT"请输入查询条件"TOEXPR

SETFILTERTO&EXPR

DISPALL

COUNTTOPFOR!

DELETE()

?

”共查询到”+STR(P)+”到符合条件的记录”

SETFILTERTO

USE

ENDIF

SETTALKON

4、录中某字段值的改变(REPLACE…WITH…)

为指定的学生的奖学金增加50元

SETTALKOFF

CLEAR

YN="Y"

USE学生

DOWHILEUPPER(YN)="Y"&&采用永真循环结构

ACCEPT"请输入学生学号"TOXH

LOCAFOR学号=XH

REPL奖学金WITH奖学金+50&&使用REPLACE…WITH语句

修改指定记录的字段。

DISP

WAIT"是否继续(Y/N)"TOYN

ENDDO

SETTALKON

5、制表结构、表内容的复制和大量数据追加

SETTALKOFF

CLEAR

USE学生IN1

IFFILE("STUDENT.DBF")

DELEFILESTUDENT.DBF

ENDIF

COPYSTRUTOSTUDENT

USESTUDENTIN2

SELE2

APPENFROM学生FOR性别

DISPALL

USE

SELE1

USE

SETTALKON

6、用SCATTERTO和GATHERFROM命令对表进行操作。

SETTALKOFF

CLEAR

DIMEA(7)&&定义一个一维七元素的数组变量

IFFILE("STUD.DBF")&&判断文件是否存在,若存在则删除该文件

DELEFILESTUD.DBF

ENDIF

USE学生IN1&&在第一个工作区打开表文件学生.DBF

SELE1

LOCAFOR奖学金>=50&&查找奖学金在50元以上的记录

COPYSTRUTOSTUD&&将学生表结构复制到STUD.DBF中.

USESTUDIN2&&在第二个工作区中打开表文件STUD.DBF

DOWHILE!

EOF()

SELE1

SCATTERTOA&&将学生.DBF中的记录读到数组A中.

SELE2

APPENDBLANK

GATHERFROMA&&将数组A中各元素的值写到STUD.DBF对应的字段中

SELE1

CONTINUE

ENDDO

SELE2

DISPALL

USE

SELE1

U

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

当前位置:首页 > 小学教育 > 数学

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

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