目前分類:面試考題分享 (7)

瀏覽方式: 標題列表 簡短摘要

Q : 請問以下何者為不合法的變數名稱?

 1. _aB        2. AB        3. 2ab        4. A_B        5. Black        6.  Break

 

 

--------------------------------------------------------------------------------------------------------------

 

 

 

Ans: 3

(Note : 第六選項  "Break" 因為是大寫 B 與 "break"被視為兩個不同的變數

,故雖不建議使用,但依然被視為合法變數)

 

 

解析 : 

1. 變數名稱可為任何英文與數字的組合 (包含底線 __ )

2. "保留字" 不可為變數名稱 如: goto    break    case ....等等

 

以下是C語言的保留關鍵字:

char short int unsigned
long float double struct
union void enum signed
const volatile typedef auto
register static extern break
case continue default do
else for goto if
return switch while sizeof

 

(資料來源:維基百科-C語言)

 

C 發表在 痞客邦 留言(1) 人氣()

Q: 請寫出以下輸出值

#include <stdio.h>
#include <stdlib.h>    
#include <math.h>
    
int main ()
{
    char str[10]="hello!";
    int a = strlen(str);    
    int b = sizeof(str);
    
    printf("%d\n",a);
    printf("%d\n",b);
}

 

 

--------------------------------------------------------------------------------------------------------------

 

 

 

Ans: 6, 10

 

 

解析 : 

此題為必拿分的觀念題。以下為幾個必知道的觀念:

1.  strlen ()  只適用於 string的長度計算,並且不包含'\0' 結束符號 ( null character )

2. sizeof()  可用於 取得數值型別的位元組大小 如: sizeof (int)

                             , 計算此 data type 所佔的位元組大小 (4)

                        ,當然也可如上題用來計算此字串所佔的位元組大小  

                              (由 "    char str[10]" 可知此字串大小為10)

 

文章標籤

C 發表在 痞客邦 留言(0) 人氣()

第一題  : 請擷取出Input中的第七個bit值?

 

-------------------------------------------------------------------------------------------------------------

 

Ans :

此題題意簡單明瞭,解法也不複雜。

步驟一 : 加上一個Mask遮罩( & ),只保留欲取出的bit位置。

步驟二 : 向右shift (7-1) 位元,剩下的就是你要的答案。

 

 

 

 

第二題 : 請擷取出Input中的第N個bit值?

-------------------------------------------------------------------------------------------------------------

 

 

Ans : 此題為上題的延伸,只要仔細觀察一定可以看出規則出來。

Hint : 可用 pow (x, y )  = x^y 來快速算出次方。

 

文章標籤

C 發表在 痞客邦 留言(0) 人氣()

Q :   請寫出將會印出的值

 

 

 

-------------------------------------------------------------------------------------------------------------

 

 

Ans :

此題為簡單的送分題,sizeof函數回傳該變數所佔的byte數並印出,

不同的資料型態的size為基本觀念須熟記。

另外需注意本題的兩個陷阱

1.  計算字串陣列的size大小時,須連同"空白"與最後的"空字符"(Null character) 也一同加進去。

2.  sizeof( *p ) 所代表的是該指標所指向位置的資料型態,此題*p所指向的是char,所以也等於sizeof(char)

     (另外 sizeof (p) 代表的又是不同的意思,可自行寫code試看看結果)

 

 

故答案為

 

文章標籤

C 發表在 痞客邦 留言(0) 人氣()

Q :   請寫出將會印出的值

 

 

Ans :  

首先,*p = a 代表的是 pointer p 指向陣列a的記憶體位置,

而其值也就是該陣列的第一位元,所以此時 *p = 1 。

 

而之後的兩個運算式又可看成

*p++   += 100;

*++p   += 100;

 

++ 在後 優先權最低  先取值 +=100 再 指標後移。

++ 在前 優先權最高  先指標後移 再取值 +=100。

 

故答案為 

 

文章標籤

C 發表在 痞客邦 留言(0) 人氣()

此篇分享的是難度較高的 pointer 考題。

 

pointer類型的題目在C語言的面試考題中幾乎是必考!

而之所以會成為主管最愛考題原因有三:

1. 題目簡單明瞭,不會題意不清。

2. 鑑別度高,對於少寫程式的人來說相對陌生。

3. 變化性高,可隨意變換題目,不易重複。

 

以下為真實面試考題分享 :

 

題目

請寫出將會印出的兩行字串


答案

Ans: 此題須同時計算*p值與s字串,

第一行字串為 : 0113234

第二行字串為 : 0123456


解析

首先, *p = s 所代表的含意為 pointer p 指向字串s的第一個位址,

字串s第一個位址值為0,而接下來一連串的運算可分成四類:

*p++   =   *(p++) 先取值 後指標下移
*++p   =   *(++p) 先指標下移 後取值
++*p   =   ++(*p) 先值+1 後取值
(*p)++ 先取值 後值+1

 

雖然看似複雜,但仔細觀察還是可看出規則,

*p = 取值

  p = 取指標位址

++在前  =  先加1再取值

++在後  =  先取值後加1

 

多練習幾遍,以後看到此類型的題目肯定能輕鬆取分。

 

延升閱讀

科技業筆試 常考觀念題  

1. 指標  2. 資料型態 3. 位元運算

國外面試考什麼

LeetCode 練習 - Two Sum 解析 (Easy)    

LeetCode 練習 - Add Two Numbers 解析 (Medium)

 

文章標籤

C 發表在 痞客邦 留言(2) 人氣()

此篇只涉及C語言的基礎概念,熟悉C語言的開發者可跳過此篇。

 

在應徵程式設計師的面試中,常會有該語言的專業測驗,

而專業測驗的成績更會直接影響面試結果,

故在面試前好好熟悉該語言是非常重要的。

 

 

以下為真實面試考題分享:

第一題 : 請寫出將會印出的值

 

Ans : 答案為-2,相信大家都答得出來。

 

第二題 : 請寫出將會印出的值

 

Ans : 答案為15,當寫成 if ( a = 10)時,  a會被改值為 10

而又因為括號內為大於0的值 = True , 故印出的值為 a + b 

 

 

若以上兩題都能輕鬆解答的人,代表您對於C語言有一定程度的理解,

而第三題考的是 您對於程式熟悉度與coding的靈活性。

 

 

 

第三題 : 以上兩題可看出 (a == 10) 與 (a = 10),此兩條件式的誤植,

會造成答案的巨大差異,請問有何種方式可完全避免此問題?

 

Ans :  將條件式寫相反 (10 == a), 程式依然可正確執行。

而若誤植為 (10 = a),因為10無法賦予值,將無法編譯成功。

 

文章標籤

C 發表在 痞客邦 留言(0) 人氣()