当前位置:文档之家› VFP编程题类型总结

VFP编程题类型总结

VFP编程题类型总结
VFP编程题类型总结

①求和类:

1. 计算S=1!+2!+3!+4!+。。。。。。+N! S=0

K=1

INPUT "N=" TO N FOR i=1 TO N K=K*i S=S+K Endfor ?S

2.求 3

3

3

3

3

217531+??????++++ SUM=0

FOR I=1 TO 21 STEP 2 SUM=SUM+I^3 ENDFOR

?”SUM=”,SUM

3.有一分数序列,求前20项之和

(813583)

52

31

2++

+

+

M=1 N=2

SUM=0

FOR I=1 TO 20 TERM=N/M SUM=SUM+TERM X=N N=M+N M=X TERM=N/M ENDFOR ?”SUM=”,SUM

4.求Sn=a+aa+aaa+aaaa ……,其中,a 是一个数字,a 的个数为n ,a 和n 由键盘输入 INPUT "输入 a 的值:" TO A INPUT "输入项数n:" TO N SN=0 B=A

FOR I=1 TO N SN=SN+A A=A*10+B ENDFOR

5. 求e x

的台劳级数展开式的前n 项之和(运行时输入x=2.0,n=4)

)!1(!3!211

32-+

??????++++=-n x x x x e n x

INPUT “X=” TO X

INPUT “N=” TO N SUM=1 P=1

FOR I=1 TO N-1 P=P*I T=X^I/P SUM=SUM+T

ENDFOR

?”SUM=”,SUM

6.求1*2+3*4+5*6+……21*22 SUM=0

FOR I=1 TO 21 STEP 2 SUM=SUM+I*(I+1)

ENDFOR

?"和为=",SUM (1892)

7.通过键盘输入n ,求下列级数的 和:

1-1/2+1/3-1/4+…+1/n INPUT TO N S=0 F=1

FOR I=1 TO N

S=S+F*(-1)^(I-1)/I ENDFOR

?S

8.计算连续自然数之和,并且显示和刚大于1000的最后一个自然数

Sn=1+2+3+4+…+N STORE 0 TO S,N

DO WHILE S<=1000 N=N+1

S=S+N

ENDDO ? N

9.求1^2+4^2+7^2+…一直加到超过1000为止,输出和数与项数。 I=1 S=0 N=0

DO WHILE S<=1000

N=N+1 ENDDO ?N ?S

10.求1-100之间所有奇数之和 SUM=0

FOR I=1 TO 100 STEP 2 SUM=SUM+I ENDFOR

? “SUM=”,SUM

10.输出100到200之间所有能被5或7整除的整数,并输出他们的和。

SUM=0

FOR I=100 TO 200

IF MOD(I,10)=5 AND MOD(I,7)=0

SUM=SUM+I ?I

ENDIF ENDFOR

?“SUM=”,SUM

11.编程输出100~500之间能被7整除的奇数的个数。 N=0

FOR I=100 TO 500

IF I%7=0 AND I%2=1 N=N+1 ENDIF ENDFOR ? “N=”,N

12. 求1/(1*2)+1/(3*4)+1/(5*6)+……+1/(99*100) SUM=0

FOR I=1 TO 99 STEP 2

SUM=SUM+1/(I*(I+1)) ENDFOR

?"SUM=",SUM

13.

求如下级数前N 项之和(X 和N 的值由键盘输入)

n

x x x x x n

+

??????+++++4321432

S=1

INPUT TO X INPUT TO N FOR I=1 TO N

?“SUM=”,S

14.输出3-100之间的所有素数,并求其和。 SUM=0

FOR J=3 TO 100 FLAG=.T.

FOR I=2 TO SQRT(J) IF MOD(J,I)=0 FLAG=.F. EXIT ENDIF ENDFOR IF FLAG=.T. ?J

SUM=SUM+J ENDIF ENDFOR

?"奇数之和是:",SUM

②方程类

1.完成下面分段函数的计算,程序运行时用户从键盘输入一个数值X ,在屏幕上输出Y 值。

??

???<-=>=0

00022x if

x x if x if x Y

INPUT "请输入X 值:" TO X IF X>0 Y=X*X ELSE

IF X=0 Y=0 ELSE

Y=-(X*X) ENDIF ENDIF ?Y

2.现有一元2次方程 AX^2+BX+C=0 其中A B C 是整数且A 不等于0 若存在实根,则输出“在实数范围内有解” 若不存在实根 则输出“在实数范围内无解”/求解 INPUT TO A INPUT TO B

D=B*B-4*A*C IF D>=0

?"在实数范围内有解" ELSE

?"在实数范围内无解" ENDIF /

INPUT TO A INPUT TO B INPUT TO C D=B*B-4*A*C IF D>0

X1=(-B+SQRT(D))/(2*A) X2=(-B-SQRT(D))/(2*A) ?X1 ?X2 ELSE IF D>0 X=-B/(2*A) ?"X1=X2=",X ELSE ?"无解" ENDIF ENDIF

3.输入一个X 的值,求Y 的值。Y= ??

?

??>=-<=<-<10

113101121X if X X if

X X if X

INPUT TO X DO CASE CASE X<1 Y=X CASE X<10

CASE X>=10

Y=3*X-11

ENDCASE

?Y

③数组类

1. 输入10个数,输出其中小于平均值S的数。

DIME A(10)

S=0

FOR I=1 TO 10

INPUT TO A(I)

S=S+A(I)

ENDFOR

S=S/10

FOR I=1 TO 10

IF A(I)

??A(I)

ENDIF

ENDFOR

2.输入10个数,求其中最大数和最小数。

DIME A(10)

FOR I=1 TO 10

INPUT “ ENTER A NUMBER:”TO A(I)

ENDFOR

BIG=A(1)

SMALL=A(1)

FOR I=2 TO 10

IF A(I)>BIG

BIG=A(I)

ENDIF

IF A(I)

SMALL=A(I)

ENDIF

ENDFOR

?“THE SMALLEST NUMBER IS”,SMALL

?“THE BIGGEST NUMBER IS”,BIG

3.输入10个数,求其中最大数和最小数,并确定它们的位置。DIME A(10)

FOR I=1 TO 10

INPUT “ ENTER A NUMBER:”TO A(I)

BIG=A(1)

BP=1

SMALL=A(1)

SP=1

FOR I=2 TO 10

IF A(I)>BIG

BIG=A(I)

BP=I

ENDIF

IF A(I)

SMALL=A(I)

SP=I

ENDIF

ENDFOR

?“THE PLACE OF THE SMALLEST NUMBER IS”,SP

?“THE SMALLEST NUMBER IS”,SMALL

?“THE PLACE OF THE BIGGEST NUMBER IS”,BP

?“THE BIGGEST NUMBER IS”,BIG

4.从键盘输入10 个整数,现从中查找某个数,若查到,输出“YES”,否则输出“NO”。

DIMENSION A(10)

FOR I=1 TO 10

INPUT "输入10个整数" TO A(I)

ENDFOR

INPUT "输入待查找的整数" TO X

FOR I=1 TO 10

IF X=A(I)

? "YES"

EXIT

ENDIF

ENDFOR

IF I>10

? "NO"

ENDIF

5.

已有按从小到大的顺序排列的10 个数,现输入一个数,要求插入到数列中。插入后数列仍然按从小到大顺序排列。

DIMENSION A(11)

FOR I=1 TO 10

INPUT “递增输入10个整数” TO A(I)

ENDFOR

INPUT “任意输入一个整数” TO X

FOR I=10 TO 1 STEP -1

IF X

IF I=1

A(I)=X

ELSE

A(I+1)=A(I)

ENDIF

ELSE

A(I+1)=X

EXIT

ENDIF

ENDFOR

FOR I=1 TO 11

??A(I)

ENDFOR

?

6. 数组A中已存放了10个由小到大排列的数。现从键盘输入一个数X,要求删除数组中与其相同的数,并将后续的数依次前移,最后输出剩余的数。(7分)

考虑到有重复数的程序如下:

DIME A(10)

FOR I=1 TO 10

INPUT “按递增输入10个数” TO A(I)

ENDFOR

INPUT “输入待删除的数” TO X

I=1

J=1

N=0

DO WHILE I<=10

IF A(I)

I=I+1

J=J+1

ELSE

IF A(I)=X

I=I+1

N=N+1

ELSE

EXIT

ENDIF

ENDIF

ENDDO

FOR K=I TO 10

A(J)=A(K)

J=J+1

ENDFOR

FOR K=1 TO 10-N

?A(K)

ENDFOR

7.输入10个数,按升序排列后输出。

FOR I=1 TO 10

INPUT “ ENTER AN INTEGER :” TO A(I)

ENDFOR

FOR I=1 TO 9

FOR J=I+1 TO 10

IF A(I)>A(J)

TEMP=A(I)

A(I)=A(J)

A(J)=TEMP

ENDIF

ENDFOR

ENDFOR

FOR I=1 TO 10

?A(I)

ENDFOR 以上是一维数组(数组中只有一个下标)程序举例。在VFP中,还可以建立二维数组。定义方法是:

DIME A(2,3)

第一维代表行,第二维代表列,这样就在内存中开辟了6个连续的存储单元,数组元素的名称分别为:

A(1,1) A(1,2) A(1,3)

A(2,1) A(2,2) A(2,3) 二维数组的元素赋初值及其处理通常要用二重循环,外循环代表行,内循环代表列。如:

FOR I=1 TO 2

FOR J=1 TO 3

INPUT TO A(I,J)

ENDFOR

ENDFOR

二维数组特别适合用来解决矩阵问题。矩阵中有如下几个术语要掌握:行列相等的矩阵叫方

SF=0

FOR I=1 TO 6

FOR J=1 TO 6

IF I=J

SZ=SZ+A(I,J)

ENDIF

IF I+J=7

SF=SF+A(I,J)

ENDIF

ENDFOR

ENDFOR

? “两条对角线上所有元素之和为”,SZ+SF

2.一个四行五列的矩阵,求出其中最大元素的值,以及所在的行号与列号。DIME A(4,5)

FOR I=1 TO 4

FOR J=1 TO 5

INPUT TO A(I,J)

ENDFOR

ENDFOR

BIG=A(1,1)

ROW=1

COL=1

FOR I=1 TO 4

FOR J=1 TO 5

IF A(I,J)>BIG

BIG=A(I,J)

ROW=I

COL=J

ENDIF

ENDFOR

ENDFOR

?BIG, ROW, COL

3.求两个矩阵之和,即C(3,4)=A(3,4)+B(3,4)

DIME A(3,4),B(3,4),C(3,4) Array FOR I=1 TO 3

FOR J=1 TO 4

INPUT TO A(I,J)

ENDFOR

ENDFOR

FOR I=1 TO 3

FOR J=1 TO 4

INPUT TO B(I,J)

ENDFOR

FOR I=1 TO 3

FOR J=1 TO 4

C(I,J)=A(I,J)+B(I,J)

ENDFOR

ENDFOR

FOR I=1 TO 3

FOR J=1 TO 4

??STR(C(I,J),6)

ENDFOR

?

ENDFOR

④判断类

1.键盘输入一个年份,判断是平年还是闰年?

INPUT “Enter a year:” TO Y 、

IF MOD(Y,100)<>0 AND MOD(Y,4)=0 OR MOD(Y,400)=0

?Y,“is a leap year.”

ELSE

?Y,“is a common year”

ENDIF

2.从键盘输入一个整数,判断是偶数还是奇数。

INPUT "整数" TO X

IF MOD(X,2)=0

?"这是个偶数"

ELSE

?"这是个奇数"

ENDIF

3.输入一个字符,判断是否为英文字母。

ACCEPT "请输入一个字符:" TO CH

IF ASC(CH)>=65 AND ASC(CH)<=90 OR ASC(CH)>=97 AND ASC(CH)<=122

?CH,"是英文字母"

ELSE

?CH,"不是英文字母"

ENDIF

4.一个数如果恰好等于它的因子之和,这个数就称为“完数”,如:6=1+2+3,故6是完数。编

INPUT “输入一个正整数” TO N

S=0

FOR I=1 TO N-1

IF MOD(N,I)=0

S=S+I

ENDIF

ENDFOR

IF S=N

?N,“是完数”

ELSE

?N,“不是完数”

ENDIF

5. 输入一个大于等于2的整数,判断是否为素数?一个正整数,若只能被1和本身整除,则该数称为素数或质数

INPUT “请输入一个大于2的整数” TO N

FLAG=.T.

FOR I=2 TO N-1

IF MOD(N,I)=0

FLAG=.F.

EXIT

ENDIF

ENDFOR

IF FLAG=.T.

? N,“是素数”

ELSE

? N,“不是素数”

ENDIF

6.输入一个字符串,判断其中有多少个大写字母、小写字母、数字字符、空格字符以及其他特殊

STORE 0 TO UPPER,LOWER,DIGIT,SPACE,SPECIAL

ACCEPT “输入一个字符串” TO ST

L=LEN(ST)

FOR I=1 TO L

CH=SUBST(ST,I,1)

DO CASE

CASE ASC(CH)>=65 AND ASC(CH)<=90

UPPER=UPPER+1

CASE ASC(CH)>=48 AND ASC(CH)<=57

DIGIT=DIGIT+1

CASE ASC(CH)>=97 AND ASC(CH)<=122

LOWER=LOWER+1

CASE ASC(CH) =32

SPACE=SPACE+1

OTHERWISE

SPECIAL=SPECIAL+1

ENDCASE

ENDFOR

? “字符串中大写字母的个数是”, UPPER

? “字符串中小写字母的个数是”, LOWER

? “字符串中数字字符的个数是”, DIGIT

? “字符串中空格字符的个数是”, SPACE

? “字符串中其他字符的个数是”, SPECIAL

⑤转换类

1. 输入个大写字母,要求输出它的ASCII码及其对应的小写字母。

ACCEPT “输入一个大写字母:” TO CH

?CH, “的ASCII码为”, ASC(CH)

?CH, “对应的小写字母为”, CHR(ASC(CH)+32)

2.从键盘输入一个八进制数,将其转换成等值的十进制数。

SET TALK OFF

CLEAR

S=0

ACCEPT "ENTER AN OCTAL NUMBER:" TO N

L=LEN(N)

FOR I=1 TO L

S=S+VAL(SUBSTR(N,I,1))*8**(L-I)

ENDFOR

?"S=",S

SET TALK ON

CANCEL

3.从键盘输入一个十进制数,将其转换成等值的八进制数。

SET TALK OFF

INPUT "ENTER A DECIMAL NUMBER:" TO N

OCT=""

IF N=0

OCT="0"

ENDIF

DO WHILE N>0

R=MOD(N,8)

OCT= STR(R,1)+OCT

N=INT(N/8)

ENDDO

?OCT

SET TALK ON

CANCEL

4.从键盘输入一个二进制数,将其转换成等值的十进制数。

S=0

ACCEPT “ENTER A BINARY NUMBER:” TO N

L=LEN(N)

FOR I=1 TO L

S=S+VAL(SUBSTR(N,I,1))*2**(L-I)

ENDFOR

?“等值的十进制数为”,S

从键盘输入一个十进制数,将其转换成等值的二进制数。

INPUT "ENTER A DECIMAL NUMBER:" TO N

BIN=“”

IF N=0

BIN=“0”

ENDIF

DO WHILE N>0

R=MOD(N,2)

BIN= STR(R,1)+BIN

N=INT(N/2)

ENDDO

? “等值的二进制数为”,BIN

⑥真实情况类

1.输入乘车的公里数,输出乘车费(计费标准:

2.5公里之内是6元,2.5公里以外,每超过1公里增加1元2角)

INPUT "输入公里数" TO X

IF X>2.5

PAY=(X-2.5)*1.2+6

ELSE

PAY=6

ENDIF

2. 6) 设交纳所得税的规定如下:DO CASE 语句

