c語言高級編程實例
Ⅰ 經典c語言程序例子
題目01:在一個已知的字元串中查找最長單詞,假定字元串中只含字母和空格,空格用來分隔不同的單詞。
(1)c語言高級編程實例擴展閱讀:
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
Ⅱ C語言的經典編程例子
程序員》推薦C++ 圖書三人談
主持人:熊節(透明),《程序員》雜志編輯,C-View成員
嘉 賓:孟岩(夢魘),聯想公司掌上設備事業部應用開發處任職,C-View成員。與侯捷先生合譯《C++ Standard Library》一書
金尹(惡魔),上海天宇公司CTO,在《程序員》連載有「自由與繁榮的國度」系列文章
透明:「學C++用哪本書入門」,這是被問得最多的一個問題。但是哪一本書是最好的入門書?似乎很難找到答案。《C++ Primer》太厚,《Effective C++》對讀者要求比較高,《Essential C++》又常常被批評為「太淺」。
其實說穿了:no silver bullet。想從一本書學會C++,那是不可能的。有朋友問我如何學C++,我會建議他先去找本數據結構書,把裡面的習題全部用C++做一遍,然後再去看《Effective C++》。myan經常說「要在學習初期養成好習慣」,我對此頗不以為然。
個人認為,《Essential C++》適合作教材,《C++ Primer》適合作參考書,《Effective C++》適合作課外讀物。
惡魔:很後悔當初買了《C++ Primer》。因為從我個人角度來看,它的功能效用基本是和《The C++ Programming Language》重合。當然對於入門來說,它還是很不錯的。但是《C++ Primer》太厚,一來導致看書極其不方便,二來系統學習需要花比較長的時間。對於目前這個越來越快餐化的時代來說,的確有很多不適合的地方,不過可以作為初學者的參考書。現在我以一塊K3 CPU的代價把它借給了別人,希望我那位同事能夠從中得到一些益處。
如果已經具備了C基礎,我建議看國內的書,例如錢能的《 C++大學教程(第二版) 》。(如果沒有C的基礎還是看譚浩強的C語言)。這本書對C講得還算比較清晰,有很多習題值得一做,特別是最後的struct和union兩個部分。其中的一些演算法比較拖沓和繁瑣(比如樹和鏈表的遍歷演算法),讀者可以嘗試修改這些例子,作為最後對C語言的一些總結測試。
夢魘:這個問題讓我想起四五年前的情形。今天對於C++有一點認識的人,多半是從那幾年就開始學C++了。那時根本沒有品牌觀念。從書店裡找一本C++書,如果看著還算明白,就買下來。我記得那時候宛延闓、張國鋒、麥中凡教授的書都受到很高的贊譽。我個人最早的一本C++書是Greg Perry的一本書,今天想起來,其實是一本打著C++旗號的C語言教程。對我作用最大的一本書是國防科技出版社出版的一本書,書名記不得了,作者叫斯蒂芬·布萊哈。
透明:還記得以前曾批評過一本C++書,是北航出的,整本書就沒有出現過class關鍵字。那本書,說穿了其實只是介紹了C語言和iostream庫的用法,根本不能算C++。而當時我常常推薦的一本書是電子科技大學張松梅老師的C++教程。那本書,直到今天來看也沒有太大的問題,唯一的缺憾就是由於年代久遠,許多東西已經過時了。而對於一本技術書籍來說,「過時」是最不可接受的。
總體來說,那時使用C++的人真是在「盲人摸象」。不過這也有好處,就是對C++的很多細節能搞清楚,以後看到經典好書時比較容易理解;當然壞處就是概念不清,甚至都不知道C++和Visual C++、Borland C++到底有什麼不一樣。
夢魘:整個90年代,其實大部分人對於C++的認識都似是而非。一開始是等同於Borland C++,後來是等同於Visual C++和MFC。所以一般來說,打著BC和VC旗號的書賣得很好,人們覺得這就是C++。而我比較幸運,布萊哈的那本書雖然從現在的眼光來看談不上高超,但基本路子是對的。可能是因為原書是給UNIX程序員的培訓教材,所以沒有讓我一開始就形成「C++ == VC++」的認識。
其實一直到1996年,我們那裡搞計算機的都是唯Borland C++馬首是瞻的,到了VC 4.0出來,一下子格局全變了。1997年VC5推出之後,書店裡MFC書鋪天蓋地,學MFC的人,頭抬得都比別人高一些。不過現在看來,那時候大部分的MFC書都是三流貨色。我曾經有一段時間認為,那一批程序員中間有不少被誤導了。根本原因就是相對的封閉。
透明:我覺得一本書的價值有兩方面:第一,教給你實用的技術;第二,促使你去思考。對於一本介紹VC(或者說MFC)使用方法的書,我根本不希望它能促使我有什麼思考,所以我就一定要求它在技術上精益求精完美無瑕。我剛開始用VC的時候,買的第一本書就是潘愛民老師翻譯的《VC技術內幕》(第四版),沒有受到那些「三流貨色」的誤導,應該說是很幸運的。
夢魘:1999年機械工業出版社開始出版「計算機科學叢書」,其中的《Thinking in C++》第一版受到了廣泛的歡迎。其實我一直不認為這本書很出色,雖然拿過一次大獎。然而我們都得承認,這本書在C++書籍領域里第一次建立了品牌觀念,很多初學者開始知道,不是隨便買哪一本都一樣的。再往後就是2000年的《 深入淺出MFC(第二版) 》第二版,以及侯先生在《程序員》上發表的那一篇《C++/OOP大系》,加上整個大環境的變化,品牌觀念深入人心,C++書籍市場終於開始逐漸與世界同步。
回想往事,我的感覺是,那個需要戰戰兢兢選擇入門書的時代已經過去,今天的C++初學者,大可以放心地買口碑好、自己讀起來思路順暢的書,入門不再是太大的問題。還有一些程序員已經學了幾年C++,但看到今天出版的一些新書,感覺比較陌生,這也不是什麼問題。侯先生經常說「凡走過必留下足跡」,所謂「走彎路」,未必不是一件好事。
至於具體的推薦表,就不好一概而論了。總之在我的印象里,《Essential C++》、《C++ Primer》、錢能教授的C++教程,都不錯。甚至有人一上來就看Bjarne Stroustrup的《The C++ Programming Language》,只要他喜歡,也沒什麼不可以。
透明:我同意你的觀點。不管怎麼說,編程是門實踐性非常強的學問。要想對C++對象模型有深入的了解,最好的辦法就是寫一串程序去看結果;要想學會OOP,也只能從項目中學。對於初學者,最好的學習方法就是不停地寫程序,寫真正有用的程序,寫到有問題的時候就去查書,於是自然就會知道哪本書好哪本書不好。不過我們的教育制度能不能讓大學里的學生們有這樣的學習機會,我表示懷疑。
以我的經驗,學C++有兩個門檻:入門和使用。完全看不懂C++,這是一個門檻,但是只要有一本合適的入門書,很快就能跨過。要想真正用上C++,卻不是件很容易的事情。尤其對於學生來說,接觸到的東西多是「玩具」,很難有實戰的機會。所以經常看見有人問「C++到底能做什麼」,這是C++學習中一個比較麻煩的問題。我們都是做了相當長時間的C++程序之後才看到一些真正經典的書,也正是因為走了相當長的彎路之後才知道這些書的經典之所在。所謂彎路,我想也是一種必須的積累。就算一開始就看《Essential C++》和《C++ Primer》,沒有兩三年的時間恐怕還是難有所得。
惡魔:有兩句十分有道理的話,一是我大學的C語言老師說的「寫程序不如說是抄程序」,另一句是一網友說的「好的設計來自借鑒,天才的設計來自剽竊」。對於我這個理性批判主義者來說,這兩句話的確不太適合。但是無論從哪個角度來講,對於初學者來說,剽竊大師的作品是通向成功的最快捷徑。
我個人認為,對於C++的初學者來說,首先要確定自己專業領域內主要使用的特性的方向。因為C++的特性如此眾多,初學者想貪多基本是不可能成功的。C++的編程範式基本可以分為ADT+PP、GP和OO三個方向。對於ADT+PP範式來說,初學者的主要問題不是學習C++,而是學習C的使用。對於這樣的初學者,國內的幾本書還是寫得比較清楚,符合中國人的習慣,比如譚浩強的《C語言教程》、錢能的《C++語言大學教程》。這兩本書我首推第一本,因為這一本我潛心研究了一年,這本書當中很多程序是可以剽竊的,而且可以對這些程序進行加工和提升。比如結構這一章中,它所給出的用struct來實現鏈表、二叉樹的演算法是相當蹩腳的。學習ADT+PP的初學者將這本書揣摩透以後可以嘗試修改這兩個程序。另外這本書的第二版稍微涉及了一些關於「類」的內容。學習ADT+PP的初學者,可以不被OO中的一些專有特性擾亂自己的思路,對於類層次扁平、無繼承、無多態的程序編寫是有很大好處的。
透明:你好象比較推崇國內教授寫的書。現在社會上有種不好的風氣:一捧就捧上天,一貶就貶下地。就好象對待譚教授的書,前幾年是奉為經典,這幾年又有很多人使勁批評。學C++更是有點「崇洋媚外」,總是覺得初學就應該看《Essential C++》。我看這種觀點也是片面的。
惡魔:當然《Essential C++》也值得看看。但是我個人覺得這本書沒有譚浩強的《C語言教程》來得好。主要原因是:第一,C++的所有特性都點到了,但是不深,看了以後會三心二意沒有方向;第二,可以抄襲借鑒的例子太少。《C語言教程》中有很多有趣的問題,比如猴子吃桃、漢諾塔等等,這些例子對於剛剛涉及C/C++語言編程的人來說是學習編程很好的例子。《Essential C++》只能是前兩本書看透以後,作為學習C++特性的一個過渡性的書籍。讓讀者真正領略到什麼是C++的編程、和C編程的不同點在哪裡。
透明:我發現一個很有趣的現象:初學者往往喜歡問「哪本書比較好」,這讓我很是不解。這有點像一個剛學打籃球的人問「王治郅和科比誰比較厲害」。當然科比更厲害一些。但如果你是想學打籃球,這兩個人都非常非常有資格教你,你跟誰學都能學得很強——關鍵不是在於你選哪個老師,而是在於你自己用多少功夫去學。
透明:回到原來話題。學會了C++的語法,能看懂C++代碼之後,必須有些書來指導進階(或者叫指點迷津)。我覺得《設計模式》很好,能夠讓讀者看到一些精妙的用法。不過正如我經常說的,模式帶來的麻煩和好處一樣多,甚至麻煩還要更多。而且,C++本身的問題使得在C++中使用GoF模式愈加麻煩。
夢魘:《Design Patterns》這本書絕對是不可以沒有的,而且中英文版都不可少。最初我看中文版,說實話看不懂,但是也不覺得人家翻譯得不好,所以就想,大概是原文就很難懂,加上自己水平有限。於是總是想著再找幾本patterns的書來看。後來找到幾本書,口碑還不錯,不過水平高下,一比就出來了,還是那本《Design Patterns》最經典,最耐看。英文版出來之後,兩個版本對照看,明白多了。現在覺得,其實就設計模式來講,把這本看明白了就很不錯了,不用再花費很多心思找其他的書。我現在的包里始終夾著這本書,隨身攜帶,有備無患。
至於說設計模式的副作用,和可能帶來的弊端,我的體會也挺多。不過是這樣,我們想一想,究竟什麼情況下設計模式可以用得很好呢?一種是有經驗豐富的人引導,比如要是Robert Martin帶隊,你在某個地方用錯了設計模式,他就會指出來,說這里不對,將來會產生什麼樣的弊端。對於他來說,豐富的實踐經驗足以支持他進行「預測型」設計。但是大部分人沒這個能力,因此我們只好走第二條路和第三條路,就是「試探型」設計和「重構型」設計。遇到一個問題,你覺得用某種模式挺合適的,就大膽地用了,成功是積累經驗,發現不好,出了問題了,只好改回來,那也是積累教訓。這叫做「試探型」。至於重構,應該算是最有組織、成功率最高的工程化方法。先把問題「quick and dirty」地解決了,所有的暗礁都暴露出來,然後再根據實際情況採用合適的模式優化設計。現在XP和UP都高度重視refactory,UP在Elaboration和Construction階段都鼓勵抽出專門的iterations進行重構。所以說如果組織快速的軟體開發,當然比較傾向於這條路——打成功率嘛。
透明:講到重構,我順便說說《Refactoring》這本書的影響。從工程本身的角度來說,你所謂的「重構型設計」是沒有什麼問題的。但中國的開發者(也包括我在內)往往比較沖動,比較容易相信銀彈的存在。曾經有那麼一段時間,我在Java中嘗試過了重構的方法之後,又拿到C++中去嘗試。結果發現,在Java中速度非常快的重構過程,到C++中就被減慢了。究其原因,就是因為C++和Java的約束條件不同。拿著Java中成功的案例直接套C++,不失敗才怪。
所以,我必須說:《Refactoring》這本書很有價值。但對於C++程序員來說,它的價值是讓你思考,思考這種方法的可行性。如果一個C++程序員沒有打算遷移到Java,那麼我必須告訴他:《Refactoring》這本書不是讓你照著它用的,甚至不是讓你去相信它的。對於C++程序員,《Refactoring》全書可以放心相信的只有第13章,其他的部分,都必須非常謹慎地對待。
夢魘:我還要就「試探型」的方法多說兩句,我覺得對於個人發展來講,「試探」也是必不可少的,撞牆不可怕,高水平的人不都是撞出來的嗎?你失敗了一次,就知道這個模式有什麼潛在的問題,下次再用,就會多看幾步,像下棋似的。撞的多了,路數就出來了。
我不知道你們是否有這個感覺:用錯了模式,吃了虧,再回過頭去翻翻《Design Patterns》,看到人家早就指出來這個問題,不過就是那麼幾句話,原來看上去乾巴巴的,現在覺得句句都講到心坎上,GoF的形象馬上就高大起來,還帶著光環,感覺是既興奮又懊悔。
透明:現在回頭來看,我更欣賞myan推薦給我的《Designing Object-Oriented C++ Applications Using Booch Method》。這本書能夠幫助C++程序員理清思路培養習慣,可惜國內沒有引進。相比後來商業味濃厚的UML系列書籍,我覺得這本書對於面向對象的闡釋精闢獨到,至今未有能出其右者。
夢魘:剛才我們兩人都說到Robert Martin,他可是我的榜樣。那本1995年的《Designing Object Oriented C++ Application》,我覺得是每一個C++軟體工程師都應該反復研讀的書。可惜不僅國內沒有引進,在國外的名氣也不大。如果你覺得面向對象的那些道理你好像都明白,可就是一遇到實際問題就使不上勁,那這本書就是你的最佳導師。
提到理清思路,還有一本書不得不提,就是Andrew Koenig的《Ruminations On C++》。每個人都應該問自己,我學了這么多年的C++,究竟什麼是C++最基本的設計理念?遇到問題我第一個直覺是什麼?第一個試探型的解決方案應該具有那些特點?如果你不能給出明確的答案,就應該認真地去讀這本書,讀完了你就有了「主心骨」。
透明:插一句話,談談「推薦書」的問題。入門書基本上是放之四海而皆準的,所以推薦的意義也不大。而入門後的發展方向,每個人不同,這個時候就需要「高人」的指點。舉個例子:我學C++的時候,myan還不認識我,所以也沒有給我推薦書,我還是學過來了,所以即使你當時向我推薦了《Essential C++》或者《C++ Primer》,我也不會太感謝你;但在我認真研究OO的時候,你推薦Robert Martin那本書給我,對我幫助就特別大,而且我從別的地方也很難找到類似的推薦,所以我就很感謝你。
一個程序員,必須有framework的意識,要學會用framework,還要主動去分析framework(在這方面,《Design Patterns》能有一定的幫助)。但是,真正高質量、成氣候的framework的書恐怕也就只有針對MFC的。從這個角度來說,MFC縱有千般不是,C++程序員都非常有必要先去用它、熟悉它、研究它,甚至藉助《深入淺出MFC》這樣的書來剖析它。不然,很難有framework的意識和感覺。
當然,另一個framework也很好,那就是STL。不管用不用MFC、STL,對這兩個東西的掌握和理解都是極有幫助的。最近我又在看《深入淺出MFC》,雖然已經不用MFC編程了,但幫助是一定有的。
夢魘:MFC和STL方面,我還是比較推崇侯先生的兩本書《深入淺出MFC》和《STL源碼解析》。
《深入淺出MFC》這本書,名氣自然是大得不得了,不過也有不少人批評。其實書也沒有十全十美的,批評當然是少不了的,不過有的時候我看到有人評論這本書,把它跟Inside VC相比,真的是牛頭不對馬嘴。
你剛才其實說得很對,程序員應該有一點framework意識。而這本《深入淺出MFC》與其說是在講MFC編程,不如說通篇是在拿MFC為例分析Application Framework的架構和脈絡。所以無論你對於MFC本身是什麼態度,這本書對每一個C++程序員都有很大的益處。
透明:是的。《VC技術內幕》會告訴你「DYNAMIC_CREATE這個宏怎麼用」,《深入淺出MFC》則告訴你「DYNAMIC_CREATE這個宏是怎麼實現的」。所以,如果你只需要在VC下寫一些小應用程序,《深入淺出MFC》的價值並不太大;但是,如果你需要設計一個稍微大一點的東西(不一定是framework),MFC的設計思想就會有所幫助。
夢魘:另外,我覺得對於MFC也應該有一個公允的評價。過去是吹捧得天上有地下無,書店裡鋪天蓋地都是MFC的書,搞得大家只知有MFC,不知有C++,甚至直到現在還有人問:「我是學MFC呢,還是學C++?VC++是不是比C++更高級的語言?」MFC成了一尊神像,阻礙了人們的視線。所以得把它從神壇上拉下來。這就是過去一兩年有很多人,包括我在內批評MFC的一個目的。可是現在大家視野開闊了,.NET也出來了,MFC不再是神像了,少數人就開始以貶損MFC為樂了。我覺得這種態度是不對的。
什麼叫好的框架?我覺得在十幾年的時間能夠象MFC這樣保持穩定並且不斷進步的框架就是好的框架。可能我們在一些具體的設計問題上有不同看法,覺得「這個地方這么設計不是更漂亮嗎?」很多時候是的,但是這不重要,重要的是MFC成熟穩定、有十幾年的成功經驗,這是最了不起的東西。
另外一點,MFC中間包括著學習Win32 API編程的最佳資料。這是除了其framework方面之外的另一個亮點。我現在使用Win32 API開發,但是經常參考MFC的源代碼,收獲很大。
透明:STL方面,我對於剖析它的源代碼興趣並不大,畢竟裡面源代碼多是演算法問題。所以,《STL源碼剖析》我也只是隨便翻翻就束之高閣了。我覺得這本書用來做計算機系的數據結構和演算法教材不錯,不知道有沒有老師樂意這樣做。
對於STL,我的態度一向都是「應用至上」。不過,我一直認為SGI STL本身就是一本精彩的書,一本數據結構和演算法的經典參考書,同時也是泛型技術的參考書。想知道一個演算法是如何實現的,看看STL源代碼就行;想知道如何使用type traits,STL源代碼裡面也有例子。看別人寫的書,總覺得隔著一層紗,有點撓不到癢處的感覺。SGI STL的代碼寫得非常漂亮,一個C++程序員如果不看看這本書,實在是可惜。
夢魘:至於STL,除了《STL源碼解析》之外,我舉賢不避親,強烈推薦侯先生與我合譯的那本《The C++ Standard Library》。這本書質量之高是無需懷疑的。我現在手邊常備此書,隨時查閱,對我幫助很大。
透明:C++和Java相比,最大的優勢就是它沒有一個專門的公司來管它,最大的弱點也是它沒有一個專門的公司來管它。Java程序員在學會簡單的語法之後,立刻進入SUN提供的framework,一邊用這個現成的framework做實際開發,一邊在開發過程中繼續學習Java一些幽深的特性。而這個時候,C++程序員恐怕還在問「VC和BCB哪個好」呢。這無疑是浪費時間。
夢魘:剛才你說Java和C++的優劣,這個話題已經成了我們這個年代永不消失的聲波了。我也不想再談這個。不過有一點我得說清楚:現在我們很多用C++的人吃了不少苦頭,探過脖子去看看Java,覺得它真是太可愛了,這種印象是不準確的。另外,Java也不簡單,而且會越來越龐大復雜。在很多場合,Java還不具有競爭力。至於將來如何,我看有些Java愛好者也過分樂觀了,似乎計算機科學界幾十年解決不了的問題都可以借著Java的東風解決掉,恐怕沒那麼容易。
透明:那當然。我再次強調:No Silver Bullet。讀書很重要,但古人說「行萬里路,讀萬卷書」,還是把「行路」放在「讀書」前面。尤其對於技術書籍,如果它不能幫我解決問題、不能給我帶來非常實際的利益,那麼我是不會去讀它的。惡魔說得對,我們這個社會很快餐,我們這個行業尤其很快餐,我們也只能努力適應它。
Ⅲ C語言,高級編程
呵呵,這位兄台很像我前幾個月的樣子。學c以前覺得c應該什麼都能實現。可是能學完發現自己離windows還有很遠的距離。不過我現在不這么想了。開發平台不是問題所在。其實就像上面那位兄台所說得C只是一個工具。學會了c就相當於會用了一個工具。而真正的學習才剛剛開始。一個計算機的體系是與很多東西組成的。想寫出很好程序就要知道怎麼用好自己的這支筆。下面是我對計算機體系的一點淺顯的認識:
1、計算機組成原理。這個就不多說了,學編成的連我們的勞動對象都不清楚那還玩什麼啊?
2、數據結構和演算法。其實所謂的程序就是對數據進行處理,而處理的數據當然要有存儲的方式,而應對這些數據存儲的方式應運而生了演算法。也就是處理問題的方法。這是真正編程的靈魂。十分重要。
3、操作系統。學完了上說的那些東西你還會認為操作系統很神秘。那我們就來親手掀開他神秘的面紗,知道操作系統都為我們做了些什麼是一件很令人愉快的事。
4、編譯原理。這門課有點難度,不過也很重要,其中有很多思維方式需要掌握,不多說了,看了就知道了。
懂了上面我說的這些東西,我想你對計算機程序設計會有一種新的認識。可千萬不要被嚇倒了哦。每個出色的程序員都是這么混出來的。為成為一名優秀的程序員而努力吧!
Ⅳ 求《C語言高級編程及實例剖析》電子書
http://ishare.iask.sina.com.cn/f/15366049.html?from=like
C語言高級編程及實例剖析.pdf
Ⅳ C語言可以用來做windows API編程嗎
c語言可以做,可以調用windows的api函數來編寫程序,沒問題的,像那些c語言高級編程實例,就是用的api
Ⅵ C語言高級編程及實例剖析的前言
C語言功能強大,具有豐富靈活的控制與數據結構、簡潔而高效的語句表達、清晰的程序結構、良好的移植性、較小的空間開銷等優點,已被廣泛應用於系統軟體與應用軟體的開發中。.
本書以深化程序設計語言C語言為目的,以具體常見的計算機硬體與操作系統為背景,講述在微機上編寫精巧、美觀、友好的應用軟體。本書內容與實例並進,對C語言編程做了深入和具體的探討。涉及的知識面廣,從內存管理,到文本屏幕界面設計,再到文件操作、圖形圖像操作、中斷、通信技術、基本匯流排介面編程和游戲開發應用,幾乎涵蓋了C語言編程的方方面面。通過對本書的學習,讀者將對C語言高級編程有一個深刻的理解和掌握。
本書在內容安排上採用內容與實例並進的方式。每一章中,先講述相關內容,然後通過實例解析講述內容的具體應用。實例解析注重對實例的分析,對方法的詳細講解,以及對知識點的歸納總結。本書對各個實例以需求分析、源代碼解析、運行結果和歸納總結為主線進行剖析,通過實例來講解知識點,又通過相應的知識點來分析實例。通過研讀,讀者可以很快掌握此方面的知識,並較快將其應用到工程開發中。在結構安排上,充分考慮了層次性和內容上的循序漸進。
本書包括9章,主要內容如下。
第1章為內存管理,主要針對優化內存使用、提高內存的使用效率、提高程序運行速度。該章介紹了PC的存儲器結構和基本的堆管理函數,包括學生信息資料庫實例和巧用內存管理創建通信錄實例。通過本章的學習,讀者將對亡語言的內存管理有一個清晰的了解和認識。
第2章為文本屏幕界面設計,包括文本方式控制、窗口設置和文本屏幕輸出函數、清屏和游標操作函數、屏幕移動與存取函數、狀態查詢函數等內容。該章還詳細剖析了創建彈出式菜單實例、文本方式下拉式菜單和將屏幕分為兩個窗口進行對話的實例。通過本章的學習,讀者可以掌握如何對文本屏幕界面進行操作。..
第3章為文件高級操作,介紹標准文件的基本輸入輸出操作和一些實用的文件處理方法,包括文件的加密與解密、文件的分割與合並等。通過本章的學習,讀者將會逐步掌握一些實用的文件處理技巧。
第4章為圖形圖像,介紹如何使用Turbo C提供的圖形函數繪制基本的圖形(包括畫點、線、矩形和條形圖,畫圓、橢圓和扇形圖等)、對圖形的顏色控制函數、封閉圖形的填色函數及有關畫圖函數、屏幕操作函數、圖形方式下的文本輸出函數、動畫技術、菜單生成技術、圖形程序使用環境、直接存儲存取和SVGA編程,還介紹使用這些基本圖形的實際應用,圖形圖像綜合應用——用動畫演示排序演算法。通過本章的學習,讀者將逐步掌握如何使用C語言繪制圖形。
第5章為中斷,介紹中斷的基本概念、滑鼠中斷編程的應用、鍵盤中斷編程的應用和用中斷方式製作的菜單等。通過本章的學習,讀者將掌握對滑鼠和鍵盤的中斷控制。
第6章為通信技術,主要介紹Winsock編程基礎、Cscoket編程技術、串並口編程,雙機連接方法等,並通過雙機並口通信實例和網路通信編程實例的剖析講述了通信技術的實際應用。通過本部分的學習,讀者將逐步掌握通信技術。
第7章為基本匯流排介面編程,主要介紹ISA匯流排、PCI匯流排、PCI匯流排配置和採用中斷方式的信號採集程序。通過本章的學習,讀者將對匯流排介面編程有一定了解。
第8章為游戲開發,介紹DOS環境下的C語言游戲編程,是綜合實例。魔方游戲實例,實際上是對直接寫屏、中斷、多任務、內存技術、動畫技術、顯示技術和優化演算法等各種編程技術,及內存、音效卡、鍵盤、滑鼠等各種硬體原理和硬體編程的綜合應用。
第9章是綜合開發實例——信息管理系統。本部分將重點向讀者介紹如何採用模塊化程序設計思想來設計一個綜合的C程序,提高讀者編寫大型程序的能力。
本書主要針對C語言程序設計的高級讀者,適合已經熟悉和掌握了C語言的基礎知識,想用C語言開發更完美的軟體,更為深入地了解C語言的一些細節和使用技巧的讀者。本書可以使學習過C語言語法的初學者快速成長為C語言編程高手,也可以作為工程人員的參考手冊。
本書由王為青、劉變紅編著,參與本書編輯和修改的還有徐強、劉艷偉、吳洋、房明浩、嚴雨、王亮、梅樂夫、劉艷褘等同志。在此,對以上人員致以誠摯的謝意!
由於本書涉及的范圍比較廣泛,作者的經驗有限,書中難免有不足或錯誤之處,敬請各位讀者批評指正。
Ⅶ 《C語言高級編程及實例剖析》最新txt全集下載
C語言高級編程及實例剖析 txt全集小說附件已上傳到網路網盤,點擊免費下載:
Ⅷ 求一份c語言高級編程及實例剖析PDF版
UDP Server程序
1、編寫UDP Server程序的步驟
(1)使用socket()來建立一個UDP socket,第二個參數為SOCK_DGRAM。
(2)初始化sockaddr_in結構的變數,並賦值。sockaddr_in結構定義:
struct sockaddr_in {
uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
這里使用「08」作為服務程序的埠,使用「INADDR_ANY」作為綁定的IP地址即任何主機上的地址。
(3)使用bind()把上面的socket和定義的IP地址和埠綁定。這里檢查bind()是否執行成功,如果有錯誤就退出。這樣可以防止服務程序重復運行的問題。
(4)進入無限循環程序,使用recvfrom()進入等待狀態,直到接收到客戶程序發送的數據,就處理收到的數據,並向客戶程序發送反饋。這里是直接把收到的數據發回給客戶程序。
2、udpserv.c程序內容:
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#define MAXLINE 80
#define SERV_PORT 8888
void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen)
{
int n;
socklen_t len;
char mesg[MAXLINE];
for(;;)
{
len = clilen;
/* waiting for receive data */
n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
/* sent data back to client */
sendto(sockfd, mesg, n, 0, pcliaddr, len);
}
}
int main(void)
{
int sockfd;
struct sockaddr_in servaddr, cliaddr;
sockfd = socket(AF_INET, SOCK_DGRAM, 0); /* create a socket */
/* init servaddr */
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
/* bind address and port to socket */
if(bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1)
{
perror("bind error");
exit(1);
}
do_echo(sockfd, (struct sockaddr *)&cliaddr, sizeof(cliaddr));
return 0;
}
UDP Client程序
1、編寫UDP Client程序的步驟
(1)初始化sockaddr_in結構的變數,並賦值。這里使用「8888」作為連接的服務程序的埠,從命令行參數讀取IP地址,並且判斷IP地址是否符合要求。
(2)使用socket()來建立一個UDP socket,第二個參數為SOCK_DGRAM。
(3)使用connect()來建立與服務程序的連接。與TCP協議不同,UDP的connect()並沒有與服務程序三次握手。上面我們說了UDP是非連接的,實際上也可以是連接的。使用連接的UDP,kernel可以直接返回錯誤信息給用戶程序,從而避免由於沒有接收到數據而導致調用recvfrom()一直等待下去,看上去好像客戶程序沒有反應一樣。
(4)向服務程序發送數據,因為使用連接的UDP,所以使用write()來替代sendto()。這里的數據直接從標准輸入讀取用戶輸入。
(5)接收服務程序發回的數據,同樣使用read()來替代recvfrom()。
(6)處理接收到的數據,這里是直接輸出到標准輸出上。
2、udpclient.c程序內容:
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <unistd.h>
#define MAXLINE 80
#define SERV_PORT 8888
void do_cli(FILE *fp, int sockfd, struct sockaddr *pservaddr, socklen_t servlen)
{
int n;
char sendline[MAXLINE], recvline[MAXLINE + 1];
/* connect to server */
if(connect(sockfd, (struct sockaddr *)pservaddr, servlen) == -1)
{
perror("connect error");
exit(1);
}
while(fgets(sendline, MAXLINE, fp) != NULL)
{
/* read a line and send to server */
write(sockfd, sendline, strlen(sendline));
/* receive data from server */
n = read(sockfd, recvline, MAXLINE);
if(n == -1)
{
perror("read error");
exit(1);
}
recvline[n] = 0; /* terminate string */
fputs(recvline, stdout);
}
}
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in srvaddr;
/* check args */
if(argc != 2)
{
printf("usage: udpclient <IPaddress>\n");
exit(1);
}
/* init servaddr */
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
{
printf("[%s] is not a valid IPaddress\n", argv[1]);
exit(1);
}
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
do_cli(stdin, sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
return 0;
}
運行例子程序
1、編譯例子程序
使用如下命令來編譯例子程序:
gcc -Wall -o udpserv udpserv.c
gcc -Wall -o udpclient udpclient.c
編譯完成生成了udpserv和udpclient兩個可執行程序。
2、運行UDP Server程序
執行./udpserv &命令來啟動服務程序。我們可以使用netstat -ln命令來觀察服務程序綁定的IP地址和埠,部分輸出信息如下:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:32768 0.0.0.0:*
udp 0 0 0.0.0.0:8888 0.0.0.0:*
udp 0 0 0.0.0.0:111 0.0.0.0:*
udp 0 0 0.0.0.0:882 0.0.0.0:*
可以看到udp處有「0.0.0.0:8888」的內容,說明服務程序已經正常運行,可以接收主機上任何IP地址且埠為8888的數據。
如果這時再執行./udpserv &命令,就會看到如下信息:
bind error: Address already in use
說明已經有一個服務程序在運行了。
3、運行UDP Client程序
執行./udpclient 127.0.0.1命令來啟動客戶程序,使用127.0.0.1來連接服務程序,執行效果如下:
Hello, World!
Hello, World!
this is a test
this is a test
^d
輸入的數據都正確從服務程序返回了,按ctrl+d可以結束輸入,退出程序。
如果服務程序沒有啟動,而執行客戶程序,就會看到如下信息:
$ ./udpclient 127.0.0.1
test
read error: Connection refused
說明指定的IP地址和埠沒有服務程序綁定,客戶程序就退出了。這就是使用connect()的好處,注意,這里錯誤信息是在向服務程序發送數據後收到的,而不是在調用connect()時。如果你使用tcpmp程序來抓包,會發現收到的是ICMP的錯誤信息。
Ⅸ c語言編程實例
【程序1】
題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?
1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去
掉不滿足條件的排列。
2.程序源代碼:
main()
{
int i,j,k;
printf(「\n「);
for(i=1;i〈5;i++)/*以下為三重循環*/
for(j=1;j〈5;j++)
for (k=1;k〈5;k++)
{
if (i!=k&&i!=j&&j!=k) /*確保i、j、k三位互不相同*/
printf(「%d,%d,%d\n「,i,j,k);
}
}
==============================================================
【程序2】
題目:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高
於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提
成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於
40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於
100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
1.程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。
2.程序源代碼:
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf(「%ld「,&i);
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;
if(i〈=100000)
bonus=i*0.1;
else if(i〈=200000)
bonus=bonus1+(i-100000)*0.075;
else if(i〈=400000)
bonus=bonus2+(i-200000)*0.05;
else if(i〈=600000)
bonus=bonus4+(i-400000)*0.03;
else if(i〈=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
printf(「bonus=%d「,bonus);
}
==============================================================
【程序3】
題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
1.程序分析:在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後
的結果滿足如下條件,即是結果。請看具體分析:
2.程序源代碼:
#include 「math.h「
main()
{
long int i,x,y,z;
for (i=1;i〈100000;i++)
{ x=sqrt(i+100); /*x為加上100後開方後的結果*/
y=sqrt(i+268); /*y為再加上168後開方後的結果*/
if(x*x==i+100&&y*y==i+268)/*如果一個數的平方根的平方等於該數,這說明此數是完全平方數*/
printf(「\n%ld\n「,i);
}
}
==============================================================
【程序4】
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊
情況,閏年且輸入月份大於3時需考慮多加一天。
2.程序源代碼:
main()
{
int day,month,year,sum,leap;
printf(「\nplease input year,month,day\n「);
scanf(「%d,%d,%d「,&year,&month,&day);
switch(month)/*先計算某月以前月份的總天數*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf(「data error「);break;
}
sum=sum+day; /*再加上某天的天數*/
if(year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/
leap=1;
else
leap=0;
if(leap==1&&month〉2)/*如果是閏年且月份大於2,總天數應該加一天*/
sum++;
printf(「It is the %dth day.「,sum);}
==============================================================
【程序5】
題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。
1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x〉y則將x與y的值進行交換,
然後再用x與z進行比較,如果x〉z則將x與z的值進行交換,這樣能使x最小。
2.程序源代碼:
main()
{
int x,y,z,t;
scanf(「%d%d%d「,&x,&y,&z);
if (x〉y)
{t=x;x=y;y=t;} /*交換x,y的值*/
if(x〉z)
{t=z;z=x;x=t;}/*交換x,z的值*/
if(y〉z)
{t=y;y=z;z=t;}/*交換z,y的值*/
printf(「small to big: %d %d %d\n「,x,y,z);
}
==============================================================
【程序6】
題目:用*號輸出字母C的圖案。
1.程序分析:可先用』*』號在紙上寫出字母C,再分行輸出。
2.程序源代碼:
#include 「stdio.h「
main()
{
printf(「Hello C-world!\n「);
printf(「 ****\n「);
printf(「 *\n「);
printf(「 * \n「);
printf(「 ****\n「);
}
==============================================================
【程序7】
題目:輸出特殊圖案,請在c環境中運行,看一看,Very Beautiful!
1.程序分析:字元共有256個。不同字元,圖形不一樣。
2.程序源代碼:
#include 「stdio.h「
main()
{
char a=176,b=219;
printf(「%c%c%c%c%c\n「,b,a,a,a,b);
printf(「%c%c%c%c%c\n「,a,b,a,b,a);
printf(「%c%c%c%c%c\n「,a,a,b,a,a);
printf(「%c%c%c%c%c\n「,a,b,a,b,a);
printf(「%c%c%c%c%c\n「,b,a,a,a,b);}
==============================================================
【程序8】
題目:輸出9*9口訣。
1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。
2.程序源代碼:
#include 「stdio.h「
main()
{
int i,j,result;
printf(「\n「);
for (i=1;i〈10;i++)
{ for(j=1;j〈10;j++)
{
result=i*j;
printf(「%d*%d=%-3d「,i,j,result);/*-3d表示左對齊,佔3位*/
}
printf(「\n「);/*每一行後換行*/
}
}
==============================================================
【程序9】
題目:要求輸出國際象棋棋盤。
1.程序分析:用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格。
2.程序源代碼:
#include 「stdio.h「
main()
{
int i,j;
for(i=0;i〈8;i++)
{
for(j=0;j〈8;j++)
if((i+j)%2==0)
printf(「%c%c「,219,219);
else
printf(「 「);
printf(「\n「);
}
}
==============================================================
【程序10】
題目:列印樓梯,同時在樓梯上方列印兩個笑臉。
1.程序分析:用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數。
2.程序源代碼:
#include 「stdio.h「
main()
{
int i,j;
printf(「\1\1\n「);/*輸出兩個笑臉*/
for(i=1;i〈11;i++)
{
for(j=1;j〈=i;j++)
printf(「%c%c「,219,219);
printf(「\n「);
}
}
【程序11】
題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月
後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
1.程序分析:兔子的規律為數列1,1,2,3,5,8,13,21....
2.程序源代碼:
main()
{
long f1,f2;
int i;
f1=f2=1;
for(i=1;i〈=20;i++)
{ printf(「%12ld %12ld「,f1,f2);
if(i%2==0) printf(「\n「);/*控制輸出,每行四個*/
f1=f1+f2; /*前兩個月加起來賦值給第三個月*/
f2=f1+f2; /*前兩個月加起來賦值給第三個月*/
}
}
==============================================================
【程序12】
題目:判斷101-200之間有多少個素數,並輸出所有素數。
1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,
則表明此數不是素數,反之是素數。
2.程序源代碼:
#include 「math.h「
main()
{
int m,i,k,h=0,leap=1;
printf(「\n「);
for(m=101;m〈=200;m++)
{ k=sqrt(m+1);
for(i=2;i〈=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap) {printf(「%-4d「,m);h++;<br>if(h%10==0)<br>printf(「\n「);<br> }
leap=1;
}
printf(「\nThe total is %d「,h);
}
==============================================================
【程序13】
題目:列印出所有的「水仙花數」,所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數
本身。例如:153是一個「水仙花數」,因為153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。
2.程序源代碼:
main()
{
int i,j,k,n;
printf(「』water flower』number is:「);
for(n=100;n〈1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出個位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf(「%-5d「,n);
}
}
printf(「\n「);
}
==============================================================
【程序14】
題目:將一個正整數分解質因數。例如:輸入90,列印出90=2*3*3*5。程序分析:對n進行分解質因數,應先找到一個最小的質數k,然後按下述步驟完成:
(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。
(2)如果n〈〉k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正整數你n,
重復執行第一步。
(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。2.程序源代碼:
/* zheng int is divided yinshu*/
main()
{
int n,i;
printf(「\nplease input a number:\n「);
scanf(「%d「,&n);
printf(「%d=「,n);
for(i=2;i〈=n;i++)
{
while(n!=i)
{
if(n%i==0)
{ printf(「%d*「,i);
n=n/i;
}
else
break;
}
}
printf(「%d「,n);}
==============================================================
【程序15】
題目:利用條件運算符的嵌套來完成此題:學習成績〉=90分的同學用A表示,60-89分之間的用B表示,
60分以下的用C表示。
1.程序分析:(a〉b)?a:b這是條件運算符的基本例子。
2.程序源代碼:
main()
{
int score;
char grade;
printf(「please input a score\n「);
scanf(「%d「,&score);
grade=score〉=90?』A』:(score〉=60?』B』:』C』);
printf(「%d belongs to %c「,score,grade);
}
==============================================================
【程序16】
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
1.程序分析:利用輾除法。2.程序源代碼:
main()
{
int a,b,num1,num2,temp;
printf(「please input two numbers:\n「);
scanf(「%d,%d「,&num1,&num2);
if(num1 { temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!=0)/*利用輾除法,直到b為0為止*/
{
temp=a%b;
a=b;
b=temp;
}
printf(「gongyueshu:%d\n「,a);
printf(「gongbeishu:%d\n「,num1*num2/a);
}
==============================================================
【程序17】
題目:輸入一行字元,分別統計出其中英文字母、空格、數字和其它字元的個數。
1.程序分析:利用while語句,條件為輸入的字元不為』\n』.
2.程序源代碼:
#include 「stdio.h「
main()
{char c;<br>int letters=0,space=0,digit=0,others=0;<br>printf(「please input some characters\n「);<br>while((c=getchar())!=』\n』)<br>{<br>if(c〉=』a』&&c〈=』z』||c〉=』A』&&c〈=』Z』)<br>letters++;<br>else if(c==』 』)<br>space++;<br>else if(c〉=』0』&&c〈=』9』)<br>digit++;<br>else<br>others++;<br>}
printf(「all in all:char=%d space=%d digit=%d others=%d\n「,letters,
space,digit,others);
}
==============================================================
【程序18】
題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時
共有5個數相加),幾個數相加有鍵盤控制。
1.程序分析:關鍵是計算出每一項的值。
2.程序源代碼:
main()
{
int a,n,count=1;
long int sn=0,tn=0;
printf(「please input a and n\n「);
scanf(「%d,%d「,&a,&n);
printf(「a=%d,n=%d\n「,a,n);
while(count〈=n)
{
tn=tn+a;
sn=sn+tn;
a=a*10;
++count;
}
printf(「a+aa+...=%ld\n「,sn);
}
==============================================================
【程序19】
題目:一個數如果恰好等於它的因子之和,這個數就稱為「完數」。例如6=1+2+3.編程
找出1000以內的所有完數。
1. 程序分析:請參照程序〈--上頁程序14.
2.程序源代碼:
main()
{
static int k[10];
int i,j,n,s;
for(j=2;j〈1000;j++)
{
n=-1;
s=j;
for(i=1;i {
if((j%i)==0)
{n++;
s=s-i;
k[n]=i;
}
}
if(s==0)
{
printf(「%d is a wanshu「,j);
for(i=0;i printf(「%d,「,k);
printf(「%d\n「,k[n]);
}
}
}
==============================================================
【程序20】
題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在
第10次落地時,共經過多少米?第10次反彈多高?
1.程序分析:見下面注釋
2.程序源代碼:
main()
{
float sn=100.0,hn=sn/2;
int n;
for(n=2;n〈=10;n++)
{
sn=sn+2*hn;/*第n次落地時共經過的米數*/
hn=hn/2; /*第n次反跳高度*/
}
printf(「the total of road is %f\n「,sn);
printf(「the tenth is %f meter\n「,hn);
}
Ⅹ C語言程序:求1+3+5+…+99
C語言程序:求1+3+5+…+99的方法:
int main()
{
int i,sum=0;
for(i=1;i<100;i+=2)
sum+=i;
printf("1+3+5+……+99=%d ",sum);
return 0;
}
(10)c語言高級編程實例擴展閱讀:
C語言是普適性最強的一種計算機程序編輯語言,它不僅可以發揮出高級編程語言的功用,還具有匯編語言的優點,因此相對於其它編程語言,它具有自己獨特的特點。具體體現在以下三個方面:
1、廣泛性。
C 語言的運算范圍的大小直接決定了其優劣性。C 語言中包含了34種運算符,因此運算范圍要超出許多其它語言,此外其運算結果的表達形式也十分豐富。此外,C 語言包含了字元型、指針型等多種數據結構形式,因此,更為龐大的數據結構運算它也可以應付。
2、簡潔性。
9類控制語句和32個KEYWORDS是C語言所具有的基礎特性,使得其在計算機應用程序編寫中具有廣泛的適用性,不僅可以適用廣大編程人員的操作,提高其工作效率,同時還能夠支持高級編程,避免了語言切換的繁瑣。
3、結構完善。
C語言是一種結構化語言,它可以通過組建模塊單位的形式實現模塊化的應用程序,在系統描述方面具有顯著優勢,同時這一特性也使得它能夠適應多種不同的編程要求,且執行效率高。