程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 有趣的IT面試題,有趣IT面試題

有趣的IT面試題,有趣IT面試題

編輯:關於C語言

有趣的IT面試題,有趣IT面試題


一段看起來很簡單C代碼,預期結果是輸出array數組。

#include<stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};
int main()
{
	int d;
	for(d = -1;d <= (TOTAL_ELEMENTS - 2); d++)
		printf("%d\n", array[d+1]);
	return 0;
}

代碼編譯運行後,結果不是想要的那個數組,而是空值,這是很多人就會想到宏定義了,原因是宏定義是沒辦法獲得數組的長度。

可我們把for循環改一下就有不同的結果了

	for(d = -1; d <= ((int)TOTAL_ELEMENTS-2); d++) 

把TOTAL_ELEMENTS強制轉換成int類型的,結果就變成了:

。。。。。。。。。。這是我們想要的結果,那就是說宏定義沒問題。

我們在原來的main()函數中加一句

	int array_length = TOTAL_ELEMENTS;

這樣和類型強轉的效果應該是一樣的,跟蹤監視後得到下面的結果:

提示是沒有找到符號"TOTAL_ELEMENTS",但是array_length卻有值。。。。。。。很郁悶

接著,我們在for循環裡處理數組長度

	for(d = -1; d <= ((sizeof(array) / sizeof(array[0])) - 2); d++)

現在,輸出結果應該就是我們想要的那個數組了。可結果呢,啥都沒輸出。。。。。。。更郁悶

那就繼續跟蹤監視

好像都沒問題,不過注意它們的類型,是無符號整形(unsigned int),而循環條件d是整形(int),並且d的初始值為-1,不再無符號整形(unsigned int)定義范圍之內,現在看來好像是類型的問題了,那我們將循環條件d的初始值改為0試試:

#include<stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};
int main()
{
	int d;
	for(d = 0; d <= (TOTAL_ELEMENTS - 1); d++)
		printf("%d\n", array[d]);
	return 0;
}

輸出的結果是

結果正是我們想要的。沒有進行強制類型轉換,也沒有進行二次賦值,只是將循環條件d的初始值定義在了無符號整形(unsigned int)的范圍之內。

我們再做個小測試

int main()
{
    int array[] = {23,34,12,17,204,99,16};
    int d = -1;
    if(d <= (sizeof(array) / sizeof(array[0])) -2)
        printf("先有雞\n");
    else
        printf("先有蛋\n");
    return 0;
}

從代碼看來,應該是輸出“先有雞”。不過這次結果又是事與願違,輸出的是“先有蛋”。

所以建議在寫代碼的時候盡量避免使用無符號類型,同時也盡量避免有符號類型和相應的無符號類型進行比較等。

================================================================

本人才疏學淺和其他原因,沒有進行更深入的研究,只是偶爾看到的IT面試題,感興趣簡單的測了一下。

不過跟蹤監視後,CX0017:錯誤:沒有找到符號"TOTAL_ELEMENTS",還是沒有找到原因,有知道的大神不妨指點一二。。。。。。


有趣的面試題目

此題有三種答案,主要看回答者的角度如何:
1、2元,兩次分別賺了一元,一共是兩元。
2、3元,這個人是最初花了8元,最後收回11元,兩者做差,為3元。
3、-2元。一個人最低購入成本和最高售價分別為8元和11元,在第一次的交易中這個人以9元賣出,無形中就損失了2元,第二次購入是比最低成本高了兩元,所以有損失了2元一共損失4元。在兩次的交易中他獲利為2元,所以最終他損失了2元。
 

知名IT企的搞怪面試題

一、夜晚,也就是地球的影子。

二、標准答案方向是,讓員工裝弱者,以博取顧客的同情,最後把電腦要回來。至於寫信就如作文,看各人的發揮了。

三、如下假設, 人是一個長方體, 雨是均勻分布的, 並且是垂直的(無風),雨以1滴/秒的速度飛向人, 然後聚集度為1平方厘米1滴,而人的肩膀寬50cm, 厚10cm,1滴雨面積大約1平方厘米, 而厚度大約0.1mm
得出 5 * 60 * 500 * 1 * 1 * 0.01 * 1 g = 1500 g。

四、可以用歸納法推
1、有1只病狗的情況
生病狗的主人在觀察所有其他的狗後,發覺其他狗都是相同狀態,那麼肯定是自己的狗生病,因此第一天就SHOT了自己的狗
2、有兩只病狗
第一天病狗主人發現所有別人的狗中有一只病狗,那麼有兩種可能,自己的狗有病或者自己的沒病。如果自己的沒病,那麼當天晚上那只狗就會翹翹,可是第二天那只卻還健在。因此自己的狗也是病狗,那麼拿槍吧。
3、3只病狗
同樣,狗主人在外面看到2只病狗,為了確定自己的狗的狀態,只有等到第2天晚上,如果那2只都被干掉,那麼自己的肯定沒事,如果第2天晚上沒有聽到什麼動靜,那麼就殺殺殺
4、同理,狗主人看到外面有N-1條狗有毛病,就會等待N-1天,在第N-1天夜裡如果沒有聽到動靜,那麼自己的狗就是第N條病狗,在第N天就開槍了。
這題還應該有限制,就是首先肯定裡面有病狗,第二不是所有狗都有病

五、應該是個數列問題,三個顏色是隨便的,各人所好。
塗法思路:第一面色彩選擇三種的一種,第二面選擇三種的一種……故一共有:3的20次方減3種(3種單純色)。
去除所有色只有兩色的方案有:
2的20次方減2(2種單純色)乘3種(兩色的配色方案有3種)。
結果為
3486784398-3145722 = 3483638676種。

六、|A-B| = 21 A-B = 20
等價於
B-A = 21 A-B = 20
此題從理論上無解。

7、此題沒有一定能取到最大的那顆鑽石的必然方法。從解題上說無解。只能說用什麼方法取到盡可能大的鑽石。這個方法為:
選擇前五層樓都不拿,觀察各層鑽石的大小,做到心中有數。後五層樓再選擇,選擇大小接近前五層樓出現過最大鑽石大小的鑽石。

以上為本人的答案。希望有人比本人高明。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved