引言

C语言作为一种历史悠久且功能强大的编程语言,在系统编程、嵌入式开发等领域有着广泛的应用。对于初学者来说,通过实例学习是快速掌握C语言的有效途径。本文将为你提供50个实用的C语言编程实例,帮助你从基础到进阶,逐步掌握C语言的精髓。

实例1:Hello World

#include <stdio.h>

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

这是一个经典的入门实例,用于打印“Hello, World!”。

实例2:变量与数据类型

#include <stdio.h>

int main() {
    int age = 18;
    float salary = 5000.0;
    char grade = 'A';
    printf("Age: %d\n", age);
    printf("Salary: %.2f\n", salary);
    printf("Grade: %c\n", grade);
    return 0;
}

这个实例展示了C语言中的基本数据类型和变量声明。

实例3:运算符

#include <stdio.h>

int main() {
    int a = 10, b = 5;
    printf("Addition: %d\n", a + b);
    printf("Subtraction: %d\n", a - b);
    printf("Multiplication: %d\n", a * b);
    printf("Division: %d\n", a / b);
    printf("Modulus: %d\n", a % b);
    return 0;
}

本实例介绍了C语言中的基本运算符。

实例4:条件语句

#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");
    }
    return 0;
}

这个实例展示了如何使用if语句进行条件判断。

实例5:循环语句

#include <stdio.h>

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

本实例展示了如何使用for循环打印1到10的数字。

实例6:函数

#include <stdio.h>

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

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

这个实例介绍了C语言中的函数定义和调用。

实例7:指针

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

本实例展示了C语言中的指针及其应用。

实例8:数组

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

这个实例介绍了C语言中的数组及其使用方法。

实例9:字符串

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

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

本实例展示了C语言中的字符串操作。

实例10:结构体

#include <stdio.h>

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

int main() {
    Employee emp = {1, "John Doe", 5000.0};
    printf("Employee ID: %d\n", emp.id);
    printf("Employee Name: %s\n", emp.name);
    printf("Employee Salary: %.2f\n", emp.salary);
    return 0;
}

这个实例介绍了C语言中的结构体及其应用。

实例11:位运算

#include <stdio.h>

int main() {
    int a = 5, b = 3;
    printf("a & b: %d\n", a & b);
    printf("a | b: %d\n", a | b);
    printf("a ^ b: %d\n", a ^ b);
    printf("~a: %d\n", ~a);
    return 0;
}

本实例展示了C语言中的位运算。

实例12:文件操作

#include <stdio.h>

int main() {
    FILE *fp;
    char filename[] = "example.txt";
    fp = fopen(filename, "w");
    if (fp == NULL) {
        printf("Error opening file!\n");
        return 1;
    }
    fprintf(fp, "Hello, file!\n");
    fclose(fp);
    return 0;
}

这个实例展示了C语言中的文件操作。

实例13:动态内存分配

#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;
    }
    for (int i = 0; i < 5; i++) {
        printf("numbers[%d] = %d\n", i, numbers[i]);
    }
    free(numbers);
    return 0;
}

本实例展示了C语言中的动态内存分配。

实例14:函数指针

#include <stdio.h>

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

int main() {
    int (*func)(int, int) = add;
    printf("Result: %d\n", func(3, 4));
    return 0;
}

这个实例介绍了C语言中的函数指针。

实例15:结构体指针

#include <stdio.h>

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

int main() {
    Employee emp = {1, "John Doe"};
    Employee *ptr = &emp;
    printf("Employee ID: %d\n", ptr->id);
    printf("Employee Name: %s\n", ptr->name);
    return 0;
}

本实例展示了C语言中的结构体指针。

实例16:链表

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

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

Node *createNode(int data) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

void insertNode(Node **head, int data) {
    Node *newNode = createNode(data);
    newNode->next = *head;
    *head = newNode;
}

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

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

这个实例介绍了C语言中的链表操作。

