实例1:变量与数据类型

在C语言编程中,变量是用来存储数据的容器,而数据类型决定了变量的存储方式和表示范围。以下是一些基本的变量和数据类型的实例:

#include <stdio.h>

int main() {
    int age = 20; // 整数类型
    float salary = 5000.75; // 单精度浮点数类型
    char gender = 'M'; // 字符类型

    printf("Age: %d\n", age);
    printf("Salary: %.2f\n", salary);
    printf("Gender: %c\n", gender);

    return 0;
}

在这个例子中,我们定义了三个变量:agesalarygender,分别存储了年龄、薪资和性别信息。

实例2:运算符与表达式

C语言中的运算符用于对变量进行运算,表达式则是由运算符和变量组成的计算式。以下是一些常见的运算符和表达式的实例:

#include <stdio.h>

int main() {
    int a = 10, b = 5;
    int sum = a + b; // 加法
    int difference = a - b; // 减法
    int product = a * b; // 乘法
    int quotient = a / b; // 除法
    int modulus = a % b; // 取模

    printf("Sum: %d\n", sum);
    printf("Difference: %d\n", difference);
    printf("Product: %d\n", product);
    printf("Quotient: %d\n", quotient);
    printf("Modulus: %d\n", modulus);

    return 0;
}

在这个例子中,我们对两个整数进行了加、减、乘、除和取模运算。

实例3:控制语句

控制语句用于控制程序的执行流程,包括条件语句和循环语句。以下是一些常见的控制语句实例:

#include <stdio.h>

int main() {
    int number = 10;

    // 条件语句
    if (number > 0) {
        printf("Number is positive\n");
    } else if (number < 0) {
        printf("Number is negative\n");
    } else {
        printf("Number is zero\n");
    }

    // 循环语句
    for (int i = 0; i < 5; i++) {
        printf("Loop: %d\n", i);
    }

    return 0;
}

在这个例子中,我们使用条件语句来判断数字的正负,并使用循环语句打印出从0到4的数字。

实例4:函数

函数是C语言中的核心概念之一,用于将程序分解成可重用的模块。以下是一个简单的函数实例:

#include <stdio.h>

void printMessage() {
    printf("Hello, World!\n");
}

int main() {
    printMessage(); // 调用函数

    return 0;
}

在这个例子中,我们定义了一个名为printMessage的函数,用于打印“Hello, World!”信息,并在main函数中调用它。

实例5:数组

数组是C语言中的一种数据结构,用于存储相同类型的数据序列。以下是一个简单的数组实例:

#include <stdio.h>

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};

    for (int i = 0; i < 5; i++) {
        printf("Number %d: %d\n", i, numbers[i]);
    }

    return 0;
}

在这个例子中,我们定义了一个整型数组numbers,并初始化了5个元素,然后通过循环遍历并打印出每个元素的值。

实例6:指针

指针是C语言中的一种特殊的数据类型,用于存储变量的内存地址。以下是一个简单的指针实例:

#include <stdio.h>

int main() {
    int a = 10;
    int *ptr = &a; // 指针指向变量a的地址

    printf("Value of a: %d\n", a);
    printf("Address of a: %p\n", (void *)&a);
    printf("Value of ptr: %p\n", (void *)ptr);
    printf("Value of *ptr: %d\n", *ptr);

    return 0;
}

在这个例子中,我们定义了一个名为ptr的指针,它指向变量a的地址,并打印出a的值、地址、指针的值和指针指向的值。

实例7:结构体

结构体是C语言中的一种自定义数据类型,用于组合多个不同类型的数据。以下是一个简单的结构体实例:

#include <stdio.h>

typedef struct {
    int id;
    float score;
    char name[50];
} Student;

int main() {
    Student student1;
    student1.id = 1;
    student1.score = 90.5;
    strcpy(student1.name, "John Doe");

    printf("Student ID: %d\n", student1.id);
    printf("Student Score: %.1f\n", student1.score);
    printf("Student Name: %s\n", student1.name);

    return 0;
}

在这个例子中,我们定义了一个名为Student的结构体,用于存储学生的ID、成绩和姓名,并创建了一个student1变量来存储一个学生的信息。

实例8:函数指针

函数指针是指向函数的指针,可以用于存储函数的地址。以下是一个简单的函数指针实例:

#include <stdio.h>

void printMessage() {
    printf("Hello, World!\n");
}

int main() {
    void (*funcPtr)(void) = printMessage; // 函数指针指向printMessage函数

    funcPtr(); // 调用函数指针

    return 0;
}

在这个例子中,我们定义了一个名为funcPtr的函数指针,它指向了printMessage函数,并使用函数指针调用了该函数。

实例9:文件操作

