鱼C论坛

 找回密码
 立即注册
查看: 1587|回复: 0

[技术交流] 一元二次方程与一元二次函数

[复制链接]
发表于 2019-3-30 00:56:13 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 My_A 于 2019-3-30 01:03 编辑

做了个计算 一元二次方程和一元二次函数顶点与顶点式 的程序,希望大家多多指教
  1. #include <stdio.h>
  2. #include <math.h>

  3. #define NOT_ZERO(x) if((x)==0.0){return 0;}                // 二次方程的二次项系数不为0
  4. #define SQUARE(x) ((x)*(x))
  5. #define ANSWER(a,b,c,x) ((a)*SQUARE(x) + (b)*(x) + (c))    // 算方程结果
  6. #define MAX_Y(a,b) ((-(b))/(2*(a)))                        // 算最大/最小值

  7. typedef  struct{ double x,y; } POINT,*pPOINT;

  8. typedef struct{ double x1,x2; } ANSWER_X,*pANSWER_X;

  9. typedef struct{ double a,h,k; } VERTEX_TYPE,*pVERTEX_TYPE;

  10. // 解方程
  11. int solute(double a,double b,double c,pANSWER_X answer)
  12. {
  13.     NOT_ZERO(a);

  14.     double delta = SQUARE(b)-(4*a*c);

  15.     // 判断根的情况
  16.     if(delta >= 0.0){
  17.         if(delta > 0){
  18.             answer->x1 = (-b+sqrt(delta))/(2*a);
  19.             answer->x2 = (-b-sqrt(delta))/(2*a);
  20.         }else {
  21.             answer->x1 = answer->x2 = MAX_Y(a,b);
  22.         }

  23.         return 1;
  24.     }else{
  25.         return 0;        // 无实数根
  26.     }
  27. }

  28. // 计算顶点坐标
  29. int vertex(double a,double b,double c,pPOINT answer)
  30. {
  31.     NOT_ZERO(a);

  32.     answer->x = MAX_Y(a,b);
  33.     answer->y = ANSWER(a,b,c,answer->x);

  34.     return 1;
  35. }

  36. // 计算顶点式
  37. int vertex_type(double a,double b,double c,pVERTEX_TYPE ver){
  38.     NOT_ZERO(a);

  39.     double a1,h1,k1;
  40.     POINT p1;

  41.     vertex(a,b,c,&p1);
  42.     h1 = p1.x;
  43.     k1 = ANSWER(a,b,c,h1);
  44.     a1 = (ANSWER(a,b,c,0) - k1)/(SQUARE(h1));

  45.     ver->a = a1;
  46.     ver->k = k1;
  47.     ver->h = h1;

  48.     return 1;
  49. }

  50. int main()
  51. {
  52.     // 输入一元二次方程的一般式系数
  53.     double a=1;
  54.     double b=-4;
  55.     double c=3;

  56.     ANSWER_X answer;
  57.     POINT point;
  58.     VERTEX_TYPE ver;

  59.     if(solute(a,b,c,&answer)){
  60.         printf("The quadratic answer is :\n");
  61.         printf("\tx1 = %.3lf\n\tx2 = %.3lf\n",answer.x1,answer.x2);
  62.     }

  63.     if(vertex(a,b,c,&point)){
  64.         printf("The vertex-point is :\n");
  65.         printf("\t( %.3lf , %.3lf )\n",point.x,point.y);
  66.     }

  67.     if(vertex_type(a,b,c,&ver)){
  68.         printf("The vertex-type is :\n");
  69.         printf("\ty = %.3lf * (x - (%.3lf))^2 + (%.3lf)\n",ver.a,ver.h,ver.k);
  70.     }


  71.     return 0;
  72. }
复制代码

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-25 05:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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