收入<=1500元免交所得税

1500元 < 收入 <=3000元所得税为5%

3000元 < 收入 <=6000元所得税为 8%

6000元 < 收入 <=10000元所得税为 10%

10000元 < 收入 <=50000元所得税为 15%

收入>50000元所得税为 20%

请编程,从键盘输入一个数,计算应交纳的所得税。

INPUT “INCOME=” TO X

DO CASE

CASE X<=1500⑦

TAX=0

CASE X<=3000

TAX=(X-1500)*0.05

CASE X<=6000

TAX=(X-3000)*0.08+(3000-1500)*0.05

CASE X<=10000

TAX=(X-6000)*0.1+(6000-3000)*0.08+(3000-1500)*0.05

CASE X<=50000

TAX=(X-10000)*0.15+(10000-6000)*0.1+(6000-3000)*0.08+(3000-1500)*0.05 OTHERWISE

TAX=(X-50000)*0.2+(50000-10000)*0.15+(10000-6000)*0.1&

+(6000-3000)*0.08+(3000-1500)*0.05

ENDCASE

?“INCOME TAX IS”,TAX,“元”

3.键盘输入学生的成绩,若95-100则输出优秀,85-94是很好,70-84则输出好,60-69 是

一般60分以下输出不及格。

INPUT "成绩" TO FS

