当前位置: 首页 > news >正文

入门到精通,C语言十大经典程序

以下是十个经典的C语言程序示例,这些程序涵盖了从基础到稍复杂的应用场景,适合初学者和有一定基础的开发者学习和参考。

1. Hello, World!

这是每个初学者学习编程时的第一个程序,用于验证开发环境是否正确配置。

#include <stdio.h>

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

2. 求两个数的最大公约数

使用欧几里得算法计算两个整数的最大公约数。

#include <stdio.h>

int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

int main() {
    int num1, num2;
    printf("Enter two integers: ");
    scanf("%d %d", &num1, &num2);
    printf("GCD of %d and %d is %d\n", num1, num2, gcd(num1, num2));
    return 0;
}

3. 素数判断

判断一个数是否为素数。

#include <stdio.h>
#include <math.h>

int isPrime(int num) {
    if (num <= 1) return 0;
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) return 0;
    }
    return 1;
}

int main() {
    int num;
    printf("Enter a number: ");
    scanf("%d", &num);
    if (isPrime(num)) {
        printf("%d is a prime number.\n", num);
    } else {
        printf("%d is not a prime number.\n", num);
    }
    return 0;
}

4. 冒泡排序

对数组进行冒泡排序。

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

5. 斐波那契数列

生成斐波那契数列的前N项。

#include <stdio.h>

void fibonacci(int n) {
    int a = 0, b = 1, c;
    printf("Fibonacci sequence: \n");
    for (int i = 0; i < n; i++) {
        printf("%d ", a);
        c = a + b;
        a = b;
        b = c;
    }
}

int main() {
    int n;
    printf("Enter the number of terms: ");
    scanf("%d", &n);
    fibonacci(n);
    return 0;
}

6. 字符串反转

反转一个字符串。

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

void reverseString(char str[]) {
    int len = strlen(str);
    for (int i = 0; i < len / 2; i++) {
        char temp = str[i];
        str[i] = str[len - i - 1];
        str[len - i - 1] = temp;
    }
}

int main() {
    char str[100];
    printf("Enter a string: ");
    scanf("%99s", str);
    reverseString(str);
    printf("Reversed string: %s\n", str);
    return 0;
}

7. 二分查找

在有序数组中查找一个元素。

#include <stdio.h>

int binarySearch(int arr[], int l, int r, int x) {
    while (l <= r) {
        int m = l + (r - l) / 2;
        if (arr[m] == x) return m;
        if (arr[m] < x) l = m + 1;
        else r = m - 1;
    }
    return -1;
}

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

8. 矩阵乘法

计算两个矩阵的乘积。

#include <stdio.h>

void multiplyMatrices(int mat1[][10], int mat2[][10], int res[][10], int r1, int c1, int r2, int c2) {
    for (int i = 0; i < r1; i++) {
        for (int j = 0; j < c2; j++) {
            res[i][j] = 0;
            for (int k = 0; k < c1; k++) {
                res[i][j] += mat1[i][k] * mat2[k][j];
            }
        }
    }
}

int main() {
    int mat1[10][10], mat2[10][10], res[10][10];
    int r1, c1, r2, c2;
    printf("Enter rows and columns for first matrix: ");
    scanf("%d %d", &r1, &c1);
    printf("Enter rows and columns for second matrix: ");
    scanf("%d %d", &r2, &c2);
    if (c1 != r2) {
        printf("Matrix multiplication not possible.\n");
        return 0;
    }
    printf("Enter elements of first matrix:\n");
    for (int i = 0; i < r1; i++) {
        for (int j = 0; j < c1; j++) {
            scanf("%d", &mat1[i][j]);
        }
    }
    printf("Enter elements of second matrix:\n");
    for (int i = 0; i < r2; i++) {
        for (int j = 0; j < c2; j++) {
            scanf("%d", &mat2[i][j]);
        }
    }
    multiplyMatrices(mat1, mat2, res, r1, c1, r2, c2);
    printf("Resultant matrix:\n");
    for (int i = 0; i < r1; i++) {
        for (int j = 0; j < c2; j++) {
            printf("%d ", res[i][j]);
        }
        printf("\n");
    }
    return 0;
}

9. 链表反转

反转一个单链表。

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

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

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

void reverse(struct Node** head) {
    struct Node* prev = NULL;
    struct Node* current = *head;
    struct Node* next = NULL;
    while (current != NULL) {
        next = current->next;
        current->next = prev;
        prev = current;
        current = next;
    }
    *head = prev;
}

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

int main() {
    struct Node* head = newNode(1);
    head->next = newNode(2);
    head->next->next = newNode(3);
    head->next->next->next = newNode(4);
    head->next->next->next->next = newNode(5);
    printf("Original list: ");
    printList(head);
    reverse(&head);
    printf("Reversed list: ");
    printList(head);
    return 0;
}

10. 文件读写

读取文件内容并写入到另一个文件。

#include <stdio.h>

int main() {
    FILE* sourceFile = fopen("source.txt", "r");
    FILE* targetFile = fopen("target.txt", "w");

相关文章:

  • 开发一款游戏需要哪些岗位角色参与?
  • CAN协议学习笔记1
  • 文章记单词 | 第29篇(六级)
  • linux下的目录文件管理和基本文件管理的基本操作
  • 5.3 GitHub订阅系统核心架构解密:高并发设计与SQLite优化实战
  • 「Unity3D」图片导入选项取消Read/Write,就无法正确显示导入大小,以及Addressable打包无法正确显示的问题
  • HarmonyOS应用开发指南
  • stm32+ADS1256称重模块,单通道称,多通道称(例如地磅)
  • MySQL一对多关系--多对多关系之间的区别
  • RCFile数据读取流程
  • 前缀和--
  • 消息中间件——RocketMQ(一)
  • 【复旦微FM33 MCU 底层开发指南】高级定时器ATIM
  • 齐次坐标系统:什么是齐次坐标?为什么要引入齐次坐标?
  • Go - 内存逃逸
  • C语言--实现图的基本操作
  • 探秘 LangChain 函数定义
  • Java 性能优化:从原理到实践的全面指南
  • #systemverilog# 关于基于systemveriog验证平台的RTL+TB文件编译顺序问题的讨论
  • c++11--std::forwaord--完美转发
  • 天算星座二期首批卫星成功发射,将助力6G空天信息基础设施建设
  • 当智慧农场遇见绿色工厂:百事如何用科技留住春天的味道?
  • 马上评|重病老人取款身亡,如何避免类似悲剧?
  • 对谈|“大礼议”:嘉靖皇帝的礼法困境与权力博弈
  • 美国务卿鲁比奥抵达会场,将参加俄乌会谈
  • 普京调整俄陆军高层人事任命