引言

C语言作为一种历史悠久且功能强大的编程语言,因其高效的执行速度和强大的功能,被广泛应用于操作系统、嵌入式系统、游戏开发等领域。对于初学者来说,C语言的学习可能会显得有些挑战性。本文将通过50个实用实例,深入解析C语言编程技巧,帮助读者轻松入门并逐步精通。

实例1:C语言基础语法

1.1 数据类型

#include <stdio.h>

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

1.2 变量声明与初始化

int main() {
    int x = 5, y;
    y = 10;
    printf("x:%d, y:%d\n", x, y);
    return 0;
}

实例2:运算符与表达式

2.1 算术运算符

#include <stdio.h>

int main() {
    int a = 10, b = 5;
    printf("a + b:%d\n", a + b);
    printf("a - b:%d\n", a - b);
    printf("a * b:%d\n", a * b);
    printf("a / b:%d\n", a / b);
    printf("a % b:%d\n", a % b); // 取余
    return 0;
}

2.2 关系运算符与逻辑运算符

#include <stdio.h>

int main() {
    int a = 10, b = 5;
    printf("a > b:%d\n", a > b);
    printf("a < b:%d\n", a < b);
    printf("!(a > b):%d\n", !(a > b)); // 逻辑非
    printf("(a > b) && (b > a):%d\n", (a > b) && (b > a)); // 逻辑与
    printf("(a > b) || (b > a):%d\n", (a > b) || (b > a)); // 逻辑或
    return 0;
}

实例3:控制结构

3.1 if语句

#include <stdio.h>

int main() {
    int age = 18;
    if (age >= 18) {
        printf("已成年\n");
    } else {
        printf("未成年\n");
    }
    return 0;
}

3.2 switch语句

#include <stdio.h>

int main() {
    int month = 12;
    switch (month) {
        case 1:
            printf("一月\n");
            break;
        case 2:
            printf("二月\n");
            break;
        default:
            printf("其他月份\n");
    }
    return 0;
}

实例4:循环结构

4.1 for循环

#include <stdio.h>

int main() {
    for (int i = 1; i <= 5; i++) {
        printf("i:%d\n", i);
    }
    return 0;
}

4.2 while循环

#include <stdio.h>

int main() {
    int i = 1;
    while (i <= 5) {
        printf("i:%d\n", i);
        i++;
    }
    return 0;
}

实例5:数组操作

5.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;
}

5.2 数组遍历与排序

#include <stdio.h>

int main() {
    int arr[5] = {5, 2, 9, 1, 5};
    for (int i = 0; i < 5; i++) {
        for (int j = i + 1; j < 5; j++) {
            if (arr[i] > arr[j]) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
    for (int i = 0; i < 5; i++) {
        printf("arr[%d]:%d\n", i, arr[i]);
    }
    return 0;
}

实例6:函数定义与调用

6.1 函数定义

#include <stdio.h>

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

int main() {
    printMessage();
    return 0;
}

6.2 函数调用

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    int result = add(3, 4);
    printf("结果:%d\n", result);
    return 0;
}

实例7:指针操作

7.1 指针定义与赋值

#include <stdio.h>

int main() {
    int a = 10;
    int *ptr = &a;
    printf("a:%d, &a:%p, ptr:%p, *ptr:%d\n", a, &a, ptr, *ptr);
    return 0;
}

7.2 指针数组

#include <stdio.h>

int main() {
    int arr[3] = {1, 2, 3};
    int *ptrArr[3];
    for (int i = 0; i < 3; i++) {
        ptrArr[i] = &arr[i];
    }
    for (int i = 0; i < 3; i++) {
        printf("arr[%d]:%d, ptrArr[%d]:%p, *ptrArr[%d]:%d\n", i, arr[i], i, ptrArr[i], i, *ptrArr[i]);
    }
    return 0;
}

实例8:结构体与联合体

8.1 结构体定义与使用

#include <stdio.h>

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

int main() {
    Student stu1;
    stu1.id = 1;
    strcpy(stu1.name, "张三");
    printf("学生ID:%d, 学生姓名:%s\n", stu1.id, stu1.name);
    return 0;
}

8.2 联合体定义与使用

#include <stdio.h>

typedef union {
    int id;
    float score;
} Data;

int main() {
    Data data;
    data.id = 1;
    printf("ID:%d\n", data.id);
    data.score = 90.5;
    printf("分数:%f\n", data.score);
    return 0;
}

实例9:文件操作

9.1 文件打开与关闭

#include <stdio.h>

int main() {
    FILE *fp = fopen("example.txt", "w");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return 1;
    }
    fprintf(fp, "Hello, World!\n");
    fclose(fp);
    return 0;
}

9.2 文件读取与写入

#include <stdio.h>

int main() {
    FILE *fp = fopen("example.txt", "r");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return 1;
    }
    char buffer[100];
    while (fgets(buffer, sizeof(buffer), fp)) {
        printf("%s", buffer);
    }
    fclose(fp);
    return 0;
}

实例10:动态内存分配

10.1 动态分配内存

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

int main() {
    int *arr = (int *)malloc(5 * sizeof(int));
    if (arr == NULL) {
        printf("内存分配失败\n");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        arr[i] = i;
    }
    for (int i = 0; i < 5; i++) {
        printf("arr[%d]:%d\n", i, arr[i]);
    }
    free(arr);
    return 0;
}

10.2 动态内存释放

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

int main() {
    int *arr = (int *)malloc(5 * sizeof(int));
    if (arr == NULL) {
        printf("内存分配失败\n");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        arr[i] = i;
    }
    free(arr);
    return 0;
}

实例11:字符串操作

11.1 字符串定义与初始化

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

int main() {
    char str1[50] = "Hello";
    char str2[50] = "World";
    printf("str1:%s, str2:%s\n", str1, str2);
    return 0;
}

11.2 字符串连接

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

int main() {
    char str1[100] = "Hello";
    char str2[50] = "World";
    strcat(str1, str2);
    printf("str1:%s\n", str1);
    return 0;
}

实例12:标准库函数

12.1 printf函数

#include <stdio.h>

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

12.2 scanf函数

#include <stdio.h>

int main() {
    int a;
    float b;
    char c;
    printf("请输入一个整数:");
    scanf("%d", &a);
    printf("请输入一个浮点数:");
    scanf("%f", &b);
    printf("请输入一个字符:");
    scanf("%c", &c);
    printf("输入的整数:%d, 浮点数:%f, 字符:%c\n", a, b, c);
    return 0;
}

实例13:错误处理

13.1 检查文件打开是否成功

#include <stdio.h>

int main() {
    FILE *fp = fopen("example.txt", "r");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return 1;
    }
    fclose(fp);
    return 0;
}

13.2 检查内存分配是否成功

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

int main() {
    int *arr = (int *)malloc(5 * sizeof(int));
    if (arr == NULL) {
        printf("内存分配失败\n");
        return 1;
    }
    free(arr);
    return 0;
}

实例14:递归函数

14.1 计算阶乘

#include <stdio.h>

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

int main() {
    int n = 5;
    printf("%d的阶乘:%d\n", n, factorial(n));
    return 0;
}

14.2 求斐波那契数列

#include <stdio.h>

int fibonacci(int n) {
    if (n <= 1) {
        return n;
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
}

int main() {
    int n = 10;
    printf("斐波那契数列:%d\n", fibonacci(n));
    return 0;
}

实例15:指针与数组

15.1 通过指针访问数组元素

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr = arr;
    for (int i = 0; i < 5; i++) {
        printf("arr[%d]:%d, *(arr + %d):%d, *(ptr + %d):%d\n", i, arr[i], i, *(arr + i), i, *(ptr + i));
    }
    return 0;
}

15.2 通过指针修改数组元素

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr = arr;
    for (int i = 0; i < 5; i++) {
        *(ptr + i) = i;
    }
    for (int i = 0; i < 5; i++) {
        printf("arr[%d]:%d\n", i, arr[i]);
    }
    return 0;
}

实例16:结构体指针

16.1 通过结构体指针访问成员

#include <stdio.h>

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

int main() {
    Student stu1 = {1, "张三"};
    Student *ptr = &stu1;
    printf("学生ID:%d, 学生姓名:%s\n", ptr->id, ptr->name);
    return 0;
}

16.2 通过结构体指针修改成员

#include <stdio.h>

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

int main() {
    Student stu1 = {1, "张三"};
    Student *ptr = &stu1;
    ptr->id = 2;
    strcpy(ptr->name, "李四");
    printf("学生ID:%d, 学生姓名:%s\n", ptr->id, ptr->name);
    return 0;
}

实例17:函数指针

17.1 定义函数指针

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    int (*funcPtr)(int, int) = add;
    printf("函数指针调用:%d\n", funcPtr(3, 4));
    return 0;
}

17.2 函数指针作为参数

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

void operate(int a, int b, int (*funcPtr)(int, int)) {
    printf("结果:%d\n", funcPtr(a, b));
}

int main() {
    operate(10, 5, add);
    operate(10, 5, subtract);
    return 0;
}

实例18:指针数组

18.1 指针数组定义与使用

#include <stdio.h>

int main() {
    int arr[3] = {1, 2, 3};
    int *ptrArr[3];
    for (int i = 0; i < 3; i++) {
        ptrArr[i] = &arr[i];
    }
    for (int i = 0; i < 3; i++) {
        printf("arr[%d]:%d, ptrArr[%d]:%p, *ptrArr[%d]:%d\n", i, arr[i], i, ptrArr[i], i, *ptrArr[i]);
    }
    return 0;
}

18.2 指针数组遍历

#include <stdio.h>

int main() {
    int arr[3] = {1, 2, 3};
    int *ptrArr[3];
    for (int i = 0; i < 3; i++) {
        ptrArr[i] = &arr[i];
    }
    for (int i = 0; i < 3; i++) {
        printf("arr[%d]:%d, *ptrArr[%d]:%d\n", i, arr[i], i, *ptrArr[i]);
    }
    return 0;
}

实例19:结构体数组

19.1 结构体数组定义与使用

#include <stdio.h>

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

int main() {
    Student stuArr[3] = {{1, "张三"}, {2, "李四"}, {3, "王五"}};
    for (int i = 0; i < 3; i++) {
        printf("学生ID:%d, 学生姓名:%s\n", stuArr[i].id, stuArr[i].name);
    }
    return 0;
}

19.2 结构体数组遍历

#include <stdio.h>

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

int main() {
    Student stuArr[3] = {{1, "张三"}, {2, "李四"}, {3, "王五"}};
    for (int i = 0; i < 3; i++) {
        printf("学生ID:%d, 学生姓名:%s\n", stuArr[i].id, stuArr[i].name);
    }
    return 0;
}

实例20:链表操作

20.1 链表节点定义

”`c #include #include

typedef struct Node {

int data;
struct Node *next;

} Node;

int main() {

Node *head = (Node *)malloc