1. 程式人生 > >《高質量程式設計指南——C++/C》(第三版)最新修訂

《高質量程式設計指南——C++/C》(第三版)最新修訂

1.Page 7:倒數第13行,“囉裡囉唆”印刷有問題;

2.Page 15: 1-2有些許印刷問題;

3.Page 56:“4.3 型別轉換”上面一段末尾應從“關於複合。。。”處另起一行;

4.Page 58: 示例4-6,程式碼用下列程式碼替換:

class Base

{

private:

int m_a;

int m_b;

//

示例

Derived objD1;

Base objB1 = objD1;// 見圖4-3左圖

Derived *pD1 = &objD1;

};

class Derived : public Base

{

int m_c

};

Base *pB1 = pD1;//

見圖4-3右圖

5.Page 76:示例4-13上半部分最後一行“delete a[];”要右移4格對齊;下半部分最後一行左移4格對齊;

6.Page 81:示例4-20中的註釋/*第三條。。。*/修改為/*第二條。。。*/

7.Page 83:在“最後我們舉一個數值計算。。。。”一行前面插入“5數值計算。”;

8.Page 88[建議5-1]中的示例程式碼:MAXMAXPI應該垂直對齊,後面的註釋也垂直對齊;

9.Page 91:“C++程式”一行中:右邊的[方法二]和左邊的[方法二]要水平對齊,調整後後面的

[方法三][方法四]也要分別與左邊的[方法三][方法四]水平對齊;

10.Page 93:倒數第10行,將“定義和初始化每一個常量時,一次一個樣。”修改為“定義和初始化每一個常量一次。”;

11.Page 96: 示例6-1:將“T是形參”修改為“_T是形參”;

12.Page 107:示例6-8中,後面的註釋行要垂直對齊;

13.Page 122:示例7-1中,所有“cout <<。。。”行中的“:0x”要垂直對齊;

14.Page 144:示例8-5右半邊“char ch; ”一行要縮排4格垂直對齊;

15.Page 147:上方程式碼中最後一個“:8”中間插入一個空格;

16.Page 181[建議10-5]中,把“/t”修改為‘/t’;

17.Page 183: 示例10-6用下面的程式碼替換(主要是對齊問題):

/*

*函式頭註釋

*/

void Function(float x, float y, float z)

{

...

}

if (...)

{

...

while (...)

{

...

} // end of while

...

} // end of if

18.Page 193: 示例12-3中少寫了一句話,所以用下面的程式碼替換(紅色表示修改的地方):

typedefunsigned charBYTE;

template<unsigned int N/*容量(位元組數)*/>

class RingBuffer {

public:

typedef size_tsize_type;

typedef GenericLocker<CriticalSection>_BufferLocker;

RingBuffer() : m_pushPos(0), m_popPos(0), m_count(0) {

assert(N > 0);

m_pRingBuffer = new BYTE[N];

}

~RingBuffer() { delete []m_pRingBuffer; }

RingBuffer(const RingBuffer<N>& copy) : m_popPos(0) {

assert(N > 0);

m_pRingBuffer = new BYTE[N];

size_type rearLen = N - copy.m_popPos;

if (rearLen >= copy.m_count) {

::memmove(m_pRingBuffer,

&copy.m_pRingBuffer[copy.m_popPos],

copy.m_count);

}

else {

::memmove(m_pRingBuffer,

&copy.m_pRingBuffer[copy.m_popPos],

rearLen);

::memmove(m_pRingBuffer + rearLen,

copy.m_pRingBuffer, copy.m_count - rearLen);

}

m_pushPos = m_count = copy.m_count;

}

RingBuffer& operator=(const RingBuffer<N>& other) {

if (this != &other) {

_BufferLocker guard(m_mutex);

RingBuffer<N> temp(other);// invoke copy constructor

_Swap(temp);// this->_Swap();

}

return (*this);

}

bool is_full() const {

_BufferLocker guard(m_mutex);

return (m_count == N);

}

bool is_empty() const {

_BufferLocker guard(m_mutex);

return (m_count == 0);

}

size_type size() const {

_BufferLocker guard(m_mutex);

return m_count;

}

size_type capacity() const { return N; }

size_type push(const BYTE *data, size_type length) {

_BufferLocker guard(m_mutex);

assert(data != NULL);

if (length == 0 || length > (N - m_count))

return 0;

size_type rearLen = N - m_pushPos;// 尾部剩餘空間

if (length <= rearLen) {

::memmove(&m_pRingBuffer[m_pushPos], data, length);

m_pushPos += length;

m_pushPos %= N;// 調整新的push位置

}else{

::memmove(&m_pRingBuffer[m_pushPos], data, rearLen);

::memmove(m_pRingBuffer, data + rearLen, length - rearLen);

m_pushPos = length - rearLen;// 調整新的push位置

}

m_count += length;

return (length);

}

size_type pop(BYTE *buf, size_type length) {

_BufferLocker guard(m_mutex);

assert(buf != NULL);

if (length == 0 || length > m_count)

return 0;

size_type rearLen = N - m_popPos;// 尾部剩餘資料

if (length <= rearLen) {

::memmove(buf, &m_pRingBuffer[m_popPos], length);

m_popPos += length;

m_popPos %= N;// 調整新的pop位置

}else {

::memmove(buf, &m_pRingBuffer[m_popPos], rearLen);

::memmove(buf + rearLen, m_pRingBuffer, length - rearLen);

m_popPos = length - rearLen;// 調整新的pop位置

}

m_count -= length;

return (length);

}

void clear() {

_BufferLocker guard(m_mutex);

m_pushPos = 0, m_popPos= 0, m_count = 0;

}

private:

RingBuffer(const RingBuffer<N>&);

void operator=(const RingBuffer<N>&);

private:

BYTE*m_pRingBuffer;// buffer

size_typem_pushPos;// 新的push位置:pushPos=(popPos+count)% N

size_typem_popPos;// 新的pop位置

size_typem_count;// 有效位元組數

CriticalSectionm_mutex;

};

