C语言随记——八道C语言简单算法题

前言

在计算机编程领域,算法是程序设计的灵魂,而C语言作为一种被广泛应用的编程语言,对于算法的理解和实现至关重要。本篇博客将带你深入探讨八道C语言简单算法题,涵盖了逻辑运算、循环结构、数组操作等多个方面的算法挑战。

通过挑战这些问题,不仅可以加深对C语言的理解,还能锻炼解决问题的能力和编程思维。每道题目都将提供详细的问题描述和相应的C语言代码解,帮助你更好地理解和掌握算法的实际应用。

题目一:逆序输出

问题描述:

编写一个C程序,要求从键盘输入10个整数,然后按输入的逆序将它们输出。

代码答案:
复制代码
#include <stdio.h>

int main() {
    int arr[10];
    printf("请输入10个整数:\n");
    for (int i = 0; i < 10; i++) {
        scanf("%d", &[i]);
    }
    printf("逆序输出:\n");
    for (int i = 9; i >= 0; i--) {
        printf("%d ", arr[i]);
    }
    return 0;
}

问题二:反转字符串

问题描述:

编写一个函数,接受一个字符串作为输入,并将其反转。

复制代码
#include <stdio.h>
#include <string.h>

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

int main() {
    char str[] = "Hello, World!";
    reverseString(str);
    printf("反转后的字符串是: %s\n", str);
    return 0;
}

问题三:查找数组中的最大值和最小值

问题描述:

编写一个函数,接受一个整数数组和数组的长度作为输入,并返回数组中的最大值和最小值。

复制代码
#include <stdio.h>

void findMaxMin(int arr[], int size, int* max, int* min) {
    *max = arr[0];
    *min = arr[0];
    for (int i = 1; i < size; i++) {
        if (arr[i] > *max) {
            *max = arr[i];
        }
        else if (arr[i] < *min) {
            *min = arr[i];
        }
    }
}

int main() {
    int arr[] = {3, 7, 2, 8, 1, 5};
    int max, min;
    findMaxMin(arr, 6, &max, &min);
    printf("数组中的最大值是 %d,最小值是 %d\n", max, min);
    return 0;
}

问题四:检查数

问题描述:

编写一个函数,接受一个整数作为输入,并返回是否该数是素数(质数)。

复制代码
#include <stdio.h>
#include <stdbool.h>

bool isPrime(int n) {
    if (n <= 1) {
        return false;
    }
    for (int i = 2; i * i <= n; i++) {
        if (n i == 0) {
            return false;
        }
    }
    return true;
}

int main() {
    int num = 17;
    if (isPrime(num)) {
        printf("%d 是素数\n", num);
    } else {
        printf("%d 不是素数\n", num);
    }
    return 0;
}

问题五:冒泡排序

编写一个函数,接受一个整数数组和数组的长度作为输入,并使用冒泡排序算法对数组进行排序。

复制代码
#include <stdio.h>

void bubbleSort(int arr[], int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - 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 size = sizeof(arr) / sizeof(arr[0]);
    bubbleSort(arr, size);
 printf("冒泡排序后的数组是: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

问题六:计算阶乘

编写一个函数,接受一个整数 n 作为输入,并返回 n 的阶乘。

复制代码
#include <stdio.h>

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

int main() {
    int n = 5;
    printf("%d 的阶乘是 %d\n", n, factorial(n));
    return 0;
}

问题七:判断回文数

编写一个函数,接受一个整数作为输入,并判断该数是否为回文数(即从左向右和从右向左读都是一样的数)。

复制代码
#include <stdio.h>
#include <stdbool.h>

bool isPalindrome(int x) {
    if (x < 0) {
        return false;
    }
    int original = x;
    int reverse = 0;
    while (x != 0) {
        reverse = reverse * 10 + x % 10;
        x /= 10;
    }
    return original == reverse;
}

int main() {
    int num = 12321;
    if (isPalindrome(num)) {
        printf("%d 是回文数\n", num);
    } else {
        printf("%d 不是回文数\n", num);
    }
    return 0;
}

问题八:计算最大公约数和最小公倍数

编写一个函数,接受两个整数作为输入,并计算它们的最大公约数和最小公倍数。

复制代码
#include <stdio.h>

int findGCD(int a, int b) {
    while (a != b) {
        if (a > b) {
            a -= b;
        } else {
            b -= a;
        }
    }
    return a;
}

int findLCM(int a, int b) {
    return (a * b) / findGCD(a, b);
}

int main() {
    int num1 = 12, num2 = 18;
    printf("%d 和 %d 的最大公约数是 %d\n", num1, num2, findGCD(num1, num2));
    printf("%d 和 %d 的最小公倍数是 %d\n", num1, num2, findLCM(num1, num2));
    return 0;
}

结束词

通过解决这八道C语言简单算法题,相信你对C语言的应用和算法的实际运用有了更深入的了解。算法是程序设计中不可或缺的一部分,它不仅考验着我们的逻辑思维能力,更是提升编程技能的重要途径。希望这些算法题目能够帮助你更好地理解和掌握C语言编程,也期待你在今后的编程道路上能够不断挑战自己,不断进步。愿你在编程的世界里,能够勇往直前,创造出更多优秀的代码!

相关推荐
笺上山河梦34 分钟前
文件操作(二进制文件)
开发语言·c++·学习·算法
大慕慕好懒1 小时前
PHP弱类型hash比较缺陷
算法·哈希算法
snowfoootball2 小时前
最短路问题
数据结构·算法
怀旧,3 小时前
【数据结构】4.单链表实现通讯录
android·服务器·数据结构
有你的冬天1983 小时前
数据结构(一)
数据结构·算法
满怀10153 小时前
【Python进阶】列表:全面解析与实战指南
python·算法
purrrew3 小时前
【数据结构_9】栈和队列
数据结构
爱学习的uu3 小时前
决策树:ID3,C4.5,CART树总结
算法·决策树·机器学习
wuqingshun3141594 小时前
蓝桥杯 9. 九宫幻方
数据结构·c++·算法·职场和发展·蓝桥杯·深度优先
小技与小术4 小时前
代码随想录算法训练营day4(链表)
数据结构·python·算法·链表