首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言速成入門第1課:程序結構、數據類型、輸入輸出與控制流完整講義

     編輯:關於C語言

C語言速成入門第1課:程序結構、數據類型、輸入輸出與控制流完整講義

作為系統級編程基石,C 語言以極簡語法支撐起現代計算機軟件棟梁。本講義為「C語言簡明教程」系列首課,涵蓋程序骨架、變量類型系統、格式化 I/O、條件判斷、循環構造五大核心模組,配備標準代碼範式與記憶圖表,助你在最短時間建立完整認知框架。

1. C 語言程序解剖:六大標準組件

#include <stdio.h>              // 1. 預處理指令:引入標準庫頭文件

/* 多行註釋:程序功能、作者、版本 */
int main(void) {                // 2. 入口函數:返回 int,參數 void 表無參
    // 3. 變量定義區
    int data;                   // 局部變量未初始化 → 值不確定
    static int cdata = 0;       // 靜態局部變量 → 自動歸零,存儲於 BSS 段
    char *p = "Hello World!\n"; // 指針指向字符串常量(只讀數據段)
    
    // 4. 函數調用與表達式語句
    printf(p);                  // 庫函數調用
    int flag = Show(p);         // 自定義函數調用,接收返回值
    
    return 0;                   // 5. 返回值:0 表成功,非 0 表錯誤碼
}                               // 6. 代碼塊結束

// 函數定義(可置於 main 前後,建議前置聲明)
int Show(char *p) {
    printf(p);
    return 1;
}

// 全局變量(文件作用域)
int global_data;                // 未初始化 → BSS 段,歸零
int global_init = 42;           // 已初始化 → DATA 段

記憶體佈局速記表

區域存儲內容生命週期初始值示例
代碼段機器指令進程全程只讀函數體
數據段已初始化全局/靜態變量進程全程程序指定int g=1;
BSS段未初始化全局/靜態變量進程全程自動歸零int g;
堆區動態分配內存程序員控制不確定malloc()
棧區局部變量、函數參數、返回地址函數調用期間不確定int main(){int a;}

2. 變量與類型系統

基本類型關鍵字與格式符對照

類型關鍵字典型佔用printf/scanf說明
字符char1 byte%c / %hhd有符號性實現定義
短整型short2 bytes%hd至少 16 位
整型int4 bytes%d / %i自然字長,效率最高
長整型long4/8 bytes%ld32位系統常 4B,64位常 8B
長長整型long long8 bytes%lldC99 引入,至少 64 位
單精度float4 bytes%f / %e / %g~7 位有效數字
雙精度double8 bytes%lf / %le / %lg~15 位有效數字,默認推薦
長雙精度long double8/16 bytes%Lf平台相關,x86 常 80 位擴展精度

常量字面量後綴規範

123       // int
123L      // long
123LL     // long long
123U      // unsigned int
123UL     // unsigned long
033       // 八進制 (27)
0x1F      // 十六進制 (31)
3.14f     // float
3.14      // double (默認)
3.14L     // long double
'a'       // char
"hello"   // const char* (字符串常量)

sizeof 運算符:編譯期計算類型/表達式佔用字節數

printf("int: %zu\n", sizeof(int));
printf("long: %zu\n", sizeof(long));
printf("pointer: %zu\n", sizeof(void*));  // 32位=4, 64位=8
// %zu 對應 size_t 類型 (C99)

3. 格式化輸入輸出精要

printf 格式化佔位符進階

格式含義示例輸出
%d有符號十進制整數42
%8d寬度 8 右對齊"     42"
%-8d寬度 8 左對齊"42     "
%08d寬度 8 前導零填充"00000042"
%.3f保留 3 位小數3.142
%6.2f總寬 6 含小數點,小數 2 位" 3.14"
%c單字符A
%s字符串Hello
%p指針地址0x7ffee3a8

scanf 讀取陷阱與對策

  • 空白字符處理:%d %f %s 自動跳過前導空白(空格、換行、Tab)
  • %c 不跳過空白:用 " %c"(前置空格)讀取下一個非空白字符
  • 返回值檢查:scanf("%d", &a) == 1 確認讀取成功
  • 緩衝區殘留:scanf("%d", &a) 後緩衝區留有 \n,後續 %c 會讀到它 → 用 getchar() 吞噬或改用 fgets 整行讀取

4. 條件判斷與邏輯控制

運算符優先級與結合性(高→低)

  1. () [] . -> (左→右)
  2. ++ -- + - ! ~ * & (type) sizeof (單目,右→左)
  3. * / % (左→右)
  4. + - (左→右)
  5. << >> (左→右)
  6. < <= > >= (左→右)
  7. == != (左→右)
  8. & (按位與,左→右)
  9. ^ (按位異或,左→右)
  10. | (按位或,左→右)
  11. && (邏輯與,左→右,短路)
  12. || (邏輯或,左→右,短路)
  13. ?: (三目,右→左)
  14. = += -= *= /= %= &= ^= |= <<= >>= (右→左)
  15. , (逗號,左→右)

短路求值實戰

int a = 0, b = 1, c = 2;

// 邏輯或:a==0 為真 → 短路,不再計算 b==2
if (a == 0 || b == 2) { /* 執行 */ }

// 邏輯與:a==0 為假 → 短路,不再計算 b==2
if (a == 0 && b == 2) { /* 不執行 */ }

// 優先級:&& 高於 ||
if (a == 0 || b == 2 && c == 1) 
// 等價於 a == 0 || (b == 2 && c == 1)

switch 語句規範

switch (variable) {
    case CONST_EXPR_1:
        // code
        break;          // 必須 break,否則貫穿
    case CONST_EXPR_2:
    case CONST_EXPR_3:  // 多標簽共用代碼
        // code
        break;
    default:            // 養成習慣必寫 default
        // code
        break;
}

允許類型: 整數類型(int, char, short, long, enum),禁止 float/double/string。

5. 循環構造全景

for 循環:已知次數迭代首選

// 標準形式
for (int i = 0; i < 10; i++) {
    printf("%d ", i);
}

// 省略初始化/增量(靈活但降低可讀性)
int i = 0;
for (; i < 10; ) {
    printf("%d ", i++);
}

// 無限循環慣用寫法
for (;;) { /* ... */ }

while 循環:前置條件檢查

int i = 0;
while (i < 10) {
    printf("%d ", i++);
}

do-while 循環:後置條件,至少執行一次

int i = 0;
do {
    printf("%d ", i++);
} while (i < 10);  // 注意分號

循環控制語句

語句作用適用範圍
break跳出最近一層循環/switchfor/while/do-while/switch
continue跳過本次迭代剩餘代碼,進入下一次判斷for/while/do-while
goto無條件跳轉(慎用)錯誤處理統一出口、跳出多層循環

本課核心知識圖譜

C程序結構
├── 預處理 (#include, #define, #ifdef)
├── main入口 (int main(void))
├── 變量聲明 (類型、作用域、存儲類別)
├── 函數調用 (庫函數、自定義函數)
└── 代碼塊 ({ })

數據類型
├── 基本類型 (整數、浮點、字符)
├── 構造類型 (數組、結構體、聯合、枚舉)
├── 指針類型
└── void 類型

控制流
├── 順序結構
├── 選擇結構 (if, if-else, switch)
└── 循環結構 (for, while, do-while)
    ├── break/continue
    └── 短路求值 (&&, ||)

這一課鋪墊了 C 語言 80% 的日常編程詞彙。建議按「敲碼→跑通→改錯→背誦範式」四步法內化每個代碼模板,為後續指針、內存管理、文件操作、模組化開發打下鋼鐵般的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved