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