1. C語言入門
計算機程序語言主要是通過代碼實例來學習,畢竟它是一項應用工具嘛,對實踐要求很高。而且寫出代碼併成功運行總能給人一種學習的積極正反饋,讓你充滿成就感,高興得停不下來~
來來來,跟着panda,拋開IDE集成開發環境,在Linux操作系統下使用vim編輯器寫C語言腳本,我們👇開始。
1.1 瞭解C語言程序的組成
(1)在Unix操作系統中,首先建立一個以“.c”爲文件擴展名的文本,因爲panda使用的是Linux操作系統,便通過“vi”建立了一個名爲“hello.c”的文本。代碼內容如下:
雙斜槓 //
後面的內容表示註釋哦~
#include <stdio.h> // 用於告訴編譯器在本程序中包含標準輸入/輸出庫的信息
main() // main函數通常會調用其他函數的幫助來完成某些工作;()內填寫參數信息,在這裏main函數不需要任何參數,因此用空參數表()表示
{ // 花括號{} 用來把函數中的語句括起來
printf("hello,world\n"); //在這裏,main函數調用printf函數的幫助(一個用於打印輸出的庫函數):在此打印雙引號中間的字符串
}
(2)然後通過在命令行中輸入命令cc hello.c
(進行編譯過程);
(3)如果內容沒什麼錯誤,編譯過程順利進行,會在當前目錄中生成一個可執行文件"a.out";
(4)最後,在命令行中輸入./a.out
即可打印出“hello,world”。
Tips:
- 爲什麼非要“./”再加上可執行文件名稱呢?
還記得Linux 之 Bash -- shell 的變量功能(二)裏曾經提到的變量 PATH 嗎?文件執行時,linux 系統會去 PATH 裏尋找執行所需要的文件,而大多數沒有特殊設定的情況下,只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH裏(當前目錄一般不在其中),因而在這裏輸入a.out
linux系統是找不到執行命令的,必須增加“./”告訴系統 :在當前目錄下尋找。
1.1 語法小結
- 一個C語言程序,無論其大小如何,都是由函數和變量組成的
-- 函數的作用:指定所要執行的計算操作(其中包含一些語句)
-- 變量的作用 :用於存儲計算過程中使用的值
-- 注意:main是一個特殊的函數名,每個程序都從main函數的起點開始執行,這意味着每個程序都必須在某個位置包含一個main函數- 函數之間進行數據交換的一種方法是調用函數向被調用函數提供一個值(稱爲參數)列表。(參數列表跟在函數名後面使用“()”括起來)
- 函數中的語句用“{}”括起來
- C語言提供的一些轉義字符序列:\n(換行符);\t(製表符);\b(回退符);"(雙引號);\(反斜槓本身)
1.2 瞭解變量與算數表達式
(1)同樣,首先通過vim編輯器建立一個以“.c”爲文件擴展名的文本1-2.c
吧,代碼如下:
#include <stdio.h>
/* 當fahr=0,20,...,300時,分別打印華氏溫度與攝氏溫度對照表 */
main()
{ //在C語言中,所有變量都必須先聲明後使用(聲明 通常放在函數起始處,在任何可執行語句前)
int fahr,celsius; // int 表示其後所列變量爲整數(聲明 變量的屬性)
int lower,upper,step;
lower=0; /*溫度表的下限*/ //賦值語句:這裏用來爲變量設置初值,各條語句均以分號結束
upper=300; /*溫度表的上限*/
step=20; /*步長*/
fahr=lower; // 爲fahr賦值,起始爲0
while(fahr<=upper){ //這裏使用while循環語句重複輸出各行; “()“內爲循環條件;以下3句均爲此while語句的循環體
celsius=5*(fahr-32)/9; //(想知道爲什麼不直接寫成5/9嗎?-->tips)
printf("%d\t%d\n",fahr,celsius); // %d:指定一個整型參數;\t:兩者之間留一個製表符的空間;\n:換行
fahr=fahr+step; //while語句的循環體
}
}
(2)然後通過在命令行中輸入命令cc 1-2.c
(進行編譯過程);
(3)如果內容沒什麼錯誤,編譯過程順利進行,會在當前目錄中生成一個可執行文件"a.out";
(4)最後,在命令行中輸入./a.out
即可打印出一系列華氏溫度與攝氏溫度對照表👇。
Tips:
- 使用 縮進方式 提高程序的 邏輯結構
-- 正確的縮進及保留適當空格的程序設計風格對程序的易讀性非常重要
-- 建議每行只書寫一條語句,並在運算符兩邊加上一個空格字符(使運算的結合關係更清楚明瞭) -
celsius=5*(fahr-32)/9
爲什麼不寫成celsius=(5/9)*(fahr-32)
-- 因爲在C語言及許多其他語言中,整數除法操作 將執行 舍位(結果中的任何小數部分都會被捨棄),由於5和9都是整數,5/9相除後截取所得到的結果爲0,如此一來,這樣求得的所有攝氏溫度都將爲0。
(bash環境中的數值運算也是這樣的,它的預設最多僅能達 整數狀態,這個在Linux 之 Bash -- shell 的變量功能(二)中提到過,感興趣的朋友可以點擊連接查看)
-- 解決措施:可以改變 變量的屬性 :使用float fahr,celsius
代替int fahr,celsius
- 如果某個算數運算符的所有操作均爲整型,則執行整型運算。但是,如果某個算數運算符有一個浮點型操作數和一個整型操作數,則在開始運算之前,整型操作數將會被轉換爲浮點型
-- 即便如此,代碼書寫時最好還是爲整型值加一個顯式的小數點,以強調其浮點性質
eg :celsius=(5.0/9.0)*(fahr-32.0)
(浮點數除法 就沒有 舍位 這個特性了,可以大膽得把他們寫一起了)
1.2 語法小結
- C語言中的註釋:/* 與 */之間的字符序列被稱爲 註釋,可以自由地運用在程序中。
- C語言中的一些基本數據類型: char 字符;ashort 短整型;long 長整型;double 雙精度浮點型
- while循環語句的執行方式:
-- 首先測試“()”中的條件,如果條件爲真,執行循環體
-- 再次測試“()”中的條件,如果條件爲真,再次執行循環體
-- ......(如此循環)
-- 當測試“()”中的條件,如果條件爲假,循環結束。然後執行跟在while循環語句之後的下一條語句- while語句的循環體是“{}”括起來的一條或多條語句
- printf 函數
-- 一個通用輸出格式化函數
-- 該函數的第一個參數是待打印的字符串,其中的每個百分號(%)表示其他的參數之一進行替換的位置,並指定打印格式。
eg : 以printf("%d\t%d\n",fahr,celsius)
爲例:第一個%
指代fahr
; 第二個%
指代celsius
--%d
按照十進制整型數打印
--%6d
按照十進制整型數打印,至少6個字符寬
--%f
按照浮點數打印
--%6f
按照浮點數打印,至少6個字符寬
--%.2f
按照浮點數打印,小數點後有2位小數
--%6.2f
按照浮點數打印,至少6個字符寬,小數點後有兩位小數
--%o
表示八進制數;%x
表示十六進制數;%c
表示字符;%s
表示字符串;%%
表示百分號(%)本身
1.3 for 語句
同樣是做一個華氏溫度與攝氏溫度的轉換表,這次換 for 語句 來編寫程序:
#include <stdio.h>
/*打印華氏溫度-攝氏溫度對照表*/
main()
{
int fahr;
for (fahr=0;fahr<=300;fahr=fahr+20){
printf("%3d %6.1f \n",fahr,(5.0/9.0)*(fahr-32));
}
}
for 語句與while語句一樣,都是先測試“()”內的條件,然後執行“{}”中的循環體,實際編程過程中,主要看使用哪一種更清晰。
for 語句比較適合初始化和增加步長都是單條語句並且邏輯相關的情形,因爲它將循環控制語句集中放在一起,比while語句更緊湊。
1.3 語法小結
- for 循環語句的執行方式與 while 循環語句相同,都是先測試“()”內的條件,滿足條件後再執行“{}”中的循環
- for 循環語句的循環體形式與while語句相同,都是“{}”括起來的一條或多條語句
1.4 符號常量
賦予一些數字有意義的名字,可以提供給閱讀該程序的人一定信息,使程序的修改變得更加容易。在這裏,我們需要使用 #define指令,來把符號名(或稱爲符號常量)定義爲一個特定的字符串,#define 名字 替換文本
。
這裏還是以溫度轉換的代碼爲例:
#include <stdio.h>
#define LOWER 0 /*表的下限*/ // 因爲LOWER,UPPER,STEP都是符號常量,因此不需要出現在聲明裏
#define UPPER 300 /*表的上限*/
#define STEP 20 /*步長*/
/*打印華氏溫度-攝氏溫度對照表*/
main()
{
int fahr;
for (fahr=LOWER;fahr<=UPPER;fahr=fahr+STEP){
printf("%3d %6.1f \n",fahr,(5.0/9.0)*(fahr-32));
}
}
1.4 語法小結
- 符號常量名通常用 大寫字母 拼寫(與 小寫字母 拼寫的 變量名 相區別)
- 注意:#define指令行末尾沒有分號