19.Page 196:示例12-6中,三個class所在行對齊有問題,後面兩個class行要左移4空格垂直對齊;

20.Page 199:圖12-1用下圖替換(原圖沒有使用斜體):

21.Page 200:示例12-11中,class Eye的“public:”所在行左移4格垂直對齊,同時void行向右縮排4格;同時正數第13行“。。。返回其中任意一個介面指標”修改為“。。。返回其中任意一個介面指標”;

22.Page 201:上方class Headprivate部分以m_打頭的部分要垂直對齊;

23.Page 207:

相關推薦

質量程式設計指南——C++/C最新修訂

1.Page 7:倒數第13行,“囉裡囉唆”印刷有問題; 2.Page 15: 表1-2有些許印刷問題; 3.Page 56:“4.3 型別轉換”上面一段末尾應從“關於複合。。。”處另起一行; 4.Page 58: 示例4-6,程式碼用下列程式碼替換:

1012 - C語言程式設計教程課後習題6.2

1012 - C語言程式設計教程(第三版)課後習題6.2 時間限制:1秒 記憶體限制:128兆 題目描述 輸入一行字元,分別統計出其中英文字母、空格、數字和其他字元的個數。 輸入 一行字元 輸出 統計值 樣例輸入 aklsjflj123 sadf918u324 asdf91u32oa

1011 - C語言程式設計教程課後習題6.1

1011 - C語言程式設計教程(第三版)課後習題6.1 時間限制:1秒 記憶體限制:128兆 題目描述 輸入兩個正整數m和n,求其最大公約數和最小公倍數。 輸入 兩個整數 輸出 最大公約數,最小公倍數 樣例輸入 5 7 樣例輸出 1 35 最大公約數求法我是用的是輾轉相除法進行

1010 - C語言程式設計教程課後習題5.8

1010 - C語言程式設計教程(第三版)課後習題5.8 時間限制:1秒 記憶體限制:128兆 題目描述 企業發放的獎金根據利潤提成。利潤低於或等於100000元的,獎金可提10%; 利潤高於100000元,低於200000元(100000<I≤200000)時,低於100000元的部

1047 - C語言程式設計教程課後習題10.5

1047 - C語言程式設計教程(第三版)課後習題10.5 時間限制:1秒 記憶體限制:128兆 題目描述 有n人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來的第幾號的那位。 輸入 初始人數n 輸出 最後一人的初始編號 樣例輸入

1022 - C語言程式設計教程課後習題7.1

1022 - C語言程式設計教程(第三版)課後習題7.1 時間限制:1秒 記憶體限制:128兆 題目描述 用篩法求之N內的素數。 輸入 N 輸出 0~N的素數 樣例輸入 100 樣例輸出 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

1008 - C語言程式設計教程課後習題5.6

1008 - C語言程式設計教程(第三版)課後習題5.6 時間限制:1秒 記憶體限制:128兆 題目描述 給出一百分制成績,要求輸出成績等級‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上為A 80-89分為B 70-79分為C 60-69分為D 60分以下為E 輸入 一個整數0

1007 - C語言程式設計教程課後習題5.5

