1-為什么學(xué)習(xí)C語言
你可能會從別的老師、師兄那得到這樣的答案——“將來有可能會用到的”、“這是基本的程序素養(yǎng),鍛煉一下以后有好處”。
你為什么學(xué)?
1) 只是希望考試,考完不準(zhǔn)備繼續(xù)用,但還是想考好。
2) 希望投身計算機科學(xué),獲得可以和優(yōu)秀的人一起共事的機會,進(jìn)入大企業(yè)創(chuàng)造社會價值或進(jìn)入優(yōu)秀的研究院改變世界。
2-用C語言編程的環(huán)境
開發(fā)工具的選擇
編程環(huán)境自行選擇,自行百度!
我用的是Linux環(huán)境下的vim。
對于程序語言的初學(xué)者來說,不要輕易地使用太復(fù)雜的 IDE(integrated development environment,集成式開發(fā)環(huán)境) 。IDE 會隱藏很多本來應(yīng)該讓你學(xué)習(xí)到的知識,讓你喪失很多學(xué)習(xí)的樂趣,也會讓你變“笨”(如果你堅持要使用 IDE,對于初學(xué)的你,我們推薦你使用 Code::Blocks 或 Dev C++ 這種相對輕量的 IDE)。
推薦你使用 Vim 編輯器。
如果可能,你都可以試一試,找到你最喜歡、用起來最順手的那個(在編輯器的選擇上沒有“最好”,只有“最適合你”,千萬不要太糾結(jié))。

從代碼到程序的完整過程如下圖:
從代碼到程序

你編寫的 C 語言程序通常以.c結(jié)尾,例如main.c。對于一個文件,可以通過執(zhí)行gcc -o program main.c進(jìn)行 編譯(compile) ,告訴一個叫gcc的編譯器,我們要編譯生成一個名叫program的可執(zhí)行文件(用-o program進(jìn)行說明),被編譯的代碼文件是 main.c。
如果編譯成功,我們在同一個目錄下可以得到一個編譯后的可以執(zhí)行的program程序。再通過執(zhí)行./program的方式你就可以運行這個程序了。
編寫第一個程序的步驟:
1)在配置好的Linux環(huán)境里,輸入 vim a.c 進(jìn)入文件,按 i 開始編輯寫程序代碼
2)內(nèi)容如下:
1 #include <stdio.h>
2 int main() {
3 printf("Hello World\n");
4 return 0;
5 }
3)然后按Ese,輸入 :wq (冒號wq是保存退出的意思)回車退出
4)編譯程序:gcc -o program a.c
5)執(zhí)行程序./program , 然后命令行輸出 Hello World
3-你的第一個C語言程序
如圖,想一想下面的幾個問題。

你剛剛用過printf來輸出了“Hello”。你有沒有想問一下printf是個什么東西呢?其實,我們通過#include<stdio.h>這行代碼引入了一個名為stdio( Standard Input & Output)的 庫(library) ,而printf則是一個在這個庫中被定義的函數(shù)(function),因為我們引入了這個庫,你就可以用這個函數(shù)了。
而其中用引號包裹的"Hello"則被稱為函數(shù)接收的一個參數(shù)(parameter 或 argument)。當(dāng)printf函數(shù)只有一個像我們寫的"Hello"這樣的參數(shù)時,會直接把Hello輸出。至于其它printf函數(shù)的用法,你將在之后的課程中學(xué)習(xí)到。

我們已經(jīng)知道,這段代碼中#include <stdio.h>幫助我們引入了一個用于標(biāo)準(zhǔn)輸入輸出的庫,這其中呢,就包括了我們用于輸出的printf函數(shù)。
我們會發(fā)現(xiàn),除了我們已知的部分外,剩下的代碼如下:
1 int main() {
2 return 0;
3 }
這部分代碼其實完成了一個名叫main的函數(shù)的實現(xiàn)。它是一個特殊的函數(shù),多數(shù)時候main函數(shù)被規(guī)定為 C 語言程序運行的入口。我們一系列的程序邏輯的擬寫,都需要在main這個函數(shù)的大括號所包圍的范圍內(nèi)完成。也就是說,當(dāng)我們的 C 語言程序被編譯、運行時,一切有效的邏輯,將會從main函數(shù)大括號內(nèi)第一行語句開始。
這份代碼中你尚未理解的部分,應(yīng)該只剩下int和return 0了吧?

