序言

本文提供的函数是作者在学习过程中使用频率较高的一些自定义函数

数学相关

最大公因数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#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("请输入第一个数: ");
scanf("%d", &num1);
printf("请输入第二个数: ");
scanf("%d", &num2);

int result = gcd(num1, num2);
printf("最大公因数是: %d\n", result);

return 0;
}

最小公倍数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>

// 求最大公约数的函数
int gcd(int a, int b) {
// 当 b 不为 0 时,执行循环
while (b!= 0) {
// 交换 a 和 b 的值
int temp = b;
b = a % b;
a = temp;
}
// 返回最终的最大公约数
return a;
}

// 求最小公倍数的函数
int lcm(int a, int b) {
// 通过两数之积除以它们的最大公约数得到最小公倍数
return a * b / gcd(a, b);
}

int main() {
int num1, num2;
printf("请输入第一个数: ");
scanf("%d", &num1); // 输入第一个数

printf("请输入第二个数: ");
scanf("%d", &num2); // 输入第二个数

int result = lcm(num1, num2); // 计算并获取最小公倍数
printf("最小公倍数是: %d\n", result); // 输出最小公倍数

return 0;
}

判断质数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>

// 判断一个数是否为质数的函数
int isPrime(int num) {
// 0 和 1 不是质数
if (num <= 1) {
return 0;
}
// 2 是质数
if (num == 2) {
return 1;
}
// 偶数(除了 2)不是质数
if (num % 2 == 0) {
return 0;
}
// 从 3 开始,以步长为 2 遍历到 num 的平方根
for (int i = 3; i * i <= num; i += 2) {
// 如果能被整除,不是质数
if (num % i == 0) {
return 0;
}
}
// 都不能整除,是质数
return 1;
}

int main() {
int start, end;
printf("请输入起始数字: ");
scanf("%d", &start);
printf("请输入结束数字: ");
scanf("%d", &end);

printf("在 %d 到 %d 之间的质数有: ", start, end);
for (int num = start; num <= end; num++) {
// 如果是质数,输出
if (isPrime(num)) {
printf("%d ", num);
}
}
printf("\n");

return 0;
}

组合数函数

1
2
3
4
5
6
7
8
9
10
//组合数函数
int combination(int n, int r) {
int result = 1;
for (int i = 1; i <= r; i++) {
result *= (n - (r - i));
result /= i;
}
return result;
}

对称数

1
2
3
4
5
6
7
8
9
10
11
12
int is_Symmetric(int num)
{
int result=num*num;
int temp=result;
int new_result= 0;
while (temp>0)
{
new_result=new_result*10+temp%10;
temp/=10;
}
return new_result==result;
}

排序算法

冒泡排序

1
2
3
4
5
6
7
8
9
10
11
12
13
// 冒泡排序
void bubbleSort(int arr[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (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;
}
}
}
}

插入排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 插入排序
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;
}
}

选择排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 选择排序
void selectionSort(int arr[], int n) {
int i, j, min_idx;

for (i = 0; i < n - 1; i++) {
min_idx = i;
for (j = i + 1; j < n; j++)
if (arr[j] < arr[min_idx])
min_idx = j;

if (min_idx!= i) {
int temp = arr[i];
arr[i] = arr[min_idx];
arr[min_idx] = temp;
}
}
}