文件操作是C语言中的一种常见操作,用于处理文件。以下是一个简单的文件操作实例:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w"); // 打开文件进行写入
    if (file == NULL) {
        printf("Error opening file\n");
        return 1;
    }
    fprintf(file, "Hello, World!\n"); // 写入数据到文件
    fclose(file); // 关闭文件

    file = fopen("example.txt", "r"); // 打开文件进行读取
    if (file == NULL) {
        printf("Error opening file\n");
        return 1;
    }
    char buffer[100];
    fgets(buffer, sizeof(buffer), file); // 读取数据到缓冲区
    printf("File content: %s\n", buffer);
    fclose(file); // 关闭文件

    return 0;
}

在这个例子中,我们使用fopen函数打开一个名为example.txt的文件进行写入和读取操作,并使用fprintffgets函数分别写入和读取数据。

实例10:字符串处理

字符串处理是C语言中的一种常见操作,用于处理字符串。以下是一些简单的字符串处理实例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[100] = "Hello, World!";
    char str2[100] = "Hello";
    char str3[100];

    // 字符串连接
    strcpy(str3, str1);
    strcat(str3, str2);
    printf("Concatenated string: %s\n", str3);

    // 字符串比较
    int result = strcmp(str1, str2);
    if (result == 0) {
        printf("Strings are equal\n");
    } else if (result > 0) {
        printf("str1 is greater than str2\n");
    } else {
        printf("str1 is less than str2\n");
    }

    return 0;
}

在这个例子中,我们使用strcpystrcat函数进行字符串连接,使用strcmp函数比较两个字符串的大小。

实例11:结构体数组

结构体数组是C语言中的一种数据结构,用于存储多个结构体对象。以下是一个简单的结构体数组实例:

#include <stdio.h>

typedef struct {
    int id;
    float score;
    char name[50];
} Student;

int main() {
    Student students[3] = {
        {1, 90.5, "John Doe"},
        {2, 85.0, "Jane Smith"},
        {3, 92.0, "Alice Johnson"}
    };

    for (int i = 0; i < 3; i++) {
        printf("Student ID: %d\n", students[i].id);
        printf("Student Score: %.1f\n", students[i].score);
        printf("Student Name: %s\n", students[i].name);
    }

    return 0;
}

在这个例子中,我们定义了一个名为students的结构体数组,并初始化了3个学生的信息。

实例12:结构体指针

结构体指针是指向结构体的指针,用于访问结构体成员。以下是一个简单的结构体指针实例:

#include <stdio.h>

typedef struct {
    int id;
    float score;
    char name[50];
} Student;

int main() {
    Student student1 = {1, 90.5, "John Doe"};
    Student *ptr = &student1;

    printf("Student ID: %d\n", ptr->id);
    printf("Student Score: %.1f\n", ptr->score);
    printf("Student Name: %s\n", ptr->name);

    return 0;
}

在这个例子中,我们定义了一个名为ptr的结构体指针,它指向了student1变量,并使用指针访问结构体成员。

实例13:动态内存分配

动态内存分配是C语言中的一种内存管理技术,用于在运行时分配和释放内存。以下是一个简单的动态内存分配实例:

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

int main() {
    int *numbers = (int *)malloc(5 * sizeof(int)); // 分配内存
    if (numbers == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        numbers[i] = i + 1;
    }

    for (int i = 0; i < 5; i++) {
        printf("Number %d: %d\n", i, numbers[i]);
    }

    free(numbers); // 释放内存

    return 0;
}

在这个例子中,我们使用malloc函数动态分配了一个整型数组numbers的内存,并初始化了数组元素,然后打印出数组元素,最后使用free函数释放了内存。

实例14:位操作

位操作是C语言中的一种操作,用于直接对二进制位进行操作。以下是一些常见的位操作实例:

#include <stdio.h>

int main() {
    int a = 5; // 二进制表示:0000 0101
    int b = 3; // 二进制表示:0000 0011

    // 按位或
    int result_or = a | b; // 二进制表示:0000 0111
    printf("a | b: %d\n", result_or);

    // 按位与
    int result_and = a & b; // 二进制表示:0000 0001
    printf("a & b: %d\n", result_and);

    // 按位异或
    int result_xor = a ^ b; // 二进制表示:0000 0100
    printf("a ^ b: %d\n", result_xor);

    // 按位取反
    int result_not = ~a; // 二进制表示:1111 1010
    printf("~a: %d\n", result_not);

    return 0;
}

在这个例子中,我们对两个整数ab进行了按位或、按位与、按位异或和按位取反操作,并打印出操作结果。

实例15:指针数组

指针数组是C语言中的一种数据结构,用于存储多个指针。以下是一个简单的指针数组实例:

#include <stdio.h>

int main() {
    int a = 1, b = 2, c = 3;
    int *ptrs[3] = {&a, &b, &c};

    for (int i = 0; i < 3; i++) {
        printf("Value at address %p: %d\n", (void *)ptrs[i], *ptrs[i]);
    }

    return 0;
}

在这个例子中,我们定义了一个名为ptrs的指针数组,并存储了三个整数的地址,然后通过循环遍历并打印出每个指针指向的值。

实例16:函数指针数组

函数指针数组是C语言中的一种数据结构,用于存储多个函数指针。以下是一个简单的函数指针数组实例:

#include <stdio.h>

void printMessage() {
    printf("Hello, World!\n");
}

void printNumber(int number) {
    printf("Number: %d\n", number);
}

int main() {
    void (*funcPtrs[2])(void) = {printMessage, printNumber};

    funcPtrs[0](); // 调用第一个函数指针
    funcPtrs[1](5); // 调用第二个函数指针

    return 0;
}

在这个例子中,我们定义了一个名为funcPtrs的函数指针数组,并存储了两个函数的地址,然后通过数组索引调用这两个函数。

实例17:结构体指针数组

结构体指针数组是C语言中的一种数据结构,用于存储多个结构体指针。以下是一个简单的结构体指针数组实例:

#include <stdio.h>

typedef struct {
    int id;
    float score;
    char name[50];
} Student;

int main() {
    Student student1 = {1, 90.5, "John Doe"};
    Student student2 = {2, 85.0, "Jane Smith"};
    Student *ptrs[2] = {&student1, &student2};

    for (int i = 0; i < 2; i++) {
        printf("Student ID: %d\n", ptrs[i]->id);
        printf("Student Score: %.1f\n", ptrs[i]->score);
        printf("Student Name: %s\n", ptrs[i]->name);
    }

    return 0;
}

在这个例子中,我们定义了一个名为ptrs的结构体指针数组,并存储了两个学生的地址,然后通过循环遍历并打印出每个指针指向的结构体成员。

实例18:递归函数

递归函数是C语言中的一种函数,它调用自身来解决问题。以下是一个简单的递归函数实例:

#include <stdio.h>

int factorial(int n) {
    if (n <= 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

int main() {
    int number = 5;
    printf("Factorial of %d: %d\n", number, factorial(number));

    return 0;
}

在这个例子中,我们定义了一个名为factorial的递归函数,用于计算给定数字的阶乘,并使用该函数计算数字5的阶乘。

实例19:链表

链表是C语言中的一种常见数据结构,用于动态存储数据序列。以下是一个简单的单向链表实例:

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

typedef struct Node {
    int data;
    struct Node *next;
} Node;

void insertAtBeginning(Node **head, int data) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = *head;
    *head = newNode;
}

void printList(Node *head) {
    Node *current = head;
    while (current != NULL) {
        printf("%d -> ", current->data);
        current = current->next;
    }
    printf("NULL\n");
}

int main() {
    Node *head = NULL;
    insertAtBeginning(&head, 3);
    insertAtBeginning(&head, 2);
    insertAtBeginning(&head, 1);

    printList(head);

    return 0;
}

在这个例子中,我们定义了一个名为Node的结构体,用于表示链表节点,并实现了两个函数:insertAtBeginning用于在链表头部插入新节点,printList用于打印链表中的元素。

实例20:二叉树

二叉树是C语言中的一种常见数据结构,用于存储有序数据序列。以下是一个简单的二叉树实例:

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

typedef struct TreeNode {
    int data;
    struct TreeNode *left;
    struct TreeNode *right;
} TreeNode;

TreeNode *createNode(int data) {
    TreeNode *node = (TreeNode *)malloc(sizeof(TreeNode));
    node->data = data;
    node->left = NULL;
    node->right = NULL;
    return node;
}

void insertNode(TreeNode **root, int data) {
    if (*root == NULL) {
        *root = createNode(data);
    } else if (data < (*root)->data) {
        insertNode(&((*root)->left), data);
    } else {
        insertNode(&((*root)->right), data);
    }
}

void printInOrder(TreeNode *root) {
    if (root != NULL) {
        printInOrder(root->left);
        printf("%d ", root->data);
        printInOrder(root->right);
    }
}

int main() {
    TreeNode *root = NULL;
    insertNode(&root, 5);
    insertNode(&root, 3);
    insertNode(&root, 7);
    insertNode(&root, 2);
    insertNode(&root, 4);
    insertNode(&root, 6);
    insertNode(&root, 8);

    printf("In-order traversal: ");
    printInOrder(root);
    printf("\n");

    return 0;
}

在这个例子中,我们定义了一个名为TreeNode的结构体,用于表示二叉树节点,并实现了三个函数:createNode用于创建新节点,`insertNode