C語言筆試題中的「坑」

2021-08-26 08:54:56 字數 1566 閱讀 6362

其實這話說的不對,應該說不只是c語言,恐怕是面試題總會有那麼一些坑等著我們踩,今天,就羅列了一些看似簡單,卻很容易中招的面試題:

1、以下程式的執行結果為。

#inlcude 

#define n 2     

#define m n+1    

#define num (m+1)*m/2   

main()   

a、5b、

6c、8d、

9 嘿嘿,當初一看到這道題,我心裡那個樂的啊,毫不猶豫就選了b,結果,嗯嗯,可想而知,悲劇了,根本就不是這麼回事好嗎?

其實,這裡的#define用了巨集定義,#define預處理巨集定義命令,它的具體作用,就是方便程式段的定義和修改。簡單點說,就是定義之後,以後遇見它後值就不會再發生改變。

例如,上面這道題的n,m,只要在後面遇到m,n直接替換成後面定義的值就好,所以說n=2,m=n+1=2+1,在這裡,千萬不要畫蛇添足把m直接等於3了,是什麼樣就讓它保持什麼樣,所以num=(m+1)*m/2=(2+1+1)*2+1/2,最後的結果是8。

2、以下程式的輸出結果是。

#define

m(x,y,z) x*y+z

main()

a、19   b、17      c、15         

d、12 

這道題和上面那道題其實是一種題型,那就廢話不多說了,m(a+b,b+c,c+a) = a+b*b+c+c+a = 12,這種題的話,我們只需要注意一點,那就是它是怎麼定義的我就怎麼使用。

3、已知:char s[4] = "cba"; char *p; 執行語句序列p=s;printf("%c\n",*p+1);後,其輸出為。 a

、字元』

c』   

b、字元』

b』    

c、字元』

a』      

d、字元』d』

這個題開始我是有些不理解的,我想的是p=s之後,p和s就指向了同乙個位址,而printf("%c\n",*p+1);表示的是輸出*p+1對應的字元,那麼*p,也就是陣列s的首位址,即s[0],就是字元'c'。而我想當然的認為它加1後就應該指向s[1],當然這個想法是不正確的。其實,到這裡和s這個陣列已經沒太大關係了,*p+1相當於'c'+1,它表示的是字元c的下乙個ascii碼字元,也就是小寫字母d,所以,最後的答案是d。

4、執行下列程式段後,變數a,b,c的值分別是。

intx=10,y=9;

inta,b,c;

a=(--x==y++)?--x:++y;

b=x++;

c=y; a

、a=9,b=9,c=9   b、a=9,b=10,c=9  c、a=1,b=11,c=10  

d、a=8,b=8,c=10

(1)首先是三目運算子的判斷,--x是先自減,再運算,所以,此時x=10-1=9,y++是先運算,再自增,y和現在的x都是等於9,滿足(--x==y++)條件,所以a = --x,即a = 9-1 =8;

(2)其次,b = x++;上一步已經算出x的值為8,這裡是先運算再自增,所以b=8;

(3)最後,c = y,y再第一步自增後已經變為10,所以c = 10,最後的答案是d。

C語言筆試題中的那些坑(一)

三.define中的那些坑 首先我們來說一下,strlen這個函式,相信大家都知道,不就是乙個求字串長度的函式嗎?看看這道題,你是否會掉裡面 char x abcdefg char y 則正確的敘述為 a 陣列x和陣列y等價 b 陣列x和陣列y的長度相同 c 陣列x的長度大於陣列y的長度 d 陣列x...

筆試題中的必勝策略

比如,題目是這樣的 現在有兩堆石子,小今與小條玩遊戲,2個人都足夠聰明,兩個人規定 每次每人只能從其中一堆中取走1個或2個或3個石子,最後將石子全部取完的人勝利.現在兩堆石子的個數為8和9,請問如何安排才能讓小今必勝?答案是 讓小今先取。其實這裡是有規律可循的,可歸結為 取餘制勝 詳解如下 一 取餘...

JS筆試題中的型別轉換

分享一道筆試題 let x valueof console.log x 20 console.log x 30 複製 答案是false true 為什麼?讓我們回到紅寶書中,對於相等描述符是這樣表述的 是相等操作符,如果兩個運算元相等,則返回true,而不相等操作符由嘆號後更等於號 表示,如果兩個運...