vfp编程题类型总结

①求和类:     http://shop61920697.taobao.com/

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

文本框: 求 N的阶乘。(N的值由键盘输入,应小于20 )
INPUT “输入N的值” TO N
P=1
FOR I=1 TO N
P=P*I
ENDFOR
?N,“!=”,P

S=0

K=1

INPUT "N=" TO N

FOR i=1 TO N

       K=K*i

       S=S+K

Endfor

?S

2.求

SUM=0

FOR I=1 TO 21 STEP 2

SUM=SUM+I^3

ENDFOR

?”SUM=”,SUM

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

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

?"数列之和为:",SN

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

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

S=S+I^2

I=I+3

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.输出100200之间所有能被57整除的整数,并输出他们的和。

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的值由键盘输入)

S=1

INPUT TO X

INPUT TO N

FOR I=1 TO N

S=S+X^I/I

ENDFOR

?“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值。

 

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

INPUT TO C

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=

INPUT TO X

DO CASE

   CASE X<1

   Y=X

   CASE X<10

   Y=2*X-1

   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)<S

??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

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)

endfor

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

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<A(I)

     IF I=1

        A(I+1)=A(I)

        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)<X

      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个数,按升序排列后输出。

dime a(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

二维数组特别适合用来解决矩阵问题。矩阵中有如下几个术语要掌握:行列相等的矩阵叫方阵;方阵中有主对角线、辅对角线、下三角元素、外围元素等

1.       建立一个六行六列的方阵,求出两条对角线上所有元素之和。

dime a(6,6)

for  i=1  to  6

for  j=1  to  6

INPUT TO A(I,J)

endfor

endfor

                                           SUM=0

FOR I=1 TO 6

SUM=A(I,I)+A(I,7-I)

ENDFOR

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

ZF=0

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)

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

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

CLEAR

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

?"应付费",PAY,"元" 

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

CLEAR

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)

S=S+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

2. 打印如下所示的九九乘法表

①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=”*”

? “两数之积为:”,A*B

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

INPUT TO C

BIG=MAX(A,B,C)

SMALL=MIN(A,B,C)

SUM=A+B+C

A=BIG

C=SMALL

B=SUM-BIG-SMALL

?A,B,C

2. 输入一个字符串,按其倒序输出。

ACCEPT  "Enter a string:" to st

l=len(st)

for i=l to 1 step -1

??substr(st,i,1)

endfor

?

3. 输入10个数,按输入的相反次序输出

DIME A(10)

FOR I=1 TO 10

    INPUT TO A(I)

ENDFOR

FOR I=10 TO 1 STEP –1

    ?A(I)

ENDFOR

相关推荐