实例1:打印Hello World

C语言编程的第一步就是学会打印“Hello World”。这是一个简单的基础,代码如下:

#include <stdio.h>

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

实例2:变量声明与赋值

在C语言中,声明变量是编程的基础。以下是一个声明和赋值整型变量的例子:

#include <stdio.h>

int main() {
    int age = 25;
    printf("I am %d years old.\n", age);
    return 0;
}

实例3:数据类型转换

在C语言中,数据类型转换是常见的操作。以下是将浮点数转换为整数的例子:

#include <stdio.h>

int main() {
    float f = 3.14;
    int i = (int)f;
    printf("Converted integer: %d\n", i);
    return 0;
}

实例4:条件语句

条件语句用于根据条件执行不同的代码块。以下是一个简单的if语句示例:

#include <stdio.h>

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

实例5:循环语句

循环语句用于重复执行代码块。以下是一个简单的for循环示例:

#include <stdio.h>

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

实例6:函数定义与调用

函数是C语言的核心组成部分。以下是一个简单函数的例子,用于计算两个数的和:

#include <stdio.h>

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

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

实例7:数组操作

数组是C语言中存储多个相同类型数据的一种方式。以下是一个声明和操作数组的例子:

#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;
}

实例8:指针操作

指针是C语言中一个强大的特性,它允许你直接访问内存地址。以下是一个使用指针的例子:

#include <stdio.h>

int main() {
    int a = 10;
    int *ptr = &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 pointed by ptr: %d\n", *ptr);
    return 0;
}

实例9:结构体定义与使用

结构体允许你将不同类型的数据组合在一起。以下是一个结构体的例子:

#include <stdio.h>

typedef struct {
    char name[50];
    int age;
    float salary;
} Employee;

int main() {
    Employee emp = {"John Doe", 30, 50000.0};
    printf("Employee Name: %s\n", emp.name);
    printf("Employee Age: %d\n", emp.age);
    printf("Employee Salary: %.2f\n", emp.salary);
    return 0;
}

实例10:函数指针

函数指针允许你将函数作为参数传递。以下是一个使用函数指针的例子:

#include <stdio.h>

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

int main() {
    void (*funcPtr)() = printMessage;
    funcPtr();
    return 0;
}

实例11:文件操作

文件操作是C语言中处理文件的一种方式。以下是一个读取和写入文件的例子:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }
    fprintf(file, "This is a test.\n");
    fclose(file);

    file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }
    char buffer[100];
    while (fgets(buffer, sizeof(buffer), file)) {
        printf("%s", buffer);
    }
    fclose(file);
    return 0;
}

实例12:动态内存分配

动态内存分配允许你在运行时分配内存。以下是一个使用malloc和free的例子:

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

int main() {
    int *ptr = (int *)malloc(5 * sizeof(int));
    if (ptr == NULL) {
        printf("Memory allocation failed.\n");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        ptr[i] = i;
    }
    for (int i = 0; i < 5; i++) {
        printf("Value at index %d: %d\n", i, ptr[i]);
    }
    free(ptr);
    return 0;
}

实例13:字符串操作

C语言中处理字符串需要一些特殊的函数。以下是一个字符串连接的例子:

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

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

实例14:结构体数组

结构体数组允许你存储多个结构体实例。以下是一个使用结构体数组的例子:

#include <stdio.h>

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

int main() {
    Person people[2] = {
        {"Alice", 25},
        {"Bob", 30}
    };
    for (int i = 0; i < 2; i++) {
        printf("Name: %s, Age: %d\n", people[i].name, people[i].age);
    }
    return 0;
}

实例15:指针数组

指针数组允许你存储多个指针。以下是一个使用指针数组的例子:

#include <stdio.h>

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

实例16:函数递归

递归是一种编程技巧,允许函数调用自身。以下是一个使用递归计算阶乘的例子:

#include <stdio.h>

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

int main() {
    int number = 5;
    printf("Factorial of %d is %d\n", number, factorial(number));
    return 0;
}

实例17:结构体指针

