用数组写一元二次方程的代码,分解为输入,计算和结果输出三个子函数部分,再做一个主函数分别调用三个子函数
@鱼板本板:
#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;
}
#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);
}
}
大哥上了指针,我不确定他们现在学到指针了
@echo_lovely: 确实还没有学到指针,如果可以不用指针来解决这个问题的话就更好了
@无毛骆驼: 骆驼大佬,题目要求得用数组,可以再优化一下代码吗谢谢
@鱼板本板:
#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;
}
@www378660084: 哥们我想把你的回复选为最佳答案并结账,但是你的代码是在评论的回复底下,结账不了,麻烦再发一下我来给你结账
当然可以!下面是一个用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");
}
}
输入函数 inputCoefficients
:
计算函数 calculateRoots
:
输出结果函数 outputResult
:
主函数 main
:
如果你有任何问题或需要进一步的修改,请随时告诉我!
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;
}