用函数实现方程函数解题

一、线性方程(一次方程)​

线性方程的一般形式为:ax + b = 0a ≠ 0)。

求解目标是找到 x 的值:x = -b / a

函数设计思路
  • 输入参数 :系数 abdouble 类型,支持浮点数)。
  • 输出结果 :方程的解 xdouble 类型)。
  • 错误处理 :若 a = 0,方程无解或有无穷多解,需返回错误提示。
代码实现
cs 复制代码
#include <stdio.h>

// 函数声明:求解线性方程 ax + b = 0
double solve_linear_equation(double a, double b, int *error);

int main() {
    double a, b, x;
    int error;

    // 示例 1:正常情况(a ≠ 0)
    a = 2.0;
    b = 4.0;
    x = solve_linear_equation(a, b, &error);
    if (error == 0) {
        printf("方程 %.2fx + %.2f = 0 的解为 x = %.2f\n", a, b, x);
    } else {
        printf("方程无解或参数错误!\n");
    }

    // 示例 2:a = 0(无解)
    a = 0.0;
    b = 5.0;
    x = solve_linear_equation(a, b, &error);
    if (error == 0) {
        printf("方程 %.2fx + %.2f = 0 的解为 x = %.2f\n", a, b, x);
    } else {
        printf("方程无解或参数错误!\n");
    }

    return 0;
}

// 函数定义:求解线性方程 ax + b = 0
double solve_linear_equation(double a, double b, int *error) {
    *error = 0;  // 初始化错误码为 0(无错误)

    if (a == 0) {
        *error = 1;  // 错误码 1:a 为 0,方程无解
        return 0;    // 返回任意值(无意义)
    }

    return -b / a;  // 解为 x = -b/a
}
输出结果

方程 2.00x + 4.00 = 0 的解为 x = -2.00
方程无解或参数错误!

二、二次方程

二次方程的一般形式为:ax² + bx + c = 0a ≠ 0)。

求解目标是找到实根或复根,核心是计算判别式 Δ = b² - 4ac

函数设计思路
  • 输入参数 :系数 abcdouble 类型)。
  • 输出结果
    • Δ > 0:两个不同实根 x1x2
    • Δ = 0:一个实根(重根)x
    • Δ < 0:两个共轭复根(实部 real,虚部 imag)。
  • 错误处理 :若 a = 0,方程退化为线性方程,需提示错误。
代码实现(使用结构体返回结果)​
cs 复制代码
#include <stdio.h>
#include <math.h>  // 用于 sqrt 函数

// 定义结构体存储二次方程的根
typedef struct {
    int type;       // 根的类型:0=无实根(复根),1=重根,2=两个不同实根
    double x1;      // 实根 1(或复根实部)
    double x2;      // 实根 2(或复根虚部,仅当 type=0 时有效)
} QuadraticRoots;

// 函数声明:求解二次方程 ax² + bx + c = 0
QuadraticRoots solve_quadratic_equation(double a, double b, double c, int *error);

int main() {
    double a, b, c;
    int error;
    QuadraticRoots roots;

    // 示例 1:两个不同实根(Δ > 0)
    a = 1.0;
    b = -3.0;
    c = 2.0;
    roots = solve_quadratic_equation(a, b, c, &error);
    if (error == 0) {
        if (roots.type == 2) {
            printf("方程 %.2fx² + %.2fx + %.2f = 0 的根为 x1=%.2f, x2=%.2f\n",
                   a, b, c, roots.x1, roots.x2);
        } else if (roots.type == 1) {
            printf("方程 %.2fx² + %.2fx + %.2f = 0 的重根为 x=%.2f\n",
                   a, b, c, roots.x1);
        } else {
            printf("方程 %.2fx² + %.2fx + %.2f = 0 的复根为 %.2f ± %.2fi\n",
                   a, b, c, roots.x1, roots.x2);
        }
    } else {
        printf("方程参数错误!\n");
    }

    // 示例 2:复根(Δ < 0)
    a = 1.0;
    b = 2.0;
    c = 5.0;
    roots = solve_quadratic_equation(a, b, c, &error);
    if (error == 0) {
        if (roots.type == 2) {
            printf("方程 %.2fx² + %.2fx + %.2f = 0 的根为 x1=%.2f, x2=%.2f\n",
                   a, b, c, roots.x1, roots.x2);
        } else if (roots.type == 1) {
            printf("方程 %.2fx² + %.2fx + %.2f = 0 的重根为 x=%.2f\n",
                   a, b, c, roots.x1);
        } else {
            printf("方程 %.2fx² + %.2fx + %.2f = 0 的复根为 %.2f ± %.2fi\n",
                   a, b, c, roots.x1, roots.x2);
        }
    } else {
        printf("方程参数错误!\n");
    }

    return 0;
}

// 函数定义:求解二次方程 ax² + bx + c = 0
QuadraticRoots solve_quadratic_equation(double a, double b, double c, int *error) {
    QuadraticRoots result;
    *error = 0;  // 初始化错误码为 0(无错误)

    if (a == 0) {
        *error = 1;  // 错误码 1:a 为 0,方程退化为线性方程
        return result;
    }

    double delta = b * b - 4 * a * c;  // 计算判别式 Δ

    if (delta > 0) {
        // 两个不同实根
        result.type = 2;
        result.x1 = (-b + sqrt(delta)) / (2 * a);
        result.x2 = (-b - sqrt(delta)) / (2 * a);
    } else if (delta == 0) {
        // 重根
        result.type = 1;
        result.x1 = -b / (2 * a);
        result.x2 = result.x1;  // 虚部无意义,设为实部值
    } else {
        // 复根(Δ < 0)
        result.type = 0;
        result.x1 = -b / (2 * a);       // 实部
        result.x2 = sqrt(-delta) / (2 * a);  // 虚部(取绝对值)
    }

    return result;
}
输出结果

方程 1.00x² + -3.00x + 2.00 = 0 的根为 x1=2.00, x2=1.00
方程 1.00x² + 2.00x + 5.00 = 0 的复根为 -1.00 ± 2.00i

相关推荐
程序喵大人几秒前
【C++进阶】STL算法与函数对象 - 09 函数对象保存状态并复用规则
开发语言·c++·算法·stl·函数对象
Hello server2 小时前
DeepSeek Harness 深度体验:把「万物皆插件」做到极致的 AI 编程 Agent
人工智能
致Great5 小时前
DeepSeek Harness插件开发实战教程:我让它自己写了一个 arXiv 搜索插件
算法
驴友花雕6 小时前
【花雕动手做】行空板 K10 系列实验之人工智能语音识别小车的10个参考案例
人工智能·单片机·嵌入式硬件·语音识别·行空板 k10 系列实验·花雕动手做·小车的10个参考案例
火山引擎开发者社区8 小时前
DeepSeek-V4 Pro 发布,veStack Day 0 完成模型适配
人工智能
2501_926978338 小时前
AGI 的四种瓶颈:资源型还是发现型--以及DSH的位置
人工智能·经验分享·笔记·ai写作
Q463913498 小时前
线下销售复盘难落地,AI 会话设备能帮上啥忙
人工智能·自然语言处理
ebok.8 小时前
国产大模型落地业务系统的优选载体:京微智枢信创 AI 业务支撑平台
大数据·人工智能·低代码·ai
wujian83118 小时前
怎么用文心生成word文档?从格式错乱到智能导出,AI导出鸭让创作再无后顾之忧
人工智能·ai·word·豆包·deepseek·ai导出鸭
动物园猫9 小时前
猪危险行为目标检测数据集:3类别、5,000+张图像 | 目标检测
人工智能·目标检测·计算机视觉