例項26:阿拉伯數字轉換為羅馬數字,將乙個整數n(1~9999)轉換為羅馬數字,其中數字和羅馬數字的對應關係如下:
原書中的開發環境很老,我也沒有花心思去研究。自己在codeblocks中進行開發的,所以程式與原書中的程式有很多地方不同,但是關鍵的一些程式還是採用原書中的**。
1 #include 2 #include第29行-41行算是自己寫的程式**,其實本來是一段很簡單的**,但是在實際執行時卻出現了問題。3 #include 4
5#define rows 4
6#define cols 478
//整數的分段標準
9int nums[rows][cols] =,
11 ,
12 ,
13 ,
14};
15//
用於轉換的羅馬字元
16char *roms[rows][cols] =,
18 ,
19 ,
20 ,
21};
2223
intmain()
24else41}
4243
//用來轉換的關鍵**部分
44 transroman[0] = '
\0'; //
因為stract函式的性質
45for(power=0; power)
4654}55
}56 printf("
%s\n
",transroman);
57return0;
58 }
最開始設計的時候第33行的**是
scanf("第43行-56行是將整數轉換成羅馬數字的關鍵**,一開始是想自己用取餘的方法來寫一下**,但是感覺只是有乙個大概的念頭,而不是比較明確的程式流程,於是就偷懶了,採用了原書中的**。%d\n
",inttotrans);
transrom是存放轉換後羅馬數字的字串,通過將需要轉換的整數與分段數(1000,900,500,……)相比較,不斷地減去這些數直至0。通過第51行的stract函式將新轉換的羅馬數字與之前的合併。因為stract函式的原因需要先使transroman[0]='\0'。下圖為簡單的stract函式介紹
當把第44行注釋掉後的執行結果如下圖所示:
正常程式執行結果:
總結:有思路真的不代表你能寫出程式來,還是要完整的實現出來。
致謝:同學:hcr1995、阿鵬
C語言例項解析精粹學習筆記 32
例項32 編制乙個包含姓名 位址 郵編和 的通訊錄輸入和輸出函式。思路解析 1 用結構體來完成姓名 位址 郵編和 的組合。2 結構體指標的使用。3 malloc的使用 4 scanf函式的返回值是正確輸入的變數個數 程式 如下 1 include 2 include 3 include 45 def...
C語言例項解析精粹學習筆記 43(希爾排序)
例項說明 用希爾排序方法對陣列進行排序。由於書中更關注的例項,對於原理來說有一定的解釋,但是對於第一次接觸的人來說可能略微有些簡略。自己在草稿紙上畫了好久,後來發現網上有好多很漂亮的原理圖。下面將原書中的程式附上 主函式裡的程式略有差異 1 include 2 include 3 4 define ...
C語言例項解析精粹學習筆記 42(插入排序)
例項說明 將乙個整數陣列按從小到大的順序進行排序。主要學習基本的插入排序和改進的氣泡排序的演算法和應用 思路1 從第乙個資料開始,分別比較其後的資料,若比它小,則將這兩個數的位置交換 從第乙個資料開始,直到最後。1 include 2 include 3 define max 10045 67int...