实例1:C语言基础语法

在C语言编程的世界里,首先需要掌握的是基础语法。以下是一个简单的“Hello, World!”程序,它展示了C语言的基本结构。

#include <stdio.h>

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

这个例子中,#include <stdio.h> 是预处理指令,用于包含标准输入输出库。int main() 是程序的入口点。printf() 函数用于在屏幕上打印文本。

实例2:变量和数据类型

变量是存储数据的地方,而数据类型定义了数据的种类。以下是如何声明和使用整型变量的例子。

#include <stdio.h>

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

在这个例子中,int age = 25; 声明了一个名为 age 的整型变量,并初始化为25。

实例3:运算符

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 remainder = a % b;

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

    return 0;
}

实例4:控制流——if语句

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

#include <stdio.h>

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

实例5:控制流——switch语句

switch 语句用于根据变量的值执行多个分支中的一个。以下是一个使用 switch 语句的例子。

#include <stdio.h>

int main() {
    int day = 3;
    switch (day) {
        case 1:
            printf("Monday\n");
            break;
        case 2:
            printf("Tuesday\n");
            break;
        case 3:
            printf("Wednesday\n");
            break;
        default:
            printf("Not a valid day.\n");
    }
    return 0;
}

实例6:循环——for循环

for 循环用于重复执行一段代码,直到满足特定条件。以下是一个使用 for 循环打印1到5的例子。

#include <stdio.h>

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

实例7:循环——while循环

while 循环用于在条件为真时重复执行代码块。以下是一个使用 while 循环的例子。

#include <stdio.h>

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

实例8:函数

函数是C语言中的代码块,可以重复使用。以下是一个简单的函数示例,用于计算两个数的和。

#include <stdio.h>

int add(int x, int y) {
    return x + y;
}

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

实例9:指针

指针是存储变量地址的变量。以下是如何使用指针访问变量的例子。

#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 of *ptr: %d\n", *ptr);
    return 0;
}

实例10:数组

数组是存储相同类型数据的集合。以下是如何声明和使用数组的例子。

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

实例11:字符串

字符串是字符的序列。以下是如何声明和使用字符串的例子。

#include <stdio.h>

int main() {
    char str[] = "Hello, World!";
    printf("%s\n", str);
    return 0;
}

实例12:结构体

结构体允许将不同类型的数据组合成一个单一的实体。以下是一个简单的结构体示例。

#include <stdio.h>

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

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

实例13:联合体

联合体允许存储不同类型的数据,但只能同时存储其中一种类型。以下是一个简单的联合体示例。

#include <stdio.h>

union Data {
    int i;
    float f;
    char c[4];
};

int main() {
    union Data data;
    data.i = 10;
    printf("Integer: %d\n", data.i);

    data.f = 3.14;
    printf("Float: %f\n", data.f);

    for (int i = 0; i < 4; i++) {
        printf("Char: %c\n", data.c[i]);
    }
    return 0;
}

实例14:枚举

枚举允许定义一组命名的整型常量。以下是一个简单的枚举示例。

#include <stdio.h>

enum Weekday {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
};

int main() {
    enum Weekday today = Wednesday;
    printf("Today is %d\n", today);
    return 0;
}

实例15:位字段

位字段允许在单个变量中存储多个布尔值。以下是一个使用位字段的例子。

#include <stdio.h>

struct BitField {
    unsigned int a : 1;
    unsigned int b : 1;
    unsigned int c : 1;
    unsigned int d : 1;
    unsigned int e : 1;
    unsigned int f : 1;
    unsigned int g : 1;
};

int main() {
    struct BitField bitField;
    bitField.a = 1;
    bitField.b = 0;
    bitField.c = 1;
    printf("BitField: %d\n", (bitField.a << 7) | (bitField.b << 6) | (bitField.c << 5) | (bitField.d << 4) | (bitField.e << 3) | (bitField.f << 2) | (bitField.g << 1));
    return 0;
}

实例16:文件操作

文件操作允许读写文件。以下是一个简单的文件写入和读取的例子。

#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];
    while (fgets(buffer, sizeof(buffer), file)) {
        printf("%s", buffer);
    }
    fclose(file);
    return 0;
}

实例17:动态内存分配

动态内存分配允许在运行时分配内存。以下是一个使用 mallocfree 的例子。

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

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

实例18:输入输出重定向

输入输出重定向允许将标准输入输出重定向到文件或其他设备。以下是一个使用输入输出重定向的例子。

echo "Hello, World!" > output.txt
cat output.txt

实例19:宏定义

宏定义允许创建可重用的代码片段。以下是一个简单的宏定义示例。

#include <stdio.h>

#define MAX_SIZE 10

int main() {
    int array[MAX_SIZE];
    for (int i = 0; i < MAX_SIZE; i++) {
        array[i] = i;
    }
    for (int i = 0; i < MAX_SIZE; i++) {
        printf("%d\n", array[i]);
    }
    return 0;
}

