计算概论(A)/基础编程练习1(8题)/4:求一元二次方程的根
1 #include<stdio.h> 2 #include<math.h> 3 int main() { 4 // 待解方程数目 5 int n; 6 scanf("%d", &n); 7 8 // 声明方程系数 9 float a, b, c; 10 11 // 存储读入的系数 12 float args[n][n]; 13 14 // 声明方程的根 15 double x1, x2; 16 17 // 循环读入存储每行方程的系数a、b和c 18 int count=0; 19 while(count!=n) { 20 scanf("%f %f %f", &a, &b, &c); 21 args[count][0] = a; 22 args[count][1] = b; 23 args[count][2] = c; 24 count++; 25 } 26 27 // 循环计算每行的一元二次方程根 28 for(int i=0; i<n; i++) { 29 double delta = 0.0; 30 a = args[i][0]; 31 b = args[i][1]; 32 c = args[i][2]; 33 delta = b * b - 4 * a * c; 34 if(delta==0) { 35 x1 = (-b+0)/(2*a); 36 x2 = x1; 37 printf("x1=x2=%.5f\n", x1); 38 } else if(delta>0) { 39 x1 = (-b+sqrt(delta))/(2*a); 40 x2 = (-b-sqrt(delta))/(2*a); 41 if(x1>x2) 42 printf("x1=%.5f;x2=%.5f\n", x1, x2); 43 else 44 printf("x2=%.5f;x1=%.5f\n", x2, x1); 45 } else { 46 // 实部计算公式: -1.0*b/(2*a) 虚部计算公式:+/- (sqrt(-delta))/(2*a) 47 printf("x1=%.5f+%.5fi;x2=%.5f-%.5fi\n", -1.0*b/(2*a), (sqrt(-delta))/(2*a), -1.0*b/(2*a), (sqrt(-delta))/(2*a)); 48 } 49 } 50 return 0; 51 } 52 /* 53 pkuic_1709.c 54 计算概论(A)/基础编程练习1(8题)/4:求一元二次方程的根 55 http://pkuic.openjudge.cn/base1/4/ 56 4:求一元二次方程的根 57 查看 提交 统计 提问 58 总时间限制: 1000ms 内存限制: 65536kB 59 描述 60 利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2 + bx + c =0的根,其中a不等于0。 61 输入 62 第一行是待解方程的数目n。其余n行每行含三个浮点数a, b, c(它们之间用空格隔开),分别表示方程ax2 + bx + c =0的系数。 63 输出 64 输出共有n行,每行是一个方程的根: 65 若是两个实根,则输出:x1=...;x2 = ... 66 若两个实根相等,则输出:x1=x2=... 67 若是两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i 68 所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。 69 x1和x2的顺序:x1的实部>Re的实部||(x1的实部==x2的实部&&x1的虚部>=x2的虚部) 70 样例输入 71 3 72 1.0 3.0 1.0 73 2.0 -4.0 2.0 74 1.0 2.0 8.0 75 样例输出 76 x1=-0.38197;x2=-2.61803 77 x1=x2=1.00000 78 x1=-1.00000+2.64575i;x2=-1.00000-2.64575i 79 提示 80 1、需要严格按照题目描述的顺序求解x1、x2。 81 2、方程的根以及其它中间变量用double类型变量表示。 82 3、函数sqrt()在头文件math.h中。 83 4、要输出浮点数、双精度数小数点后5位数字,可以用下面这种形式:printf("%.5f", num); 84 注意 85 在使用Java做此题时,可能会出现x1或x2等于-0的情形,此时,需要把负号去掉 86 来源 87 2005~2006医学部计算概论期末考试 88 */
valuestack

浙公网安备 33010602011771号