華為面試題 c語言
華為面試題 c語言(一)
題目:輸入一個正整數 X,在下面的等式左邊的數字之間添加+號或者-號,使得等
式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
請編寫程序,統計滿足輸入整數的所有整數個數。
輸入: 正整數,等式右邊的數字
輸出: 使該等式成立的個數
樣例輸入: 5
樣例輸出: 21【下面的代碼只輸出了所有的等式,沒有輸出個數】
代碼如下:
#include
void dfs(int layer, int currentResult, int lastOp, int lastSum);
const char sym[3] = {'+' , '-' , ' '};
int ops[21] = {0};
int result , num;
void main()
{
while (1)
{
printf("請輸入等式右邊的值\n");
scanf("%c",&result);
printf("\n以下是使等式成立的公式:\n");
dfs(1,0,0,0);
}
return ;
}
void dfs(int layer, int currentResult, int lastOp, int lastSum)
{
int i;
lastSum *= (layer > 9) ? 100 : 10;
lastSum += layer;
if(layer == 9)
{
currentResult += (lastOp) ? (-1 * lastSum) : lastSum;
if(currentResult == result)
{
++num;
printf("1");
for(i = 2 ; i <= 9 ; ++i)
{
if(sym[ops[i-1]] != ' ')
printf(" %c ", sym[ops[i-1]]);
printf("%d", i);
}
printf(" = %d\n" , result);
}
return;
}
ops[layer] = 2;
dfs(layer + 1 , currentResult , lastOp , lastSum);
currentResult += (lastOp)? (-1 * lastSum) : lastSum;
ops[layer] = 0;
dfs(layer + 1 , currentResult , 0 , 0);
ops[layer] = 1;
dfs(layer + 1 , currentResult , 1 , 0);
}
華為面試題 c語言(二)
一面:
介紹我的項目,針對我的項目中的點詢問是如何實現的
Activity生命周期?為什么Activity要這么設計?這樣設計有什么好處?
Android與iOS運行機制上有哪些不同?
為什么Android用起來沒有iOS流暢?為了讓Android系統更流暢,應該從哪些方面做好?
如何讓Service不被殺死?
Android系統分層?Library層起什么作用?
如果一個應用要升級需要注意哪些方面?(我回答服務端api要兼容,如果只是小bug就通過補丁方式,但是貌似面試官不滿意,就引導我說數據方面的,我才知道原來是想要我說本地數據的兼容)
問我有什么要問他的?
還有其他的一些問題,記不太清了….
二面:
二面是一個中年男人,一開始很嚴肅,聊了幾句后它就笑嘻嘻了。
首先叫我介紹自己
本科在哪讀的(普通二本)
家里有多少人,是農村的還是城市的,家里生活水平怎么樣?
有沒有女朋友、女朋友是哪里人、女朋友有沒有工作?
為什么不留武漢(我簡歷填杭州),不留武漢你女朋友同意嗎?
選一個你收獲最大的項目來談談?(后面就是針對我的項目一直聊~)
二面大概30分鐘左右,后面說我的'性格測試沒通過,讓我重新再做一次。然而,第二次性格測試還是沒通過,最終我還是因為性格測試沒通過的原因,與華為無緣。。。。
華為面試題 c語言(三)
程序的局部變量存在于(堆棧)中,全局變量存 在于(靜態區 )中,動態申請數據存在于( 堆)中。
一點小總結:
1、關于堆棧,印象最深的就是在做uboot移植,在你準備進入c代碼時 ,你必須給c代碼一個良好的運行環境,其中重要的一項就是設置堆棧。
2、關于靜態內存分配和動態內存分配的區別及過程
1) 靜態內存 分配是在編譯時完成的,不需要占用CPU資源;動態分配內存是在運行時完成的 ,動態內存的分配與釋放需要占用CPU資源;
2) 靜態內存分配是在棧上 分配的,動態內存是堆上分配的;
3) 動態內存分配需要指針或引用數據 類型的支持,而靜態內存分配不需要;
4) 靜態分配內存需要在編譯前確 定內存塊的大小,而動態分配內存不需要編譯前確定內存大小,根據運行時環境 確定需要的內存塊大小,按照需要分配內存即可。可以這么說,靜態內存分配是 按計劃分配,而動態內存分配是按需分配。
5) 靜態分配內存是把內存的 控制權交給了編譯器,而動態內存是把內存的控制權交給了程序員;
綜 上所述,靜態分配內存適合于編譯時就已經可以確定需要占用內存多少的情況, 而在編譯時不能確定內存需求量時可使用動態分配內存;但靜態分配內存的運行 效率要比動態分配內存的效率要高,因為動態內存分配與釋放需要額外的開銷; 動態內存管理水平嚴重依賴于程序員的水平,如果處理不當容易造成內存泄漏。
華為面試題 c語言(四)
如何引用一個已經定義過的全局變量?
答:extern
可以用引用頭文件的方式,也可以用extern關鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理,假定你將那個變量寫錯了,那么在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那么在編譯期間不會報錯,而在連接期間報錯。
此外,extern修飾符可用于指示C或者C++函數的調用規范。比如在C++中調用C庫函數,就需要在C++程序中用extern “C”聲明要引用的函數。這是給鏈接器用的,告訴鏈接器在鏈接的時候用C函數規范來鏈接。主要原因是C++和C程序編譯完成后在目標代碼中命名規則不同
1.extern用在變量聲明中常常有這樣一個作用,你在*.c文件中聲明了一個全局的變量,這個全局的變量如果要被引用,就放在*.h中并用extern來聲明。
2.如果函數的聲明中帶有關鍵字extern,僅僅是暗示這個函數可能在別的源文件里定義,沒有其它作用。即下述兩個函數聲明沒有區別:
extern void print_externifo(); 和voidprint_externifo();
extern在 函數中的使用:
如果定義函數的c/cpp文件在對應的頭文件中聲明了定義的函數,那么在其他c/cpp文件中要使用這些函數,只需要包含這個頭文件即可。
如果你不想包含頭文件,那么在c/cpp中聲明該函數。一般來說,聲明定義在本文件的函數不用“extern”,聲明定義在其他文件中的函數用“extern”,這樣在本文件中調用別的文件定義的函數就不用包含頭文件include“*.h”來聲明函數,聲明后直接使用即可。
舉個例子:
#vimprint_extern.c #include extern void print_extern()//這里用不用extern都可以 { printf("helloextern test!!\n"); } #vim extern_test.c #include extern void print_extern();//其實這里用不用extern都是可以的 main() { print_extern(); }
編譯:
#gcc –c print_extern.c –o print_extern.o #gcc print_extern.o extern_test.c –o extern_test #./extern_test
【華為面試題 c語言】相關文章:
華為公司面試題04-29
華為C++筆試題05-20
經典c++面試題06-03
華為的Java面試題及答案11-22
華為面試參考面試題答案11-12
有趣的C語言筆試題06-09
C語言的論文致謝詞01-09
C語言論文致謝11-25
C語言學習社會實踐報告12-09
關于C語言游戲開發筆試題06-19