当前位置: 首页 > 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");

http://www.mrgr.cn/news/98262.html

相关文章:

  • 从0到1使用C++操作MSXML
  • C语言十大经典数学应用
  • 考研单词笔记 2025.04.13
  • 【甲子光年】DeepSeek开启AI算法变革元年
  • Go:方法
  • 【随身wifi】青龙面板保姆级教程
  • C语言的发展史
  • cursor+高德MCP:制作一份旅游攻略
  • 2025蓝桥杯C++ A组省赛 题解
  • 【嵌入式人工智能产品开发实战】(十九)—— 政安晨:小智AI嵌入式终端代码解读:【A】应用入口
  • 【深度学习与大模型基础】第10章-期望、方差和协方差
  • 【NLP】18. Encoder 和 Decoder
  • vue项目使用html2canvas和jspdf将页面导出成PDF文件
  • Restful风格接口开发
  • C语言斐波那契数列的多样实现
  • OpenHarmony5.0.2 USB摄像头适配
  • Java面向对象核心:多态、抽象类与接口实战解析
  • 基于51单片机的正负5V数字电压表( proteus仿真+程序+设计报告+讲解视频)
  • c语言 open函数
  • C语言中冒泡排序和快速排序的区别