- C語言從入門到精通(第4版)
- 李嵐編著
- 4660字
- 2021-07-01 16:24:50
第1章 步入C語言的世界——Hello C
C語言是國際上廣泛流行的計算機高級程序設計語言,從誕生就注定了會受到世界的關注。它是世界上最受歡迎的語言之一,具有強大的功能,許多軟件都是用C語言編寫的。學習好C語言,可以為以后的程序開發打下堅實的基礎?,F在就跟筆者一起步入C語言的世界吧。
本章要點(已掌握的在方框中打鉤)
□C語言的開發環境
□開始C編程——我的第一個C程序
1.1 C語言的開發環境

學習一門編程語言之前,首先要做的就是熟悉這門語言所使用的開發軟件——開發環境。下面介紹一下C語言常用的開發環境。
1.1.1 C語言常用的開發環境
C語言常用的集成開發環境(Integrated Development Environment,IDE)和編譯器有Microsoft Visual C++6.0、Microsoft Visual C++.NET、Turbo C、Borland C++Builder、Code::Blocks、Dev-C++、KDevelop、Eclipse CDT等。IDE主要是在程序員開發時提供各種軟件應用組件,而受程序員歡迎的IDE都有一個共同點,那就是用戶界面非常有吸引力。
01 Microsoft Visual C++
Microsoft Visual C++不僅是一個C++編譯器,而且是一個基于Windows操作系統的功能強大的可視化集成開發環境。自1993年微軟公司推出Visual C++1.0后,隨著其新版本的不斷問世,Visual C++已成為專業程序員進行軟件開發的重要工具。雖然微軟公司推出了Visual C++.NET(Visual C++7.0),但它的應用有很大的局限性,只適用于Windows 2000、Windows XP和Windows NT 4.0。所以實際中,更多的是以Microsoft Visual C++6.0為平臺。Microsoft Visual C++6.0由許多組件組成,包括編輯器、調試器以及程序向導AppWizard、類向導Class Wizard等。這些組件通過一個名為Developer Studio的組件集成為和諧的開發環境。Microsoft Visual C++較受推崇的是Microsoft Visual C++6.0,簡稱VC 6.0。
02 Microsoft Visual C++.NET
Microsoft Visual Studio.NET是Microsoft Visual Studio 6.0的后續版本,是一套完整的開發工具集。它在.NET平臺下調用Framework的類庫,功能強大,其中包含了Visual C++開發組件。
03 Turbo C
Turbo C是美國Borland公司的產品,是一個基于DOS平臺的應用程序,也可以在Windows環境下運行。目前比較新的版本為Turbo C 3.0,常用的版本是Turbo C 2.0。Turbo C 2.0是C語言集成環境,它集編輯、編譯、連接和運行功能于一身,使得C程序的編輯、調試和測試非常簡捷,編譯和連接速度極快,使用也很方便。它提供了兩種編譯方式,一種是命令行方式,另一種是集成開發環境。
04 Borland C++Builder
Borland C++Builder是Borland公司繼Delphi之后推出的一款高性能集成開發工具,具有可視化的開發環境,是基于C++語言的快速應用程序開發工具。C++Builder充分利用已經發展成熟的Delphi的可視化組件庫,吸收Borland C++優秀編譯器的諸多優點,結合先進的基于組件的程序設計技術,已成為一個非常成熟的可視化應用程序開發工具。C++Builder可以快速、高效地開發出基于Windows環境的各類程序,尤其在數據庫應用和網絡應用方面,更是一個十分理想的軟件開發平臺。
05 Code::Blocks
Code::Blocks是一個開放源碼的全功能的跨平臺C/C++集成開發環境,在Linux、macOS、Windows操作系統上都可以運行,且自身體積小,安裝非常方便。它擁有簡潔的用戶界面,高效的編譯器和調試器等,而且不需要購買許可證,上手難度不高,是一款輕量卻又不失強大功能的好軟件,支持GCC和g++(Linux操作系統下)。Code::Blocks由純粹的C++語言開發完成,它使用了著名的圖形界面庫wxWidgets(2.6.2 unicode版)。
不同版本的C語言編譯系統,所實現的語言功能和語法規則又略有差別,因此讀者應了解所用的C語言編譯系統的特點,這可以參閱有關手冊。
本書主要是以Code::Blocks 16.01為程序開發環境,因為它功能完善,操作簡便,界面友好,適合初學者開發使用。它除了能夠完成最基本的編輯、編譯、調試的功能,還具備以下特點。
(1)開源。
開源全稱為開放源代碼。開源軟件的本質是開放,也就是任何人都可以得到軟件的源代碼,并在版權限制范圍內使用。
(2)跨平臺、跨編譯器。
Windows、Linux、mac OS操作系統都可以使用,即使將來更換了設備也無須擔憂。支持多款編譯器,只要簡單配置就可以輕松切換GCC/g++、Visual C++、Borland C++、Intel C++等20多款編譯器。
(3)插件式框架。
初學者可能無法理解框架的概念,簡單說就是方便添加各種小功能。
(4)采用C++寫成。
運行環境非常簡單,不用安裝其他龐雜的架構。
(5)升級頻繁與維護良好。
幾乎每個月都有升級包,還有熱心網友提供的各種功能包。
(6)內嵌可視化GUI設計。
IDE的圖形界面,采用了wxWidgets。
1.1.2 Code::Blocks開發環境
Code::Blocks 16.01下載完成后會得到一個安裝包(.exe可執行文件),雙擊該文件即可開始安裝。具體安裝過程如下。
雙擊.exe文件,直接進入安裝程序,如下圖(左)所示,單擊【Next】按鈕。
同意Code::Blocks的各項條款,如下圖(右)所示,單擊【I Agree】按鈕。

選擇要安裝的組件,默認選擇Full全部安裝,如下圖(左)所示,然后單擊【Next】按鈕。
選擇安裝路徑時,默認位置即可,也可以安裝在任意位置,但是路徑中不要包含中文,如下圖(右)所示,然后單擊【Install】按鈕。

等待安裝。安裝完成后,如下圖(左)所示,單擊【Finish】按鈕。
打開【開始】→【所有程序】,會發現多了一個名為“CodeBlocks”的文件夾,如下圖(右)所示,證明Code::Blocks已安裝成功,同時在桌面上也會產生CodeBlocks的快捷方式。

啟動Code::Blocks 16.01,窗口如下圖所示。

1.1.3 手機編譯器
對于沒有計算機,或者計算機不在身邊的讀者,也可以使用手機隨時學習C語言,只需要在手機上安裝C語言的編譯器。不過由于手機屏幕限制,虛擬鍵盤使用非常不便,因為要經常在英文、數字、符號之間切換,代碼編寫效率較低。
目前,比較常用的手機編譯器有C4droid、C語言編譯器、Quoda、AIDE、CppDroid、Mobile C等。這些軟件需要到手機的“應用商店”或者官網中下載安裝,有些是需要付費的。
本書主要介紹在安卓系統中使用的一個用戶友好、功能強大的C/C++IDE和編譯器C4droid。C4droid默認使用TCC(Tiny C Compiler)為編譯器,可以選擇安裝GCC插件和SDL插件庫(不需要ROOT)。選用GCC后,可以用SDL(簡單直控媒體層庫,需安裝SDL plugin for C4droid)和QT(Nokia官方開發庫,需安裝SDL plugin for C4droid);也可以開發Native Android App(需安裝SDL plugin for C4droid),就像Google NDK一樣。GCC插件的4.7.2版本提供了示例程序,包含SDL、Android Native、QT和命令行測試程序源碼。
C4droid支持離線C語言編譯器、源代碼編輯器、語法高亮、標簽、自動補全代碼、代碼格式化、文件關聯和撤銷/重做、調試器、可定制的圖形用戶界面等常用功能,編譯時間隨手機CPU主頻而定,主頻越高編譯越快,支持將程序打包成.apk安裝包。
下面介紹筆者安裝C4droid的具體過程。
首先在計算機上搜索“C4droid安卓漢化版”,通過手機掃碼或者用連接線的方式把手機連接到計算機上,直接把軟件下載到手機上并進行安裝,如下圖(左)所示。
安裝成功后,在手機桌面上會出現C4droid的圖標,如下圖(右)所示。

