
- C語言程式設計教程
- C語言 - 首頁
- C語言基礎
- C語言 - 概述
- C語言 - 特性
- C語言 - 歷史
- C語言 - 環境設定
- C語言程式結構
- C語言 - Hello World
- C語言 - 編譯過程
- C語言 - 註釋
- C語言 - 詞法單元
- C語言 - 關鍵字
- C語言 - 識別符號
- C語言 - 使用者輸入
- C語言 - 基本語法
- C語言 - 資料型別
- C語言 - 變數
- C語言 - 整數提升
- C語言 - 型別轉換
- C語言 - 型別強制轉換
- C語言 - 布林值
- C語言中的常量和字面量
- C語言 - 常量
- C語言 - 字面量
- C語言 - 轉義序列
- C語言 - 格式說明符
- C語言中的運算子
- C語言 - 運算子
- C語言 - 算術運算子
- C語言 - 關係運算符
- C語言 - 邏輯運算子
- C語言 - 位運算子
- C語言 - 賦值運算子
- C語言 - 一元運算子
- C語言 - 自增和自減運算子
- C語言 - 三元運算子
- C語言 - sizeof 運算子
- C語言 - 運算子優先順序
- C語言 - 其他運算子
- C語言中的決策機制
- C語言 - 決策機制
- C語言 - if 語句
- C語言 - if...else 語句
- C語言 - 巢狀 if 語句
- C語言 - switch 語句
- C語言 - 巢狀 switch 語句
- C語言中的迴圈
- C語言 - 迴圈
- C語言 - while 迴圈
- C語言 - for 迴圈
- C語言 - do...while 迴圈
- C語言 - 巢狀迴圈
- C語言 - 死迴圈
- C語言 - break 語句
- C語言 - continue 語句
- C語言 - goto 語句
- C語言中的函式
- C語言 - 函式
- C語言 - main 函式
- C語言 - 按值呼叫函式
- C語言 - 按引用呼叫函式
- C語言 - 巢狀函式
- C語言 - 可變引數函式
- C語言 - 使用者自定義函式
- C語言 - 回撥函式
- C語言 - return 語句
- C語言 - 遞迴
- C語言中的作用域規則
- C語言 - 作用域規則
- C語言 - 靜態變數
- C語言 - 全域性變數
- C語言中的陣列
- C語言 - 陣列
- C語言 - 陣列的特性
- C語言 - 多維陣列
- C語言 - 將陣列傳遞給函式
- C語言 - 從函式返回陣列
- C語言 - 變長陣列
- C語言中的指標
- C語言 - 指標
- C語言 - 指標和陣列
- C語言 - 指標的應用
- C語言 - 指標運算
- C語言 - 指標陣列
- C語言 - 指向指標的指標
- C語言 - 將指標傳遞給函式
- C語言 - 從函式返回指標
- C語言 - 函式指標
- C語言 - 指向陣列的指標
- C語言 - 指向結構體的指標
- C語言 - 指標鏈
- C語言 - 指標與陣列的區別
- C語言 - 字元指標和函式
- C語言 - 空指標
- C語言 - void 指標
- C語言 - 懸空指標
- C語言 - 解引用指標
- C語言 - 近指標、遠指標和巨大指標
- C語言 - 指標陣列的初始化
- C語言 - 指標與多維陣列的區別
- C語言中的字串
- C語言 - 字串
- C語言 - 字串陣列
- C語言 - 特殊字元
- C語言結構體和聯合體
- C語言 - 結構體
- C語言 - 結構體和函式
- C語言 - 結構體陣列
- C語言 - 自引用結構體
- C語言 - 查詢表
- C語言 - 點(.)運算子
- C語言 - 列舉(enum)
- C語言 - 結構體填充和打包
- C語言 - 巢狀結構體
- C語言 - 匿名結構體和聯合體
- C語言 - 聯合體
- C語言 - 位域
- C語言 - typedef
- C語言中的檔案處理
- C語言 - 輸入輸出
- C語言 - 檔案I/O (檔案處理)
- C語言預處理器
- C語言 - 預處理器
- C語言 - 指令
- C語言 - 預處理器運算子
- C語言 - 宏
- C語言 - 標頭檔案
- C語言中的記憶體管理
- C語言 - 記憶體管理
- C語言 - 記憶體地址
- C語言 - 儲存類別
- 其他主題
- C語言 - 錯誤處理
- C語言 - 可變引數
- C語言 - 命令執行
- C語言 - 數學函式
- C語言 - static 關鍵字
- C語言 - 隨機數生成
- C語言 - 命令列引數
- C語言程式設計資源
- C語言 - 問答
- C語言 - 快速指南
- C語言 - 速查表
- C語言 - 有用資源
- C語言 - 討論
C語言程式結構
一個典型的C語言程式包含一些必須的部分和一些可選的部分,這取決於程式的邏輯、複雜性和可讀性。通常,C程式以一個或多個預處理器指令(#include語句)開始,並且必須包含一個main()函式作為程式的入口點。此外,還可能有變數和函式、宏和其他使用者定義函式等的全域性宣告。
預處理器部分
C編譯器附帶幾個庫檔案,副檔名為“.h”。“.h”檔案(稱為“標頭檔案”)包含一個或多個預定義函式(也稱為“庫函式”),可在C程式中使用。
庫函式必須載入到任何C程式中。“#include”語句用於包含標頭檔案。它是一個“預處理器指令”。
例如,printf()和scanf()函式用於執行控制檯I/O操作。它們在stdio.h檔案中定義。因此,您總是會在任何C程式的頂部找到#include <stdio.h>語句。其他重要且常用的標頭檔案包括string.h、math.h、stdlib.h等。
還有其他預處理器指令,例如#define,用於定義常量和宏,以及#ifdef用於條件定義。
以下語句定義了一個常量PI:
#define PI 3.14159
示例
定義常量後,可以在C程式的其餘部分使用它。
#include <stdio.h> #define PI 3.14159 int main(){ int radius = 5; float area = PI*radius*radius; printf("Area: %f", area); return 0; }
輸出
執行此程式碼後,您將獲得以下輸出:
Area: 78.539749
您還可以使用"#define"指令定義宏。它類似於C語言中的函式。我們可以向宏名傳遞一個或多個引數,並在程式碼段中執行操作。
以下程式碼使用#define語句定義AREA宏:
示例
#include <stdio.h> #define PI 3.14159 #define AREA(r) (PI*r*r) int main(){ int radius = 5; float area = AREA(radius); printf("Area: %f", area); return 0; }
輸出
Area: 78.539749
宏的執行速度通常比函式快。
main()函式
C程式是由一個或多個函式組成的集合。C程式中有兩種型別的函式:庫函式和使用者定義函式。
C程式中必須至少有一個使用者定義的函式,其名稱必須為main()。main()函式作為程式的入口點。執行程式時,編譯器會查詢main()函式。
main()函式包含一個或多個語句。預設情況下,每個語句必須以分號結尾。語句可能包括變數宣告、決策控制或迴圈結構,或對庫函式或其他使用者定義函式的呼叫。
在C語言中,函式必須有資料型別。返回值的資料型別必須與函式的資料型別匹配。預設情況下,C語言中的函式是int型別。因此,如果函式沒有return語句,則其型別為int,您可以在函式定義中省略它,但編譯器會發出警告:
warning: return type defaults to 'int'
示例
main()函式的一個典型示例如下:
#include <stdio.h> int main() { /* my first program in C */ printf("Hello, World! \n"); return 0; }
輸出
執行此程式碼後,您將獲得以下輸出:
Hello, World!
全域性宣告部分
此部分包含要在程式中所有函式中使用的變數的宣告。程式後面定義的使用者定義函式以及使用者定義的資料型別的向前宣告也位於全域性部分。
全域性變數宣告示例:
int total = 0; float average = 0.0;
函式的前向宣告示例:
float area(float height, float width);
C程式中的子程式
C程式中可能有多個使用者定義的函式。程式設計最佳實踐要求以結構化的方式將程式設計邏輯分解成獨立且可重用的函式。
根據需求,C程式可能有一個或多個使用者定義的函式,這些函式可以從main()函式或任何其他使用者定義的函式中呼叫。
C程式中的註釋
除了C程式的程式設計元素,如變數、結構體、迴圈、函式等之外,程式碼中可能還有一些在“/* .. */”中的文字,這些文字被識別為註釋。編譯器會忽略這些註釋。
在程式碼中插入註釋通常有助於記錄程式,以及理解和除錯程式設計邏輯和錯誤。
如果/*符號沒有匹配的*/符號,編譯器會報告錯誤:“未終止的註釋”。
/*和*/之間的文字稱為C風格註釋,用於插入多行註釋。
/* Program to display Hello World Author: Tutorialspoint Built with codeBlocks */
單行註釋以雙斜槓(//)開頭,以換行符結尾。它也可以出現在有效的C語句之後。
int age = 20; // variable to store age
但是,不能在以“//”開頭的行中給出有效的語句。因此,以下語句是錯誤的:
// Variable to store age. int age=20;
C程式的結構
以下程式碼顯示了C程式中的不同部分:
/*Headers*/ #include <stdio.h> #include <math.h> /*forward declaration*/ float area_of_square(float); /*main function*/ int main() { /* my first program in C */ float side = 5.50; float area = area_of_square(side); printf ("Side=%5.2f Area=%5.2f", side, area); return 0; } /*subroutine*/ float area_of_square(float side){ float area = pow(side,2); return area; }
輸出
執行此程式碼後,您將獲得以下輸出:
Side= 5.50 Area=30.25