1. 程式人生 > >分享兩道華為的C語言上機題——包含答案。

分享兩道華為的C語言上機題——包含答案。

     下面是華為的上機程式設計考試題目,想加入華為的可以看看,不想加入的也可以來找一找C語言程式設計的感覺,畢竟各大IT公司對程式設計師的基本素質考察都差不多,下面的題目的實現程式碼是我自己編寫的,其中有很詳細的註釋,並且每個程式都已經在Visual C++ 6.0上執行通過了。程式中包含的不足之處還請諒解,歡迎大家到我的CSDN技術部落格和我交流探討。

2010年華為軟體校園招聘程式設計測驗

類別:軟體C語言

程式設計題(共2題,第一題40分,第二題60分,共100分。請上機編寫程式,按題目要求提交檔案。[詳見考試說明]

本試題採用自動測試用例進行評分,測試用例不對考生公開,凡不滿足提交要求導致不能執行或用例不通過,不予評分)。

1. 刪除字串中所有給定的子串(40分)

問題描述:
在給定字串中查詢所有特定子串並刪除,如果沒有找到相應子串,則不作任何操作。

要求實現函式:
int delete_sub_str(const char *str, const char *sub_str, char *result_str)

【輸入】 str:輸入的被操作字串

            sub_str:需要查詢並刪除的特定子字串

【輸出】 result_str:在str字串中刪除所有sub_str子字串後的結果

【返回】 刪除的子字串的個數

注:

I、   子串匹配只考慮最左匹配情況,即只需要從左到右進行字串匹配的情況。比如:

在字串"abababab"中,採用最左匹配子串"aba",可以匹配2個"aba"字串。如果

匹配出從左到右位置2開始的"aba",則不是最左匹配,且只能匹配出1個"aba"字串。

II、  輸入字串不會超過100 Bytes,請不用考慮超長字串的情況。

示例
輸入:str = "abcde123abcd123"

sub_str = "123"

輸出:result_str = "abcdeabcd"

返回:2

輸入:str = "abcde123abcd123"

sub_str = "1234"

輸出:result_str = "abcde123abcd123"

返回:0

程式程式碼(C語言):

  

2. 高精度整數加法(60分)

問題描述:
在計算機中,由於處理器位寬限制,只能處理有限精度的十進位制整數加減法,比如在32位寬處理器計算機中,

參與運算的運算元和結果必須在-231~231-1之間。如果需要進行更大範圍的十進位制整數加法,需要使用特殊

的方式實現,比如使用字串儲存運算元和結果,採取逐位運算的方式。如下:

9876543210 + 1234567890 = ?

讓字串 num1="9876543210",字串 num2="1234567890",結果儲存在字串 result = "11111111100"。

-9876543210 + (-1234567890) = ?

讓字串 num1="-9876543210",字串 num2="-1234567890",結果儲存在字串 result = "-11111111100"。

要求程式設計實現上述高精度的十進位制加法。

要求實現函式:
void add (const char *num1, const char *num2, char *result)

【輸入】num1:字串形式運算元1,如果運算元為負,則num1[0]為符號位'-'

num2:字串形式運算元2,如果運算元為負,則num2[0]為符號位'-'

【輸出】result:儲存加法計算結果字串,如果結果為負,則result[0]為符號位。

注:

I、   當輸入為正數時,'+'不會出現在輸入字串中;當輸入為負數時,'-'會出現在輸入字串中,且一定在輸入字串最左邊位置;

II、  輸入字串所有位均代表有效數字,即不存在由'0'開始的輸入字串,比如"0012", "-0012"不會出現;

III、       要求輸出字串所有位均為有效數字,結果為正或0時'+'不出現在輸出字串,結果為負時輸出字串最左邊位置為'-'。

示例
輸入:num1 = "580"

num2 = "-50"

輸出:result = "530"

輸入:num1 = "580"

num2 = "-600"

輸出:result = "-20"

程式程式碼(C語言):