0unique0 发表于 2022-10-29 19:12:05

敲代码

二元一次方程的求解的代码是什么
就是应该怎么利用c语言求解二元一次方程

wuheqian 发表于 2022-10-29 19:15:36

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void solution(double a,double b,double c,double *l,double *p,double *q);
int main()
{
        double a,b,c,p,q,l;
        printf("请输入二元一次方程的系数a,b,c:\n");
        do
        {
                scanf("%lf %lf %lf",&a,&b,&c);
        }
        while((a==0)|| (b*b-4*a*c)<0);
        solution(a,b,c,&l,&p,&q);
        if(l==1)
                printf("方程的解为:%.2f%.2f",p,q);
        else printf("方程的只有一个解为:%.2f",p);
}
void solution(double a,double b,double c,double *l,double *p,double *q)
{
        double flag = b*b-4*a*c;
        if(flag == 0 )
        {
                *p= -b/(2*a);
                *q= *p;
                *l= 0;
        }
        else
        {
                *p= (-b/(2*a))/(4*a*c);
                *q= *p;
                *l = 1;
        }
       
}

傻眼貓咪 发表于 2022-10-29 19:44:10

#include <stdio.h>

typedef struct Equation {
        int a, b, c;
}Equation;

typedef struct Pair {
        float x, y;
}Pair;

/*
| a b |
| c d |
*/
int delta(int a, int b, int c, int d) {
        return a * d - c * b;
}

Pair solution(Equation E1, Equation E2) {
        float x = delta(E1.c, E1.b, E2.c, E2.b) / delta(E1.a, E1.b, E2.a, E2.b);
        float y = delta(E1.a, E1.c, E2.a, E2.c) / delta(E1.a, E1.b, E2.a, E2.b);
        Pair pair = { x, y };
        return pair;
}

int main(void) {
        Equation
                E1 = { 1, -1, 5 }, // x - y = 5
                E2 = { 2, 1, 4 }; // 2x + y = 4

        Pair ans = solution(E1, E2); // x = 3, y = -2

        printf("x = %.2f, y = %.2f\n", ans.x, ans.y);
        return 0;
}

0unique0 发表于 2022-10-30 08:08:04

傻眼貓咪 发表于 2022-10-29 19:44


有没有简单一点的

0unique0 发表于 2022-10-30 08:08:42

wuheqian 发表于 2022-10-29 19:15


有没有简单一点的

傻眼貓咪 发表于 2022-10-30 08:14:39

0unique0 发表于 2022-10-30 08:08
有没有简单一点的

我的方法应该蛮简单的了,你可以试试从图片中理解我的代码:

高山 发表于 2022-11-4 20:16:02

#include<stdio.h>
#include<math.h>
int main(){
int a,b,c;
printf("请输入:");
scanf("%d%d%d",&a,&b,&c);
double delta,x1,x2,m,n;
delta=b*b-4*a*c;
if(delta>0){
    x1=(-b+sqrt(delta))/(2*a);
    x2=(-b-sqrt(delta))/(2*a);
    printf("原方程的的解为x1=%f,x2=%f\n",x1,x2);
}
   if(delta==0){
    x1=(-b)/(2*a);
    x2=x1;
    printf("原方程的的解为x1=%f,x2=%f\n",x1,x2);
}
   
if(delta<0){
    m=(-b)/(2*a);
    n=sqrt(-delta)/(2*a);
    printf("原方程的的解为:x1=%8.4f+%8.4fi ; x2=%8.4f-%8.4fi\n ",m,n,m,n);
}
   
return 0;
}
(以上内容来自cnblogs,原文链接https://www.cnblogs.com/cylf/p/10595121.html)
这个比上面的都最优吧,行号很少

人造人 发表于 2022-11-4 20:20:51

高山 发表于 2022-11-4 20:16
(以上内容来自cnblogs,原文链接https://www.cnblogs.com/cylf/p/10595121.html)
这个比上面的都最优 ...

你认为的最优就是行数最少吗?
来,看看这个代码怎么样?只有3行
是不是最优?是吧?

sh-5.1$ cat main.c
#include<stdio.h>
#include<math.h>
int main(){ int a,b,c; printf("请输入:"); scanf("%d%d%d",&a,&b,&c); double delta,x1,x2,m,n; delta=b*b-4*a*c; if(delta>0){ x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); printf("原方程的的解为x1=%f,x2=%f\n",x1,x2); } if(delta==0){ x1=(-b)/(2*a); x2=x1; printf("原方程的的解为x1=%f,x2=%f\n",x1,x2); } if(delta<0){ m=(-b)/(2*a); n=sqrt(-delta)/(2*a); printf("原方程的的解为:x1=%8.4f+%8.4fi ; x2=%8.4f-%8.4fi\n ",m,n,m,n); } return 0; }
sh-5.1$ wc main.c
332 499 main.c
sh-5.1$

高山 发表于 2022-11-4 20:21:56

人造人 发表于 2022-11-4 20:20
你认为的最优就是行数最少吗?
来,看看这个代码怎么样?只有3行
是不是最优?是吧?

你不要放大招啊……
我只是想赚点最佳答案

人造人 发表于 2022-11-4 20:47:01

高山 发表于 2022-11-4 20:21
你不要放大招啊……
我只是想赚点最佳答案

C的预处理器指令不能放在一行
手动声明用到的东西,然后
一行!
^_^

int printf(const char *__format, ...); int scanf(const char *__format, ...); double sqrt(double __x); int main(){ int a,b,c; printf("请输入:"); scanf("%d%d%d",&a,&b,&c); double delta,x1,x2,m,n; delta=b*b-4*a*c; if(delta>0){ x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); printf("原方程的的解为x1=%f,x2=%f\n",x1,x2); } if(delta==0){ x1=(-b)/(2*a); x2=x1; printf("原方程的的解为x1=%f,x2=%f\n",x1,x2); } if(delta<0){ m=(-b)/(2*a); n=sqrt(-delta)/(2*a); printf("原方程的的解为:x1=%8.4f+%8.4fi ; x2=%8.4f-%8.4fi\n ",m,n,m,n); } return 0; }

gogo57913 发表于 2022-11-5 00:23:06

小甲鱼教我写的

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

int main(void)
{
        double a,b,c,disc,x1,x2,p,q;   // x1 x2 是解
        printf("input a,b,c\n");
        scanf("%lf %lf %lf",&a,&b,&c);
       
        disc = b*b-4*a*c;   
        p = -b/(2*a);
        q = sqrt(disc)/(2*a);
        x1 = p+q;
        x2 = p-q;
        printf("\nx1 = %5.2lf\nx2 = %5.2lf\n",x1,x2);
       
        return 0;
}

人造人 发表于 2022-11-5 20:33:18

高山 发表于 2022-11-4 20:21
你不要放大招啊……
我只是想赚点最佳答案

之前回复你的,审核通过了

0unique0 发表于 2022-11-11 21:54:19

gogo57913 发表于 2022-11-5 00:23
小甲鱼教我写的

这是一元二次方程啊,这个书上教了
页: [1]
查看完整版本: 敲代码