案例一:基础语法入门

在开始我们的C语言实战之旅之前,让我们先从一些基础语法入手。以下是一个简单的“Hello, World!”程序,它将帮助你熟悉C语言的打印语句。

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

这个程序包含了几个关键的部分:#include <stdio.h> 是一个预处理器指令,它告诉编译器我们需要使用标准输入输出库。int main() 是程序的入口点,而 printf("Hello, World!\n"); 则是用来在屏幕上打印文字的函数。

案例二:变量和赋值

变量是编程中存储数据的地方。以下是如何声明和初始化一个整型变量 age。

#include <stdio.h>

int main() {
    int age = 25;
    printf("My age is %d\n", age);
    return 0;
}

这里,我们声明了一个名为 age 的整型变量,并将其值设为 25。使用 %d 占位符来在 printf 函数中插入变量的值。

案例三:条件语句

条件语句允许程序根据特定的条件做出不同的决策。以下是一个简单的条件语句示例,它检查数字是否为正数。

#include <stdio.h>

int main() {
    int number = -5;
    if (number > 0) {
        printf("The number is positive.\n");
    } else {
        printf("The number is not positive.\n");
    }
    return 0;
}

在这个例子中,如果 number 大于 0,则会打印一条消息,否则会打印另一条消息。

案例四:循环结构

循环结构允许程序重复执行一段代码,直到满足特定条件。以下是一个使用 for 循环打印 1 到 10 的例子。

#include <stdio.h>

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

这里,for 循环从 1 开始,直到 i 大于 10,每次循环都会打印 i 的值。

案例五:数组操作

数组是一组相同类型的数据项的集合。以下是一个声明并初始化数组的例子,以及如何访问和打印数组元素。

#include <stdio.h>

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

在这个例子中,我们创建了一个包含五个整数的数组 numbers,并通过一个循环打印出每个元素的值。

案例六:函数定义和调用

函数是代码的块,可以重复使用以执行特定的任务。以下是一个自定义函数 greet 的例子,以及如何在主函数中调用它。

#include <stdio.h>

void greet() {
    printf("Hello, Function!\n");
}

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

这里,我们定义了一个 greet 函数,它没有参数也没有返回值。在 main 函数中,我们调用 greet 函数来打印一条消息。

案例七:结构体和指针

结构体允许我们将不同类型的数据组合成一个单一的数据类型。指针是存储变量地址的数据类型。以下是一个结构体和指针的例子。

#include <stdio.h>

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

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

在这个例子中,我们定义了一个 Person 结构体,包含 name 和 age 两个字段。然后我们创建了一个 Person 类型的变量 p 并初始化它。

案例八:文件操作

文件操作是编程中的一个重要方面。以下是如何使用C语言打开、读取、写入和关闭一个文本文件的例子。

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }
    fprintf(file, "Hello, File!\n");
    fclose(file);
    return 0;
}

在这个例子中,我们打开了一个名为 example.txt 的文件,并写入了一条消息。然后我们关闭了文件。

案例九:动态内存分配

动态内存分配允许程序在运行时请求内存。以下是如何使用 malloc 和 free 函数的例子。

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

int main() {
    int *ptr = (int *)malloc(5 * sizeof(int));
    if (ptr == NULL) {
        perror("Error allocating memory");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        ptr[i] = i;
    }
    for (int i = 0; i < 5; i++) {
        printf("%d\n", ptr[i]);
    }
    free(ptr);
    return 0;
}

在这个例子中,我们使用 malloc 分配了一个包含 5 个整数的内存块,然后使用循环填充它,最后使用 free 释放内存。

案例十:多线程编程

多线程编程允许程序同时执行多个任务。以下是如何使用 POSIX 线程库创建两个线程的例子。

#include <stdio.h>
#include <pthread.h>

void *threadFunction(void *arg) {
    printf("Thread %d running\n", *(int *)arg);
    return NULL;
}

int main() {
    pthread_t thread1, thread2;
    int arg1 = 1, arg2 = 2;

    pthread_create(&thread1, NULL, threadFunction, &arg1);
    pthread_create(&thread2, NULL, threadFunction, &arg2);

    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    return 0;
}

在这个例子中,我们创建了两个线程,每个线程都运行 threadFunction 函数,该函数接收一个整数值作为参数。

以上是 10 个实战案例,涵盖了C语言编程的一些基础和高级概念。通过这些案例,你可以加深对C语言的理解,并在解决实际编程难题时更加得心应手。