实例17:递归

#include <stdio.h>

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

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

本实例展示了C语言中的递归函数。

实例18:排序算法

#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void selectionSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int min_idx = i;
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[min_idx]) {
                min_idx = j;
            }
        }
        swap(&arr[min_idx], &arr[i]);
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);
    selectionSort(arr, n);
    printf("Sorted array: \n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

这个实例展示了C语言中的选择排序算法。

实例19:查找算法

#include <stdio.h>

int linearSearch(int arr[], int n, int x) {
    for (int i = 0; i < n; i++) {
        if (arr[i] == x) {
            return i;
        }
    }
    return -1;
}

int main() {
    int arr[] = {2, 3, 4, 10, 40};
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 10;
    int result = linearSearch(arr, n, x);
    if (result == -1) {
        printf("Element is not present in array");
    } else {
        printf("Element is present at index %d", result);
    }
    return 0;
}

本实例展示了C语言中的线性查找算法。

实例20:队列

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

#define MAX_SIZE 5

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

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

int isEmpty(Queue *q) {
    return q->size == 0;
}

int isFull(Queue *q) {
    return q->size == MAX_SIZE;
}

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

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

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

这个实例展示了C语言中的队列操作。

实例21:栈

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

#define MAX_SIZE 5

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

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

int isEmpty(Stack *s) {
    return s->size == 0;
}

int isFull(Stack *s) {
    return s->size == MAX_SIZE;
}

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

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

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

本实例展示了C语言中的栈操作。

实例22:动态链表

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

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

Node *createNode(int data) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

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

void insertAtEnd(Node **head, int data) {
    Node *newNode = createNode(data);
    if (*head == NULL) {
        *head = newNode;
        return;
    }
    Node *temp = *head;
    while (temp->next != NULL) {
        temp = temp->next;
    }
    temp->next = newNode;
}

void deleteNode(Node **head, int data) {
    Node *temp = *head, *prev = NULL;
    if (temp != NULL && temp->data == data) {
        *head = temp->next;
        free(temp);
        return;
    }
    while (temp != NULL && temp->data != data) {
        prev = temp;
        temp = temp->next;
    }
    if (temp == NULL) {
        return;
    }
    prev->next = temp->next;
    free(temp);
}

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

int main() {
    Node *head = NULL;
    insertAtBeginning(&head, 3);
    insertAtEnd(&head, 2);
    insertAtEnd(&head, 1);
    printf("List: ");
    printList(head);
    deleteNode(&head, 2);
    printf("List after deleting 2: ");
    printList(head);
    return 0;
}

这个实例展示了C语言中的动态链表操作。

实例23:递归查找

#include <stdio.h>

int recursiveSearch(int arr[], int n, int x) {
    if (n == 0) {
        return -1;
    }
    if (arr[n - 1] == x) {
        return n - 1;
    }
    return recursiveSearch(arr, n - 1, x);
}

int main() {
    int arr[] = {2, 3, 4, 10, 40};
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 10;
    int result = recursiveSearch(arr, n, x);
    if (result == -1) {
        printf("Element is not present in array");
    } else {
        printf("Element is present at index %d", result);
    }
    return 0;
}

本实例展示了C语言中的递归查找算法。

实例24:冒泡排序

#include <stdio.h>

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);
    bubbleSort(arr, n);
    printf("Sorted array: \n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

这个实例展示了C语言中的冒泡排序算法。

实例25:插入排序

#include <stdio.h>

void insertionSort(int arr[], int n) {
    int i, key, j;
    for (i = 1; i < n; i++) {
        key = arr[i];
        j = i - 1;

        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);
    insertionSort(arr, n);
    printf("Sorted array: \n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

本实例展示了C语言中的插入排序算法。

实例26:选择排序

”`c #include

void selectionSort(int arr[], int n) {

for (int i = 0; i < n - 1; i++) {
    int min_idx = i;
    for (int j = i