《高質量程式設計指南——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;// |
5.Page 76:示例4-13上半部分最後一行“delete a[];”要右移4格對齊;下半部分最後一行左移4格對齊;
6.Page 81:示例4-20中的註釋/*第三條。。。*/修改為/*第二條。。。*/;
7.Page 83:在“最後我們舉一個數值計算。。。。”一行前面插入“例5:數值計算。”;
8.Page 88:[建議5-1]中的示例程式碼:MAX、MAX和PI應該垂直對齊,後面的註釋也垂直對齊;
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,
©.m_pRingBuffer[copy.m_popPos],
copy.m_count);
}
else {
::memmove(m_pRingBuffer,
©.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 Head的private部分以m_打頭的部分要垂直對齊;
23.Page 207:
1.Page 7:倒數第13行,“囉裡囉唆”印刷有問題;
2.Page 15: 表1-2有些許印刷問題;
3.Page 56:“4.3 型別轉換”上面一段末尾應從“關於複合。。。”處另起一行;
4.Page 58: 示例4-6,程式碼用下列程式碼替換:
1012 - C語言程式設計教程(第三版)課後習題6.2 時間限制:1秒 記憶體限制:128兆 題目描述 輸入一行字元,分別統計出其中英文字母、空格、數字和其他字元的個數。 輸入 一行字元 輸出 統計值
樣例輸入
aklsjflj123 sadf918u324 asdf91u32oa
1011 - C語言程式設計教程(第三版)課後習題6.1 時間限制:1秒 記憶體限制:128兆 題目描述 輸入兩個正整數m和n,求其最大公約數和最小公倍數。 輸入 兩個整數 輸出 最大公約數,最小公倍數 樣例輸入
5 7
樣例輸出
1 35 最大公約數求法我是用的是輾轉相除法進行
1010 - C語言程式設計教程(第三版)課後習題5.8 時間限制:1秒 記憶體限制:128兆 題目描述 企業發放的獎金根據利潤提成。利潤低於或等於100000元的,獎金可提10%; 利潤高於100000元,低於200000元(100000<I≤200000)時,低於100000元的部
1047 - C語言程式設計教程(第三版)課後習題10.5
時間限制:1秒 記憶體限制:128兆
題目描述 有n人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來的第幾號的那位。
輸入 初始人數n 輸出 最後一人的初始編號 樣例輸入
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
時間限制:1秒 記憶體限制:128兆 題目描述 給出一百分制成績,要求輸出成績等級‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上為A 80-89分為B 70-79分為C 60-69分為D 60分以下為E
輸入 一個整數0
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
時間限制:1秒 記憶體限制:128兆 描述 有三個整數a b c,由鍵盤輸入,輸出其中的最大的數。 輸入 一行陣列,分別為a b c 輸出 a b c其中最大的數 樣例輸入 10 20 30 樣例輸出 30
提示 max ?
1005 - C語言程式設計教程(第三版)課後習題4.9
時間限制:1秒 記憶體限制:128兆
題目描述 輸入一個華氏溫度,要求輸出攝氏溫度。公式為 c=5(F-32)/9 輸出要求有文字說明,取位2小數。 輸入 一個華氏溫度,浮點數 輸出 攝氏溫度,浮點兩位小數 樣例輸入
-4
1003 - C語言程式設計教程(第三版)課後習題3.7
時間限制:1秒
記憶體限制:128兆
提交
題目描述 要將"China"譯成密碼,譯碼規律是:用原來字母后面的第4個字母代替原來的字母.例如,字母"A"後面第4個字母是"E".“E"代替"A”。因此,“China"應譯
1002 - C語言程式設計教程(第三版)課後習題1.6
時間限制:1秒
記憶體限制:128兆
題目描述
編寫一個程式,輸入a、b、c三個值,輸出其中最大值。
輸入 一行陣列,分別為a b c 輸出 a b c其中最大的數 樣例輸入
10 20 30
樣例輸出
1014 - C語言程式設計教程(第三版)課後習題6.4 時間限制:1秒 記憶體限制:128兆 題目描述 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一個數字。 輸入 n 輸出 和 樣例輸入
5
樣例輸出
153
題求一個數的階乘和,本身並不是一個難想的思路,
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 時間限制:1秒 記憶體限制:128兆 題目描述 求Sn=2+22+222+…+22…222(有n個2)之值,其中a是一個數字。 例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。 輸入 n 輸出 Sn 樣例輸入
1. 寫兩個函式,分別求兩個整數的最大公約數和最小公倍數,用主函式呼叫這兩個函式,並輸出結果
//兩個函式求最大公約數和最小公倍數
#include <iostream>
using namespace std;
int main()
{
int a,b,c,d;
int max
1. 表示式和表示式語句的區別:
主要參考自:https://segmentfault.com/q/1010000005850429/a-1020000005856050
表示式+分號=表示式語句,一般用表示式語句時只關心它的作用,而不關心它的值,如put("hello"),只關心該語
1.1 C語言的歷史
1.1.1 起源
C語言是美國貝爾實驗室的 Dennis Ritchie、Ken Thompson 等人為開發 UNIX 作業系統而於 1972 年設計的一種計算機程式語言。
2.3 註釋
每一個程式都應該包含識別資訊,即程式名、編寫日期、作者、程式的用途以及其他相關資訊。C語言把這類資訊放在註釋(comment)中。
符號 /* 標記註釋的開始,而符號 */ 則標記註釋
2.5 讀入輸入
為了獲取輸入,就要用到 scanf 函式。它是C函式庫中與 printf 相對應的函式。scanf 中的字母 f 和 printf 中的字母 f 含義相同,都是表示“格式化”的意思 相關推薦
《高質量程式設計指南——C++/C》(第三版)最新修訂
1012 - C語言程式設計教程(第三版)課後習題6.2
1011 - C語言程式設計教程(第三版)課後習題6.1
1010 - C語言程式設計教程(第三版)課後習題5.8
1047 - C語言程式設計教程(第三版)課後習題10.5
1022 - C語言程式設計教程(第三版)課後習題7.1
1008 - C語言程式設計教程(第三版)課後習題5.6
1007 - C語言程式設計教程(第三版)課後習題5.5
1006 - C語言程式設計教程(第三版)課後習題5.4
1005 - C語言程式設計教程(第三版)課後習題4.9
1003 - C語言程式設計教程(第三版)課後習題3.7
1002 - C語言程式設計教程(第三版)課後習題1.6
1014 - C語言程式設計教程(第三版)課後習題6.4
1015 - C語言程式設計教程(第三版)課後習題6.5
1013 - C語言程式設計教程(第三版)課後習題6.3
【C++習題筆記】譚浩強C++程式設計(第三版)第四章
【C++習題筆記】譚浩強C++程式設計(第三版)第三章
《C語言程式設計:現代方法(第2版)(K.N.King 著)》學習筆記一:C語言概述
《C語言程式設計:現代方法(第2版)(K.N.King 著)》學習筆記三:C語言基本概念(2)
《C語言程式設計:現代方法(第2版)(K.N.King 著)》學習筆記四:C語言基本概念(3)