牛客網錯題整理–C++篇3
-
下面對一維數組 a 進行正确的初始化的語句是():
A. int a[10] = (0, 0, 0, 0, 0); //注:這裡是小括号
B. int a[10] = {};
C. int a[10] = {10};
D. int a[10] = {10, 0, -1};
正确答案: BCD 我的答案: C
錯誤原因: 沒看到是多選,不好意思。。。雖然明知道BCD都是對的
[捂臉哭]
逐項分析:
A. 數組初始化沒有用小括号的,全是大括号。
B. 預設初始化,所有元素為0。
C. 隻初始化第一個資料為10,其他為0。
D. 初始化三個資料,其他為0。
- 下列程式輸入:2空格0,其運作結果是():
#include<iostream>
using namespace std;
int main()
{
int i=0,j=0,n;
cin>>n;
for(;n!=0; )
{
j++;
cin>>n;
}
if(n=0) i++;
cout<<i <<" "<<j<<endl;
return 0;
}
A. 1 0
B. 0 0
C. 1 1
D. 0 1
正确答案: D 我的答案: C
錯誤原因:别問,問就是沒看到 if 裡面的條件,仔細看。
n = 0 不是 n == 0。剩下的不解釋了。
分析: 首先擷取輸入,n == 2,進入循環,j++後j值為1,n 再次擷取輸入為0,跳出循環。來到 if 判斷,注意是n = 0而不是 n == 0, n = 0指派語句傳回值為0,不執行 i++,是以最後輸出為0,1。
- 以下代碼共調用多少次拷貝構造函數:
Widget f(Widget u)
{
Widget v(u);
Widget w=v;
return w;
}
main(){
Widget x;
Widget y=f(f(x));
}
A. 1
B. 3
C. 5
D. 7
正确答案: D 我的答案: C
錯誤原因: 回想一下這道題,發現是我在考慮f(x)的拷貝構造函數的時候沒有考慮傳入參數本身會調用一次拷貝構造函數,是以導緻最後計算少了兩次。
分析: 本題一共調用七次拷貝構造函數,分别是:
(f1表示裡層f(x),f2表示外層f(x))
- x -> f1_u (傳入參數u)
- f1_u -> f1_v(u) (構造函數v)
- f1_v -> f1_w (拷貝構造w)
- f1_w -> f2_u (f2傳入參數u)
- f2_u -> f2_v(u) (構造函數v)
- f2_v -> f2_w (拷貝構造w)
- f2_w -> y (拷貝構造Weight類型y)
4.有程式段:
t=0;
while (printf("*")) {t++; if (t<3) break;}
下面描述正确的是()。
A. 其中循環控制表達式與0等價
B. 其中循環控制表達式與’0’等價
C. 其中循環控制表達式是不合法的
D. 以上說法都不對
正确答案: B 我的答案: A
錯誤原因:别問了别問了,丢人。。(‘0’ 和 '\0’能記混,我是fw。)
分析: 主要需要搞清楚printf(" * ")的傳回值,printf( " * ")函數調用的傳回值是字元串中字元的個數,即為1。而循環控制表達式為0的話則正好與題意相反,而’0’的ascii碼為48,不為0,是以相當于恒為1,與題意相符。
-
對于int *pa[5]; 的描述,正确的是?( ) :
A. pa是一個具有5個元素的指針數組,每個元素是一個int類型的指針;
B. pa[5]表示某個數組的第5個元素的值;
C. pa是一個指向數組的指針,所指向的數組是5個int類型的元素;
D. pa是一個指向某個數組中第5個元素的指針,該元素是int類型的變量;
正确答案: A 我的答案: C
錯誤原因: 在做這道題的時候我對于指針數組和指向數組的指針是混淆的。。是的,整個混淆。
分析: 要考慮到*和[ ]的優先級,[ ]的優先級大于 *,是以[ ]會先和pa結合成為數組,是以該表達式表達的是指針數組,每個元素都是指針,如果是C選項應該改為 int (*pa) [5],此時表達的是指向五個整型元素數組的指針。