1 外部函數(shù)是指________的函數(shù),它可以在_________中被調用。
【分析】當存儲類型選用“extern”時,所定義的函數(shù)稱為外部函數(shù)。外部函數(shù)可以在其他編譯單位中調用(需要對這個函數(shù)進行說明)。
【答案】存儲類型是“extern”的函數(shù)
所有對該函數(shù)進行說明過的編譯單位
2 假定在同一個編譯單位中,函數(shù)a()調用了函數(shù)b(),則對函數(shù)b()不需要說明的情況有下列兩種:_____________和________________。
【分析】教材中有明確答案(p116)。
【答案】b()函數(shù)的定義地點在a()函數(shù)定義地點之前
b()函數(shù)的數(shù)據(jù)類型是int或char
3 在函數(shù)間傳遞數(shù)據(jù)的四種方式中,不能把被調函數(shù)的數(shù)據(jù)帶回到主調函數(shù)的是()
①值傳遞 ②地址傳遞 ③返回值傳遞 ④全局外部變量
【分析】值傳遞方式是利用形式參數(shù)和實際參數(shù)結合來進行數(shù)據(jù)傳遞的一種方式,它是在調用函數(shù)時,將實際參數(shù)的值傳遞給形式參數(shù),函授調用結束后,并不將形式參數(shù)的當前值傳回實際參數(shù)。
【答案】①
4 如果函數(shù)定義時,形式參數(shù)是整型變量,則調用該函數(shù)時,實際參數(shù)不可以是()
①整型常量 ②字符型變量
③指向整型變量的指針型變量 ④整型表達式
【分析】當形式參數(shù)是變量時,實際參數(shù)可以是數(shù)據(jù)類型相同的表達式(常量、變量是表達式的特例),因此,備選答案①④顯然是正確的,即不符合題意。而字符型數(shù)據(jù)可以看成整型數(shù)據(jù),所以字符型變量可以當作整型變量,因此備選答案②也是正確的,即不符合題意。只有備選答案③是錯誤的,因為指針型變量不是整型變量,本題答案應該選取③。
請讀者注意,如果使用“*指針型變量”側是正確的。
【答案】③
5 若函數(shù)a()調用了函數(shù)b(),而函數(shù)b()又調用了函數(shù)a(),這樣的調用稱為_________________調用。
【分析】一般來說,只要是函數(shù)調用了自己,則稱這樣的函數(shù)調用為遞歸調用。如果函數(shù)f()調用了函數(shù)f(),我們稱這樣的遞歸調用為“直接遞歸調用”;如果函數(shù)f()調用了函數(shù)g(),而函數(shù)g()又調用了函數(shù)f(),這樣的遞歸調用稱為“間接遞歸調用”。
【答案】遞歸(或間接遞歸)
6 下列表達式中,不能判斷字符型變量ch中的字符是英文字母(是則表達式值為非0、否則表達式值為0)的表達式是()
①ch>='A'&&ch<='Z'::ch>='a'&&h<='z'
② toupper(ch)>='A'&&toupper(ch)<='Z'
③ isalpha( ch)
④ !(isdigit(ch))
【分析】備選答案①中的邏輯表達式的含義是:當ch中的字符是大寫字母或者小寫字母時,結果為1,否則結果為0,該答案不符合題意。備選答案②中使用了系統(tǒng)函數(shù)toupper(),該函數(shù)功能是將參數(shù)對應的字符換成大寫字母(如果參數(shù)對應的字符不是英文字母則不改變),答案中的邏輯表達式含義是:轉換成大寫后如果落在'A'到‘Z'之間則值為1,否則值為0。該答案也不符合題意。備選答案③中使用了系統(tǒng)函數(shù)isalpha(),該函數(shù)功能是判斷參數(shù)對應的字符是否是英文字母,是則返回非0;否則返回0。顯然該答案也不符合題意。只有備選答案④是符合題意的。分析這個答案中的表達式,其中用到了系統(tǒng)函數(shù)isdigit(),該函數(shù)的功能是判斷參數(shù)對應的字符是不是數(shù)字字符,是則返回非 0,否則返回 0,該答案中的表達式是“! isdigit(ch)”,即 ch中不是數(shù)字字符則返回1,否則返回0,因此,該表達式不能判斷ch中是否英文字母,所以本題答案應選④。
【答案】④
7 函數(shù)調用malloc(sizeof(long)* 2)的功能是申請____________個字節(jié)的內存;這批內存的首地址是____________________。
【分析】 系統(tǒng)池數(shù)malloc(形參)的功能是申請“形參”個字節(jié)的內存,函數(shù)的返回值就是這批內存的首地址。題目中的參數(shù)是“snzeof(long)*2”,sizeof(long)是長整型數(shù)據(jù)的字節(jié)數(shù),其值為 4。而函數(shù)malloc(sizeof(long)* 2)調用的參數(shù)是 sizeof(long)* 2,其值為 8。
【答案】 8
函數(shù)調用的返回值
8 下列函數(shù)定義中,正確的是()
①int f(int x,y) ② int *f(int x,int*y)
{return(y);} { return(y);}
③ int f( x,*y) ④ void f( int x;)
int x, int y; {return(x);}
{return;}
【分析】分析備選答案①:形式參數(shù)表不正確,兩個整型變量應該寫成 int x,int y。分析備選答案②:這是一個指針型函數(shù),函數(shù)返回值是指向整型數(shù)據(jù)的指針值,形式參數(shù)表也是正確的,在函數(shù)體中有帶返回值的返回語句,且返回值就是指向整型數(shù)據(jù)的指針變量值,該答案符合題意。分析備選答案③:形式參數(shù)表中的int *y是錯誤的,應該為int y;這樣形式參數(shù)說明中的 int y也是錯誤的,應該寫成 int *y;函數(shù)體中的返回語句也是錯誤的,因為這個函數(shù)是有返回值的函數(shù)。分析備選答案④:形式參數(shù)表中最后的“分號”不能有 ;函數(shù)體中的返回語句只能用“ return;”,因為該函數(shù)是無返回值的函數(shù)。
【答案】②
【分析】當存儲類型選用“extern”時,所定義的函數(shù)稱為外部函數(shù)。外部函數(shù)可以在其他編譯單位中調用(需要對這個函數(shù)進行說明)。
【答案】存儲類型是“extern”的函數(shù)
所有對該函數(shù)進行說明過的編譯單位
2 假定在同一個編譯單位中,函數(shù)a()調用了函數(shù)b(),則對函數(shù)b()不需要說明的情況有下列兩種:_____________和________________。
【分析】教材中有明確答案(p116)。
【答案】b()函數(shù)的定義地點在a()函數(shù)定義地點之前
b()函數(shù)的數(shù)據(jù)類型是int或char
3 在函數(shù)間傳遞數(shù)據(jù)的四種方式中,不能把被調函數(shù)的數(shù)據(jù)帶回到主調函數(shù)的是()
①值傳遞 ②地址傳遞 ③返回值傳遞 ④全局外部變量
【分析】值傳遞方式是利用形式參數(shù)和實際參數(shù)結合來進行數(shù)據(jù)傳遞的一種方式,它是在調用函數(shù)時,將實際參數(shù)的值傳遞給形式參數(shù),函授調用結束后,并不將形式參數(shù)的當前值傳回實際參數(shù)。
【答案】①
4 如果函數(shù)定義時,形式參數(shù)是整型變量,則調用該函數(shù)時,實際參數(shù)不可以是()
①整型常量 ②字符型變量
③指向整型變量的指針型變量 ④整型表達式
【分析】當形式參數(shù)是變量時,實際參數(shù)可以是數(shù)據(jù)類型相同的表達式(常量、變量是表達式的特例),因此,備選答案①④顯然是正確的,即不符合題意。而字符型數(shù)據(jù)可以看成整型數(shù)據(jù),所以字符型變量可以當作整型變量,因此備選答案②也是正確的,即不符合題意。只有備選答案③是錯誤的,因為指針型變量不是整型變量,本題答案應該選取③。
請讀者注意,如果使用“*指針型變量”側是正確的。
【答案】③
5 若函數(shù)a()調用了函數(shù)b(),而函數(shù)b()又調用了函數(shù)a(),這樣的調用稱為_________________調用。
【分析】一般來說,只要是函數(shù)調用了自己,則稱這樣的函數(shù)調用為遞歸調用。如果函數(shù)f()調用了函數(shù)f(),我們稱這樣的遞歸調用為“直接遞歸調用”;如果函數(shù)f()調用了函數(shù)g(),而函數(shù)g()又調用了函數(shù)f(),這樣的遞歸調用稱為“間接遞歸調用”。
【答案】遞歸(或間接遞歸)
6 下列表達式中,不能判斷字符型變量ch中的字符是英文字母(是則表達式值為非0、否則表達式值為0)的表達式是()
①ch>='A'&&ch<='Z'::ch>='a'&&h<='z'
② toupper(ch)>='A'&&toupper(ch)<='Z'
③ isalpha( ch)
④ !(isdigit(ch))
【分析】備選答案①中的邏輯表達式的含義是:當ch中的字符是大寫字母或者小寫字母時,結果為1,否則結果為0,該答案不符合題意。備選答案②中使用了系統(tǒng)函數(shù)toupper(),該函數(shù)功能是將參數(shù)對應的字符換成大寫字母(如果參數(shù)對應的字符不是英文字母則不改變),答案中的邏輯表達式含義是:轉換成大寫后如果落在'A'到‘Z'之間則值為1,否則值為0。該答案也不符合題意。備選答案③中使用了系統(tǒng)函數(shù)isalpha(),該函數(shù)功能是判斷參數(shù)對應的字符是否是英文字母,是則返回非0;否則返回0。顯然該答案也不符合題意。只有備選答案④是符合題意的。分析這個答案中的表達式,其中用到了系統(tǒng)函數(shù)isdigit(),該函數(shù)的功能是判斷參數(shù)對應的字符是不是數(shù)字字符,是則返回非 0,否則返回 0,該答案中的表達式是“! isdigit(ch)”,即 ch中不是數(shù)字字符則返回1,否則返回0,因此,該表達式不能判斷ch中是否英文字母,所以本題答案應選④。
【答案】④
7 函數(shù)調用malloc(sizeof(long)* 2)的功能是申請____________個字節(jié)的內存;這批內存的首地址是____________________。
【分析】 系統(tǒng)池數(shù)malloc(形參)的功能是申請“形參”個字節(jié)的內存,函數(shù)的返回值就是這批內存的首地址。題目中的參數(shù)是“snzeof(long)*2”,sizeof(long)是長整型數(shù)據(jù)的字節(jié)數(shù),其值為 4。而函數(shù)malloc(sizeof(long)* 2)調用的參數(shù)是 sizeof(long)* 2,其值為 8。
【答案】 8
函數(shù)調用的返回值
8 下列函數(shù)定義中,正確的是()
①int f(int x,y) ② int *f(int x,int*y)
{return(y);} { return(y);}
③ int f( x,*y) ④ void f( int x;)
int x, int y; {return(x);}
{return;}
【分析】分析備選答案①:形式參數(shù)表不正確,兩個整型變量應該寫成 int x,int y。分析備選答案②:這是一個指針型函數(shù),函數(shù)返回值是指向整型數(shù)據(jù)的指針值,形式參數(shù)表也是正確的,在函數(shù)體中有帶返回值的返回語句,且返回值就是指向整型數(shù)據(jù)的指針變量值,該答案符合題意。分析備選答案③:形式參數(shù)表中的int *y是錯誤的,應該為int y;這樣形式參數(shù)說明中的 int y也是錯誤的,應該寫成 int *y;函數(shù)體中的返回語句也是錯誤的,因為這個函數(shù)是有返回值的函數(shù)。分析備選答案④:形式參數(shù)表中最后的“分號”不能有 ;函數(shù)體中的返回語句只能用“ return;”,因為該函數(shù)是無返回值的函數(shù)。
【答案】②