1. 程式人生 > >C_Primer第2章 C語言概述

C_Primer第2章 C語言概述

本章介紹以下內容:

  • 運算子
  • 函式:main()、printf()
  • 編寫一個簡單的C程式
  • 建立整形變數,為其賦值並在螢幕上顯示其值
  • 換行字元
  • 如何在程式中寫註釋,建立包含多個函式的程式,發現程式的錯誤
  • 什麼是關鍵字

2.1 簡單的C程式示例

#include<stdio.h>
int main()
{
	int num;
	num = 10;

	printf("I am a simple ");
	printf("computer.\n");
	printf("MY favorite number is %d because it is first.\n",num);
	return 0;
}

程式輸出:

I am a simple computer.
MY favorite number is 10 because it is first.
2.2 示例解釋

2.2.1 第1遍:快速要要

2.2.2 第2遍:程式細節

1. #include指令和標頭檔案

2.main()函式

函式是C程式的基本模組

如果瀏覽舊式的C程式碼,會發現程式以如下形式開始:

main()

C90標準勉強接受這種形式,但C99和C11標準不允許這樣寫。因此,即你你使用的編譯器允許,也不要這樣寫。

你還會看到下面這種形式

void main()

一些編譯器允許這樣寫,但是所有的標準都未認可這種寫法。因此,編譯器不必接受這種形式,而且許多編譯器都不能這樣寫。需要強調的是,只要堅持使用標準形式,把程式從一個編譯器移至另一個編譯器時就不會出什麼問題。

3.註釋

4.花括號、函式體和塊

5.宣告

int num;

程式清單2-1中,這行程式碼叫作宣告(declaration)。宣告是C語言最重要的特性之一。

變數

資料型別

關鍵字

以前的C語言,還要求把變數宣告在塊的頂部,其他語句不能在任何宣告的前面。也就是說,main()函式體如下所示:

int mian()    //舊規則
{
    int doors;
    int dogs;
    doors = 5;
    dogs = 3;
    // 其他語句
}

C99和C11遵循C++的慣例,可以把宣告放在塊中的任何位置。儘管如此,首次使用變數之前一定要先宣告它。加些,如果編譯器支援這一新特性,可以這樣編寫上面的程式碼。

int main()    //目前的C規則
{
    //一些語句
    int doors;
    doors = 5; //第1次使用doors
    //其他語句
    int dogs;
    dogs = 3;    //第1次使用dogs
    //其他語句
}

為了與舊系統更好地相容,本書沿用最初的規則(即,把變數宣告都寫在塊的頂部 )。

資料型別

命名

C99和C11允許使用更長的識別符號名,但是編譯器只識別前63個字元。

宣告變數的4個理由

6.賦值

7.printf()函式

8.return語句

2.3簡單程式的結構

2.4.提高程式可讀性技巧

2.5進一步使用C

程式清單2.2 fathm_ft.c程式

//fathm_ft.c --把2英尋轉換成英寸,1英尋等於6英尺
#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;
}

2.5.1 程式說明

2.5.2 多條宣告

2.3.3 乘法

2.5.4 列印多個值

2.6 多個函式

程式清單2-3 two_func.c程式

//*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");
}
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次是函式原型(prototype),告知編譯器在程式中要使用該函式;第2次以函式呼叫(function call) 的形式出現在main()中;最後一次現現在函式定義(function definition)中,函式定義即是函式本身的原始碼。下面逐一分析。

C90標準新增了函式原型,舊式的編譯器可能無法識別(稍後我們將介紹,如果使用這種編譯器應該怎麼做)。函式原型是一種宣告形式,告知編譯器正在使用某函式,因此函式原型也被稱為函式宣告(function declaration)。函式原型還指明瞭函式的屬性。例如,butler()函式原型中的第1個void表明,butler()函式沒有返回值(通常,被調函式會向主調函式返回一個值,但是bulter()函式沒有)。第2個void(butler(void)中的void)的意思是butler()函式不帶引數。因此,當編譯器執行至此,會檢查butler()是否使用得當。注意,void在這裡的意思是“空的”,而不是‘“無效”。

早期的C語言支援一種更簡單的函式宣告,只需要指定返回型別,不用描述引數"

void butler();

早期的C程式碼中的函式宣告就類似上面這樣,不是現在的函式原型。C90、C99和C11標準都承認舊版本的形式,但是也表明了會逐漸淘汰這種過時的寫法。如果要使用以前寫的C程式碼,就需要把舊式宣告轉換成函式原型。本書在後面的章節會繼續介紹函式原型的相關內容。

C標準建議,要為程式中用到的所有函式提供函式原型。

2.7除錯程式

程式清單2.4 nogood.c程式

/*nogood.c --有錯誤的程式*/
#include <stdio.h>
int main(void)
(
	int n,int n2,int n3;
	
	/*該程式有多處錯誤
	n= 5;
	n2 = n * n;
	n3 = n2 * n2;
	printf("n = %d, n squared = %d, n cubed = %d\n",n,n2,n3);
	
	return 0;
)

2.7.1語法錯誤

2.7.2語言錯誤

2.7.3程式狀態

2.8 關鍵字和保留識別符號

2.9 關鍵概念

程式設計是一件富有挑戰性的事情。程式設計師要具備抽象和邏輯的思維,並謹慎地處理細節問題(編譯器會強迫你注意細節問題)。平時和朋友交流時,可能用鍩幾個單詞,犯一兩個語法錯誤,或者說幾句不完整的句子,但是對方能明白你想說什麼。而編譯器不允許這樣,對它而言,幾乎正確仍然是錯誤。

編譯器不會在下面講到的概念性問題上幫助你。因此,本書在這一章中介紹一些關鍵概念幫助讀者彌補這部分的內容。

在本章中,讀者的目標應該是理解什麼是C程式。

2.10 本章小結