DO CASE

CASE FS>=95

?"优秀"

CASE FS>=85

?"很好"

CASE FS>=70

?"好"

CASE FS>=60

?"一般"

OTHERWISE

?"不及格"

ENDCASE

4.编写学生成绩统计程序。设有三位同学,考数学、物理、化学三门课,统计每个同学的总分和平均分

SET TALK OFF

DIME S(3,6)

FOR I=1 TO 3

FOR J=1 TO 4

INPUT "INPUT STUDENT-NO AND SCORE:" TO S(I,J)

ENDFOR

ENDFOR

FOR I=1 TO 3

S(I,5)=S(I,2)+S(I,3)+S(I,4)

S(I,6)=ROUND(S(I,5)/3,1)

ENDFOR

?SPACE(5),"STUNO",SPACE(4),"MATH",SPACE(4),"PHY",SPACE(5),"CHE",SPACE(4), "TOTAL",SPACE(5),"AVER"

?

FOR I=1 TO 3

FOR J=1 TO 6

??S(I,J)

ENDFOR

?

ENDFOR

SET TALK ON

CANCEL

5.某班有45名参加考试的同学,现在要求从键盘输入全班一门课的成绩,输出该课程的平均分,以及及格人数和半分比。

SUM=0

N=1

FOR I= 1 TO 45

INPUT"全班一门课的成绩" TO X

SUM=SUM+X

IF X>=60

N=N+1

ENDIF

ENDFOR

?"平均分" ,SUM/45

?"几个人数",N

?"合格率",N/45*100,"%"

⑦矩阵类

1.建立一个五行五列的矩阵,求出外围所有元素之和。

DIMENSION A(5,5)

S=0

S1=0

FOR I=1 TO 5

FOR J=1 TO 5

INPUT TO A(I,J)

ENDFOR

ENDFOR

FOR I=2 TO 4

FOR J=2 TO 4

S1=S1+A(I,J)

ENDFOR

ENDFOR

?S-S1

⑧打印图形类

1.打印如下图形:

*****

*****

*****

*****

CLEAR

FOR I=1 TO 5

?SPACE(I)

FOR J=1 TO 5

??”*”

ENDFOR

ENDFOR

附:打印如下图形:

*****

****

***

**

*

**

***

****

*****

FOR I=5 TO 1 STEP -1

??SPACE(5-I)

FOR J=1 TO I

??”*”

ENDFOR

?

ENDFOR

FOR I=2 TO 5

??SPACE(5-I)

FOR J=1 TO I

??”*”

ENDFOR

?

ENDFOR

①clear

for N=1 TO 9

for M=1 TO N