007 - C語言程式設計教程(第三版)課後習題5.5 時間限制:1秒 記憶體限制:128兆 描述 有一個函式 y={ x x<1 | 2x-1 1<=x<10 \ 3x-11 x>=10 寫一段程式,輸入x,輸出y 輸入 一個數x 輸出 一個數y 樣例輸

1006 - C語言程式設計教程課後習題5.4

1006 - C語言程式設計教程(第三版)課後習題5.4 時間限制:1秒 記憶體限制:128兆 描述 有三個整數a b c,由鍵盤輸入,輸出其中的最大的數。 輸入 一行陣列,分別為a b c 輸出 a b c其中最大的數 樣例輸入 10 20 30 樣例輸出 30 提示 max ?

1005 - C語言程式設計教程課後習題4.9

1005 - C語言程式設計教程(第三版)課後習題4.9 時間限制:1秒 記憶體限制:128兆 題目描述 輸入一個華氏溫度,要求輸出攝氏溫度。公式為 c=5(F-32)/9 輸出要求有文字說明,取位2小數。 輸入 一個華氏溫度,浮點數 輸出 攝氏溫度,浮點兩位小數 樣例輸入 -4

1003 - C語言程式設計教程課後習題3.7

1003 - C語言程式設計教程(第三版)課後習題3.7 時間限制:1秒 記憶體限制:128兆 提交 題目描述 要將"China"譯成密碼,譯碼規律是:用原來字母后面的第4個字母代替原來的字母.例如,字母"A"後面第4個字母是"E".“E"代替"A”。因此,“China"應譯

1002 - C語言程式設計教程課後習題1.6

1002 - C語言程式設計教程(第三版)課後習題1.6 時間限制:1秒 記憶體限制:128兆 題目描述 編寫一個程式,輸入a、b、c三個值,輸出其中最大值。 輸入 一行陣列,分別為a b c 輸出 a b c其中最大的數 樣例輸入 10 20 30 樣例輸出

1014 - C語言程式設計教程課後習題6.4

1014 - C語言程式設計教程(第三版)課後習題6.4 時間限制:1秒 記憶體限制:128兆 題目描述 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一個數字。 輸入 n 輸出 和 樣例輸入 5 樣例輸出 153 題求一個數的階乘和,本身並不是一個難想的思路,

1015 - C語言程式設計教程課後習題6.5

1015 - C語言程式設計教程(第三版)課後習題6.5 時間限制:1秒 記憶體限制:128兆 題目描述 求以下三數的和,保留2位小數 1~a之和 1~b的平方和 1~c的倒數和 輸入 a b c 輸出 1+2+…+a + 1 ^ 2 + 2 ^ 2+…+b ^ 2 + 1/1+1/2+…+

1013 - C語言程式設計教程課後習題6.3

1013 - C語言程式設計教程(第三版)課後習題6.3 時間限制:1秒 記憶體限制:128兆 題目描述 求Sn=2+22+222+…+22…222(有n個2)之值,其中a是一個數字。 例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。 輸入 n 輸出 Sn 樣例輸入

C++習題筆記】譚浩強C++程式設計四章

1. 寫兩個函式,分別求兩個整數的最大公約數和最小公倍數,用主函式呼叫這兩個函式,並輸出結果 //兩個函式求最大公約數和最小公倍數 #include <iostream> using namespace std; int main() { int a,b,c,d; int max

C++習題筆記】譚浩強C++程式設計

1. 表示式和表示式語句的區別: 主要參考自:https://segmentfault.com/q/1010000005850429/a-1020000005856050 表示式+分號=表示式語句,一般用表示式語句時只關心它的作用,而不關心它的值,如put("hello"),只關心該語

C語言程式設計:現代方法2K.N.King 著》學習筆記一:C語言概述

1.1 C語言的歷史 1.1.1 起源 C語言是美國貝爾實驗室的 Dennis Ritchie、Ken Thompson 等人為開發 UNIX 作業系統而於 1972 年設計的一種計算機程式語言。

C語言程式設計:現代方法2K.N.King 著》學習筆記C語言基本概念2

2.3 註釋 每一個程式都應該包含識別資訊,即程式名、編寫日期、作者、程式的用途以及其他相關資訊。C語言把這類資訊放在註釋(comment)中。 符號 /* 標記註釋的開始,而符號 */ 則標記註釋

C語言程式設計:現代方法2K.N.King 著》學習筆記四:C語言基本概念3

2.5 讀入輸入 為了獲取輸入,就要用到 scanf 函式。它是C函式庫中與 printf 相對應的函式。scanf 中的字母 f 和 printf 中的字母 f 含義相同,都是表示“格式化”的意思