C語言面試題專項

2021-10-16 22:27:30 字數 4227 閱讀 5805

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 ...