首页 新闻 会员 周边 捐助

c语言代码求助!大佬捞捞

0
悬赏园豆:50 [已解决问题] 解决于 2024-12-17 17:42

用数组写一元二次方程的代码,分解为输入,计算和结果输出三个子函数部分,再做一个主函数分别调用三个子函数

鱼板本板的主页 鱼板本板 | 初学一级 | 园豆:68
提问于:2024-12-13 10:30
< >
分享
最佳答案
1

@鱼板本板:


#include <stdio.h>
#include <math.h>

// 输入系数的函数
void input(double coeff[]) {
    printf("请输入一元二次方程的系数 a, b, c: ");
    scanf("%lf %lf %lf", &coeff[0], &coeff[1], &coeff[2]);
}

// 计算根的函数
void calculate(double coeff[], double result[]) {
    printf("a=%lf b=%lf c=%lf\n", coeff[0], coeff[1], coeff[2]);
    double discriminant = coeff[1] * coeff[1] - 4 * coeff[0] * coeff[2];

    if (discriminant > 0) {
        result[0] = (-coeff[1] + sqrt(discriminant)) / (2 * coeff[0]);
        result[1] = (-coeff[1] - sqrt(discriminant)) / (2 * coeff[0]);
    } else if (discriminant == 0) {
        result[0] = result[1] = -coeff[1] / (2 * coeff[0]);
    } else {
        result[0] = result[1] = 0; // 无实数解
    }
}

// 输出结果的函数
void output(double result[]) {
    if (result[0] == 0 && result[1] == 0) {
        printf("该方程无实数解。\n");
    } else if (result[0] == result[1]) {
        printf("该方程有一个实数解: x = %lf\n", result[1]);
    } else {
        printf("该方程有两个实数解: x1 = %lf, x2 = %lf\n", result[0], result[1]);
    }
}

int main() {
    double coeff[3];
    double result[2];

    // 输入系数
    input(coeff);

    // 计算根
    calculate(coeff, result);

    // 输出结果
    output(result);

    return 0;
}
收获园豆:50
www378660084 | 小虾三级 |园豆:1248 | 2024-12-16 10:21
其他回答(3)
0

include <stdio.h>

#include <math.h>

// 函数声明
void input(double *a, double *b, double *c);
void calculate(double a, double b, double c, double *x1, double *x2);
void output(double x1, double x2);

int main() {
    double a, b, c, x1, x2;

    // 输入系数
    input(&a, &b, &c);
    
    // 计算根
    calculate(a, b, c, &x1, &x2);
    
    // 输出结果
    output(x1, x2);

    return 0;
}

// 输入系数的函数
void input(double *a, double *b, double *c) {
    printf("请输入一元二次方程的系数 a, b, c: ");
    scanf("%lf %lf %lf", a, b, c);
}

// 计算根的函数
void calculate(double a, double b, double c, double *x1, double *x2) {
    double discriminant = b * b - 4 * a * c;
    
    if (discriminant > 0) {
        *x1 = (-b + sqrt(discriminant)) / (2 * a);
        *x2 = (-b - sqrt(discriminant)) / (2 * a);
    } else if (discriminant == 0) {
        *x1 = *x2 = -b / (2 * a);
    } else {
        *x1 = *x2 = 0; // 无实数解
    }
}

// 输出结果的函数
void output(double x1, double x2) {
    if (x1 == 0 && x2 == 0) {
        printf("该方程无实数解。\n");
    } else if (x1 == x2) {
        printf("该方程有一个实数解: x = %lf\n", x1);
    } else {
        printf("该方程有两个实数解: x1 = %lf, x2 = %lf\n", x1, x2);
    }
}
无毛骆驼 | 园豆:402 (菜鸟二级) | 2024-12-13 10:40

大哥上了指针,我不确定他们现在学到指针了

支持(1) 反对(0) echo_lovely | 园豆:1584 (小虾三级) | 2024-12-13 10:46

@echo_lovely: 确实还没有学到指针,如果可以不用指针来解决这个问题的话就更好了

支持(0) 反对(0) 鱼板本板 | 园豆:68 (初学一级) | 2024-12-13 10:59

@无毛骆驼: 骆驼大佬,题目要求得用数组,可以再优化一下代码吗谢谢

支持(0) 反对(0) 鱼板本板 | 园豆:68 (初学一级) | 2024-12-13 11:00

@鱼板本板:


#include <stdio.h>
#include <math.h>

// 输入系数的函数
void input(double coeff[]) {
    printf("请输入一元二次方程的系数 a, b, c: ");
    scanf("%lf %lf %lf", &coeff[0], &coeff[1], &coeff[2]);
}

// 计算根的函数
void calculate(double coeff[], double result[]) {
    printf("a=%lf b=%lf c=%lf\n", coeff[0], coeff[1], coeff[2]);
    double discriminant = coeff[1] * coeff[1] - 4 * coeff[0] * coeff[2];

    if (discriminant > 0) {
        result[0] = (-coeff[1] + sqrt(discriminant)) / (2 * coeff[0]);
        result[1] = (-coeff[1] - sqrt(discriminant)) / (2 * coeff[0]);
    } else if (discriminant == 0) {
        result[0] = result[1] = -coeff[1] / (2 * coeff[0]);
    } else {
        result[0] = result[1] = 0; // 无实数解
    }
}

// 输出结果的函数
void output(double result[]) {
    if (result[0] == 0 && result[1] == 0) {
        printf("该方程无实数解。\n");
    } else if (result[0] == result[1]) {
        printf("该方程有一个实数解: x = %lf\n", result[1]);
    } else {
        printf("该方程有两个实数解: x1 = %lf, x2 = %lf\n", result[0], result[1]);
    }
}

