IFI=1
A(I+1)=A(I)
A(I)=X
ELSE
A(I+1)=A(I)
ENDIF
ELSE
A(I+1)=X
EXIT
ENDIF
ENDFOR
FORI=1TO11
?
?
A(I)
ENDFOR
?
6.数组A中已存放了10个由小到大排列的数。
现从键盘输入一个数X,要求删除数组中与其相同的数,并将后续的数依次前移,最后输出剩余的数。
(7分)
考虑到有重复数的程序如下:
DIMEA(10)
FORI=1TO10
INPUT“按递增输入10个数”TOA(I)
ENDFOR
INPUT“输入待删除的数”TOX
I=1
J=1
N=0
DOWHILEI<=10
IFA(I)I=I+1
J=J+1
ELSE
IFA(I)=X
I=I+1
N=N+1
ELSE
EXIT
ENDIF
ENDIF
ENDDO
FORK=ITO10
A(J)=A(K)
J=J+1
ENDFOR
FORK=1TO10-N
?
A(K)
ENDFOR
7.输入10个数,按升序排列后输出。
dimea(10)
fori=1to10
input“Enteraninteger:
”toa(i)
endfor
fori=1to9
forj=i+1to10
ifa(i)>a(j)
temp=a(i)
a(i)=a(j)
a(j)=temp
endif
endfor
endfor
fori=1to10
?
a(i)
endfor
以上是一维数组(数组中只有一个下标)程序举例。
在VFP中,还可以建立二维数组。
定义方法是:
DIMEA(2,3)
第一维代表行,第二维代表列,这样就在内存中开辟了6个连续的存储单元,数组元素的名称分别为:
A(1,1)A(1,2)A(1,3)
A(2,1)A(2,2)A(2,3)二维数组的元素赋初值及其处理通常要用二重循环,外循环代表行,内循环代表列。
如:
FORI=1TO2
FORJ=1TO3
INPUTTOA(I,J)
ENDFOR
ENDFOR
二维数组特别适合用来解决矩阵问题。
矩阵中有如下几个术语要掌握:
行列相等的矩阵叫方阵;方阵中有主对角线、辅对角线、下三角元素、外围元素等
1.建立一个六行六列的方阵,求出两条对角线上所有元素之和。
DIMEA(6,6)
FORI=1TO6
FORJ=1TO6
A(I,J)=I+J
ENDFOR
ENDFOR
SUM=0
FORI=1TO6
SUM=A(I,I)+A(I,7-I)
ENDFOR
?
“两条对角线上所有元素之和为”,SUM
2.一个四行五列的矩阵,求出其中最大元素的值,以及所在的行号与列号。
dimea(4,5)
fori=1to4
forj=1to5
inputtoa(i,j)
endfor
endfor
big=a(1,1)
row=1
col=1
fori=1to4
forj=1to5
ifa(i,j)>big
big=a(i,j)
row=i
col=j
DIMEA(3,4),B(3,4),C(3,4)
FORI=1TO3
FORJ=1TO4
INPUTTOA(I,J)
INPUTTOB(I,J)
C(I,J)=A(I,J)+B(I,J)
ENDFOR
ENDFOR
FORI=1TO3
FORJ=1TO4
?
?
STR(C(I,J),6)
ENDFOR
?
ENDFOR
endif
endfor
endfor
?
big,row,col
3.求两个矩阵之和,即C(3,4)=A(3,4)+B(3,4)
DIMEA(3,4),B(3,4),C(3,4)
FORI=1TO3
FORJ=1TO4
INPUTTOA(I,J)
ENDFOR
ENDFOR
FORI=1TO3
FORJ=1TO4
INPUTTOB(I,J)
ENDFOR
ENDFOR
FORI=1TO3
FORJ=1TO4
C(I,J)=A(I,J)+B(I,J)
ENDFOR
ENDFOR
FORI=1TO3
FORJ=1TO4
?
?
STR(C(I,J),6)
ENDFOR
?
ENDFOR
④判断类
1.键盘输入一个年份,判断是平年还是闰年?
INPUT“Enterayear:
”TOY、
IFMOD(Y,100)<>0ANDMOD(Y,4)=0ORMOD(Y,400)=0
?
Y,“isaleapyear.”
ELSE
?
Y,“isacommonyear”
ENDIF
2.从键盘输入一个整数,判断是偶数还是奇数。
INPUT"整数"TOX
IFMOD(X,2)=0
?
"这是个偶数"
ELSE
?
"这是个奇数"
ENDIF
3.输入一个字符,判断是否为英文字母。
ACCEPT"请输入一个字符:
"TOCH
IFASC(CH)>=65ANDASC(CH)<=90ORASC(CH)>=97ANDASC(CH)<=122
?
CH,"是英文字母"
ELSE
?
CH,"不是英文字母"
ENDIF
4.一个数如果恰好等于它的因子之和,这个数就称为“完数”,如:
6=1+2+3,故6是完数。
编程判断从键盘输入一个正整数是否为完数。
INPUT“输入一个正整数”TON
S=0
FORI=1TON-1
IFMOD(N,I)=0
S=S+I
ENDIF
ENDFOR
IFS=N
?
N,“是完数”
ELSE
?
N,“不是完数”
ENDIF
5.输入一个大于等于2的整数,判断是否为素数?
一个正整数,若只能被1和本身整除,则该数称为素数或质数
INPUT“请输入一个大于2的整数”TON
FLAG=.T.
FORI=2TON-1
IFMOD(N,I)=0
FLAG=.F.
EXIT
ENDIF
ENDFOR
IFFLAG=.T.
?
N,“是素数”
ELSE
?
N,“不是素数”
ENDIF
6.输入一个字符串,判断其中有多少个大写字母、小写字母、数字字符、空格字符以及其他特殊字符?
STORE0TOUPPER,LOWER,DIGIT,SPACE,SPECIAL
ACCEPT“输入一个字符串”TOST
L=LEN(ST)
FORI=1TOL
CH=SUBST(ST,I,1)
DOCASE
CASEASC(CH)>=65ANDASC(CH)<=90
UPPER=UPPER+1
CASEASC(CH)>=48ANDASC(CH)<=57
DIGIT=DIGIT+1
CASEASC(CH)>=97ANDASC(CH)<=122
LOWER=LOWER+1
CASEASC(CH)=32
SPACE=SPACE+1
OTHERWISE
SPECIAL=SPECIAL+1
ENDCASE
ENDFOR
?
“字符串中大写字母的个数是”,UPPER
?
“字符串中小写字母的个数是”,LOWER
?
“字符串中数字字符的个数是”,DIGIT
?
“字符串中空格字符的个数是”,SPACE
?
“字符串中其他字符的个数是”,SPECIAL
⑤转换类
1.输入个大写字母,要求输出它的ASCII码及其对应的小写字母。
ACCEPT“输入一个大写字母:
”TOCH
?
CH,“的ASCII码为”,ASC(CH)
?
CH,“对应的小写字母为”,CHR(ASC(CH)+32)
2.从键盘输入一个八进制数,将其转换成等值的十进制数。
SETTALKOFF
CLEAR
s=0
accept"EnteraNOCTALnumber:
"ton
L=len(n)
fori=1toL
s=s+val(substr(n,i,1))*8**(L-i)
endfor
?
"s=",s
SETTALKON
CANCEL
3.从键盘输入一个十进制数,将其转换成等值的八进制数。
SETTALKOFF
CLEAR
input"EnteraDECIMALnumber:
"ton
oct=""
ifn=0
oct="0"
endif
dowhilen>0
R=mod(n,8)
oct=str(R,1)+oct
n=int(n/8)
enddo
?
oct
SETTALKON
CANCEL
4.从键盘输入一个二进制数,将其转换成等值的十进制数。
s=0
ACCEPT“Enterabinarynumber:
”ton
L=len(n)
fori=1toL
s=s+val(substr(n,i,1))*2**(L-i)
endfor
?
“等值的十进制数为”,s
从键盘输入一个十进制数,将其转换成等值的二进制数。
input"Enteradecimalnumber:
"ton
bin=“”
ifn=0
bin=“0”
endif
dowhilen>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"输入公里数"TOX
IFX>2.5
PAY=(X-2.5)*1.2+6
ELSE
PAY=6
ENDIF
?
"应付费",PAY,"元"
2.设交纳所得税的规定如下:
DOCASE语句
收入<=1500元免交所得税
1500元<收入<=3000元所得税为5%
3000元<收入<=6000元所得税为8%
6000元<收入<=10000元所得税为10%
10000元<收入<=50000元所得税为15%
收入>50000元所得税为20%
请编程,从键盘输入一个数,计算应交纳的所得税。
INPUT“income=”tox
docase
casex<=1500⑦
tax=0
casex<=3000
tax=(X-1500)*0.05
casex<=6000
tax=(X-3000)*0.08+(3000-1500)*0.05
casex<=10000
tax=(X-6000)*0.1+(6000-3000)*0.08+(3000-1500)*0.05
CASEX<=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
?
“INCOMETAXIS”,TAX,“元”
3.键盘输入学生的成绩,若95-100则输出优秀,85-94是很好,70-84则输出好,60-69是一般60分以下输出不及格。
INPUT"成绩"TOFS
DOCASE
CASEFS>=95
?
"优秀"
CASEFS>=85
?
"很好"
CASEFS>=70
?
"好"
CASEFS>=60
?
"一般"
OTHERWISE
?
"不及格"
ENDCASE
4.编写学生成绩统计程序。
设有三位同学,考数学、物理、化学三门课,统计每个同学的总分和平均分
SETTALKOFF
CLEAR
dimes(3,6)
fori=1to3
forj=1to4
input"inputSTUDENT-NOANDSCORE:
"tos(i,j)
endfor
endfor
fori=1to3
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"
?
fori=1to3
forj=1to6
?
?
s(i,j)
endfor
?
endfor
SETTALKON
CANCEL
5.某班有45名参加考试的同学,现在要求从键盘输入全班一门课的成绩,输出该课程的平均分,以及及格人数和半分比。
SUM=0
N=1
FORI=1TO45
INPUT"全班一门课的成绩"TOX
SUM=SUM+X
IFX>=60
N=N+1
ENDIF
ENDFOR
?
"平均分",SUM/45
?
"几个人数",N
?
"合格率",N/45*100,"%"
⑦矩阵类
1.建立一个五行五列的矩阵,求出外围所有元素之和。
DIMENSIONA(5,5)
S=0
S1=0
FORI=1TO5
FORJ=1TO5
INPUTTOA(I,J)
S=S+A(I,J)
ENDFOR
ENDFOR
FORI=2TO4
FORJ=2TO4
S1=S1+A(I,J)
ENDFOR
ENDFOR
?
S-S1
⑧打印图形类
1.打印如下图形:
*****
*****
*****
*****
CLEAR
FORI=1TO5
?
SPACE(I)
FORJ=1TO5
?
?
”*”
ENDFOR
ENDFOR
附:
打印如下图形:
*****
****
***
**
*