吉宏蘭
很多學(xué)習(xí)計算機的同學(xué),對編程比較頭疼,更有甚者學(xué)習(xí)一學(xué)期甚至一年都不能入門,編程時無從下手,本人就一實例來談?wù)勅绾芜M行編程。希望能給廣大學(xué)習(xí)編程的同學(xué)開啟智慧之門,早日跨入奇妙的程序世界。(以下程序在QBASIC環(huán)境下運行通過)
題目:輸入一個不超過五位的十六進制數(shù),將其轉(zhuǎn)化為十進制輸出。
一般來說,一個完整的程序通常由輸入部分、處理部分和輸出三大部分組成,題目的已知條件通常確定程序輸入部分,目的確定程序的輸出,要求確定程序的處理部分,編程的一切都得從審題開始,然后認真分析得出程序的各部分關(guān)鍵語句。
第一步:審題(從已知條件、目的和要求三個方面來分析)
已知條件:輸入一個長度不超過五位的十六進制數(shù)
輸入一個未知數(shù),用INPUT語句,運行時由鍵盤輸入。輸入后放入一個什么類型的變量?比如輸入[ZZ(Z]694[ZZ)]或者輸入D3B49,這兩者均符合題目要求。如果存入一個數(shù)值型變量,第一個數(shù)還可以,但第二個就出錯了,為了能考慮各種情況的輸入,應(yīng)選用字符型的變量,這樣就可以存儲各種輸入的可能性數(shù)值。
如何保證長度不超過5位:
(1)在INPUT語句中用明確的提示性語言,如:
INPUT “請輸入長度不超過五位的十六進制數(shù)”;X$
(2)先輸入,然后用測試串長函數(shù)、檢測來檢查,如超過五個字節(jié)的長度,則要求重新輸入,如:
DO
INPUT“請輸入一個十六進制數(shù)”;X$
LOOP UNTILE LEN(X$)<=5
目的:在屏幕上打印出相對應(yīng)的十進制值。
要求:該題只要完成將輸入的十六進制的值轉(zhuǎn)化為十進制數(shù)值,至于具體用什么方法來求出對應(yīng)的十進制值并無具體要求。
我們可以用學(xué)過的進制互化的方法來進行,以具體例子來分析,若:輸入D3B49,其轉(zhuǎn)換方法應(yīng)為D*164+3*163+B*162+4*161+9*160,其中D、B應(yīng)轉(zhuǎn)化為13、11,計算后求和即可。
具體分析,我們只要將字符串逐位取出,取出后為一個一個的字符,只需將字符“D”、“3”、“B”、“4”“9”轉(zhuǎn)化為13、3、11、4、9,然后再乘以16的n次方(位權(quán)),其中n的取值與該字符在數(shù)中所處的位置有關(guān),如串長為L,字符串左邊開始為第一位,則第I位應(yīng)乘以16的(L-I)次方,乘積加入累加器。最后,累加器中的值,即為該十六進制數(shù)對應(yīng)的十進制值。
在上面的分析中,只需將字符轉(zhuǎn)化為相應(yīng)的數(shù)值,如果是數(shù)字字符,即“0-9”只要用字符型轉(zhuǎn)換為數(shù)值型函數(shù)VAL()即可,如果是字母字符“A-F”,則應(yīng)將其轉(zhuǎn)換為“10—15”,即“A”轉(zhuǎn)換為10、“B”轉(zhuǎn)換為“11”……,字母向后一個,數(shù)值就大1,如何轉(zhuǎn)化呢?我們知道字母“A”的ASCII碼值為65,“B”的ASCII碼值為“66”,也是字母向后一個,數(shù)值就大1。
如果我們把字母的ASCII碼值減去55,就能得到與之相對應(yīng)的數(shù)值,即“A”的ASCII碼值為65,減去55等于10,“B”的ASCII碼值為66,減去55,等于11……當然,還要考慮防止用戶輸入的是小寫字母,還應(yīng)先用大寫轉(zhuǎn)換函數(shù)UCASE()轉(zhuǎn)換成大寫字母,才能保證程序的正確性。
第二步:根據(jù)審題及各部分的分析寫出對應(yīng)的程序。
程序及相應(yīng)注釋如下:
S=0 累加器顯性賦初值
INPUT “請輸入一個不超過五位的十六進制”;X$
L=LEN(X$) 求字符串長度
FOR I= 1 TO L 設(shè)置循環(huán),逐一取出字符串串字符
T$=MID$(X$,I,1) 取出字符
IF T$>=“0” AND T$<=“9” THEN
M=VAL(T$) 是數(shù)值字符直接轉(zhuǎn)換
ELSE
M=ASC(UCASE(T$))-55
字母字符轉(zhuǎn)換為大字字母后
END IF 求ASCII值,再減去55
S=S+M*16^(L-I) 求出該項值后加入累加器
NEXT I
PRINT S
END
第三步:考慮各種輸入的可能,用大腦模擬計算機運行。
編寫完程序,不要急于上機調(diào)試運行,首先要在大腦內(nèi)進行模擬運行,考慮各種輸入情況,并舉幾個特例來分析,這樣有利于查出程序的結(jié)構(gòu)錯誤和邏輯錯誤。通過這種鍛煉也有助于提高編程能力、分析問題和解決問題的能力。
第四步:上機調(diào)試、運行、驗證。
用更多的輸入來檢驗程序的運行結(jié)果。
至此,程序編寫結(jié)束:上機運行調(diào)試通過。該程序雖然簡單,也可能有很多其他的編程方法,但本文主要是與大家交流編程思路及步驟。接到題目,認真審題,分析已知條件,確定輸入部分,分析程序要求確定處理部分,分析目的確定輸出部分,編寫程序,模擬計算機運行、檢驗程序正確性,直至上機調(diào)試通過。
參考文獻:
1. 李潔冰,《中職計算機程序設(shè)計課程教學(xué)探討》[J],電腦知識與技術(shù),2008,(05)
2. 蔣慧,《構(gòu)造類型論與計算機程序設(shè)計》[J],計算機科學(xué),2002,(02)
3. 林小華,《計算機程序設(shè)計風(fēng)格探討》 [J],軟件導(dǎo)刊,2006(09)