c语言编程题经典100例——(86~90例)

1,写一个函数,实现字符串的复制。

在C语言中,我们可以使用指针和内存分配函数(如 malloc)来实现字符串的复制。以下是一个示例函数:

#include <stdlib.h>  
  
char* string_copy(const char* source) {  
    // 分配足够的内存来存储源字符串及其终止字符  
    size_t len = strlen(source) + 1;  
    char* destination = (char*)malloc(len * sizeof(char));  
  
    // 复制源字符串到目标内存位置  
    for (size_t i = 0; i < len; i++) {  
        destination[i] = source[i];  
    }  
  
    // 返回目标字符串  
    return destination;  
}

这个函数首先计算源字符串的长度(包括终止字符),然后分配足够的内存来存储该字符串。接着,它遍历源字符串的每个字符,并将它们复制到新分配的内存中。最后,它返回指向新字符串的指针。

注意,这个函数使用了 malloc 来分配内存,因此调用者需要在不再需要字符串后调用 free 来释放内存,以防止内存泄漏。

2,写一个函数,实现字符串的连接。

在C语言中,我们可以使用指针和 strcat 函数来实现两个字符串的连接。这与我们上一篇的c语言编程题经典100例------(81~85例)的第一题一样,只不过这里用的库函数实现,下面是一个示例函数:

#include <string.h>  
  
void my_strcat(char* dest, const char* src) {  
    // 找到 dest 字符串的结尾  
    while(*dest) {  
        dest++;  
    }  
      
    // 使用 strcat 函数连接字符串  
    strcat(dest, src);  
}

在这个函数中,我们首先通过循环找到 dest 字符串的结尾。然后,我们使用 strcat 函数将 src 字符串连接到 dest 字符串的末尾。注意,这个函数假定 dest 字符串有足够的空间来存储结果字符串。如果这不是一个有效的假设,那么你可能需要先检查 dest 字符串是否有足够的空间,或者动态地分配更多的内存。

3,写一个函数,判断一个数是否为素数。

在C语言中,我们可以写一个函数来判断一个数是否为素数。首先,我们需要知道什么是素数。又是小学知识,素数是只有两个正因数:1和它本身的自然数。换句话说,如果一个大于1的自然数只能被1和它本身整除,那么它就是素数。

以下是一个简单的C语言函数,用来判断一个数是否为素数,这一题可能与前面的题重复了,我们在这里换一种写法

#include <stdbool.h>  
  
bool is_prime(int num) {  
    if (num <= 1) {  
        return false;  // 0 and 1 are not prime numbers  
    }  
    if (num == 2) {  
        return true;  // 2 is the only even prime number  
    }  
    if (num % 2 == 0) {  
        return false;  // all other even numbers are not primes  
    }  
    int i;  
    for (i = 3; i * i <= num; i += 2) {  
        if (num % i == 0) {  
            return false;  // if num is divisible by any number in this loop, it's not prime  
        }  
    }  
    return true;  // if the loop completes without finding a divisor, num is prime  
}

这个函数首先检查数字是否小于或等于1,因为0和1都不是素数。然后它检查数字是否是2,因为2是唯一的偶数素数。然后它检查数字是否是其他偶数,因为其他偶数都不是素数。最后,它通过一个从3开始的循环来检查数字是否可以被任何奇数整除,如果可以,则该数字不是素数。如果循环完成没有找到这样的数字,那么该数字就是素数。

4,写一个函数,计算一个数的立方根。

下面是一个使用二分查找法计算立方根的C语言

#include <stdio.h>  
  
double cube_root(double num) {  
    double low, high;  
  
    if (num >= 0 && num <= 1) {  
        low = num;  
        high = 1;  
    } else {  
        low = 1;  
        high = num;  
    }  
  
    double epsilon = 0.00001;  // 精度值  
    double guess = (low + high) / 2;  // 初始猜测值为中间值  
  
    while (high - low >= epsilon) {  
        if (guess * guess * guess > num) {  
            high = guess;  
        } else {  
            low = guess;  
        }  
        guess = (low + high) / 2;  
    }  
  
    return guess;  
}  
  
int main() {  
    double num = 27;  // 待求解立方根的数  
    double result = cube_root(num);  // 计算立方根  
    printf("%lf的立方根是%lf\n", num, result);  // 输出结果  
    return 0;  
}

在这个示例中,我们定义了一个名为cube_root()的函数,它使用二分查找法计算一个数的立方根。该函数接受一个double类型的参数num,表示待求解立方根的数。在函数中,我们首先确定查找范围,即将lowhigh初始化为num的左右边界。然后,我们使用一个循环来不断缩小查找范围,直到达到指定的精度要求。在每次循环中,我们根据当前的猜测值guess来更新左右边界,并将新的猜测值设置为中间值。最后,函数返回最终的猜测值作为立方根的近似解。在示例程序中,我们将待求解的数设置为27,并输出计算得到的立方根结果。

5,写一个函数,求解一元二次方程。

#include <stdio.h>  
#include <math.h>  
  
double quadratic_equation(double a, double b, double c) {  
    double delta = b * b - 4 * a * c; // 计算判别式  
    if (delta < 0) { // 如果判别式小于0,则方程无实数解  
        return NAN;  
    } else if (delta == 0) { // 如果判别式等于0,则方程有唯一实数解  
        return -b / (2 * a);  
    } else { // 如果判别式大于0,则方程有两个实数解  
        double x1 = (-b + sqrt(delta)) / (2 * a);  
        double x2 = (-b - sqrt(delta)) / (2 * a);  
        return x1; // 返回第一个解  
    }  
}  
  
int main() {  
    double a = 1.0;  
    double b = -3.0;  
    double c = 2.0;  
    double result = quadratic_equation(a, b, c);  
    printf("The solution of the quadratic equation %.2lf*x^2 + %.2lf*x + %.2lf = 0 is %.2lf.\n", a, b, c, result);  
    return 0;  
}

在上述示例中,我们定义了一个名为quadratic_equation()的函数,用于求解一元二次方程。该函数接受三个double类型的参数abc,分别表示二次项、一次项和常数项的系数。函数首先计算判别式delta,然后根据判别式的值进行分类讨论。如果判别式小于0,则方程无实数解;如果判别式等于0,则方程有唯一实数解;如果判别式大于0,则方程有两个实数解。最后,函数返回第一个解。在主函数中,我们定义了三个系数值abc,然后调用quadratic_equation()函数求解方程,并输出结果。

总结:对于刚学C语言的朋友不要小看这小小的数学计算,其实很能锻炼我们写代码的能力!

相关推荐
Theodore_10223 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou3 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
----云烟----5 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024065 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic5 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it5 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康5 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神6 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
搬砖的小码农_Sky6 小时前
C语言:数组
c语言·数据结构
宅小海6 小时前
scala String
大数据·开发语言·scala