C程式設計 習題之1 20 detab

2022-03-12 05:17:36 字數 1495 閱讀 1335

碼農一定是最需要動手實操的行業之一。有一句話叫,好記性不如爛筆頭,牽強附會引申到這裡,變成看書百遍,不如碼字執行一遍。是不是有那麼一點味道?哈哈!

這幾天看的《c程式設計》,看完每個章節還是覺得沒有完全落實,於是老老實實動手把習題做一遍,算是對不踏實內心的乙個交待。仔細做下來才發現,習題其實並不是作者行文的簡單回顧總結,而是在此基礎上另有拔高和引申,如果你錯過了,就少學很多東西。廢話不多說,下面說一說1-20 detab這個小練習;

題目是這樣的:

編寫程式detab, 將輸入中的製表符替換成適當數目的空格,使空格充滿到

下乙個製表符終止位的地方。假設製表符終止位的位置是固定的,比如每隔b列就會出現乙個

製表符終止位。"應該作為變貴述是符號常量呢?

看了兩遍,按理解寫出了下面的**:

1 #include 2

3#define tabnum 445

intmain()620

}21else

222627}

2829 printf("

%s\n

", text);

3031

return0;

32 }

cc 編譯正常,在執行驗證時,發現直接用4個空格替換與輸入並不吻合,輸入時tab能根據實際輸入對齊

感覺中間補足的空格數應該有一定規律。於是,上網搜尋果然發現tab處理有玄機。比如tab長度是8,從最開始算起,輸入不足8個字元,此時按tab,系統會自動把游標跳到第9個字元,接下來的字元從此開始,如果此時再輸入9個字元,則系統會將游標定位到第25個字元處,其中的規律可以總結成:

pos = pos + 8 - (pos - 1) % 8

也就是說當游標在pos位置時,輸入tab,游標會跳轉至pos + 8 - (pos - 1) % 8的位置。

於是,改進後的**如下:

1 #include 2

3#define tabnum 845

intmain()625

}26else

if (c == '\n'

)2732else

333839}

4041 printf("

%s\n

", text);

4243

return0;

44 }

執行驗證:

perfect!符合預期。

最後的總結就是,習題並不只是純粹用來為書加量增厚的,還是很有實操的必要!重要的話就說這一遍啦。

c程式語言 第二版 新版 習題1 20

編寫程式detab,將輸入中的製表符替換成適當數目的空格,使空格充滿到下乙個製表符 終止位的地方.假設製表符終止位的位置是固定的,比如每隔n列就會出現乙個製表符 終止位 include define stopbit 8 製表符終止位 define maxline 1001 允許的輸入行的最大長度 i...

C程式設計習題

給乙個不多於5位的正整數,要求 1 求出他是幾位 2 分別輸出每一位數字 3 逆序輸出各位數字 解答 1 將輸入的數去整除10,記錄這個數整除10最終結果為0的花費的次數,即為這個數的位數。如下 int count long long n 題目雖然要求為5位但保證安全使用long long型 ret...

C語言程式設計習題

答 算術運算就是指加減乘除和整數的模運算 即取餘數運算 關係運算指比較,有大於,大於等於,小於,小於等於,等於,不等於六種運算 邏輯運算指兩個條件進行運算,有邏輯與去,邏輯或,邏輯非三種。答 在c語言中邏輯常量只有兩個,即0和1,用來表示兩個對立的邏輯狀態,其中0表示假,1表示真。對於系統來說,判斷...