碼農一定是最需要動手實操的行業之一。有一句話叫,好記性不如爛筆頭,牽強附會引申到這裡,變成看書百遍,不如碼字執行一遍。是不是有那麼一點味道?哈哈!
這幾天看的《c程式設計》,看完每個章節還是覺得沒有完全落實,於是老老實實動手把習題做一遍,算是對不踏實內心的乙個交待。仔細做下來才發現,習題其實並不是作者行文的簡單回顧總結,而是在此基礎上另有拔高和引申,如果你錯過了,就少學很多東西。廢話不多說,下面說一說1-20 detab這個小練習;
題目是這樣的:
編寫程式detab, 將輸入中的製表符替換成適當數目的空格,使空格充滿到看了兩遍,按理解寫出了下面的**:下乙個製表符終止位的地方。假設製表符終止位的位置是固定的,比如每隔b列就會出現乙個
製表符終止位。"應該作為變貴述是符號常量呢?
1 #include 2cc 編譯正常,在執行驗證時,發現直接用4個空格替換與輸入並不吻合,輸入時tab能根據實際輸入對齊3#define tabnum 445
intmain()620
}21else
222627}
2829 printf("
%s\n
", text);
3031
return0;
32 }
感覺中間補足的空格數應該有一定規律。於是,上網搜尋果然發現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表示真。對於系統來說,判斷...