學習筆記大綱?
一、預習部分:數組基礎?
(一)核心知識點?
- 數組的創建:掌握一維數組的聲明方式,如int arr[5];(創建一個包含 5 個整數的數組)。重點在于理解數組長度需為常量,且在聲明時確定。?
- 數組的初始化:學會為數組賦值,例如int arr[] = {1, 2, 3};,可省略數組長度,編譯器根據初始化值自動確定。?
- 數組元素的訪問:通過索引訪問數組元素,索引從 0 開始,如arr[1]表示訪問數組arr的第二個元素。?
(二)重點考點?
- 數組聲明時長度的正確設定。?
- 數組初始化的不同方式及適用場景。?
- 數組元素索引的正確使用。?
(三)難點易錯點?
- 數組索引越界問題,如訪問arr[5](數組長度為 5 時,最大索引為 4)。?
- 錯誤地將變量作為數組長度進行聲明,例如int n = 5; int arr[n];(C++ 中這種寫法在部分編譯器不支持)。?
(四)預習練習題?
1. 填空題?
(1) 聲明一個包含 10 個浮點數的數組,正確寫法是______。?
(2) 初始化一個數組arr,包含元素 3、5、7,寫法為______。?
(3) 若int arr[] = {1, 2, 3, 4, 5},訪問數組中第 4 個元素的表達式是______。?
2. 選擇題?
(1) 以下數組聲明正確的是( )?
A. int arr;?
B. int arr [ ];?
C. int n = 10; int arr [n];?
D. int arr [10];?
(2) 若int arr[] = {1, 2, 3},則數組arr的長度為( )?
A. 1?
B. 2?
C. 3?
D. 不確定?
(3) 訪問數組int arr[5]的最后一個元素,正確的是( )?
A. arr [5]?
B. arr [4]?
C. arr [6]?
D. arr [-1]?
3. 判斷題?
(1) 數組索引可以從 1 開始。( )?
(2) 聲明數組時,長度必須在編譯時確定。( )?
(3) 初始化數組時,必須指定數組長度。( )?
4. 編程題?
(1) 聲明并初始化一個包含 5 個整數的數組,然后輸出數組中的所有元素。?
(2) 創建一個數組,存儲 5 個學生的成績,計算并輸出這些成績的平均值。?
(3) 編寫程序,交換數組中第一個元素和最后一個元素的值,并輸出交換后的數組。?
(4) 聲明一個數組,接收用戶輸入的 10 個整數,找出其中的最大值并輸出。?
(5) 初始化一個數組,包含 10 個隨機整數,統計數組中偶數的個數并輸出。?
(6) 編寫程序,判斷數組中是否存在某個特定的整數(用戶輸入),若存在則輸出其索引,否則輸出 - 1。?
(7) 創建一個數組,存儲一周 7 天的溫度,找出溫度最高的一天并輸出是第幾天。?
(8) 聲明一個數組,將數組中的元素逆序存儲(例如原數組為 {1, 2, 3},逆序后為 {3, 2, 1}),并輸出逆序后的數組。?
(9) 初始化一個數組,包含 8 個字符,判斷這些字符組成的字符串是否為回文串(正讀和反讀都一樣),并輸出判斷結果。?
(10) 編寫程序,創建一個數組,接收用戶輸入的 8 個整數,將數組中所有奇數移到數組的前面,偶數移到數組的后面,并輸出調整后的數組。?
二、復習部分:循環與判斷語句?
(一)核心知識點?
- 累加器公式:?
- 初始化累加器變量,如int sum = 0;。?
- 在循環中執行累加操作,如sum = sum + i;(i為循環變量)。?
- 循環結束后,sum即為累加結果。?
- 循環語句:?
- for 循環:掌握其語法結構for (初始化表達式; 條件表達式; 更新表達式) { 循環體; },常用于已知循環次數的場景。重點是理解三個表達式的作用及執行順序。?
- while 循環:語法為while (條件表達式) { 循環體; },條件為真時執行循環體。?
- 判斷語句:?
- if - else if - else:用于多條件判斷,如判斷奇數和偶數。?
- switch - case:適用于多個固定值的判斷,如根據輸入數字判斷是否上編程課。?
(二)重點考點?
- 累加器的正確使用及在循環中的位置。?
- for 循環和 while 循環的條件判斷與循環體執行邏輯。?
- if - else if - else 和 switch - case 語句的適用場景及語法規則。?
(三)難點易錯點?
- 循環條件設置不當導致死循環或循環次數錯誤。?
- 在 switch - case 語句中忘記使用break,導致穿透執行。?
- 累加器初始化位置錯誤,或在錯誤的循環中使用累加器。?
(四)復習練習題?
1. 填空題?
(1) for 循環中,若要計算 1 到 100 的和,初始化表達式為int i = 1;,條件表達式為______,更新表達式為______。?
(2) 在 if 語句中,判斷一個數num為偶數的條件表達式是______。?
(3) switch 語句中,每個 case 分支后通常需要添加______語句,以防止穿透執行。?
2. 選擇題?
(1) 以下 for 循環的循環次數是( )?
?
for (int i = 0; i < 10; i += 2) {?
// 循環體?
}?
?
A. 5?
B. 10?
C. 20?
D. 無限次?
(2) 若要判斷一個數是否在 1 到 100 之間,以下 if 語句正確的是( )?
A. if (num > 1 && num < 100) {... }?
B. if (num >= 1 || num <= 100) {... }?
C. if (num >= 1 && num <= 100) {... }?
D. if (num > 1 || num < 100) {... }?
(3) 在 switch - case 語句中,若沒有匹配的 case,執行( )?
A. 第一個 case 分支?
B. 最后一個 case 分支?
C. default 分支(如果存在)?
D. 不執行任何分支?
3. 判斷題?
(1) while 循環中,只要條件表達式為真,循環體就會一直執行。( )?
(2) 在 for 循環中,初始化表達式只能初始化一個變量。( )?
(3) if - else if - else 語句中,最多只能有一個 else if 分支。( )?
4. 編程題?
(1) 使用 for 循環計算 1 到 200 中所有能被 3 整除的數的和。?
(2) 輸入一個整數,使用 while 循環輸出 1 到該整數的所有偶數。?
(3) 編寫程序,使用 if - else if - else 語句判斷一個年份是否為閏年(閏年的條件:能被 4 整除但不能被 100 整除,或者能被 400 整除)。?
(4) 使用 switch - case 語句,根據用戶輸入的 1 - 7 的數字,輸出對應的星期幾(如輸入 1,輸出 “星期一”)。?
(5) 計算 1 到 1000 中,能被 6 和 7 整除的數的和,并輸出這些數字(用空格分開),最后輸出數字的個數。?
(6) 輸入一個整數,判斷它是正數、負數還是零,使用 if - else 語句實現,并輸出判斷結果。?
(7) 使用 for 循環輸出 1 到 100 之間所有能被 5 整除但不能被 3 整除的數。?
(8) 編寫程序,接收用戶輸入的 5 個整數,使用 switch - case 語句對這 5 個數進行排序(簡單選擇排序,通過多次比較和交換實現),并輸出排序后的結果。?
(9) 利用 while 循環,計算用戶輸入的一組數字(以 - 1 作為結束標志)的平均值,并輸出結果。?
(10) 編寫程序,判斷一個字符串(用戶輸入)中是否包含特定字符(用戶輸入),使用 for 循環遍歷字符串,若包含則輸出該字符在字符串中的位置,否則輸出 “未找到”。
1. 填空題
(1)?float arr[10];
解析:聲明數組需指定類型(float
)、數組名(arr
)和元素個數(10
),方括號內為常量表達式。
(2)?int arr[] = {3, 5, 7};
解析:初始化時若提供全部元素值,可省略數組大小,編譯器自動推斷長度為 3,元素類型為整型(int
)。
(3)?arr[3]
解析:C++ 數組下標從 0 開始,第 4 個元素對應下標 3,值為 4。
2. 選擇題
(1)?D. int arr [10];
解析:
- A 錯誤:未指定數組大小。
- B 錯誤:聲明數組時必須指定大小(初始化時可省略)。
- C 錯誤:C++ 不支持用變量聲明數組大小(需為常量表達式)。
(2)?C. 3
解析:初始化列表中有 3 個元素,數組長度為 3。
(3)?B. arr [4]
解析:數組int arr[5]
的下標范圍為 0~4,最后一個元素為arr[4]
。
3. 判斷題
(1)?×
解析:C++ 數組索引必須從 0 開始,不能從 1 開始。
(2)?√
解析:靜態數組的長度需在編譯時確定(動態數組需用new
或vector
)。
(3)?×
解析:初始化時若提供全部元素值,可省略數組長度(如int arr[] = {1,2,3};
)。
4. 編程題
(1) 聲明、初始化并輸出數組
cpp
運行
#include <iostream>
using namespace std;
int main() {int arr[5] = {1, 2, 3, 4, 5};for (int i = 0; i < 5; i++) {cout << arr[i] << " ";}return 0;
}
解析:用for
循環遍歷數組并輸出元素。
(2) 計算成績平均值
cpp
運行
#include <iostream>
using namespace std;
int main() {int scores[5] = {85, 90, 75, 80, 95};int sum = 0;for (int i = 0; i < 5; i++) {sum += scores[i];}double avg = (double)sum / 5;cout << "平均值:" << avg << endl;return 0;
}
解析:累加元素后除以 5,用double
避免整數除法截斷。
(3) 交換首尾元素
cpp
運行
#include <iostream>
using namespace std;
int main() {int arr[5] = {10, 20, 30, 40, 50};int temp = arr[0];arr[0] = arr[4];arr[4] = temp;for (int i = 0; i < 5; i++) {cout << arr[i] << " ";}return 0;
}
解析:用臨時變量temp
暫存首元素,避免直接賦值導致數據丟失。
(4) 找最大值
cpp
運行
#include <iostream>
using namespace std;
int main() {int arr[10];for (int i = 0; i < 10; i++) {cin >> arr[i];}int max_val = arr[0];for (int i = 1; i < 10; i++) {if (arr[i] > max_val) {max_val = arr[i];}}cout << "最大值:" << max_val << endl;return 0;
}
解析:先假設第一個元素為最大值,再遍歷更新max_val
。
(5) 統計偶數個數
cpp
運行
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {srand(time(0)); // 初始化隨機數種子int arr[10];int even_count = 0;for (int i = 0; i < 10; i++) {arr[i] = rand() % 100; // 生成0~99的隨機數if (arr[i] % 2 == 0) {even_count++;}}cout << "偶數個數:" << even_count << endl;return 0;
}
解析:用rand()%100
生成隨機數,arr[i]%2==0
判斷偶數。
(6) 查找特定整數
cpp
運行
#include <iostream>
using namespace std;
int main() {int arr[7] = {12, 34, 56, 78, 90, 11, 22};int target;cin >> target;int index = -1;for (int i = 0; i < 7; i++) {if (arr[i] == target) {index = i;break;}}cout << index << endl;return 0;
}
解析:遍歷數組,找到目標值后記錄下標并跳出循環。
(7) 找溫度最高的一天
cpp
運行
#include <iostream>
using namespace std;
int main() {int temp[7] = {25, 28, 26, 30, 27, 29, 28};int max_temp = temp[0];int max_day = 1;for (int i = 1; i < 7; i++) {if (temp[i] > max_temp) {max_temp = temp[i];max_day = i + 1; // 天數從1開始}}cout << "第" << max_day << "天溫度最高(" << max_temp << "℃)" << endl;return 0;
}
解析:遍歷數組時記錄最大值及其下標(轉換為天數需 + 1)。
(8) 數組逆序
cpp
運行
#include <iostream>
using namespace std;
int main() {int arr[3] = {1, 2, 3};for (int i = 0; i < 1; i++) { // 循環次數為長度/2int temp = arr[i];arr[i] = arr[2 - i];arr[2 - i] = temp;}for (int i = 0; i < 3; i++) {cout << arr[i] << " ";}return 0;
}
解析:交換首尾對稱元素,循環次數為length/2
(3 個元素只需交換 1 次)。
(9) 判斷回文串
cpp
運行
#include <iostream>
using namespace std;
int main() {char str[8] = {'a', 'b', 'c', 'd', 'd', 'c', 'b', 'a'};bool is_palindrome = true;for (int i = 0; i < 4; i++) {if (str[i] != str[7 - i]) {is_palindrome = false;break;}}cout << (is_palindrome ? "是回文串" : "不是回文串") << endl;return 0;
}
解析:比較對稱位置的字符(如第 i 個與第 7-i 個),全部相等則為回文。
(10) 奇偶元素分區
cpp
運行
#include <iostream>
using namespace std;
int main() {int arr[8];for (int i = 0; i < 8; i++) {cin >> arr[i];}int temp[8], odd_idx = 0, even_idx = 0;// 先存奇數for (int i = 0; i < 8; i++) {if (arr[i] % 2 != 0) {temp[odd_idx++] = arr[i];}}// 再存偶數for (int i = 0; i < 8; i++) {if (arr[i] % 2 == 0) {temp[odd_idx++] = arr[i];}}// 復制回原數組并輸出for (int i = 0; i < 8; i++) {arr[i] = temp[i];cout << arr[i] << " ";}return 0;
}
解析:用臨時數組先存奇數,再存偶數,最后復制回原數組。