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语言编程,也期待你在今后的编程道路上能够不断挑战自己,不断进步。愿你在编程的世界里,能够勇往直前,创造出更多优秀的代码!

相关推荐
焦耳加热1 小时前
阿德莱德大学Nat. Commun.:盐模板策略实现废弃塑料到单原子催化剂的高值转化,推动环境与能源催化应用
人工智能·算法·机器学习·能源·材料工程
wan5555cn1 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
u6061 小时前
常用排序算法核心知识点梳理
算法·排序
蒋星熠4 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
小欣加油4 小时前
leetcode 面试题01.02判定是否互为字符重排
数据结构·c++·算法·leetcode·职场和发展
3Cloudream4 小时前
LeetCode 003. 无重复字符的最长子串 - 滑动窗口与哈希表详解
算法·leetcode·字符串·双指针·滑动窗口·哈希表·中等
王璐WL4 小时前
【c++】c++第一课:命名空间
数据结构·c++·算法
空白到白5 小时前
机器学习-聚类
人工智能·算法·机器学习·聚类
索迪迈科技5 小时前
java后端工程师进修ing(研一版 || day40)
java·开发语言·学习·算法
zzzsde5 小时前
【数据结构】队列
数据结构·算法