str()函數的用法,str(a,b,c),將 a 代表的值轉換為總長度為 b ,小數位數為 c 的字符串,轉換過后函數的值為c,字符型;題里面意思,將入學分代表的記錄轉換成總長為5個字節,小數位1位的字符串;
代碼(注釋的標志我換掉了,那個好丑哎~,現在這個注釋不是VFP的標準,所以別弄混了,嗯,就醬)
set talk off
clear
use xsda /*對誰操作就打開誰;*/dowhile !eof()?姓名+性別+str(N,5,1)/* 這里的"+"是字符串的連接符,之前給你說過的","也是連接符,他可以進行不同類型的連接,比如*?"計算結果=",sum*,從題目里可以看到 姓名和性別都是C,字符型數據,學分是N,數值型,加號只是字符型數據的連接符,所以通過str()函數將數值型轉為字符型;*/skip
enddo
use
set talk on
復制代碼
set talk off
clear
input "輸入k值:" to k
input "輸入m值:" to m
stor 0 to s,p /* 下面的代碼里使用了S和P,但是沒有發現他們的定義,所以這一行要對變量進行定義,因為這里只有空了一行,所以只能用store命令同時定義s,p并一起賦初值0;*/for n = k to mdo sub with n,p /*過程的固定調用格式,do <過程名> with <參數1>,<參數2>這里參數的格式要按照下面定義過程時形參的格式,參數個數與形參相等;*/s = s + p /*固定模板,下次不注釋這句了;*/
endfor
?"s的值為:",s /*輸出計算的結果;*/return
proc sub /*過程的固定使用方法,proc后面跟過程名*/para x,y /*這里個單詞后面是形參,那天給你說過的~ (單詞太長,只寫了前四個字母)不影響結果;*/y = 1/*定義一個變量y來接收結果,并給y賦值1;(因為這里是求階乘,所以初值不能賦0)*/for t = 1 to x y = y * t /*固定模板下次不注釋這句了;*/endforreturn/*返回到調用函數的下一條語句;和自定義函數有區別,上次的那個題是自定義函數,可以附帶返回值;(見程序改錯1-2,好像是那里,有空翻一眼咯~)*/
endproc /*固定格式,嗯!*/set talk on
復制代碼
004 (這個程序有問題,先不管了)
set talk off
clear
use ghxx
index on 單位編號 tag dwbh
total to xb on 單位編號 fields 數量,單價 all asce
use xb
select 0
use dwxx
dowhile !eof()
select dwxx
replace 商品總量 with xb.數量 for 單位編號 = xb.單位編號
replace 貨款總額 with xb.單價 for 單位編號 = xb.單位編號
skip
enddo
close all
set talk on
return復制代碼
005(吃饃)
set talk off
clear /*找遍所有可能的組合*/for i = 1 to 34/*大和尚*/for j = 1 to 50/*中和尚*/k = 100-i-j /*小和尚*/if i*3+j*2+k/3=100 ?"大和尚數量=",str(i,2),"中和尚數量=",str(j,2),"小河上數量=",str(k,2) endif endfor
endfor
set talk on
return復制代碼
006 (統計字符)
set talk off
clear
acce "please input:" to ch
stor 0 to a,b,c,d
s = ""
for i = 1 to len(ch) /*len(),這個函數功能統計輸入的字符串長度*/s = substr(ch,i,1) /*取第i個字符出來進行判斷*/ do case /*'a'~'z'和'A'~'Z'是所有字母的取值范圍*/ case (s >= 'a' and s <= 'z ') or (s >= 'A' and s <= 'Z ')a = a+1case s >= '0' and s <= '9 ' /*因為輸入是字符類型,所以就算是數字,也不能用來加減乘除,所以這里要加引號*/b = b+1case s = " "c = c+1otherd = d+1endcase /*中午記成enddo了,難怪一直錯*/
endfor
?"字母個數=",str(a,2),"數字個數=",str(b,2),"空格個數=",str(c,2),"特殊字符個數=",str(d,2)
set talk on
return
復制代碼
007(水仙花)
set talk off
clear
sum = 0for i = 100 to 999/*水仙花數都是位數,所以在100~999范圍里找*/x1 = i%10/*把每個位取出來*/x2 = int(i/10)%10x3 = int(i/100)if x1^3 + x2^3 +x3^3 = isum = sum +i /*固定模板*/endif
endfor
?sum
set talk on
return復制代碼
008(末尾為3的素數)
set talk off
clear
f = .t. /*定義一個找到素數的標志,賦值為0*/for i = 2 to 100/*素數的定義是大于1的自然數,所有從2開始找*/for j = 2 to sqrt(i) if i % j = 0/*每個數除以2~自己平方根范圍內的數,能除盡就不是素數*/f = .f. /*能除盡的時候,f重新賦值.f.,假*/exitendifendforif f = .t. and i%10=3/*如果f和最開始不一樣,那么代表這個時候的i在他的范圍內*/?i /*被除盡了,所以此時i不是素數,反之,若f沒有變化,則是素數*/endif /*取出此時i的個位上的數字判斷是不是3,輸出結果*/
f = .t. /*使用了f之后需要對標志f的值清零,也就是恢復原樣*/
endfor
set talk on
return復制代碼
009(房子面積這個題,字太多懶得看,立即放棄)
010(打印很丑的圖形的題)
set talk off
clear
dime a(6,6)/*定義一個二位數組a*/
a= 0/*初始化數組的值,因為之后要用到加法運算*/
x=0
y=0/*這兩個東西出現的原因是vfp糟糕的用戶體驗,這樣寫a(i,j)=a(i-1,j-1)就會報錯,所以添加一個中間變量過渡一下*/for i = 1 to 6/*把需要打印的圖形的值按位置填到二維數組里*/for j = 1 to iif j=1or i=j /*如果是第一列,或者行數等于列數就給這些格子里填1*/a(i,j)=1else/*否則,(也就是剩下的所有格子)按照下面的規則賦值,(舉個栗子:a32 = a21 + a22)*/x = i-1y = j-1a(i,j) = a(x,y) + a(x,j)endifendfor
endfor
for i = 1 to 6/*將剛剛填到數組里面的數值打印在屏幕上*/for j = 1 to i??str(a(i,j),2) /*兩個問號意思是不換行輸出,str()是為了讓輸出結果的樣子好看點*/endfor
? /*單獨的一個問號的作用是換行*/
endfor
set talk on
return復制代碼