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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值