#include<stdio.h> #include<math.h> void d0(double a,double b,double c,double *x1,double *x2) { double P,Q,K; P = -b; Q = sqrt(pow(b,2)-4*a*c); K = 2*a; *x1 = (P + Q)/K; *x2 = (P - Q)/K; } void d1(double a,double b,double c,double *x1,double *x2) { double P,Q,K; P = -b; Q = sqrt(pow(b,2)-4*a*c); K = 2*a; *x1 = (P + Q)/K; *x2 = (P - Q)/K; } void d2(double a,double b,double c,double *x1,double *x2) { double P,Q,K; P = -b; Q = sqrt(fabs(pow(b,2)-4*a*c)); K = 2*a; *x1 = P/K; *x2 = Q/K; } int main() { double a,b,c,*x,*y; x = (double *)malloc(sizeof(double)); y = (double *)malloc(sizeof(double)); scanf("%lf %lf %lf",&a,&b,&c); if(pow(b,2)-4*a*c > 0) { d0(a,b,c,x,y); printf("x1=%.3lf x2=%.3lf",*x,*y); } else if(pow(b,2)-4*a*c == 0) { d1(a,b,c,x,y); printf("x1=%.3lf x2=%.3lf",*x,*y); } else { d2(a,b,c,x,y); printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi",*x,*y,*x,*y); } return 0; }
解题思路:根据题目,我声明了三个函数以计算三种情况下的根植。同时采用指针传递的方式,只需要在主函数中根据情况调用相应的函数,就可以将计算结果提取出来。
注意事项:由于采用指针传递,要定义双精度浮点类型的指针变量,所占字节较多,需要分配动态内存,否则段错误报错。
参考代码:
0.0分
1 人评分
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:705 |
兰顿蚂蚁 (C++代码)浏览:1160 |
printf基础练习2 (有点不明白)浏览:887 |
三角形 (C++代码)记忆化搜索浏览:1318 |
1118(求助_已解决)浏览:351 |
Pascal三角 (C语言代码)浏览:707 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:856 |
C语言训练-字符串正反连接 (C语言代码)浏览:653 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:1060 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:462 |