C語言例項解析精粹學習筆記 26

2022-08-28 23:24:30 字數 1556 閱讀 9195

例項26:阿拉伯數字轉換為羅馬數字,將乙個整數n(1~9999)轉換為羅馬數字,其中數字和羅馬數字的對應關係如下:

原書中的開發環境很老,我也沒有花心思去研究。自己在codeblocks中進行開發的,所以程式與原書中的程式有很多地方不同,但是關鍵的一些程式還是採用原書中的**。

1 #include 2 #include 

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 }

第29行-41行算是自己寫的程式**,其實本來是一段很簡單的**,但是在實際執行時卻出現了問題。

最開始設計的時候第33行的**是

scanf("

%d\n

",inttotrans);

第43行-56行是將整數轉換成羅馬數字的關鍵**,一開始是想自己用取餘的方法來寫一下**,但是感覺只是有乙個大概的念頭,而不是比較明確的程式流程,於是就偷懶了,採用了原書中的**。

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...