鱼C论坛

 找回密码
 立即注册
查看: 3107|回复: 12

[已解决]敲代码

[复制链接]
发表于 2022-10-29 19:12:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
二元一次方程的求解的代码是什么
就是应该怎么利用c语言求解二元一次方程
最佳答案
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
这个比上面的都最优吧,行号很少
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
        }
        
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-30 08:08:04 | 显示全部楼层

有没有简单一点的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-30 08:08:42 | 显示全部楼层

有没有简单一点的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-30 08:14:39 | 显示全部楼层
0unique0 发表于 2022-10-30 08:08
有没有简单一点的

我的方法应该蛮简单的了,你可以试试从图片中理解我的代码:
解法.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
这个比上面的都最优吧,行号很少
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
  3  32 499 main.c
sh-5.1$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
人造人 + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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; }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-5 20:33:18 | 显示全部楼层
高山 发表于 2022-11-4 20:21
你不要放大招啊……
我只是想赚点最佳答案

之前回复你的,审核通过了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-11 21:54:19 | 显示全部楼层

这是一元二次方程啊,这个书上教了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-10 17:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表