结构体指针允许你通过指针访问结构体成员。以下是一个使用结构体指针的例子:

#include <stdio.h>

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

int main() {
    Person person = {"John Doe", 30};
    Person *ptr = &person;
    printf("Name: %s, Age: %d\n", ptr->name, ptr->age);
    return 0;
}

实例18:位操作

位操作是C语言中的一个强大特性,它允许你直接操作位。以下是一个使用位操作的例子:

#include <stdio.h>

int main() {
    int a = 5; // 101 in binary
    int b = 3; // 011 in binary
    printf("a & b: %d\n", a & b); // 001 in binary, which is 1
    printf("a | b: %d\n", a | b); // 111 in binary, which is 7
    printf("a ^ b: %d\n", a ^ b); // 110 in binary, which is 6
    printf("a << 1: %d\n", a << 1); // 1010 in binary, which is 10
    printf("a >> 1: %d\n", a >> 1); // 10 in binary, which is 2
    return 0;
}

实例19:宏定义

宏定义是C语言中的一个特性,它允许你创建可重用的代码片段。以下是一个使用宏定义的例子:

#include <stdio.h>

#define MAX(a, b) ((a) > (b) ? (a) : (b))

int main() {
    int x = 10;
    int y = 20;
    printf("Max of %d and %d is %d\n", x, y, MAX(x, y));
    return 0;
}

实例20:预处理器指令

预处理器指令是C语言中的一个特性,它允许你在编译前执行一些操作。以下是一个使用预处理器指令的例子:

#include <stdio.h>

#if defined(__linux__)
    #define OS "Linux"
#elif defined(__windows__)
    #define OS "Windows"
#else
    #define OS "Unknown"
#endif

int main() {
    printf("Operating System: %s\n", OS);
    return 0;
}

实例21:错误处理

错误处理是编程中的一个重要方面。以下是一个使用错误处理的例子:

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

int divide(int a, int b) {
    if (b == 0) {
        fprintf(stderr, "Error: Division by zero.\n");
        return -1;
    }
    return a / b;
}

int main() {
    int result = divide(10, 0);
    if (result == -1) {
        return 1;
    }
    printf("Result: %d\n", result);
    return 0;
}

实例22:动态链接库

动态链接库(DLL)是C语言中的一个特性,它允许你使用其他程序中的代码。以下是一个使用动态链接库的例子:

#include <stdio.h>
#include <dlfcn.h>

typedef int (*AddFunction)(int, int);

int main() {
    void *handle = dlopen("libexample.so", RTLD_LAZY);
    if (!handle) {
        fprintf(stderr, "Error opening library.\n");
        return 1;
    }
    AddFunction addFunc = (AddFunction)dlsym(handle, "add");
    if (!addFunc) {
        fprintf(stderr, "Error loading symbol.\n");
        dlclose(handle);
        return 1;
    }
    int result = addFunc(5, 10);
    printf("Result: %d\n", result);
    dlclose(handle);
    return 0;
}

实例23:线程

线程是C语言中的一个特性,它允许你同时执行多个任务。以下是一个使用线程的例子:

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

void *threadFunction(void *arg) {
    printf("Thread ID: %ld\n", pthread_self());
    return NULL;
}

int main() {
    pthread_t thread;
    if (pthread_create(&thread, NULL, threadFunction, NULL) != 0) {
        fprintf(stderr, "Error creating thread.\n");
        return 1;
    }
    pthread_join(thread, NULL);
    return 0;
}

实例24:信号处理

信号处理是C语言中的一个特性,它允许你处理异步事件。以下是一个使用信号处理的例子:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void signalHandler(int signum) {
    printf("Received signal %d\n", signum);
}

int main() {
    signal(SIGINT, signalHandler);
    while (1) {
        printf("Waiting for signal...\n");
        sleep(1);
    }
    return 0;
}

实例25:网络编程

网络编程是C语言中的一个重要应用领域。以下是一个简单的TCP客户端的例子:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

