坚持编写VFP程序

DAYOEN

&&将输入的秒转换成时分秒的形式
input "请输入秒数" to S
F=0
H=0
?zh(@H,@F,@S)&&@+参数返回时返回原变量,即shf的值返回到HFS

procedure zh(h,f,s)&&可以用()接受参数,也可以用parameter{私有}、lparameters{局部}
    h=int(s/3600)
    f=int((s-(h*3600))/60)
    s=s-(h*3600)-(f*60)
    return allt(str(h))+'小时'+allt(str(f))+'分钟'+allt(str(s))+'秒'
endproc

--------------------------------------------------------------------------------------------------------------------------

DAYTOO

&&求a与b的最大公倍数
clear
a=26013
b=18538
ji=a*b
do while .t.&&辗转相除法,两个数相除。
            &&若有余数,用被除数除余数,以此往复。
            &&直到无余数,被除数就是最大公约数。

if mod(a,b)=0
    exit
    &&公约数=b
else
    gy=mod(a,b)
    a=b
    b=gy
endif
enddo
&&两数之积=公倍数*公约数 既:公倍数=两数之积/公约数
gb=ji/b
?gb

-----------------------------------------------------------------------------------------------------------------------------------------------------

DAYTHREE

&&求1000以内的水仙花数 三位数,各位的三次幂等于本身
SET TALK OFF
CLEAR
FOR b=1 TO 9
    for s=0 to 9
        for g=0 to 9
            if b^3+s^3+g^3=b*100+s*10+g
            h=b*100+s*10+g
                ? h
            endif
        endfor
    endfor
endfor

------------------------------------------------------------------------------------------------------------------------------------------------------

**冒泡排序
&&  比较相邻的元素。如果第一个比第二个大,就交换它们两个;
&&  对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
&&  针对所有的元素重复以上的步骤,除了最后一个;
&&  重复步骤1~3,直到排序完成。

clear
input "请输入需要的随机数个数:" to ss
do sj with ss

for lun=1 to ss
    for ci=1 to ss-lun &&到ss-1的时候已经全部排列完毕,且最高位是最大的数,无需再排列。
        if a(ci)>a(ci+1)
            cen_=a(ci+1)
            a(ci+1)=a(ci)
            a(ci)=cen_
        endif
    endfor
endfor

for i=1 to ss
    ??allt(str(a(i)))+space(2)
endfor            

**随机数
procedure sj
    parameters s
    public a(s)
    k=1
    do while k<=s
        a(k)=rand()*100
        k=k+1
    enddo
endproc

------------------------------------------------------------------------------------------------------------------

&&选择排序

clear
input "请输入需要的随机数个数:" to ss
do sj with ss

for Lun=1 to ss
    min_=a(Lun)
    for c_i=Lun to ss
        if min_>a(c_i)
            min_=a(c_i)&&保存min数和下标
            AD=c_i
        endif
    endfor
    C=a(lun)&&将min数与该轮的数交换
    a(Lun)=min_
    a(AD)=C
endfor

for i=1 to ss
    ??allt(str(a(i)))+space(2)
endfor            

**随机数
procedure sj
    parameters s
    public a(s)
    k=1
    do while k<=s
        a(k)=rand()*100
        k=k+1
    enddo
endproc

-----------------------------------------------------------------------------------------------------------------------------

&&二项式展开式
clear
input "请输入(a+b)^n的a:" to a
input "请输入(a+b)^n的b:" to b
input "请输入(a+b)^n的n:" to n
do zk_ with a,b,n

procedure zk_
    parameters a,b,n
        store 0 to zh,s
        for i=0 to n
            do zh_ with i,n,zh
            x=(zh*a^(n-i)*b^i)
            s=s+x
            ?"第"+allt(str(i))+"项为:"+allt(str(x))+space(4)+"二次项系数为:"+allt(str(zh))
        endfor
        ?"二项展开式结果:"+allt(str(s))
endproc

&&求二项式系数
procedure zh_
    parameters i,n,zh
        store 1 to n_,i_,k_
        do jc with n,n_
        do jc with i,i_
        do jc with (n-i),k_
        zh=n_/(i_*k_)
endproc

&&阶乘通用
procedure jc
    parameters n,s
        for z=2 to n
            s=s*z
        endfor
endproc
       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值