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