int main() {
    int sockfd;
    struct sockaddr_in servaddr;

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(8080);
    servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
        perror("connect");
        exit(EXIT_FAILURE);
    }

    char buffer[1024] = "GET / HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n";
    send(sockfd, buffer, strlen(buffer), 0);

    char response[1024];
    int n = read(sockfd, response, sizeof(response));
    if (n > 0) {
        printf("Response: %s\n", response);
    }

    close(sockfd);
    return 0;
}

实例26:多进程

多进程是C语言中的一个特性,它允许你同时执行多个独立的进程。以下是一个使用多进程的例子:

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

void childProcess() {
    printf("Child process: PID = %d\n", getpid());
}

void parentProcess() {
    printf("Parent process: PID = %d\n", getpid());
    pid_t pid = fork();
    if (pid == 0) {
        childProcess();
    } else {
        wait(NULL);
    }
}

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

实例27:文件加密

文件加密是C语言中的一个应用,它允许你保护敏感数据。以下是一个使用XOR加密的例子:

#include <stdio.h>

void encryptFile(const char *inputFilename, const char *outputFilename, const char *key) {
    FILE *inputFile = fopen(inputFilename, "rb");
    FILE *outputFile = fopen(outputFilename, "wb");
    char ch;
    while ((ch = fgetc(inputFile)) != EOF) {
        fputc(ch ^ key[0], outputFile);
    }
    fclose(inputFile);
    fclose(outputFile);
}

int main() {
    encryptFile("input.txt", "encrypted.txt", "key");
    return 0;
}

实例28:文件压缩

文件压缩是C语言中的一个应用,它允许你减小文件大小。以下是一个使用LZ77算法的例子:

#include <stdio.h>

void compressFile(const char *inputFilename, const char *outputFilename) {
    FILE *inputFile = fopen(inputFilename, "rb");
    FILE *outputFile = fopen(outputFilename, "wb");
    char ch;
    int count = 1;
    while ((ch = fgetc(inputFile)) != EOF) {
        if (ch == fgetc(inputFile)) {
            count++;
        } else {
            if (count > 1) {
                fprintf(outputFile, "%d ", count);
            }
            fputc(ch, outputFile);
            count = 1;
        }
    }
    fclose(inputFile);
    fclose(outputFile);
}

int main() {
    compressFile("input.txt", "compressed.txt");
    return 0;
}

实例29:文件解压缩

文件解压缩是C语言中的一个应用,它允许你恢复压缩文件。以下是一个使用LZ77算法的例子:

#include <stdio.h>

void decompressFile(const char *inputFilename, const char *outputFilename) {
    FILE *inputFile = fopen(inputFilename, "rb");
    FILE *outputFile = fopen(outputFilename, "wb");
    int count;
    char ch;
    while (fscanf(inputFile, "%d ", &count) == 1) {
        for (int i = 0; i < count; i++) {
            fputc(ch, outputFile);
        }
        ch = fgetc(inputFile);
    }
    fclose(inputFile);
    fclose(outputFile);
}

int main() {
    decompressFile("compressed.txt", "decompressed.txt");
    return 0;
}

实例30:字符串搜索

字符串搜索是C语言中的一个应用,它允许你查找字符串中的特定子串。以下是一个使用KMP算法的例子:

”`c #include #include

void KMPSearch(const char *txt, const char *pat) {

int M = strlen(pat);
int N = strlen(txt);

int lps[M];
int j = 0;

// Preprocess the pattern (calculate lps[] array)
computeLPSArray(pat, M, lps);

int i = 0; // index for txt[]
while (i < N) {
    if (pat[j] == txt[i]) {
        j++;
        i++;
    }

    if (j == M) {
        printf("Found pattern at index %d\n", i - j);
        j = lps[j - 1];
    }

    // Mismatch after j matches
    else if (i < N && pat[j] != txt[i]) {
        // Do not match lps[0..lps[j-1]] characters,
        // they will match anyway
        if (j != 0)
            j = lps[j - 1];
        else
            i = i + 1;
    }
}

}

void computeLPSArray(const char *pat, int M, int lps[]) {

int len =