C 语言教程

C 语言是一种通用的程序设计语言,由 Dennis Ritchie 在 1972 年开发。它是结构化编程的代表语言之一,拥有广泛的应用领域,特别是在操作系统、寫寪審网络编程、嵌入式系统等方面。C 语言的语法简洁,性能强劲,是许多高级语言(如 C++、Python、Java)的基础。

1. C 语言基础

1.1 程序结构

C 语言的程序通常包括以下部分:

  • 头文件:包含必要的库和定义。
  • main() 函数:程序的入口点。
  • 函数:用于组织代码和实现功能。
  • 变量和数据类型:存储程序运行时使用的数据。

一个最简单的 C 语言程序:

#include <stdio.h>  // 引入标准输入输出库

int main() {
    printf("Hello, World!\n");  // 打印输出
    return 0;  // 程序结束
}

1.2 数据类型

C 语言支持多种数据类型,用于存储不同类型的数据。基本数据类型有:

  • 整数类型
    • int:通常占 4 字节,用于存储整数。
    • short:通常占 2 字节,存储较小范围的整数。
    • long:通常占 8 字节,用于存储较大范围的整数。
    • long long:通常占 8 字节,存储更大范围的整数。
  • 浮点类型
    • float:占 4 字节,存储单精度浮点数。
    • double:占 8 字节,存储双精度浮点数。
  • 字符类型
    • char:占 1 字节,用于存储字符。
  • 布尔类型
    C 标准库没有内建的布尔类型,但可以用 int 来模拟布尔类型(0 表示 false,非零值表示 true)。

1.3 变量声明与初始化

在 C 语言中,变量需要声明类型后才能使用。

#include <stdio.h>

int main() {
    int a = 10;  // 整型变量 a
    float b = 3.14;  // 浮点型变量 b
    char c = 'A';  // 字符型变量 c
    
    printf("a = %d, b = %f, c = %c\n", a, b, c);
    return 0;
}

1.4 常量

常量在程序运行时不可修改,通常用 #define 定义宏常量,或者使用 const 关键字定义常量。

#include <stdio.h>

#define PI 3.14159  // 使用 #define 定义常量

int main() {
    const int max_value = 100;  // 使用 const 定义常量
    
    printf("PI = %f, max_value = %d\n", PI, max_value);
    return 0;
}

2. 控制结构

2.1 条件语句

C 语言支持 ifelse ifelse 等条件语句,用于根据不同条件执行不同的代码块。

#include <stdio.h>

int main() {
    int a = 10;
    if (a > 0) {
        printf("a is positive\n");
    } else if (a == 0) {
        printf("a is zero\n");
    } else {
        printf("a is negative\n");
    }
    return 0;
}

2.2 循环语句

C 语言有三种常见的循环结构:for 循环、while 循环、do-while 循环。

  • for 循环:适用于已知循环次数的情况。for (int i = 0; i < 5; i++) { printf("i = %d\n", i); }
  • while 循环:适用于不确定循环次数的情况。int i = 0; while (i < 5) { printf("i = %d\n", i); i++; }
  • do-while 循环:至少执行一次循环体。int i = 0; do { printf("i = %d\n", i); i++; } while (i < 5);

3. 数组和字符串

3.1 数组

数组是存储相同类型元素的集合。数组的大小在声明时必须指定。

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};  // 声明并初始化数组
    for (int i = 0; i < 5; i++) {
        printf("arr[%d] = %d\n", i, arr[i]);
    }
    return 0;
}

3.2 字符串

在 C 语言中,字符串是一个字符数组,以空字符 '\0' 结束。

#include <stdio.h>

int main() {
    char str[] = "Hello, World!";
    printf("String: %s\n", str);
    return 0;
}

4. 函数

函数是 C 语言的基本组织单元,可以将一段代码封装成一个独立的模块。

4.1 函数定义与调用

#include <stdio.h>

// 函数声明
int add(int, int);

int main() {
    int result = add(5, 10);
    printf("The sum is: %d\n", result);
    return 0;
}

// 函数定义
int add(int a, int b) {
    return a + b;
}

5. 指针

指针是 C 语言中的核心概念之一,用于存储内存地址。通过指针,程序可以间接访问和修改数据。

5.1 指针的声明与使用

#include <stdio.h>

int main() {
    int a = 10;
    int *p = &a;  // p 是指针,指向 a 的地址

    printf("Address of a: %p\n", p);  // 输出 a 的地址
    printf("Value of a: %d\n", *p);  // 输出 a 的值
    return 0;
}

5.2 指针与数组

指针可以用来访问数组元素。

#include <stdio.h>

int main() {
    int arr[3] = {1, 2, 3};
    int *p = arr;  // 数组名表示数组首元素的地址

    printf("First element: %d\n", *p);  // 输出数组第一个元素
    return 0;
}

6. 结构体

结构体(struct)用于将不同类型的数据组合在一起。

#include <stdio.h>

struct Person {
    char name[50];
    int age;
};

int main() {
    struct Person p1 = {"Alice", 30};
    printf("Name: %s, Age: %d\n", p1.name, p1.age);
    return 0;
}

7. 文件操作

C 语言提供了一组函数用于文件的读写操作。

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");  // 打开文件进行写操作
    if (file != NULL) {
        fprintf(file, "Hello, File!\n");  // 向文件写入内容
        fclose(file);  // 关闭文件
    }
    return 0;
}

8. 动态内存分配

C 语言通过 malloccallocrealloc 和 free 来进行动态内存分配和管理。

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *arr = (int *)malloc(5 * sizeof(int));  // 动态分配内存
    if (arr == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }

    for (int i = 0; i < 5; i++) {
        arr[i] = i * 2;
    }

    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    free(arr);  // 释放内存
    return 0;
}

总结

C 语言是一种强大的编程语言,能够提供对硬件的细粒度控制和高效的性能。尽管 C 语言的语法较为简洁,但它要求程序员对内存管理和指针等底层概念有

深入理解。通过不断练习和编写程序,你将能够掌握 C 语言,并能够开发出各种高效的程序。