在安裝過程中出現“Do you want to install GCC?”提示,這時選擇【Yes】。當出現“You need to install GCC for C4droid from Google Play,proceed?”提示時,選擇【OK】。
GCC和SDL也可以在軟件安裝完成后單獨安裝。單擊手機桌面上的C4droid圖標,啟動C4droid,單擊右上角下拉按鈕,選擇【Preferences】選項,找到【Install GCC】和【Install SDL】就可以進行安裝了,如下圖所示。



當然讀者也可以直接在手機的“應用商店”中搜索“C4droid”,可以找到很多類似的應用程序。
1.2 開始C編程——我的第一個C程序

C語言集成開發環境比較多,沒有必要對每一種開發環境都熟練地掌握,只需要精通一種開發環境即可。下面在開發環境中學習編寫第一個C程序。
1.2.1 程序編寫及運行流程
匯編程序要轉換成可執行文件(可以理解為能夠“單獨運行”的文件,一般在Windows操作系統中常見的可執行文件為.exe、.sys、.com文件等),需要通過匯編器來實現。那么,對于用C語言編寫的代碼,是如何把它轉換為可執行文件的呢?
要轉換C語言源代碼為可執行文件,需要借助的工具是編譯器(Compiler),轉換的過程叫作編譯。經過編譯生成目標程序,目標文件是機器代碼,是不能夠直接執行的,它需要有其他文件或者其他函數庫輔助,才能生成最終的可執行文件,這個過程稱之為連接,使用的工具叫作連接器。
C程序的編寫和運行流程如下圖所示。

我們把編寫的代碼稱為源文件或者源代碼,輸入、修改源文件的過程稱為編輯。在這個過程中還要對源代碼進行布局排版,使之有層次、方便閱讀,并輔以一些說明的文字,幫助我們理解代碼的含義,這些文字稱為注釋。它們僅起到說明的作用,不是功能代碼,不會被執行。編輯的源代碼經過保存,生成擴展名為“.c”的文件。這些源文件并不能夠直接運行,而需要經過編譯,把源文件轉換為以“.obj”為擴展名的目標文件。此時目標文件再經過一個連接的環節,最終生成以“.exe”為擴展名的可執行文件。計算機系統能夠運行的是可執行文件。
1.2.2 在Code::Blocks中開發C程序
啟動Code::Blocks 16.01并新建程序。
范例1-1 使用Code::Blocks 16.01創建C程序并運行。
第1步:創建.c文件,如下圖(左)所示,在Code::Blocks窗口中單擊【Create a new project】。
當然也可以用菜單或者功能按鈕區域里的命令按鈕來創建新文件。在【New from template】對話框中選擇【Files】→【C/C++source】,如下圖(右)所示,單擊【Go】按鈕。

在【C/C++source】對話框中選擇【C】,如下圖(左)所示,單擊【Next】按鈕。
在“Filename with full path:”下的文本框中輸入完整的文件名“1-1.c”,注意不要出現全角字符,然后單擊文本框右邊的【...】路徑選擇向導按鈕,如下圖(右)所示,選擇文件保存路徑后,單擊【Finish】按鈕。

在主窗口的工作區中可以看到多了一個名字為“1-1.c”的文件選項卡[見下圖(左)],現在可以在這里面輸入以下代碼(代碼1-1.txt)。
#include <stdio.h> /*包含標準輸入輸出頭文件*/ int main (void) /*主函數*/ { /*函數體開始*/ printf(“Hello C!\n”); /*在屏幕上輸出Hello C!*/ return 0; /*主函數結束后返回值0*/ } /*函數體結束*/
第2步:運行程序。
單擊功能按鈕區中的【Build and Run】按鈕,程序直接完成編譯、連接和運行工作,如下圖(右)所示。

在程序執行窗口中輸出程序的結果,如下圖所示。

提示
如果程序在編譯時有語法錯誤,則不出現運行結果,會在代碼編輯工作區下面的“Logs & others”窗口中顯示“第×行……(錯誤信息)”,這時可以按照這些提示信息修改代碼,重新編譯、運行,直到沒有語法錯誤,并且能夠在程序執行窗口中輸出程序的結果為止。對應快捷鍵:編譯【Ctrl+F9】,運行【Ctrl+F10】。
1.2.3 在手機編譯器中開發C程序
單擊手機桌面上的C4droid圖標,啟動C4droid。
第1步:在提示行中直接輸入代碼,如下圖(左)所示。
第2步:運行程序。
單擊窗口底部功能按鈕區中的【RUN】,程序直接完成編譯、連接和運行工作。如果代碼有語法錯誤,窗口中會出現錯誤提示,如下圖(右)所示,提示錯誤出現在第一行中,點擊屏幕,回到編輯窗口中修改所有錯誤。

重新單擊【RUN】,直到在程序執行窗口中輸出正確的結果,如下圖(左)所示。此時點擊屏幕回到編輯窗口中。
第3步:保存程序。
窗口底部功能按鈕區中的【OPEN】【NEW】【SAVE】【COMPILE】可以打開文件、創建新文件、保存文件、編譯文件。如點擊【SAVE】,在提示窗口中輸入完整的文件名即可保存,如下圖(右)所示。

1.3 高手點撥

學習任何一種編程語言,實踐練習都是十分重要的,不要只看不練、眼高手低。要活學活用,看完課本中的范例之后,自己要在開發環境中獨立操作一遍,不能認為簡單而不親手去操作。在編寫C語言程序時,一定要注意養成好的書寫習慣,好的書寫習慣是一名優秀程序員具備的基本修養。一段程序可以反映一個人的編程水平,所以,針對C語言編程的書寫,有以下4點建議。
(1)在每個程序文件最前面注釋編寫日期、程序的功能。
(2)代碼格式要清晰,避免錯亂;每段代碼后面要注釋這段代碼的功能,便于以后的修改和查看。
(3)程序的模塊化,也就是說對于一些功能復雜的程序,除了main()函數之外,還要定義其他函數,以免main()函數中的程序煩瑣,也便于其他函數調用某個功能模塊。例如,一個程序既要對整數排序,又要實現比較大小,那么可以將排序的程序放在函數A中,將比較大小的程序放在函數B中,然后在main()函數中調用這兩個函數就可以了。如果其他函數中的整數也要排序,只需調用排序函數A就可以了,避免反復書寫同樣功能的程序段。
(4)函數命名規范化,例如,某段程序專門實現排序,可以將這段程序放到一個自定義函數中,將這個函數命名為“order”。因為order有排序的意思,這樣命名可以一目了然,閱讀程序的人通過函數名就可以知道該函數實現什么樣的功能,便于理解。
1.4 實戰練習

在Code::Blocks中編寫C程序,在程序執行窗口中輸出如下一行內容:“你好,世界!”
- 移動UI設計(微課版)
- Visual Basic 6.0程序設計計算機組裝與維修
- 前端跨界開發指南:JavaScript工具庫原理解析與實戰
- Visual Basic編程:從基礎到實踐(第2版)
- Manga Studio Ex 5 Cookbook
- Mastering matplotlib
- Cassandra Design Patterns(Second Edition)
- Java深入解析:透析Java本質的36個話題
- 飛槳PaddlePaddle深度學習實戰
- Java EE 8 Application Development
- Python深度學習:模型、方法與實現
- C++從入門到精通(第5版)
- Illustrator CC平面設計實戰從入門到精通(視頻自學全彩版)
- Hands-On Neural Network Programming with C#
- Android Development Tools for Eclipse