1.若有以下陣列說明,則i=10;a[a[i]]元素數值是(C )。
int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};
A、10
B、9
C、6
D、5
先算a[a[i]]內層的a[i],由於i=10,因此a[i]即a[10].
a[10]對應下面陣列中的元素為9. 因此a[a[i]]即為a[9]
a[9]對應下面陣列中的元素為6. 因此a[9]即為6
2.若有說明:int a[][3]={{1,2,3},{4,5},{6,7}}; 則陣列a的第一維的大小為: ( B )
A、2
B、3
C、4
D、無確定值
5 7
D、3 6 9
二維陣列的一維大小,即指二維陣列的行數,在本題中,按行對二維陣列賦值,因此內層有幾個大括號,陣列就有幾行
3.對二維陣列的正確定義是(C )
詳見教材P149~152,二維陣列的定義、初始化
型別符 陣列名 [常量表達式][常量表達式]
二維陣列可以看做是矩陣
型別符是指陣列中陣列元素的型別;陣列名要符合識別符號命名規則;第一個常量表達式是指陣列的行數;第二個常量表達式是指陣列的列數;常量表達式的值只能是整數,不可以是變數,而且從1開始計數。
一維陣列初始化時可以省略陣列長度
二維陣列初始化時可以省略行數,但不能省略列數
選項A,B,都省略了列數
選項D,不符合二維陣列定義的一般形式,行、列常量表達式應該放在不同的[]中
A、int a[ ][ ]={1,2,3,4,5,6};
B、int a[2] []={1,2,3,4,5,6};
C、int a[ ] [3]={1,2,3,4,5,6};
D、int a[2,3]={1,2,3,4,5,6};
4.已知int a[3][4];則對陣列元素引用正確的是__C___
A、a[2][4]
B、a[1,3]
C、a[2][0]
D、a(2)(1)
詳見教材P150,陣列元素的引用
陣列名[下標] [下標]
引用陣列元素時,[ ]中的下標為邏輯地址下標,只能為整數,可以為變數,且從0開始計數
第一個[下標]表示行邏輯地址下標,第二個[下標]表示列邏輯地址下標。
本題圖示詳見P149圖6.7
因此a的行邏輯地址範圍0~2;a的列邏輯地址範圍0~3;
選項A,列邏輯地址下標超過範圍
選項B,D,的引用形式不正確。
5.C語言中函式返回值的型別是由 A 決定的.
A、函式定義時指定的型別
B、 return語句中的表示式型別
C、 呼叫該函式時的實參的資料型別
D、形參的資料型別
6. 在C語言中,函式的資料型別是指(A )
A、 函式返回值的資料型別
B、 函式形參的資料型別
C、 呼叫該函式時的實參的資料型別
D、任意指定的資料型別
7.在函式呼叫時,以下說法正確的是( B )
A、函式呼叫後必須帶回返回值
B、實際引數和形式引數可以同名
C、函式間的資料傳遞不可以使用全域性變數
D、主調函式和被調函式總是在同一個檔案裡
8. 在C語言中,表示靜態儲存類別的關鍵字是: ( C )
A、 auto
B、 register
C、static
D、extern
9.未指定儲存類別的變數,其隱含的儲存類別為(A )。
A、auto
B、static
C、extern
D、register
10. 若有以下說明語句:
struct student
{ int num;
char name[ ];
float score;
}stu;
則下面的敘述不正確的是: (D )
A、 struct是結構體型別的關鍵字
B、 struct student 是使用者定義的結構體型別
C、 num, score都是結構體成員名
D、 stu是使用者定義的結構體型別名
11.若有以下說明語句:
struct date
{ int year;
int month;
int day;
}brithday;
則下面的敘述不正確的是__C___.
A、 struct是宣告結構體型別時用的關鍵字
B、 struct date 是使用者定義的結構體型別名
C、 brithday是使用者定義的結構體型別名
D、year,day 都是結構體成員名
12. 以下對結構變數stul中成員age的非法引用是 B
struct student
{ int age;
int num;
}stu1,*p;
p=&stu1;
A、
B、
C、 p->age
D、(*p)
13.設有如下定義:
struck sk
{ int a;
float b;
}data;
int *p;
若要使P指向data中的a域,正確的賦值語句是 C
A、 p=&a;
B、 p=datA、a;
C、p=&datA、a;
D、*p=datA、a;
14.設有以下說明語句:
typedef struct stu
{ int a;
float b;
} stutype;
則下面敘述中錯誤的是( D )。
A、struct是結構型別的關鍵字
B、struct stu是使用者定義的結構型別
C、a和b都是結構成員名
D、stutype是使用者定義的結構體變數名
15.語句int *p;說明了 C 。
A、p是指向一維陣列的指標
B、p是指向函式的指標,該函式返回一int型資料
C、p是指向int型資料的指標 // 指標的定義教材P223
D、p是函式名,該函式返回一指向int型資料的指標
16.下列不正確的定義是( A )。
A、int *p=&i,i;
B、int *p,i;
i,*p=&i;
D、int i,*p;
選項A先定義一個整型指標變數p,然後將變數i的地址賦給p。然而此時還未定義變數i因此編譯器無法獲得變數i的地址。(A與C對比,選項C先定義變數i,則在記憶體中為i分配空間,因此i在記憶體空間的地址就可以確定了;然後再定義p,此時可以為p賦i的地址,C正確)
17. 若有說明:int n=2,*p=&n,*q=p,則以下非法的賦值語句是: ( D )
A、p=q
B、*p=*q
C、n=*q
D、p=n
p,q同為整型指標變數,二者裡面僅能存放整型變數的`地址。
選項A,q中為地址,因此可將此地址賦給p
選項B,*p表示p所指向物件n的內容,即一個整數;*q表示q所指向物件的內容,由於在定義q時為其初始化,將p中n的地址給q,因此p中存放n的地址,*q表示q所指向物件n的內容.因此*p=*q 相當於 n=n;
選項C,n=*q 等價於n=n;
選項D,p中只能存放地址,不能將n中的整數值賦給p
18.有語句:int a[10],;則 B 是對指標變數p的正確定義和初始化。
A、int p=*a;
B、int *p=a;
C、int p=&a;
D、int *p=&a;
選項A,a是陣列名,不是指標變數名,因此不可用*標註陣列名a
選項C,a是陣列名,陣列名就是地址,無需再用地址符號。而且在定義指標變數p時,應在變數名前加*,標明p是指標變數
選項D,a是陣列名,陣列名就是地址,無需再用地址符號。
19.若有說明語句“int a[5],*p=a;”,則對陣列元素的正確引用是( C )。
A、a[p]
B、p[a]
C、*(p+2)
D、p+2
首先定義一個整型陣列a,a的長度為5,然後定義一個指標變數p,並同時對p進行初始化,將陣列a的地址賦給p。因此此時p中存放的陣列a的首地址,即陣列中第一個元素a[0]的地址。
對於陣列元素下標的引用(詳見p144), 一般形式 陣列名[下標] 其中下標為邏輯地址下標,從0開始計數,方括號中的下標可以是變數,可以是表示式,但結果一定要是整數。
選項A,p中存放的是地址,不是整數,不能做陣列元素的下標
選項B,a是陣列名,陣列名就是地址,不是整數,不能做陣列元素的下標
選項C,(重點!!!詳見p231~234) p+2表示指向同一陣列中的下兩個元素的地址,當前p指向a[0],則p+2表示a[2]的地址,因此*(p+2)表示a[2]的內容
20.下列資料中屬於“字串常量”的是( A )。
A、“a”
B、{ABC}
C、‘abc