2008年6月26日 星期四

C 程式設計期末作業,解題練習:解答

這個題目看起來複雜,其實不算難。有幾個關卡要解決,首先是要能讀入所有的佈雷資訊,使用二維字元陣列(亦稱為一維字串陣列)讀取檔案內容,然後逐一的判斷是要列印"*"或數字。下列的C語言程式碼逐一的檢討字元,看是要列印"*"或數字。
if (mine[i][j]=='.')
fprintf(fptr2, "%d", calcMineNumber(i,j));
else
fprintf(fptr2, "*");

這裡的calcMineNumber(i,j)是一個函數,負責計算第 i 列和第 j 行的週遭八個位置有多少是雷。其C語言完成碼如下。
int calcMineNumber(int i, int j)
{
int sum=0;
sum += addMine(i-1, j-1);
sum += addMine(i-1, j);
sum += addMine(i-1, j+1);
sum += addMine(i, j-1);
sum += addMine(i, j+1);
sum += addMine(i+1, j-1);
sum += addMine(i+1, j);
sum += addMine(i+1, j+1);
return sum;
}

這個函數的概念簡單清楚,只是加總外圍八個位置的佈雷情形。至於i,j合理與否並不考慮,這種模組式的考慮,可以將問題拆解成容易理解的程度。
這時addMine就是決定i,j是否合理的地方,其C語言程式碼如下。
int addMine(int i, int j)
{
if (i<0||j<0||i>=row||j>=column)
return 0;
if (mine[i][j]=='*')
return 1;
else
return 0;
return 0;
}

希望大家在完成這個題目後,對問題的模組化能有進一步的體會。
期末作業題目
回到作業目錄
回到首頁

沒有留言: