C語言習題講解-第五講-循環編程練習等
- 1. 關于一維數組描述不正確的是:( )
- 2. 關于一維數組初始化,下面哪個定義是錯誤的?( )
- 3. 定義了一維 int 型數組 a[10] 后,下面錯誤的引用是:( )
- 4. 若定義int a[2][3]={1,2,3,4,5,6}; 則值為 4 的數組元素是( )
- 5. 以下能對二維數組 a 進行正確初始化的語句是:( )
- 6. 以下說法正確的是( )
- 7. 下面代碼的結果是:( )
- 8. 下面代碼的結果是:( )
- 9. 在 C語言 中,以下哪個選項描述了變長數組特點?
1. 關于一維數組描述不正確的是:( )
關于一維數組描述不正確的是:( )
A. 數組的下標是從 0 開始的
B. 數組在內存中是連續存放的
C. 數組名表示首元素的地址
D. 隨著數組下標的由小到大,地址由高到低
答案:D
解析:
A:正確,C語言 規定,數組的下標是從 0 開始的
B:正確,數組的空間是一段連續的內存空間
C:正確,數組名既可以表示數組的地址,也可以表示數組首元素的地址,兩個在數值上是一樣的,但是含義不一樣。
注意:數組名只有在
sizeof
和&
后才代表整個數組,其它都表示首元素的地址
D:錯誤,這個要是系統而定,一般都是下標由小到大,地址由低到高
因此,選擇 D
2. 關于一維數組初始化,下面哪個定義是錯誤的?( )
關于一維數組初始化,下面哪個定義是錯誤的?( )
A. int arr[10] = {1,2,3,4,5,6};
B. int arr[] = {1,2,3,4,5,6};
C. int arr[] = (1,2,3,4,5,6);
D. int arr[10] = {0};
答案:C
解析:
A:正確,10 個 int 的一段連續空間,前 6 個位置被初始化為 1,2,3,4,5,6,其他位置為0
B:正確,數組中有6個空間,并被初始化為1,2,3,4,5,6
C:錯誤,數組的初始化不能使用 ()
,只能使用 {}
D:正確,10 個 int 類型的一段連續空間,每個位置都被初始化為 0
因此,選擇 C
3. 定義了一維 int 型數組 a[10] 后,下面錯誤的引用是:( )
定義了一維 int 型數組 a[10] 后,下面錯誤的引用是:( )
A. a[0] = 1;
B. a[0] = 5*2;
C. a[10] = 2;
D. a[1] = a[2] * a[0];
答案:C
解析:
數組是相同類型的一段連續的空間,下標是從0開始的,比如:int array[N]
下標的范圍為 [0,N) ,其中 N 位置不能存儲有效元素
A:正確,將 0 號位置設置為 1
B:正確,將 0 號位置設置為 10
C:錯誤,越界
D:正確,1 號位置初始化為 a[2] * a[0] 之后的結果
因此,選擇 C
4. 若定義int a[2][3]={1,2,3,4,5,6}; 則值為 4 的數組元素是( )
若定義int a[2][3]={1,2,3,4,5,6}; 則值為 4 的數組元素是( )
A. a[0][0]
B. a[1][0]
C. a[1][1]
D. a[2][1]
答案:B
解析:
int a[2][3] 表示 2 行 3 列的二維數組,根據其初始化知:
第 0 行即 a[0] 存儲 3 個元素: 1,2,3
第 1 行即 a[1] 存儲 3 個元素: 4,5,6
因此值為 4 的元素在第 1 行第 0 列
因此,選擇 B
5. 以下能對二維數組 a 進行正確初始化的語句是:( )
以下能對二維數組 a 進行正確初始化的語句是:( )
A. int a[2][]={{0,1,2},{3,4,5}};
B. int a[][3]={{0,1,2},{3,4,5}};
C. int a[2][4]={{0,1,2},{3,4},{5}};
D. int a[][3]={{0,2},{},{3,4,5}};
答案:B
解析:
對于二維數組 int array[M][N] , 說明如下:
-
M 和 N 都必須為常數,
-
M 代表數組有 M 行,N 代表每行中有 N 個元素
-
其中M可以省略,省略后必須給出初始化表達式,編譯器從初始化結果中推斷數組有多少行
-
N 一定不能省略,因為 N 省略了就不能確定一行有多少個元素,也不能確定數組有多少行
A:錯誤,參數上述說明
B:正確,參考上述說明
C:錯誤,數組有兩行,但是初始化給了三行
D:錯誤,初始化不允許 {0,2} 該種情況存在
因此,選擇 B
6. 以下說法正確的是( )
給出以下定義:
char acX[] = "abcdefg";
char acY[] = { 'a','b','c','d','e','f','g'};
以下說法正確的是( )
A. 數組acX和數組acY等價
B. 數組acX和數組acY的長度相同
C. sizeof(acX)>sizeof (acY)
D. strlen (acX)>strlen (acY)
答案:C
解析:
acX和acY都是字符數組,但是初始化表達式不同,acX和acY的區別如下:
acX:數組中總共有8個元素,分別是:‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘\0’
acY:數組中總共有7個元素,分別是:‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’
sizeof 這里求的是數組大小,數組大小等于有效元素個數*每個元素的大小。sizeof(acX) = 8,sizeof(acY) = 7
strlen 求的是字符串長度,從首元素開始計算,遇見 ‘\0’ 停止,由于 acY 數組沒有 '\0‘ ,所以 strlen(acY) 的結果是個隨機值
因此,選擇 C
7. 下面代碼的結果是:( )
下面代碼的結果是:( )
#include <stdio.h>
int main()
{char str[] = "hello bit";printf("%d %d\n", sizeof(str), strlen(str));return 0;
}
A. 10 9
B. 9 9
C. 10 10
D. 9 10
答案:A
解析:
str 字符數組使用 “hello bit” 初始化,最終也會將 ‘\0’ 放置到數組中,因此數組中總共有 10 個元素
sizeof(str):獲取數組的總大小,10 個元素,每個元素占 1 個字節,因此總共是 10 個字節
strlen(str): 獲取字符串中有效字符的個數,不算 ‘\0’ ,因此總共 9 個有效字符
故上述 printf 會分別打印:10 9
因此,選擇 A
8. 下面代碼的結果是:( )
下面代碼的結果是:( )
#include <stdio.h>
int main()
{int arr[] = {1,2,(3,4),5};printf("%d\n", sizeof(arr));return 0;
}
A. 4
B. 16
C. 20
D. 5
答案:B
解析:
對于 int arr[] = {1,2,(3,4),5} 數組,里面總共有 4 個元素,(3,4) 為逗號表達式,取后者,因此數組中元素分別為:1,2,4,5
而 sizeof(arr) 求的是整個數組所占空間的大小,即:4sizeof(int)=44=16
因此,選擇 B
9. 在 C語言 中,以下哪個選項描述了變長數組特點?
在 C語言 中,以下哪個選項描述了變長數組特點?
A. 變長數組的大小在編譯時確定,不能改變。
B. 變長數組的大小可能在運行時確定,比如使用變量來指定數組大小,一旦確定大小后,它的大小是固定的,無法改變。
C. 一旦確定大小后,它的大小是固定的,無法改變
D. 變長數組只能用于存儲字符類型的數據。
答案:C
解析:
A 選項錯誤:編譯時無法確定,編譯時候編譯器不知道 n 是什么值,n 的值要等到程序運行起來后,用戶輸入之后 n 的值確定了,才能確
定數組的大小
B 選項:說法不嚴謹,一定是在運行時確定大小的,而不是可能
C 選項正確
D 選項錯誤:存儲什么類型數據,看定義時候給數組名前放什么類型,比如int a[n]就是存放int類型 short a[n]就是存在short類型