[摘 要] C語言對編程零起步的中職學生來說確有一定的難度。通過一個實例給出C語言編程的思路與方法,望能給中職生以啟迪。
[關 鍵 詞] 編程;審題;思路
[中圖分類號] G712 [文獻標志碼] A [文章編號] 2096-0603(2016)32-0047-01
C語言是中職計算機專業必修的一門專業基礎課程,也是江蘇對口單招的一門核心課程,對程序設計零起步的中職生來說,確有一定的難度。在此,筆者通過一個實例來和大家探討C語言編程的思路與方法。希望能給廣大中職生以啟迪,帶領大家打開智慧之門,走進神奇的程序世界。
題目:輸入一個不超過五位的K(2/8/16)進制正整數,將其轉化為對應的十進制整數輸出
C語言程序由函數組成,函數由函數首部和函數體組成,獨立完成某個特定功能。函數體又有變量說明、輸入、處理和輸出四部分,程序中用到的變量確定變量說明部分,已知條件確定輸入部分,題目目的確定輸出部分,題目要求確定處理部分。程序設計如同寫作文,首先審題確定算法,接著根據算法寫出對應程序,然后大腦模擬運行,最后上機編程、調試運行、測試驗證。
第一步:審題,確定算法(從已知條件、目的和要求三方面來分析)
已知:輸入一個不超過K(2/8/16)進制正整數。
輸入一個未知數,通常可以用scanf();語句實現。本程序中,首先書寫printf(“k(2/8/16)=?”);scanf(“%d”,k);語句,通常首先給出輸入提示,提示用戶從鍵盤輸入2或8或16以確定進制。接著輸入對應整數。若k=16,可輸入32767或C2D3,但存入何種類型變量?若存入整型變量,對第一個數可以,對于第二個數則不行。因此,我們所定義的變量應能存儲符合題目要求的各種數據,故應選用字符數組。本題中用char zs[6];定義字符數組zs存入輸入的數據。
那么,如何保證長度不超過5位呢?先輸入,再用求串長函數檢查,若長度超過5B,則要求重新輸入。如,
do {printf(“\n請輸入一個長度不超過5位的K進制正整數:\n”);
scanf(“%s”,zs);
}while(strlen(zs)>5||strlen(zs)<0);
目的:輸出與K進制數相對應的十進制數。
要求:將從鍵盤輸入的K進制數轉化為十進制數。
我們可用《計算機原理》學過的按位權(Ki)展開求和法來實現數制轉換,即將串中的字符一一取出后轉成對應數字,再乘以K的n次方(n與字符位置有關)。設串長為len,最左邊字符位于第1位,則第i位應乘以K的(len-i)次方,乘積加入累加器,即得到K進制數所對應的十進制數。
如何將字符轉化為對應的數值?我們分兩種情況:
一是數字字符0~9的轉換。因’0’的ASCII碼值為48,則可用數字字符直接減去48或’0’,得到對應數值0~9。
二是字母字符A-F的轉換。A-F對應于數值10~15,又因’A’的ASCII碼值為65,則把字母A-F的ASCII碼值減去55,得到對應數值10~15。當然,還應考慮輸入小寫字母的情況,此時我們可在轉換前用函數strupr(zs)將串zs整體轉換,以保證程序的正確性。
第二步:根據算法寫出對應的程序(主要代碼如下)
void main()
{int i,k,len,x; double s=0; char zs[6];
printf(“k(2 or 8 or 16)=?”);scanf(“%d”,k);
do
{printf(“\n請輸入一個長度不超過5位的K進制正整數:\n”);
scanf(“%s”,zs);
}while(strlen(zs)>5||strlen(zs)<0);
len=strlen(zs);strupr(zs);
for(i=0;i {x=isdigit(zs[i])?(zs[i]-48):(zs[i]-55); s=s+x*pow(k,(len-1-i));} printf(“%d進數數%s對應的十進制數為:%.0lf\n”,k,zs,s);} 第三步:大腦模擬運行(考慮各種可能性的存在) 程序編寫完畢,要考慮各種可能性的存在,首先要用大腦模擬運行,不要急于上機。我們可舉幾種特殊情況分析,不僅有利于檢查程序的結構和邏輯錯誤,還能促進用戶分析、解決問題和編程能力的提高。 第四步:上機編程、調試運行、測試驗證 上機輸入,編譯連接,運行調試,用多種輸入檢驗結果的合理性與正確性,直至符合題意。 本道C語言題目不算太難,可能還存在其他解法,筆者通過本文和大家一起交流C語言編程的基本思路及方法步驟:認真審題—分析已知條件—思考解題思路確定算法—根據算法寫出程序—模擬運行檢驗結果—上機編程測試驗證,直至程序通過、結果正確。 參考文獻: 王蘭.學好《C程序設計》的幾點建議[J].科技信息,2007(9).