C语言基础算法

  • C语言基础算法
    • 1、阶乘
      • 递归实现
      • 循环实现
    • 2、排序
      • 冒泡排序
      • 选择排序
    • 3、斐波那契数列
    • 4、ASCII码的使用

1、阶乘

递归实现

#include <stdio.h>

// 递归函数计算阶乘
int factorial(int n) {
    if (n == 0 || n == 1)
        return 1;
    else
        return n * factorial(n - 1);
}

int main() {
    int n;
    printf("请输入一个整数:");
    scanf("%d", &n);
    
    // 调用函数计算阶乘并输出结果
    printf("%d 的阶乘是 %d\n", n, factorial(n));
    
    return 0;
}

循环实现

#include <stdio.h>

int main() {
    int n, fact = 1;
    printf("请输入一个整数:");
    scanf("%d", &n);
    
    // 循环计算阶乘
    for (int i = 1; i <= n; ++i) {
        fact *= i;
    }
    
    // 输出结果
    printf("%d 的阶乘是 %d\n", n, fact);
    
    return 0;
}

2、排序

冒泡排序

#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("排序后的数组:\n");
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
    printf("\n");
    
    return 0;
}

选择排序

#include <stdio.h>

// 选择排序函数
void selectionSort(int arr[], int n) {
    int i, j, min_idx, temp;
    // 选择排序的外循环,从数组第一个元素开始
    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;
            }
        }
        // 将最小值与当前位置交换
        temp = arr[min_idx];
        arr[min_idx] = arr[i];
        arr[i] = temp;
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    printf("未排序数组:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    selectionSort(arr, n);
    
    printf("排序后的数组:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    return 0;
}

3、斐波那契数列

\\该函数最终会返回一个数字
double fabric(int n){
    int a = 0, b = 1, c;
    for(int i = 2; i <= n; ++i){
        c = a+b;
        a = b;
        b = c;
    }
    return b;
}

4、ASCII码的使用

#include "stdio.h"

int main(){
    for(int i = 65;i <= 90;i++){
        char letter = (char)i;
        printf("%c\n",letter);
    }
    for (int j = 90; j >= 65; j--) {
        char letter = (char)j;
        printf("%c\n",letter);
    }
    return 0;
}

小树,小树!