搜索
查看: 213|回复: 1
打印 上一主题 下一主题

保留根号,可约分的解一元二次方程程序,为什么有时根号开不出来?比如系数为4,5,-5

[复制链接]
跳转到指定楼层
楼主
 楼主| 发表于 2019-9-8 15:00:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include <stdlib.h>

  4. int main(void)
  5. {
  6. int a;
  7. int b;
  8. int c;
  9. int delta;
  10. printf("ax^2+bx+c=0:a=?");
  11. scanf("%d",&a);
  12. printf("b=?");
  13. scanf("%d",&b);
  14. printf("c=?");
  15. scanf("%d",&c);
  16. delta=b*b-4*a*c;
  17.     if (delta<0)
  18.     printf("无实根");
  19.    
  20.     else if (delta==0)
  21.     printf("x1=x2=%d",-b/2*a);
  22.    
  23.     else
  24.         int m,x;
  25.         for (int m = delta; m > 0; m--)
  26.       {
  27.         int x = delta / m / m;
  28.         if (m == 1)
  29.           printf("x1= -%d+√%d  ----------  %d ",b,delta,2*a);
  30.           printf("x2= -%d-√%d  ----------  %d ",b,delta,2*a);
  31.               break;
  32.             if (delta == m*m*x)
  33.         {
  34.           if (x == 1)//m为整数
  35.           {
  36.             int k,t,v,u,p,q;
  37.             v=-b+m;
  38.             p=-b-m;
  39.             u=2*a;
  40.             q=2*a;
  41.             if (u<v)
  42.                 t=u;
  43.                 else
  44.                 t=v;
  45.                 for (int i=t;i>=-abs(t);i--)
  46.                             {
  47.                                 if (i<-abs(v) || i<-abs(u))
  48.                                 break;
  49.                                 if (v%i==0 && u%i==0)
  50.                                 {
  51.                                     v/=i;
  52.                                     u/=i;
  53.                                     i=1;
  54.                                 }
  55.                             }
  56.                         if (p<q)
  57.                 k=p;
  58.                 else
  59.                 k=q;
  60.                 for (int s=k;s>=-abs(k);s--)
  61.                             {
  62.                                 if (s<-abs(p) || s<-abs(q))
  63.                                 break;
  64.                                 if (v%s==0 && u%s==0)
  65.                                 {
  66.                                     v/=s;
  67.                                     u/=s;
  68.                                     s=1;
  69.                                 }
  70.                             }
  71.                         printf("x1=%d  ----------  %d ",v,u);
  72.                         printf("x2=%d  ----------  %d ",p,q);
  73.                         break;
  74.           }
  75.           else//delta=m*√x
  76.           {
  77.             int a1,b1,c1,i0,t0;
  78.             a1=2*a;
  79.             b1=-b;
  80.             c1=m;
  81.             if(a1<b1)
  82.             t0=a1;
  83.             else
  84.             t0=b1;
  85.             
  86.             if(t0<c1)
  87.             t0=t0;
  88.             else
  89.             t0=c1;
  90.             
  91.             for(i0=abs(t0);i0>=-abs(t0);i0--){
  92.             
  93.                 if (i0<-abs(a1)||i0<-abs(b1)||i0<-abs(b1))
  94.                 break;
  95.                 if (a1%i0==0 && b1%i0==0 && c1%i0==0)
  96.                 {
  97.                     a1/=i0;
  98.                     b1/=i0;
  99.                     b1/=i0;
  100.                     
  101.                 }
  102.                
  103.             }
  104.             printf("x1=%d+%d√x  ----------  %d",b1,c1,a1);
  105.             printf("x2=%d-%d√x  ----------  %d",b1,c1,a1);   
  106.             
  107.             break;
  108.           }
  109.         }
  110.       }
  111. return 0;
  112. }



复制代码

沙发
发表于 2019-9-8 16:50:46 | 只看该作者
开方请用sqrt。         
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表