vfp高手进

来源:百度知道 编辑:UC知道 时间:2024/06/25 20:14:22
题目是比较10个数的大小,我这样为什么会错
clear
dime a(10)
for i=1 to 10
input 'n=' to n
a(i)=n
for j=1 to i-1
if n>a(J)
FOR k=i to j+1 skip-1
a(k)=a(k-1)
endfor
a(j)=n
endif
endfor
endfor
for i=1 to 10
??a(i)
endfor
求两个数的最小公倍数,填写题
set talk off
clear
input "a=" to a
input "b=" to b
k=a*b
do while k>=a
******found******
if mod(k,a)=0 and ___(1)_____
x=k
endif
******found******
____(2)_____
enddo
?"两数的最小公倍数是:",x
set talk on

第一个问题,主要是因为For k的循环中,你只将a(k)替换了,原来的a(k)被丢掉了。
事实上只需要使用ASort()函数就可以将一个数组中的元素按从大到小或从小到大进行排列,不需要像你这么复杂。

第二题的填空,第一空要用来判断k是不是a和b的倍数,所以可以填
Mod(k,b)=0
而为了能退出循环,这个循环中需要有对k进行减法操作的代码,所以第二空可以写成:
k=k-a
或者
k=k-b
如果不考虑效率的话,填
k=k-1
也是可以的。

再就是,如果第二空填写k=k-b,那么,第一空还可以写成.T.,因为从b的倍数k中减去b,必然还是b的倍数,所以不需要判断,mod(k,b)肯定是永远等于0的。
故,第二题最终答案可以是:
.T.
k=k-b
不过这个答案有可能与教材上的答案不同喔,这个题出得太不严格了。

一、a(k)=a(k-1) 这句以后把a(k)原来的值呢?全替换成最大值了。
你这样太乱了。数组排序直接用ASORT()函数就行了
这样

clear
dime a(10)
for i=1 to 10
input 'n=' to a(i)
endfor
ASORT(a,1,10,1)
for i=1 to 10
?? a(i)
endfor
二、1、mod(k,b)=0 2、k=k-a