?? alltrim(str(N))+"×"+alltrim(str(M))+"="+ alltrim(str(N*M))+space(5)

endfor

?

Endfor

②clear

N=1

DO WHILE N<=9

M=1

DO WHILE M<=N

?? alltrim(str(N))+"×"+alltrim(str(M))+"="+ alltrim(str(N*M))+space(5)

M=M+1

ENDDO

?

N=N+1

ENDDO

⑨其他类

1. 输入两个数和一个运算符(加、减、乘、除),求其值。例如,输入3和5以及*,则输出15

INPUT “输入一个数:” TO A

INPUT “输入另一个数:” TO B

ACCEPT “输入运算符:” TO CH

DO CASE

CASE CH=“+”

? “两数之和为:”,A+B

CASE CH=”-“

? “两数之差为:”,A-B

CASE CH=”*”

CASE CH=“/”

? “两数之商为:”,A/B

OTHERWISE

? “运算符有错!”

ENDCASE

2.输入一个正整数,分解出所有因子。如18=1*2*3*3,23=1*23

INPUT "输入一个正整数" TO N

?? N,"=1"

I=2

DO WHILE I<=N

IF MOD(N,I)=0

??"*"+ALLTRIM(STR(I))

N=N/I

ELSE

I=I+1

ENDIF

ENDDO

?

3.直接求最小公倍数参考程序如下:

INPUT "输入一个正整数" TO M

INPUT "输入另一个正整数" TO N

FOR I=M TO M*N

IF MOD(I,N)=0 AND MOD(I,M)=0

?"最小公倍数为",I

EXIT

ENDIF

ENDFOR

4.求FIBONACCI数列1,1,2,3,5,8……的第8项与第18项。

DIMENSION F(18)

F(1)=1

F(2)=1

FOR I=3 TO 18

F(I)=F(I-1)+F(I-2)

ENDFOR

? “第8项是:”,F(8)

? “第18项是:”,F(18)

⑩次序类

1.从键盘输入3个数,分别赋予A,B,C三个变量,编程使得A中存放最大数,C存放最小数,并按ABC得次序输出。

INPUT TO A

INPUT TO B

相关主题
文本预览
相关文档 最新文档