在這里,int表示了我們預(yù)期的函數(shù)的返回值類型—— 整數(shù)(integer) , int就是取自整數(shù)英文單詞“integer”的前三個字母。而return 0就是在main函數(shù)的結(jié)束位置將一個整數(shù) 0 作為main函數(shù)的 返回值(return value) 交給 操作系統(tǒng)(operating system) 。操作系統(tǒng)接收到程序返回的 0 時就會認(rèn)為程序正常結(jié)束,而如果接收到其他數(shù)值(無論是正整數(shù)還是負(fù)整數(shù))則會認(rèn)為程序非正常結(jié)束。
函數(shù)的基本結(jié)構(gòu)
在 C 語言中,我們可以實現(xiàn)一些自己的函數(shù),形如:
1 [返回值類型] [函數(shù)名]([參數(shù)]) {
2 [函數(shù)內(nèi)的語句]
3 return [返回值];
4 }

函數(shù)調(diào)用
我們也可以在 C 語言中用通過[函數(shù)名]([傳入?yún)?shù)值])的形式調(diào)用我們的函數(shù),讓函數(shù)內(nèi)語句實現(xiàn)的邏輯被執(zhí)行。在之后的課程中我們用專門的一章對函數(shù)進(jìn)行討論。

無處不在的函數(shù)
“函數(shù)的英文function,直譯過來就是【功能】,每一個函數(shù)其實就對應(yīng)了一種功能。編程就是發(fā)揮不同功能的積木的堆積,搭好了就能解決巨大的問題”
C語言是由函數(shù)組成的
我們之后開發(fā) C 語言程序的過程,其實也是將包含了各自邏輯意義的函數(shù)互相調(diào)用的過程(就像我們已經(jīng)在main函數(shù)中調(diào)用了printf函數(shù)這樣)。只不過這些函數(shù)中,有一些是外部的庫中已經(jīng)定義好的,我們引入了庫就可以使用,比如printf是一個在stdio的庫中已經(jīng)定義好了可以直接使用的,而另一些可能需要你自己去定義、實現(xiàn)之后,你才可以進(jìn)一步去進(jìn)行調(diào)用。
不知道你暈菜了沒有……如果沒有暈,老師在這里贊一下你的“天資聰慧”!如果你已經(jīng)暈了,那也沒關(guān)系,后面我們還會給你很多的機會慢慢弄懂這些內(nèi)容的。
4-將變量嵌入輸出
#include <stdio.h>
int main() {
int number;
char alpha;
// 在上面聲明了兩個變量,請在下面給他們賦值
number = 1;
alpha = 'A';
printf("%c is %dst letter",alpha,number);
return 0;
}

第一個參數(shù)中的占位符的數(shù)量與printf除第一個參數(shù)外的其他參數(shù)數(shù)量相等,并且一一對應(yīng)。例如,作為函數(shù)第一個參數(shù)的字符串"%c is %dst letter"中
·第一個占位符是 %c,那么它就對應(yīng)了待嵌入的第一個變量 alpha ;
·第二個占位符是 %d,那么它就對應(yīng)了帶嵌入的第一個變量 number ;
·如果printf 第一個參數(shù)的字符串中有n個占位符,那么之后也應(yīng)該有n個 待嵌入的變量作為參數(shù)與之對應(yīng)。
5-變量名的使用
在C語言中合法的變量名需要滿足以下條件:
·由大寫字母、小寫字母、數(shù)字、下劃線
·不能以數(shù)字開頭
·不能是int、return等特定含義的保留字
除此之外,為了保證程序容易被人理解,我們會盡可能的避免a,b之類沒有具體含義的命名方式,而根據(jù)變量所代表的實際意義進(jìn)行命名。
例如:·year表示年 ·month表示月 ·weather表示天氣

6-變量的作用域
在之前的課程內(nèi)容中,我們學(xué)習(xí)了變量的概念,并且對變量可以被使用的范圍 —— 作用域進(jìn)行了解釋。我們說,我們可以簡單的理解一個變量的 作用域(scope) 一般可以被界定為變量聲明語句之后、包裹了它的聲明語句的最內(nèi)一層 {} 之內(nèi)。例如下圖中,對于變量 alpha,圖中的綠色標(biāo)記了包裹了它的聲明語句的最內(nèi)一層 {} 所在的區(qū)域;而黃色的剪頭標(biāo)記出了自它聲明后,它的實際作用域范圍(也就是作用域)。
讀一下下面這個 C 語言程序,選出關(guān)于這個程序描述的所有正確選項(請注意,如果輸出格式的引號中有 \n,程序輸出的位置將換行)。
1 #include <stdio.h>
2 int main(){
3 int year;
4 year = 2011;
5 {
6 int month;
7 month = 5;
8 printf("%d年%d月\n", year, month);
9 year = 2016;
10 }
11 int month;
12 month = 3;
13 printf("%d年%d月\n", year, month);
14 return 0;
15 }

浙公網(wǎng)安備 33010602011771號