C Primer Plus(第六版):C语言概述
1.簡單C語言示例
2.示例解釋
快速概要
程序細節
3.簡單程序的結構
4.提高程序可讀性的技巧
5.進一步使用C
程序說明
多條聲明
乘法
打印多個值
6.多個函數
7小結
1.簡單C語言示例
#include<stdio.h> /*引入頭文件*/ int main(void) /*一個簡單的C程序*/ {int num; /*定義個名字叫做num的變量*/num = 0; /*給num賦一個值*/printf("Hello World!\n"); /*調用printf()函數*/printf("The first number is %d", num);return 0; }2.示例解釋
快速概要:
#include<stdio.h> 包含stdio.h文件,這是C編譯軟件包的標準部分,提供鍵盤輸入和屏幕輸出,該代碼必不可少!!! int main(void) 圓括號表明main()是一個函數名 int表明main()函數返回一個整數 viod表明main()不帶任何參數 C程序規定一個程序中有一個或多個函數,他們是C程序的基本模塊,但必須有且只有一個main()函數,因為C程序的執行將從main函數開始, 到main函數結束而停止 //單行注釋 /*多行注釋*/ { 函數定義開始 int num; 聲明一個整型變量num num = 0; 把0賦給名為num的變量 printf("Hello World!\n"); 調用一個printf()函數,將括號內的內容打印出來 printf("The first number is %d", num); 把num的值1內嵌在用雙引號括起來的內容中一并打印,%d表示在%d的位置上以數字的形式輸出num的值 return 0; 結束main()函數的要求,一般必不可少!!! } 表示函數定義結束程序細節:
- 1.include指令和頭文件
這是程序的第一行,它的作用相當于把stdio.h文件中的所 有內容都輸入該行所在的位置。
#include <stdio.h>是一條C預處理器指令。通 常,C編譯器在編譯前會對源代碼做一些準備工作,即預處理 。
所有的C編譯器軟件包都提供stdio.h文件。該文件中包含了供編譯器使 用的輸入和輸出函數(如:printf())信息。該文件名的含義是標準輸入/輸出頭文件。通常,在C程序頂部的信息集合被稱為頭文件(header),簡而言之,頭文 件幫助編譯器把你的程序正確地組合在一起。
所以,總結一句話:第一行#include <stdio.h>必不可少!!!
- 2.main()函數
C程序一定從main()函數開始執行(目前 不必考慮例外的情況),除了main()函數,你可以任意命名其他函數。
main()函數必須是開始的函數!!!
int 是整型
void是表示不加任何參數
所以,總結一句話:main()函數必不可少!!!
- 3.注釋
這里就不詳細介紹了
-
4.花括號、函數體和塊
這里也不詳細介紹了,和Python的差不多,函數所必備~
注:只有花括號{ }能起這種作用,圓括號( )和方括號[ ]都不行 -
5.聲明
也就是聲明變量,但是值得注意的是,C語言的聲明變量的同時必須也聲明它的變量類型(如整數、字符和浮點數。把變量聲明 為整型、浮點型或字符類型,計算機才能正確地儲存、讀取和解釋數據,否則就是錯誤的代碼)。
變量名:可以用小寫字母、大寫字母、數字和下劃線來命名。而且,名稱 的第1個字符必須是字符或下劃線,不能是數字或非字符或下劃線(這里簡單列舉幾個非字符或下劃線的!、@、#、$、%、^、&、*、(、)、+、=等等)。
注:C語言的名稱區分大小寫。
注:如果要聲明變量,應該聲明在何處?前面提到過,C99之前的標準要求 把聲明都置于塊的頂部,這樣規定的好處是:把聲明放在一起更容易理解程 序的用途。C99 允許在需要時才聲明變量,這樣做的好處是:在給變量賦值 之前聲明變量,就不會忘記給變量賦值。但是實際上,許多編譯器都還不支 持C99(現在大部分都支持啦)。
- 6.賦值
這個也不具體介紹啦~
- 7.printf()函數
這里我也不多做介紹,和Python里的print()差不多
\n:換行
參數中的%d被數字0代替了,而0就是變量num的值。這里的%d相當于是一個占位符。
%提醒 程序,要在該處打印一個變量,d表明把變量作為十進制整數打印。
printf()函數名中的f提醒用戶,這是一種格式化打印函數。printf()函數有多種打印 變量的格式,包括小數和十六進制整數。
- 8.return語句
int main(void)中的int表明 main()函數應返回一個整數。C標準要求main()這樣做。有返回值的C函數要 有return語句。該語句以return關鍵字開始,后面是待返回的值,并以分號結尾。如果遺漏 main()函數中的 return 語句,程序在運行至最外面的右花括號(})時會返回0。因此,可以省略main()函數末尾的return語句。但是,不要在其他有返回值的函數中漏掉它。
最后,強烈建議讀者養成在 main()函數中 保留 return 語句的好習慣。在這種情況下,可將其看作是統一代碼風格。但對于某些操作系統(包括Linux和UNIX),return語句有實際的用途。
3.簡單程序的結構
程序由一個或多個函數組成,必須有 main()函數。函數由函數頭和函數體組 成。函數頭包括函數名、傳入該函數的信息類型和函數的返回類型。通過函 數名后的圓括號可識別出函數,圓括號里可能為空,可能有參數。函數體被花括號括起來,由一系列語句、聲明組成,如下圖所示。前面的示例中,有一條聲明,聲明了程序使用的變量名和類型。然后是一條賦值表達式語句,變量被賦給一個值。接下來是2條printf()語句,調用printf()函數2次。 最后,main()以return語句結束。
簡而言之,一個簡單的C程序的格式如下:
4.提高程序可讀性的技巧
不具體介紹了,請看下圖:5.進一步使用C
//fathm_ft.c -- 把2英尋轉換成英尺 #include <stdio.h> int main(void) { int feet, fathoms; fathoms = 2; feet = 6 * fathoms; printf("There are %d feet in %d fathoms!\n", feet, fathoms); printf("Yes, I said %d feet!\n", 6 * fathoms); return 0; }程序說明:
程序在開始處有一條注釋,給出了文件名和程序的目的。寫這種程序說明,很簡單、不費時,而且在以后瀏覽或打印程序時很有幫助。
多條聲明
接下來,程序在一條聲明中聲明了兩個變量,而不是一個變量。為此, 要在聲明中用逗號隔開兩個變量(feet和fathoms)也就是說
int feet,fathoms; 和 int feet; int fathoms; 等價乘法
不具體介紹了
打印多個值
結果:
There are 12 feet in 2 fathoms! Yes, I said 12 feet!程序的第1個printf()中進行了兩次替換。雙引號號后面的第1個變量 feet替換了雙引號中的第1個%d;雙引號號后面的第2個變量fathoms替換了雙引號中的第2個%d。
注意,待輸出的變量列于雙引號的后面。還要注意,變量之間要用逗號隔開。
第2個printf()函數說明待打印的值不一定是變量,只要可求值得出合適 類型值的項即可,如6 *fathoms。
注:這里的代碼只是把英尋轉換成英寸程序的核心部分。
6.多個函數
//* two_func.c -- 一個文件中包含兩個函數 */ #include <stdio.h> void butler(void); /* ANSI/ISO C函數原型 */ int main(void) { printf("I will summon the butler function.\n"); butler(); printf("Yes. Bring me some tea and writeable DVDs.\n"); return 0; } void butler(void) /* 函數定義開始 */ { printf("You rang, sir?\n"); }輸出如下:
I will summon the butler function. You rang, sir? Yes.Bring me some tea and writeable DVDs.butler()函數在程序中出現了3次。第1次是函數原型,告知編譯器在程序中要使用該函數;第2次以函數調用的形式出現在 main()中;最后一次出現在函數定義中,函數定義即是函數本身的源代碼。下面逐一分析:
C90標準新增了函數原型,舊式的編譯器可能無法識別(稍后我們將介紹,如果使用這種編譯器應該怎么做)。函數原型是一種聲明形式,告知編譯器正在使用某函數,因此函數原型也被稱為函數聲明。函數原型還指明了函數的屬性。例如,butler()函數原型中的 第1個void表明,butler()函數沒有返回值(通常,被調函數會向主調函數返回一個值,但是bulter()函數沒有)。第2個void(butler(void)中的 void)的意思是 butler()函數不帶參數。因此,當編譯器運行至此,會檢查butler()是否使用得當。注意,void在這里的意思是“空的”,而不是“無效”。
早期的C語言支持一種更簡單的函數聲明,只需指定返回類型,不用描述參數:void butler();
早期的C代碼中的函數聲明就類似上面這樣,不是現在的函數原型。 C90、C99 和C11 標準都承認舊版本的形式,但是也表明了會逐漸淘汰這種過時的寫法。如果要使用以前寫的C代碼,就需要把舊式聲明轉換成函數原型。
接下來我們繼續分析程序。在main()中調用 butler()很簡單,寫出函數名和圓括號即可。當butler()執行完畢后,程序會繼續執行main()中的下一條語句。
程序的最后部分是butler()函數的定義,其形式和main()相同,都包含函數頭和用花括號括起來的函數體。函數頭重述了函數原型的信息:bulter()不帶任何參數,且沒有返回值。如果使用老式編譯器,請去掉圓括號中的 void。
這里要注意,何時執行 butler()函數取決于它在 main()中被調用的位置,而不是butler()的定義在文件中的位置。例如,把butler()函數的定義放在main()定義之前,不會改變程序的執行順序, butler()函數仍然在兩次printf()調用之間被調用。記住,無論main()在程序文件處于什么位置,所有的C程序都從main()開始執行。但是,C的慣例是把main()放在開頭,因為它提供了程序的基本框架。
就像下面的代碼一樣,它最后的輸出值和上面的輸出值一模一樣:
注意又兩行一樣的void butler(void),有分號的是函數模型(通俗來說就是聲明函數模型),沒有分號的是定義函數。雖然聲明函數模型沒有也能成功,但我們還是要按標準做事!!!
C標準建議,要為程序中用到的所有函數提供函數原型。標準include文 件(包含文件)為標準庫函數提供了函數原型。例如,在C標準中,stdio.h文件包含了printf()的函數原型。
7.小結
C程序由一個或多個C函數組成。每個C程序必須包含一個main()函數, 這是C程序要調用的第1個函數。簡單的函數由函數頭和后面的一對花括號組成,花括號中是由聲明、語句組成的函數體。
在C語言中,大部分語句都以分號結尾。聲明為變量創建變量名和標識 該變量中儲存的數據類型。變量名是一種標識符。賦值表達式語句把值賦給變量,或者更一般地說,把值賦給存儲空間。函數表達式語句用于調用指定的已命名函數。調用函數執行完畢后,程序會返回到函數調用后面的語句繼續執行。
printf()函數用于輸出想要表達的內容和變量的值。
最后,關鍵字是C語言的詞匯。
總結
以上是生活随笔為你收集整理的C Primer Plus(第六版):C语言概述的全部內容,希望文章能夠幫你解決所遇到的問題。