程序控制結構
1、求出下列表達式的值(x、y的值從鍵盤輸入):
程序代碼:
SET TALK Off
CLEAR
INPUT "X=" TO X
INPUT "Y=" TO Y
Z=(X*Y+EXP(X+Y))/((X/Y)^3*LOG10(ABS(X-Y)))
?"X=",X,"Y=",Y,"Z=",Z
SET TALK ON
2、給定一個年份(從鍵盤輸入),判斷它是否閏年。閏年的條件是:能被4整除但不能被100整除,或能被100整除且能被400整除。
程序代碼:
SET TALK Off
CLEAR
INPUT "Year=" TO Year
if (year%4=0 and year%100!=0) or (year%100=0 and year%400=0)
?year,"是閏年"
else
?year,"不是閏年"
endif
SET TALK ON
3、從鍵盤輸入數(shù)據(jù)A(可以是C、D、N、L、Y和U型等),通過類型判斷,輸出其數(shù)據(jù)類型的漢字說明(如A的值為“OK!”,那么輸出應為:OK!——字符型數(shù)據(jù))。
程序代碼:
SET TALK Off
CLEAR
INPUT "A=" TO a
do case
case type('a')="C"
?a,"——字符型數(shù)據(jù)"
case type('a')="D"
?a,"——日期型數(shù)據(jù)"
case type('a')="N"
?a,"——數(shù)值型數(shù)據(jù)"
case type('a')="L"
?a,"——邏輯型數(shù)據(jù)"
case type('a')="Y"
?a,"——貨幣型數(shù)據(jù)"
case type('a')="U"
?a,"——未定義"
endcase
SET TALK ON
4、從鍵盤輸入A、B、C三個數(shù)值,將它們從小到大排列后輸出。
程序代碼:
SET TALK Off
CLEAR
INPUT "A=" TO A
INPUT "B=" TO B
INPUT "C=" TO C
if b
d=a
a=b
b=d
endif
if c
d=a
a=c
c=d
endif
if c
d=b
b=c
c=d
endif
?a,b,c
SET TALK ON
5、從鍵盤輸入一個數(shù)值(0~9),要求輸出其對應的中文大寫數(shù)字(零~玖)。
程序代碼:
SET TALK Off
CLEAR
C="零壹貳叁肆伍陸柒捌玖"
INPUT "N=" TO N
?N,"--->"+SUBSTR(C,2*N+1,2)
SET TALK ON
6、將前面的1到5題,加上循環(huán),使之被調用執(zhí)行一次,并可以重復對不同的輸入值完成相同的操作。
提示:只要在需要重復執(zhí)行的語句序列外加上循環(huán)控制結構即可。下面以第2小題循環(huán)3次,第5小題循環(huán)任意次為例說明。
(6.2)循環(huán)3次
程序代碼:
SET TALK Off
CLEAR
FOR I=1 TO 3
INPUT "Year=" TO Year
if (year%4=0 and year%100!=0) or (year%100=0 and year%400=0)
?year,"是閏年"
else
?year,"不是閏年"
endif
ENDFOR
SET TALK ON
(6.5)循環(huán)任意次
程序代碼:
SET TALK Off
CLEAR
?"PRESS ESC TO EXIT---"
C="零壹貳叁肆伍陸柒捌玖"
DO WHILE .T.
INPUT "N=" TO N
?N,"--->"+SUBSTR(C,2*N+1,2)
IF INKEY(0)=27
EXIT
ENDIF
ENDDO
SET TALK ON
程序閱讀題。閱讀下列程序,寫出運行結果。
1、注:字符"A"的ASCII碼為65。
程序代碼:
SET TALK OFF
CLEAR
C="一二三四五六七八九十"
B="ABCD"
R=0
L=LEN(B)
FOR I=1 TO L
W=SUBSTR(B,I,1)
D=ASC(W)+R-65
S=""
IF D<10
S=SUBSTR(C,2*D+1,2)
ELSE
S=SUBSTR(C,2*MOD(D,10)+1,2)
ENDIF
?W+"----->"+S
R=R+11
ENDFOR
SET TALK ON
參考答案:
A---->一
B---->三
C---->五
D---->七
2、設A的值為:ABCDEF
程序代碼:
SET TALK OFF
CLEAR
ACCEPT "A=" TO A
L=LEN(A)
P=SPACE(0)
I=1
DO WHILE I
P=P+SUBSTR(A,L-I,2)
I=I+2
ENDDO
?A+"------>"+P
SET TALK ON
參考答案:
ABCDEF------>EFCDAB
3、寫出運行結果
程序代碼:
SET TALK OFF
M=3
DO WHILE M<10
N=2
DO WHILE N
IF INT(M/N)=M/N
EXIT
ENDIF
N=N+1
ENDDO
IF N=M
?M
ENDIF
M=M+1
ENDDO
SET TALK ON
參考答案:
3
5
7
4、寫出運行結果
程序代碼:
SET TALK OFF
CLEAR
INPUT "M=" TO M
IF INT(M)!=M OR ABS(M)!=M
?"輸入的數(shù)值不符合題目要求!"
LOOP
ENDIF
?ALLTRIM(STR(M,19))+"的質數(shù)因子有:"
I=2
DO WHILE I<=M
IF M%I=0
??STR(I,6)
M=INT(M/I)
LOOP
ENDIF
I=I+1
ENDDO
SET TALK ON
SET ESCAPE ON
設:M的輸入值為12。
參考答案:
12的質數(shù)因子有: 2 2 3
5、寫出運行結果
程序代碼:
SET TALK OFF
CLEAR
?"* 1 2 3 4 5"
A=1
DO WHILE A<=5
?ALLTRIM(STR(A))+SPAC(2)
B=1
DO WHILE B<=A
S=A*B
??STR(S,2)+SPAC(2)
B=B+1
ENDDO
A=A+1
ENDDO
SET TALK ON
參考答案:
* 1 2 3 4 5
1 1
2 2 4
3 3 6 9
4 4 8 12
5 5 10 15 20 25
6、寫出運行結果
程序代碼:
SET TALK OFF
CLEAR
DIMENSION A(6,6)
FOR I=1 TO 6
FOR J=1 TO 6
IF I<>J
A(I,J)=0
ELSE
A(I,J)= -1
ENDIF
ENDFOR
ENDFOR
FOR I=1 TO 6
?
FOR J=1 TO 6
??A(I,J)
ENDFOR
ENDFOR
SET TALK ON
參考答案:
-1 0 0 0 0 0
0 -1 0 0 0 0
0 0 -1 0 0 0
0 0 -1 0 0 0
0 0 0 -1 0 0
0 0 0 0 0 -1
7、設N,M的值分別為6,8。
程序代碼:
SET TALK OFF
CLEAR
INPUT "N=" TO N
INPUT "M=" TO M
X=MAX(N,M)
FOR I=X TO M*N
IF MOD(I,M)=0 AND MOD(I,N)=0
Y1=I
EXIT
ENDIF
ENDFOR
?"Y1="+ALLTRIM(STR(Y1,19))+",Y2="+ALLTRIM(STR(M*N/Y1,19))
SET TALK ON
參考答案:
Y1=24,Y2=2
8、設N值為4,字符”A”的ASCII碼為65。
程序代碼:
SET TALK OFF
CLEAR
INPUT "N=" TO N
FOR I=1 TO N
?SPACE(N-I+1)
FOR J=1 TO 2*I-1
??CHR(ASC("A")+J-1)
ENDFOR
ENDFOR
FOR P=N-1 TO 1 STEP -1
?SPACE(N-P+1)
FOR K=1 TO 2*P-1
??CHR(ASC("A")+K-1)
ENDFOR
ENDFOR
SET TALK ON
參考答案:
A
ABC
ABCDE
ABCDEFG
ABCDE
ABC
A
綜合編程題。根據(jù)題目要求,編寫相應的程序。
1、求X+ X2 + X3 + X4 +¼+ Xn的值。N,X從鍵盤輸入。
程序代碼:
SET TALK OFF
clear
INPUT "X=" TO X
INPUT "N=" TO N
S=0
I=1
DO WHILE I<=N
S=S+X^I
I=I+1
ENDDO
?"X+X^2+X^3+...+X^N=",S
SET TALK ON
2、求S=2/1+3/2+5/3+8/5+13/8+…..前20項之和。
程序代碼:
SET TALK OFF
clear
S=0
N=1
X=1
Y=2
DO WHILE N<=20
S=S+Y/X
T=X
X=Y
Y=Y+T
N=N+1
ENDDO
?"2/1+3/2+5/3+...+17711/10946=",S &&共有N=20項累加
SET TALK ON
3、從鍵盤輸入一個正整數(shù),判斷其所含5的個數(shù)。(如:輸入數(shù)值2345105,其中包含5的個數(shù)為2)
程序代碼:
SET TALK OFF
clear
INPUT "請輸入一個正整數(shù)X:" TO X
S=0
DO WHILE .T.
N=MOD(X,10) &&第一次求X的個位數(shù)N,第二次求X的十位數(shù)N,…
IF N=5
S=S+1
ENDIF
X=INT(X/10)
IF X=0
EXIT
ENDIF
ENDDO
?"X中5的個數(shù)為:",S
SET TALK ON
4、從鍵盤輸入20個數(shù),去掉20個數(shù)中的值和最小值,然后求平均值。
程序代碼:
SET TALK OFF
CLEAR
S=0
N=1
STORE 0 TO MAX,MIN
DO WHILE N<=20
INPUT "B=" TO B
S= S+B
IF MAX
MAX=B
ENDIF
IF MIN>B
MIN=B
ENDIF
N=N+1
ENDDO
?"AVERAGE="+ STR((S-MAX-MIN)/18,19,2)
SET TALK ON
5、求2~1000之間完數(shù)的個數(shù)。
(完數(shù):一個數(shù)如果恰好等于它的因子之和,因子不包括本身且不能重復。如:6=1+2+3,8<>1+2+4,所以6是完數(shù),8不是完數(shù))
程序代碼:
SET TALK OFF
CLEAR
SN=0
?"2~1000之間的完數(shù)為:"
FOR N=2 TO 1000
M=N
I=1
S=0
DO WHILE I
IF INT(M/I)=M/I
S=S+I
ENDIF
I=I+1
ENDDO
IF N=S
SN=SN+1
??N
ENDIF
ENDFOR
?" 完數(shù)的個數(shù)為:",SN
SET TALK ON
6、本程序首先對矩陣按行讀入數(shù)據(jù),并將它轉置。
程序代碼:
SET TALK OFF
INPUT 'N=' TO N
DIME A(N,N)
FOR I=1 TO N
FOR J=1 TO N
INPUT 'A('+STR(I,1)+','+STR(J,1)+')=' TO AI,J)
ENDFOR
ENDFOR
FOR I=1 TO N
FOR J=1 TO I
T=A(I,J)
A(I,J)=A(J,I)
A(J,I)=T
ENDFOR
ENDFOR
SET TALK ON
7、從鍵盤任意輸入N個數(shù),去掉其中值和最小值,然后求平均值。
程序代碼:
SET TALK OFF
CLEAR
S=0
INPUT "N=" TO N
STORE N TO MAX,MIN
FOR I=1 TO N
INPUT "B=" TO B
S=S+B
IF MAX
MAX=B
ENDIF
IF MIN>B
MIN=B
ENDIF
ENDFOR
?"AVERAGE="+STR((S-MAX-MIN)/(N-2),19,2)
SET TALK ON
8、利用參數(shù)傳遞和過程文件,求(M!+N!)/(M-N)!
程序代碼:
SET TALK OFF
CLEAR
SET PROC TO 程序20
INPUT "M=" TO M
INPUT "N=" TO N
STORE 0 TO SM,SN
DO JC2 WITH M,SM
DO JC2 WITH N,SN
DO MC2 WITH M-N,N
?"表達式結果為S="+STR((SM+SN)/N,10,2)
SET PROC TO
SET TALK ON
PROC JC2
PARA X,Y
I=1
T=1
DO WHILE I<=X
T=T*I
I=I+1
ENDDO
Y=T
RETURN
PROC MC2
PARA Y,X
I=1
T=1
DO WHILE I<=X
T=T*Y
I=I+1
ENDDO
X=T
RETURN
9、編程求1~1000之內的同構數(shù)。(同構數(shù):若A是同構數(shù),則A出現(xiàn)在A的平方數(shù)的右邊。如:5*5=25,5出現(xiàn)在25的右邊,3*3=9,3不出現(xiàn)在9的右邊,所以5是同構數(shù),而3不是。)
程序代碼:
SET TALK OFF
CLEAR
FOR X=1 TO 1000
P=X*X
L=LEN(ALLTRIM(STR(X,19)))
IF ALLTRIM(STR(X,19))=RIGHT(ALLTRIM(STR(P,19)),L)
??X
ENDIF
ENDFOR
SET TALK ON
10、本程序用于輸入一個表名,若表存在則打開,并顯示出其各個字段名。
程序代碼:
SET TALK OFF
DO WHILE .T.
ACCEPT '請輸入表名:' TO FNAME
IF .NOT.FILE(FNAME)
WAIT '此表不存在'
ELSE
USE &FNAME
ZDSM=FCOUNT()
? '此表中的字段有:'+STR(ZDSM)+'個'
FOR I=1 TO ZDSM
? STR(I)+' '
?? FIELD(I)
ENDFOR
ENDIF
WAIT '是否繼續(xù)(Y/N)' TO YN
IF UPPER(YN)='N'
EXIT
ENDIF
ENDDO
SET TALK ON