实例20:预处理器指令

预处理器指令允许在编译前执行操作。以下是一个使用预处理器指令的例子。

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

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

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

实例22:函数指针

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

#include <stdio.h>

int add(int x, int y) {
    return x + y;
}

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

实例23:递归函数

递归函数是调用自身的函数。以下是一个使用递归计算阶乘的例子。

#include <stdio.h>

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

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

实例24:指针数组

指针数组是存储指针的数组。以下是一个使用指针数组的例子。

#include <stdio.h>

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

实例25:函数数组

函数数组是存储函数指针的数组。以下是一个使用函数数组的例子。

#include <stdio.h>

int add(int x, int y) {
    return x + y;
}

int subtract(int x, int y) {
    return x - y;
}

int main() {
    int (*funcArray[2])(int, int) = {add, subtract};
    printf("The sum is %d\n", funcArray[0](10, 5));
    printf("The difference is %d\n", funcArray[1](10, 5));
    return 0;
}

实例26:结构体数组

结构体数组是存储结构体的数组。以下是一个使用结构体数组的例子。

#include <stdio.h>

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

int main() {
    struct Person people[] = {
        {"John Doe", 30},
        {"Jane Smith", 25},
        {"Alice Johnson", 28}
    };
    for (int i = 0; i < 3; i++) {
        printf("Name: %s, Age: %d\n", people[i].name, people[i].age);
    }
    return 0;
}

实例27:链表

链表是一种动态数据结构,由节点组成,每个节点包含数据和指向下一个节点的指针。以下是一个简单的单向链表示例。

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

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

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

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

int main() {
    struct Node *head = NULL;
    insert(&head, 1);
    insert(&head, 2);
    insert(&head, 3);
    printList(head);
    return 0;
}

实例28:栈

栈是一种后进先出(LIFO)的数据结构。以下是一个使用栈的例子。

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

#define MAX_SIZE 5

struct Stack {
    int top;
    int items[MAX_SIZE];
};

void initializeStack(struct Stack *s) {
    s->top = -1;
}

int isFull(struct Stack *s) {
    return s->top == MAX_SIZE - 1;
}

int isEmpty(struct Stack *s) {
    return s->top == -1;
}

void push(struct Stack *s, int item) {
    if (isFull(s)) {
        printf("Stack is full.\n");
        return;
    }
    s->items[++s->top] = item;
}

int pop(struct Stack *s) {
    if (isEmpty(s)) {
        printf("Stack is empty.\n");
        return -1;
    }
    return s->items[s->top--];
}

int main() {
    struct Stack stack;
    initializeStack(&stack);
    push(&stack, 1);
    push(&stack, 2);
    push(&stack, 3);
    printf("Popped: %d\n", pop(&stack));
    printf("Popped: %d\n", pop(&stack));
    printf("Popped: %d\n", pop(&stack));
    return 0;
}

实例29:队列

队列是一种先进先出(FIFO)的数据结构。以下是一个使用队列的例子。

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

#define MAX_SIZE 5

struct Queue {
    int front, rear;
    int items[MAX_SIZE];
};

void initializeQueue(struct Queue *q) {
    q->front = q->rear = -1;
}

int isFull(struct Queue *q) {
    return (q->rear + 1) % MAX_SIZE == q->front;
}

int isEmpty(struct Queue *q) {
    return q->front == -1;
}

void enqueue(struct Queue *q, int item) {
    if (isFull(q)) {
        printf("Queue is full.\n");
        return;
    }
    if (isEmpty(q)) {
        q->front = q->rear = 0;
    } else {
        q->rear = (q->rear + 1) % MAX_SIZE;
    }
    q->items[q->rear] = item;
}

int dequeue(struct Queue *q) {
    if (isEmpty(q)) {
        printf("Queue is empty.\n");
        return -1;
    }
    int item = q->items[q->front];
    if (q->front == q->rear) {
        q->front = q->rear = -1;
    } else {
        q->front = (q->front + 1) % MAX_SIZE;
    }
    return item;
}

int main() {
    struct Queue queue;
    initializeQueue(&queue);
    enqueue(&queue, 1);
    enqueue(&queue, 2);
    enqueue(&queue, 3);
    printf("Dequeued: %d\n", dequeue(&queue));
    printf("Dequeued: %d\n", dequeue(&queue));
    printf("Dequeued: %d\n", dequeue(&queue));
    return 0;
}

实例30:排序算法——冒泡排序

冒泡排序是一种简单的排序算法,通过比较相邻元素并交换它们的位置来排序数组。

”`c #include

void bubbleSort(int array[], int size) {

for (int step = 0; step < size - 1; ++step) {
    for (int i = 0; i < size - step - 1; ++i) {
        if (array[i] > array[i + 1]) {
            int temp = array[i];
            array[i] = array[i + 1];
            array[i + 1] = temp;
        }
    }
}

}

int main() {

int array[] = {64, 34, 25, 12, 22