第一章 答案解析
填空題
-
.cpp 知識點:C++ 源文件的命名規范
-
main () 知識點:C++ 程序的入口函數
-
// ,/* */ 知識點:C++ 注釋的兩種形式
-
int a; 知識點:變量聲明的語法
-
cout 知識點:輸出語句的關鍵字
判斷題
-
√ 知識點:C++ 是大小寫敏感的語言
-
× 知識點:C++ 程序必須有一個 main 函數
-
× 知識點:注釋不會被編譯,不影響程序運行速度
-
√ 知識點:變量使用前必須聲明
-
√ 知識點:輸出語句中可以使用轉義字符如 \n
選擇題
-
C 知識點:標識符的命名規則(以字母或下劃線開頭,由字母、數字、下劃線組成)
-
A 知識點:cout 輸出語句的正確用法
-
A 知識點:變量聲明可以放在作用域內的任何位置
-
D 知識點:abc 不是 C++ 關鍵字
-
C 知識點:C++ 語句以分號結束
編程題
1.
\#include \<iostream> ? ? using namespace std; ? ? int main() { ? ?   ? cout << "Hello, C++!" << endl; ? ?   ? return 0; ? ? }
知識點:基本的輸入輸出語句和程序結構
1.
\#include \<iostream> ? ? using namespace std; ? ? int main() { ? ?   ? int a = 10, b = 20; ? ?   ? cout << a + b << endl; ? ?   ? return 0; ? ? }
知識點:變量聲明、賦值和算術運算
1.
\#include \<iostream> ? ? using namespace std; ? ? int main() { ? ?   ? char c; ? ?   ? cin >> c; ? ?   ? cout << "字符:" << c << ",ASCII碼值:" << int(c) << endl; ? ?   ? return 0; ? ? }
知識點:字符型數據的輸入輸出及 ASCII 碼值的獲取
1.
\#include \<iostream> ? ? using namespace std; ? ? int main() { ? ?   ? int sum = 0; ? ?   ? for (int i = 1; i <= 100; i++) { ? ?   ? ? ? sum += i; ? ?   ? } ? ?   ? cout << sum << endl; ? ?   ? return 0; ? ? }
知識點:for 循環的使用和累加運算
1.
\#include \<iostream> ? ? using namespace std; ? ? int main() { ? ?   ? double x, y; ? ?   ? cin >> x >> y; ? ?   ? double avg = (x + y) / 2; ? ?   ? cout << avg << endl; ? ?   ? return 0; ? ? }
知識點:浮點型數據的輸入輸出和平均值計算
第一章 知識點和重點考點
知識點
-
C++ 程序的基本結構,包括頭文件、命名空間、main 函數
-
變量的聲明和初始化,數據類型(整型、字符型等)
-
輸入輸出語句(cout 和 cin)的使用
-
注釋的兩種形式
-
標識符的命名規則
重點考點
-
main 函數的作用和程序執行流程
-
變量聲明的語法和作用域
-
輸入輸出語句的正確格式
-
標識符的合法性判斷
第二章 答案解析
一、填空題
- 布爾型
知識點:C++ 基本數據類型包括?int
(整型)、float
/double
(浮點型)、char
(字符型)、bool
(布爾型)。 - short
知識點:短整型關鍵字為?short
,通常占用 2 字節內存。 - ASCII 碼值
知識點:字符型數據在內存中存儲的是對應字符的 ASCII 編碼(整數)。 - 使變量值加 1
知識點:++
?是自增運算符,分前置(++a
)和后置(a++
),均使變量值加 1。 - bool
知識點:關系運算符(如?>
、==
)的結果為布爾類型(true
?或?false
)。
二、判斷題
- √
知識點:C++ 支持整型和浮點型混合運算,低精度類型會自動轉換為高精度類型。 - ×
知識點:取模運算符?%
?的操作數必須為整型,浮點型會導致編譯錯誤。 - √
知識點:算術運算符(如?+
、*
)優先級高于賦值運算符(如?=
、+=
)。 - √
知識點:邏輯運算符優先級:&&
(與)高于?||
(或),如?a && b || c
?等價于?(a && b) || c
。 - √
知識點:++
?只能作用于變量(如?a++
),不能用于常量或表達式(如?5++
、(a+b)++
)。
三、選擇題
- B. short int
知識點:常見數據類型內存占用(32 位系統):short
(2 字節)、int
(4 字節)、long
(4 字節)、float
(4 字節),最小為?short int
。 - A. +=
知識點:+=
?是復合賦值運算符(等價于?a = a + b
),==
(等于)、!=
(不等于)是關系運算符,>>
?是輸入流運算符或右移運算符。 - B. 2
知識點:整數除法會舍去小數部分,5 / 2
?結果為 2(整型運算),若需浮點結果需強制轉換(如?5.0 / 2
)。 - D. 以上說法都正確
知識點:- A:自動轉換由編譯器完成(如?
int
?轉?double
); - B:強制轉換可能丟失精度(如?
int a = (int)3.9;
?結果為 3); - C:字符型可自動轉為整型(如?
char c = 'A'; int i = c;
,i
?的值為 65)。
- A:自動轉換由編譯器完成(如?
- A. a = a + b
知識點:復合賦值運算符?a += b
?等價于?a = a + b
,其他選項不符合運算邏輯。
四、編程題
-
判斷奇數偶數
cpp
?#include <iostream> using namespace std; int main() { int n; cin >> n; if (n % 2 == 0) cout << n << " 是偶數" << endl; else cout << n << " 是奇數" << endl; return 0; }
知識點:通過?
n % 2
?判斷余數,0 為偶數,1 為奇數。 -
輸出三個整數的最大值
cpp
?#include <iostream> using namespace std; int main() { int a, b, c; cin >> a >> b >> c; int max_val = a; if (b > max_val) max_val = b; if (c > max_val) max_val = c; cout << "最大值:" << max_val << endl; return 0; }
知識點:逐次比較,先假設第一個數最大,再與后續數比較更新最大值。
-
計算實數的平方和立方
cpp
?#include <iostream> using namespace std; int main() { double x; cin >> x; double square = x * x; double cube = x * x * x; cout << x << " 的平方:" << square << ",立方:" << cube << endl; return 0; }
知識點:直接進行算術運算,注意使用浮點型變量存儲結果。
-
判斷是否為大寫字母
cpp
?#include <iostream> using namespace std; int main() { char c; cin >> c; if (c >= 'A' && c <= 'Z') cout << c << " 是大寫字母" << endl; else cout << c << " 不是大寫字母" << endl; return 0; }
知識點:大寫字母的 ASCII 范圍是?
'A'
(65)到?'Z'
(90),通過字符比較判斷。 -
交換兩個整數的值
cpp
?#include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; cout << "交換前:a=" << a << ", b=" << b << endl; int temp = a; // 使用臨時變量交換 a = b; b = temp; cout << "交換后:a=" << a << ", b=" << b << endl; return 0; }
知識點:借助臨時變量實現值交換,避免直接賦值導致數據丟失。
第二章 知識點和重點考點
知識點
- 基本數據類型:整型(
int
、short
、long
)、浮點型(float
、double
)、字符型(char
)、布爾型(bool
)的定義及內存占用。 - 運算符分類:
- 算術運算符(
+
、-
、*
、/
、%
、++
、--
); - 關系運算符(
>
、<
、==
、!=
); - 邏輯運算符(
&&
、||
、!
); - 賦值運算符(
=
、+=
、-=
?等復合賦值)。
- 算術運算符(
- 數據類型轉換:自動轉換(隱式)和強制轉換(顯式)的規則,如字符型與整型的轉換、整型與浮點型的混合運算。
重點考點
- 運算符優先級與結合性:如?
++
?的優先級高于算術運算符,賦值運算符為右結合性。 - 取模運算的限制:操作數必須為整型,負數取模結果符號與被除數一致(如?
-5 % 3
?結果為?-2
)。 - 自增 / 自減運算符的副作用:前置運算(
++a
)先修改值再使用,后置運算(a++
)先使用再修改值。 - 布爾表達式的短路特性:
a && b
?中若?a
?為?false
,則?b
?不再計算;a || b
?中若?a
?為?true
,則?b
?不再計算。
第五章 答案解析
填空題
-
一維數組 知識點:二維數組的邏輯結構
-
int a [3][4]; 知識點:二維數組的聲明語法
-
行下標,列下標 知識點:二維數組元素的下標含義
-
行,列 知識點:二維數組的初始化方式
-
行優先 知識點:二維數組在內存中的存儲順序
判斷題
-
√ 知識點:二維數組的行數和列數必須是常量
-
√ 知識點:通過兩個下標訪問二維數組元素
-
√ 知識點:未初始化的元素默認初始化為 0(整型數組)
-
√ 知識點:二維數組名是指向第一行的指針
-
√ 知識點:二維數組作為函數參數時需指定列數
選擇題
-
A 知識點:二維數組初始化時可以省略行數,但不能省略列數
-
D 知識點:二維數組元素個數 = 行數 × 列數
-
B 知識點:二維數組元素的訪問方式
-
A 知識點:二維數組的每一行是一個一維數組
-
B 知識點:遍歷二維數組需要嵌套循環
編程題
1.
\#include \<iostream> ? ? using namespace std; ? ? int main() { ? ?   ? int a\[3]\[3]; ? ?   ? for (int i = 0; i < 3; i++) { ? ?   ? ? ? for (int j = 0; j < 3; j++) { ? ?   ? ? ? ? ? cin >> a\[i]\[j]; ? ?   ? ? ? } ? ?   ? } ? ?   ? for (int i = 0; i < 3; i++) { ? ?   ? ? ? for (int j = 0; j < 3; j++) { ? ?   ? ? ? ? ? cout << a\[i]\[j] << " "; ? ?   ? ? ? } ? ?   ? ? ? cout << endl; ? ?   ? } ? ?   ? return 0; ? ? }
知識點:二維數組的輸入輸出和嵌套循環的使用
1.
\#include \<iostream> ? ? using namespace std; ? ? int main() { ? ?   ? int a\[3]\[4], sum = 0; ? ?   ? for (int i = 0; i < 3; i++) { ? ?   ? ? ? for (int j = 0; j < 4; j++) { ? ?   ? ? ? ? ? cin >> a\[i]\[j]; ? ?   ? ? ? ? ? sum += a\[i]\[j]; ? ?   ? ? ? } ? ?   ? } ? ?   ? cout << sum << endl; ? ?   ? return 0; ? ? }
知識點:二維數組元素的累加
1.
\#include \<iostream> ? ? using namespace std; ? ? int main() { ? ?   ? int a\[3]\[3], sum = 0; ? ?   ? for (int i = 0; i < 3; i++) { ? ?   ? ? ? sum += a\[i]\[i]; ? ?   ? } ? ?   ? cout << sum << endl; ? ?   ? return 0; ? ? }
知識點:二維數組主對角線元素的訪問
1.
\#include \<iostream> ? ? using namespace std; ? ? int main() { ? ?   ? int a\[2]\[3] = {{1, 2, 3}, {4, 5, 6}}; ? ?   ? int b\[3]\[2]; ? ?   ? for (int i = 0; i < 2; i++) { ? ?   ? ? ? for (int j = 0; j < 3; j++) { ? ?   ? ? ? ? ? b\[j]\[i] = a\[i]\[j]; ? ?   ? ? ? } ? ?   ? } ? ?   ? for (int i = 0; i < 3; i++) { ? ?   ? ? ? for (int j = 0; j < 2; j++) { ? ?   ? ? ? ? ? cout << b\[i]\[j] << " "; ? ?   ? ? ? } ? ?   ? ? ? cout << endl; ? ?   ? } ? ?   ? return 0; ? ? }
知識點:二維數組的轉置操作
1.
\#include \<iostream> ? ? using namespace std; ? ? int main() { ? ?   ? int a\[3]\[3], b\[3]\[3], c\[3]\[3]; ? ?   ? for (int i = 0; i < 3; i++) { ? ?   ? ? ? for (int j = 0; j < 3; j++) { ? ?   ? ? ? ? ? cin >> a\[i]\[j]; ? ?   ? ? ? } ? ?   ? } ? ?   ? for (int i = 0; i < 3; i++) { ? ?   ? ? ? for (int j = 0; j < 3; j++) { ? ?   ? ? ? ? ? cin >> b\[i]\[j]; ? ?   ? ? ? ? ? c\[i]\[j] = a\[i]\[j] + b\[i]\[j]; ? ?   ? ? ? } ? ?   ? } ? ?   ? for (int i = 0; i < 3; i++) { ? ?   ? ? ? for (int j = 0; j < 3; j++) { ? ?   ? ? ? ? ? cout << c\[i]\[j] << " "; ? ?   ? ? ? } ? ?   ? ? ? cout << endl; ? ?   ? } ? ?   ? return 0; ? ? }
知識點:二維數組的加法運算和嵌套循環的應用
第五章 知識點和重點考點
知識點
-
二維數組的聲明和初始化方式(按行、按列初始化)
-
二維數組元素的訪問方式(行下標和列下標)
-
二維數組在內存中的存儲順序(行優先)
-
嵌套循環在二維數組操作中的應用(遍歷、求和、轉置等)
重點考點
-
二維數組的聲明語法,特別是行數可省略但列數必須明確
-
二維數組元素的正確訪問,避免下標越界
-
嵌套循環的邏輯和執行順序
-
二維數組常見操作(求和、轉置、矩陣運算等)的算法實現
第六章 窮舉法 答案解析
填空題
- 解(或 “情況”)
知識點:窮舉法的核心是枚舉所有可能解。 - 枚舉范圍、驗證條件
知識點:明確范圍和條件是窮舉法的基礎。 - 循環
知識點:循環結構(for/while)是實現窮舉的主要方式。 - m^n
知識點:多變量窮舉的總次數計算。 - 縮小范圍、提前終止
知識點:優化窮舉法的常用策略。
判斷題
- √
知識點:窮舉法適用于解空間有限的問題。 - ×
知識點:窮舉法可通過優化減少枚舉次數。 - √
知識點:雞兔同籠是典型的窮舉法應用場景。 - √
知識點:枚舉順序不影響結果,但可能影響效率。 - √
知識點:窮舉法常用于簡單問題的暴力求解。
選擇題
- C
知識點:斐波那契數列第 100 項需遞推,不適合窮舉。 - D
知識點:遞歸替代循環不影響枚舉次數,非優化策略。 - C
知識點:偶數的判斷條件是能被 2 整除。 - B
知識點:時間復雜度由枚舉次數決定。 - D
知識點:窮舉法邏輯簡單,易于實現。
編程題
cpp
運行
#include <iostream>
using namespace std;
int main() { for (int i = 100; i <= 999; i++) { int a = i / 100, b = i / 10 % 10, c = i % 10; if (a*a*a + b*b*b + c*c*c == i) { cout << i << " "; } } return 0;
}
知識點:枚舉 100-999,拆分各位后驗證條件。
cpp
運行
#include <iostream>
using namespace std;
int main() { for (int x = 0; x <= 20; x++) { for (int y = 0; y <= 33; y++) { int z = 100 - x - y; if (5*x + 3*y + z/3 == 100 && z % 3 == 0) { cout << "雞翁:" << x << " 雞母:" << y << " 雞雛:" << z << endl; } } } return 0;
}
知識點:雙重循環枚舉雞翁和雞母數量,驗證總錢數和總數量。
cpp
運行
#include <iostream>
using namespace std;
int main() { int n, is_prime = 1; cin >> n; if (n <= 1) is_prime = 0; else { for (int i = 2; i*i <= n; i++) { // 優化:只需枚舉到√n if (n % i == 0) { is_prime = 0; break; } } } cout << (is_prime ? "是素數" : "不是素數") << endl; return 0;
}
知識點:枚舉 2 到√n 的因數,判斷是否為素數。
cpp
運行
#include <iostream>
using namespace std;
int main() { int count = 0; for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 3; j++) { for (int k = 1; k <= 3; k++) { if (i != j && j != k && i != k) { cout << i << j << k << " "; count++; } } } } cout << "\n總共有" << count << "個組合" << endl; return 0;
}
知識點:三重循環枚舉所有排列,去重后輸出。
cpp
運行
#include <iostream>
using namespace std;
int main() { for (int i = 10; i <= 99; i++) { int a = i / 10, b = i % 10; if (a + b == 8 && a - b == 2) { cout << "密碼可能是:" << i << endl; } } return 0;
}
知識點:枚舉所有兩位數,驗證十位和個位的和與差。
第六章 知識點和重點考點
知識點
- 窮舉法的定義與適用場景(解空間有限、可枚舉)。
- 枚舉范圍的確定(如百錢買百雞中雞翁數量≤20)。
- 循環結構的嵌套使用(雙重循環、三重循環)。
- 窮舉法的優化技巧(縮小范圍、提前終止、數學推導減少變量)。
重點考點
- 設計合理的枚舉范圍,避免無效計算。
- 多重循環的邏輯嵌套與去重處理。
- 素數判斷、組合生成等經典窮舉問題的實現。
第七章 數位拆分 答案解析
填空題
- 數位(或 “位”)
知識點:數位拆分針對個位、十位、百位等位置。 - n % 10、n / 10 % 10
知識點:取余得低位,整除后取余得高位。 - 位數
知識點:確定位數可通過循環除以 10 統計。 - %、/
知識點:取余和整除是數位拆分的核心運算。 - 絕對值
知識點:負數需先轉為正數再拆分。
判斷題
- ×
知識點:可先處理符號,再拆分絕對值部分。 - √
知識點:1234 拆分后為 1、2、3、4。 - ×
知識點:n % 10 從低位開始提取,如 1234%10=4(個位)。 - √
知識點:回文數判斷需比較對稱數位是否相等。 - √
知識點:如拆分 123 為 1、2、3,可重組為 321。
選擇題
- A
知識點:n/10=56,56%10=6(十位數字)。 - B
知識點:n/10 去掉最后一位,如 567/10=56。 - C
知識點:求和無需排序,直接累加各位數字。 - C
知識點:回文數的定義是左右對稱。 - A
知識點:4321 拆分后逆序為 1、2、3、4,組成 1234。
編程題
cpp
運行
#include <iostream>
using namespace std;
int main() { int n, sum = 0; cin >> n; while (n > 0) { sum += n % 10; n = n / 10; } cout << "各位數字之和:" << sum << endl; return 0;
}
知識點:循環取余累加,直到 n 為 0。
cpp
運行
#include <iostream>
using namespace std;
int main() { int n, temp, reverse = 0; cin >> n; temp = n; while (temp > 0) { reverse = reverse * 10 + temp % 10; temp = temp / 10; } cout << (n == reverse ? "是回文數" : "不是回文數") << endl; return 0;
}
知識點:生成逆序數后與原數比較,判斷是否回文。
cpp
運行
#include <iostream>
using namespace std;
int main() { int n, reverse = 0; cin >> n; while (n > 0) { reverse = reverse * 10 + n % 10; n = n / 10; } cout << "逆序數:" << reverse << endl; return 0;
}
知識點:通過取余和乘 10 操作生成逆序數。
cpp
運行
#include <iostream>
using namespace std;
int main() { int n, d, count = 0; cin >> n >> d; while (n > 0) { if (n % 10 == d) count++; n = n / 10; } cout << d << "出現的次數:" << count << endl; return 0;
}
知識點:遍歷各位數字,統計目標數字出現次數。
cpp
運行
#include <iostream>
using namespace std;
int main() { int n, a, b, c; cin >> n; a = n / 100; b = n / 10 % 10; c = n % 10; int max1 = max(a, max(b, c)); int min1 = min(a, min(b, c)); int mid = a + b + c - max1 - min1; cout << "最大重組數:" << max1 * 100 + mid * 10 + min1 << endl; return 0;
}
知識點:拆分后排序,重新組合成最大數(降序排列)。
第七章 知識點和重點考點
知識點
- 數位拆分的核心運算:
n % 10
(取個位)、n / 10
(去個位)。 - 數字的逆序生成方法:通過循環取余構建逆序數。
- 回文數的判斷邏輯:逆序數與原數相等。
- 數位統計與重組:利用數組或變量存儲各位數字后處理。