2021.01.20
1.在下列選項中,(d)不能交換變數a和b的值。
a.t=b; b=a; a=t;
b.a=a+b; b=a-b; a=a–b;
c.t=a; a=b; b=t;
d.a=b; b=a;
解析:
a=a+b; b=a-b; a=a–b; // 這種方式考慮溢位
a ^= b; b ^= a; a ^= b;
/*不需要考慮溢位 a ^= b, 此時 a 中記錄了a和b兩個數中,各個二進位制位的異同情況,1表示不同,0表示相同。已知b和各個二進位制位的異同情況a,則 b ^= a;可以求得a值,然後賦值給b,實現交換。*/
2.c語言中允許函式值型別預設定義,此時該函式值隱含的型別是int。(a)
a.正確
b.錯誤
解析:
c中:如果函式未指定返回值型別,則預設為int
c++中:如果乙個函式沒有返回值,返回值型別必須指定為void
3.break語句只能跳出switch選擇或迴圈語句的當前巢狀層次.是否正確?(a)
a.正確
b.錯誤
解析:
break:跳出該循壞,不再執行循壞
continue:跳出本次迴圈,繼續執行下一次迴圈
4.假設在乙個 32 位 little endian 的機器上執行下面的程式,結果是多少?(b)
#include int main()
a.1,2,3
b.1,0,2
c.1,3,2
d.3,2,1
解析:
①printf()是乙個庫函式,c,c++中函式的引數是從右往左入棧的;
②棧的生長方向是從高往低的
③小端模式是低位儲存在低位元組
④%d格式輸出的是4個位元組大小,而long long為8個位元組
所以,a=1,b=0,c=2
5.以下敘述中正確的是(b)
a.c語言的源程式不必通過編譯就可以直接執行
b.c語言中的每條可執行語句最終都將被轉換成二進位制的機器指令
c.c源程式經編譯形成的二進位制**可以直接執行
d.c語言中的函式不可以單獨進行編譯
2021.01.22
6.以下程式的輸出結果是(b)
int main(void)
,,,};
int i, s=0;
for (i=0;i<4;i++)
s+=aa[i][i];
printf ("%d\n」,s);
}
a.11
b.23
c.13
d.20
解析:
程式輸出的是四行四列陣列對角線之和:1 + 6 + 10+6=23
7.假定x的值為5,y的值為6,則表示式x++*--y的值為 (a)
a.25
b.30
c.36
d.42
解析:
按照運算優先順序和++a與a++的演算法
x++*--y表示式為5*(6-1)=25
8.下列程式的輸出是(d)
#define add(a,b) a+b
int main()
a.23
b.35
c.16
d.19
解析:
巨集替換
5*add(3,4)=5*3+4=19
9.下面說法正確的是(c)
signed char a=0xe0;
unsigned int b=a;
unsigned char c=a;
a.(a>0 )&&(b>0)為真
b.c==a 為真
c.b的16進製為0xffffffe0
d.都不對
解析:
signed char a = 0xe0, 由於計算機儲存的是補碼,轉換為數字就是 -32
unsigned int b=a; 這裡a是負值,先將其轉化為32位的補碼
補碼: 11111111 11111111 11111111 11100000
則 b的16進製制就是 0xffffffe0
10.以下能夠獲取c[1][3]值的是(a b c)
#includeint c[3][4];
int (*p)[4];
p=c;
a.*(*(p+1)+3)
b.*((int *)p+7)
c.*(p[1]+3)
d.*(p+1)+3
11.若有 int i=10,j=2;則執行完 i*=j+8;後?的值為28。請問這個說法是正確的嗎?(b)
a.正確
b.錯誤解析:
+ 優先順序比 *= 高
i*=j+8 可以表示成 i=i*(j+8)
12.假定int型別變數占用兩個位元組,其有定義:int x[10]=;則陣列x在記憶體中所佔位元組數是(d)
a.3
b.6
c.10
d.20解析:
int型別的變數要占用2個位元組,因為存放10個,所以要占用20
13.以下函式呼叫錯誤的是(d)
void func(int iarg = 0, char carg = 'a', string sarg = "hello", int *iparg = null);
a.func(1);
b.func(1,'h',"hehe",null);
c.func(1,'n',"hehe");
d.func(1,"nihao");14.c++是不是型別安全的?(b)
a.是
b.不是解析:
型別安全:參考:
型別之間可以進行強制轉換,表示型別不安全
15.在c++語言中,下面關於陣列的描述錯誤的是(c?)
a.陣列的名字就是指向該陣列第乙個元素的指標
b.長度為n的陣列,下標的範圍是0-n-1
c.陣列的大小必須在編譯時確定
d.陣列可通過值引數、位址指標、引用引數三種方式傳遞給函式
智力面試題專項
2021.01.20 1.在一次歌唱競賽中,每一名參賽選手都有評委投了優秀票。如果上述斷定為真,則以下哪項不可能為真?i.有的評委投了所有參賽選手優秀票。ii.有的評委沒有給任何參賽選手投優秀票。iii.有的參賽選手沒有得到一張優秀票。c a.只有i。b.只有ii。c.只有iii。d.只有i和ii。...
C語言面試題
基礎篇 1 區域性變數能否和全域性變數重名?可以2 如何引用乙個已經定義過的全域性變數?直接呼叫並初始化 3 全域性變數可不可以定義在可被多個.c檔案包含的標頭檔案中?為什麼?可以,6 堆和棧有什麼區別?7 什麼是預編譯,何時需要預編譯 8 c和c 中的struct有什麼不同?9 memset me...
C語言面試題
1.求某一年的某一天 includestruct sdate int main int i 0,nday dt.nday while i2 nday printf 這是 d年的第 d天 n dt.nyear,dt.nday return 0 將列印和演算法抽象成不同函式 includestruct ...