C 语言基本语法

C语言是一种广泛使用的编程语言,以其效率和灵活性而著称。本节将介绍C语言的基本语法,为后续的实验和开发工作打下基础。

C语言简介

C语言由Dennis Ritchie在1972年开发,最初是为了编写UNIX操作系统而设计的。C语言具有简洁的语法和强大的功能,使其成为系统编程、嵌入式系统和高级应用程序的首选语言。

基本数据类型

C语言的基本数据类型包括整型、浮点型、字符型和布尔型。每种类型都有其特定的内存占用和取值范围。

  • 整型int 通常占用4个字节,但也可以是2个字节,这取决于编译器和系统。shortlong 可以用来指定不同大小的整数。
    • short int:通常占用2个字节。
    • long int:通常占用4个或8个字节。
    • long long int:通常占用8个字节。
  • 浮点型floatdouble 分别用于表示单精度和双精度浮点数。
    • float:通常占用4个字节。
    • double:通常占用8个字节。
  • 字符型char 用于存储单个字符,占用1个字节。
    • char:占用1个字节,用于存储字符。
  • 布尔型_Bool 用于存储布尔值(true或false),占用1个字节。
    • _Bool:占用1个字节,用于存储布尔值。

变量和常量

变量是存储数据值的容器,而常量是固定值。

  • 变量声明和初始化

    int age = 25; // 声明一个整型变量并初始化为25
    float pi = 3.14159; // 声明一个浮点型变量并初始化为3.14159
    char letter = 'A'; // 声明一个字符型变量并初始化为'A'
    
  • 常量声明

    const int MAX_VALUE = 100; // 声明一个整型常量
    const float PI = 3.14159; // 声明一个浮点型常量
    

运算符

C语言提供了丰富的运算符,用于执行各种操作。

  • 算术运算符

    int a = 10, b = 3;
    int sum = a + b; // 加法
    int diff = a - b; // 减法
    int product = a * b; // 乘法
    float quotient = (float)a / b; // 除法
    int remainder = a % b; // 取模
    
  • 关系运算符

    int x = 5, y = 10;
    if (x == y) { // 等于
        printf("x is equal to y\n");
    }
    if (x != y) { // 不等于
        printf("x is not equal to y\n");
    }
    if (x > y) { // 大于
        printf("x is greater than y\n");
    }
    if (x < y) { // 小于
        printf("x is less than y\n");
    }
    if (x >= y) { // 大于等于
        printf("x is greater than or equal to y\n");
    }
    if (x <= y) { // 小于等于
        printf("x is less than or equal to y\n");
    }
    
  • 逻辑运算符

    int p = 1, q = 0;
    if (p && q) { // 逻辑与
        printf("Both p and q are true\n");
    }
    if (p || q) { // 逻辑或
        printf("Either p or q is true\n");
    }
    if (!p) { // 逻辑非
        printf("p is false\n");
    }
    
  • 位运算符

    int m = 12, n = 5;
    int and_result = m & n; // 按位与
    int or_result = m | n; // 按位或
    int xor_result = m ^ n; // 按位异或
    int not_result = ~m; // 按位取反
    int left_shift = m << 1; // 左移
    int right_shift = m >> 1; // 右移
    

控制结构

控制结构用于控制程序的执行流程。

  • 条件语句

    int score = 85;
    if (score >= 90) {
        printf("优秀\n");
    } else if (score >= 80) {
        printf("良好\n");
    } else if (score >= 70) {
        printf("中等\n");
    } else if (score >= 60) {
        printf("及格\n");
    } else {
        printf("不及格\n");
    }
    
  • 循环语句

    // for循环
    for (int i = 0; i < 5; i++) {
        printf("%d\n", i);
    }
    // while循环
    int j = 0;
    while (j < 5) {
        printf("%d\n", j);
        j++;
    }
    // do-while循环
    int k = 0;
    do {
        printf("%d\n", k);
        k++;
    } while (k < 5);
    
  • 跳转语句

    // break语句
    for (int i = 0; i < 10; i++) {
        if (i == 5) {
            break; // 跳出循环
        }
        printf("%d\n", i);
    }
    // continue语句
    for (int i = 0; i < 10; i++) {
        if (i == 5) {
            continue; // 跳过当前循环的剩余部分,进入下一次循环
        }
        printf("%d\n", i);
    }
    

函数

函数是C语言中的基本构建块,用于封装可重用的代码。

  • 函数定义和调用:

    // 函数定义
    int add(int a, int b) {
        return a + b;
    }
    // 函数调用
    int result = add(3, 4);
    printf("The result is %d\n", result);
    

数组和指针

数组用于存储相同类型的多个元素,而指针是存储变量地址的变量。

  • 数组操作

    int numbers[5] = {1, 2, 3, 4, 5};
    for (int i = 0; i < 5; i++) {
        printf("%d\n", numbers[i]);
    }
    
  • 指针操作

    int *p;
    int age = 25;
    p = &age; // 将age的地址赋给指针p
    printf("The value of age is %d\n", *p); // 通过指针访问age的值
    

结构体和联合体

结构体允许用户定义自己的数据类型,它可以将不同类型的数据组合在一起。联合体是一种特殊的结构体,它允许在相同的内存位置存储不同的数据类型。

  • 结构体定义和使用:

    // 结构体定义
    struct Person {
        char name[50];
        int age;
    };
    // 结构体使用
    struct Person person1;
    strcpy(person1.name, "Alice");
    person1.age = 30;
    printf("Name: %s, Age: %d\n", person1.name, person1.age);