int main() {
    double coeff[3];
    double result[2];

    // 输入系数
    input(coeff);

    // 计算根
    calculate(coeff, result);

    // 输出结果
    output(result);

    return 0;
}
支持(1) 反对(0) www378660084 | 园豆:1248 (小虾三级) | 2024-12-13 11:07

@www378660084: 哥们我想把你的回复选为最佳答案并结账,但是你的代码是在评论的回复底下,结账不了,麻烦再发一下我来给你结账

支持(0) 反对(0) 鱼板本板 | 园豆:68 (初学一级) | 2024-12-14 18:07
0

当然可以!下面是一个用C语言实现的一元二次方程(形如 ( ax^2 + bx + c = 0 ))的代码示例。代码分为三个子函数,分别用于输入、计算和输出结果,最后通过主函数调用这三个子函数。

#include <stdio.h>
#include <math.h>

#define MAX_TERMS 3  // 一元二次方程有3个系数a, b, c

// 函数声明
void inputCoefficients(float coefficients[MAX_TERMS]);
void calculateRoots(float coefficients[MAX_TERMS], float *root1, float *root2, int *real);
void outputResult(float root1, float root2, int real);

int main() {
    float coefficients[MAX_TERMS]; // 存储系数 a, b, c
    float root1, root2;            // 根
    int real;                      // 判断根的类型
     
    inputCoefficients(coefficients);
    calculateRoots(coefficients, &root1, &root2, &real);
    outputResult(root1, root2, real);

    return 0;
}

// 输入函数
void inputCoefficients(float coefficients[MAX_TERMS]) {
    printf("请输入一元二次方程的系数 a, b 和 c:\n");
    printf("a: ");
    scanf("%f", &coefficients[0]);
    printf("b: ");
    scanf("%f", &coefficients[1]);
    printf("c: ");
    scanf("%f", &coefficients[2]);
}

// 计算函数
void calculateRoots(float coefficients[MAX_TERMS], float *root1, float *root2, int *real) {
    float a = coefficients[0];
    float b = coefficients[1];
    float c = coefficients[2];
    float discriminant = b * b - 4 * a * c; // 判别式

    if (discriminant > 0) {
        *real = 1; // 两个不同的实根
        *root1 = (-b + sqrt(discriminant)) / (2 * a);
        *root2 = (-b - sqrt(discriminant)) / (2 * a);
    } else if (discriminant == 0) {
        *real = 2; // 重根
        *root1 = *root2 = -b / (2 * a);
    } else {
        *real = 0; // 无实根
    }
}

// 输出结果函数
void outputResult(float root1, float root2, int real) {
    if (real == 1) {
        printf("方程有两个不同的实根:x1 = %.2f, x2 = %.2f\n", root1, root2);
    } else if (real == 2) {
        printf("方程有一个重根:x1 = x2 = %.2f\n", root1);
    } else {
        printf("方程没有实根!\n");
    }
}

代码说明:

  1. 输入函数 inputCoefficients

    • 该函数会提示用户输入一元二次方程的系数 ( a, b, c ),并将其存储在数组中。
  2. 计算函数 calculateRoots

    • 根据用户输入的系数计算判别式,以确定根的类型:
      • 判别式大于0:有两个不同的实根。
      • 判别式等于0:有一个重根。
      • 判别式小于0:没有实根。
  3. 输出结果函数 outputResult

    • 根据计算结果输出根的类型和具体值。
  4. 主函数 main

    • 调用以上三个子函数,完成整个程序的流程。

使用方法:

  • 将上述代码复制并粘贴到C语言开发环境中编译运行。
  • 输入相应的系数后,程序将输出该一元二次方程的根。

如果你有任何问题或需要进一步的修改,请随时告诉我!

Technologyforgood | 园豆:7700 (大侠五级) | 2024-12-13 15:20
0

include <iostream>

include <cmath>

include <vector>

using namespace std;

// 输入函数:获取输入的方程系数
void inputCoefficients(vector<double>& coeffs) {
cout << "Enter coefficients a, b, c for ax^2 + bx + c = 0: ";
for (double& coef : coeffs) {
cin >> coef;
}
}

// 计算函数:根据系数计算方程的根
vector<double> solveQuadratic(const vector<double>& coeffs) {
double a = coeffs[0], b = coeffs[1], c = coeffs[2];
vector<double> roots;

if (a == 0) { // 处理线性方程或无效输入
    if (b != 0) {
        roots.push_back(-c / b); // 线性方程唯一解
    }
} else {
    double discriminant = b * b - 4 * a * c;
    if (discriminant > 0) { // 两个实根
        roots.push_back((-b + sqrt(discriminant)) / (2 * a));
        roots.push_back((-b - sqrt(discriminant)) / (2 * a));
    } else if (discriminant == 0) { // 重根
        roots.push_back(-b / (2 * a));
    }
}
return roots;

}

// 输出函数:打印计算结果
void outputResults(const vector<double>& roots) {
if (roots.empty()) {
cout << "No real roots." << endl;
} else {
cout << "Roots: ";
for (double root : roots) {
cout << root << " ";
}
cout << endl;
}
}

// 主函数:调用输入、计算和输出函数
int main() {
vector<double> coeffs(3); // 存储 a, b, c
inputCoefficients(coeffs);

vector<double> roots = solveQuadratic(coeffs);

outputResults(roots);
return 0;

}

咸鱼不翻身呀 | 园豆:208 (菜鸟二级) | 2024-12-15 11:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册