心情:開心 | 日期:2012-12-03 星期一 | 天氣:![]() | 地點:學校 |
前面的簡單程序已體現出處理問題步驟、思路的順序關系,這就是順序結構程序。
[例1.7]交換兩個變量的值:由鍵盤輸入兩個正整數A和B,編程交換這兩個變量的值。
解:交換兩個變量的值,可以想象成交換兩盒錄音帶(稱為A和B)的內容,可以按以下步驟處理:
步驟①:拿一盒空白錄音帶C為過渡,先將A翻錄至C;
步驟②:再將B翻錄至A;
步驟③:最后將C翻錄至B。
這樣操作,可達到題目要求。
Pascal程序:
Program Exam17;
Var a,b,c : integer;
Begin
Write(‘A,B=’);
Readln(a,b);
C:= A; {等價于步驟1}
A := B; {等價于步驟2}
B := C; {等價于步驟3}
Writeln(A,B);
End.
[例1.8]分錢游戲。甲、乙、丙三人共有24元錢,先由甲分錢給乙、丙兩人,所分給的數與各人已有數相同;接著由乙分給甲、丙,分法同前;再由丙分錢給甲、乙,分法亦同前。經上述三次分錢之后,每個人的錢數恰好一樣多。求原先各人的錢數分別是多少?
解:設甲、乙、丙三人的錢數分別為A,B,C。用倒推(逆序)算法,從最后結果入手,按反相順序,分步驟推算出每次各人當時的錢數:(在每個步驟中,各人錢數分別存在A、B、C中)
步驟①: A=8 B=8 C=8 {這是最后結果的錢數,三人都一樣多}
步驟②: A=A/2 (=4) B=B/2 (=4) C=A B C(=16) { A,B未得到丙分給的錢時,只有結果數的一半;C應包含給A,B及本身數三者之和}
步驟③: A=A/2 (=2) C=C/2 (=8) B=A B C(=14) {A,C未得到乙分給的錢時,只有巳有數的一半;B應包含給A,C及本身數三者之和}
步驟④: B=B/2 (=7) C=C/2 (=4) A=A B C(=13)
C未得到甲分給的錢時,只有巳有數的一半;A應包含給B,C及本身數三者之和}
步驟⑤:輸出A(=13)B(=7)C(=4){此時的A,B,C就是三人原先的錢數}
Pascal程序:
Program Exam18;
Var a,b,c: integer;
Begin
a:=8;b:=8;c:=8; {對應于步驟①}
a:=a div 2;b:=b div 2;c:=a b c; {對應于步驟②}
a:=a div 2;c:=c div 2;b:=a b c; {對應于步驟③}
b:=b div 2;c:=c div 2;a:=a b c; {對應于步驟④}
Writeln('a=',a,' ': 4,'b=',b,' ': 4,'c=',c); {輸出}
Readln
End.
細心觀察,會發現本程序語句的順序很關鍵。此例用反推順序(逆序),按步驟正確推算出各變量的值。當然,有的問題可按正序步驟編程,這類程序都稱為順序程序。
本程序Writeln語句的輸出項含有( ' ' : 4 ),這里的冒號用來指定該項顯示所占寬度,此處是輸出4個空格即(空格項占4格)。
[例1.9]有雞兔同籠,頭30,腳90,究竟籠中的雞和兔各有多少只?
解:設雞為J只,兔為T只,頭為H,腳為F,則:
J T=30 ①
2*J 4*T=90 ②
解此題暫不必采用數學上直接解方程的辦法,可采用“假設條件與邏輯推理”的辦法:
假設籠中30個頭全都是兔,那么都按每頭4只腳計算,總腳數為(4*H),與實際腳數( F )之差為(4*H—F),如果這個差=0,則籠中全是兔(即雞為0只);如果這個差值>0,說明多計算了腳數,凡是雞都多給算了兩只腳,用它除以2就能得到雞的只數,處理步驟為:
① J=(4*H—F)/2 {先用腳數差值除以2算出雞的只數}
② T=H—J {再用總頭數減雞數算出免的只數}
按此方法,這兩步運算必須注意先后順序才會符合運算邏輯。
Pascal程序:
Program Exam16;
Const H=30; {常量說明}
F=90;
Var J,T: byte; {為字節類型的整數}
Begin
J:=(4*H-F) div 2; {整除運算}
T:=H-J
Writeln ('J=',J,' ': 6,'T= ',T );
Readln
End.
本程序中H,F為常量,變量J,T為byte類型,屬于整數類型。
Pascal定義了五個標準整數類型,如下表所示:
類型 |
取值范圍 |
占字節數 |
格式 |
Shortint(短整型) |
-128..127 |
1 |
帶符號8位 |
Integer (整型) |
-32768..32767 |
2 |
帶符號16位 |
Longint(長整型) |
-2147483648..2147483647 |
4 |
帶符號32位 |
Byte (字節型) |
0..255 |
1 |
無符號8位 |
Word (字型) |
0..65535 |
2 |
無符號16位 |
在前面程序中常用的數據類型除整數類型,還有實數類型。Pascal還定義了五個標準實數類型,列表所示如下:
類型 |
取值范圍 |
占字節數 |
有效數字 |
Real |
2.9×10-39~1.7×1038 |
6 |
7~8位 |
Single |
1.5×10-45~3.4×1038 |
4 |
11~12位 |
Double |
5.0×10-324~1.7×10308 |
8 |
15~16位 |
Extended |
1.9×10-4951~1.1×104932 |
10 |
19~20位 |
Comp |
-263 1~238-1 |
8 |
19~20位 |
在Turbo Pascal中實數的表示用科學記數法,可認為由三部分組成:
# . ## E ##或 # . ## E -##
① #.##表示有效數字;②E表示以10為底的冪;③ ##或-##是指數部分, 號可省略。
例如: 1.7E 38可寫成1.7E38 (等同于1. 7×1038)。
在實數類型定義下,即使是整數,在程序執行時系統也將自動轉換成科學記數形式,試請運行下面程序并注意觀察運行結果:
Program Exam17;
Var x: real; {x為實數類型}
Begin
X:=180; {把整數180賦給實數類型變量X}
Writeln ('x=',x); {輸出的x自動表示成實數形式}
Readln
End.
習題1. 2
1.已知△ABC中的三邊長分別為25.76,74.03,59.31,求△ABC的面積。
(計算公式: S= 。其中P = )
2.某車棚存有自行車和三輪車共65輛,它們的輪子數合計為150個。求該棚內存有的自行車和三輪車各是多少輛?
3.甲、乙、丙三人分別有磁帶36,48,64盒。先由甲把自己的磁帶平均分為三份,分給乙、丙各一份,自己留下一份;接著是乙,最后是丙,都按甲的方法處理。編程輸出甲、乙、丙在上述過程中各人的磁帶數分別是多少? (輸出所有的中間結果)
我也說兩句 |
版權聲明: 1.依據《服務條款》,本網頁發布的原創作品,版權歸發布者(即注冊用戶)所有;本網頁發布的轉載作品,由發布者按照互聯網精神進行分享,遵守相關法律法規,無商業獲利行為,無版權糾紛。 2.本網頁是第三方信息存儲空間,阿酷公司是網絡服務提供者,服務對象為注冊用戶。該項服務免費,阿酷公司不向注冊用戶收取任何費用。 名稱:阿酷(北京)科技發展有限公司 聯系人:李女士,QQ468780427 網絡地址:www.arkoo.com 3.本網頁參與各方的所有行為,完全遵守《信息網絡傳播權保護條例》。如有侵權行為,請權利人通知阿酷公司,阿酷公司將根據本條例第二十二條規定刪除侵權作品。 |