3、if 语句的嵌套-项目3-一元二次方程全解

1. 任务描述

有一方程ax^2+bx+c=0,a,b,c的值由键盘输入,请编程序,打印出以下情况时方程的解。
(1) a=0,b≠0时, 解为-c/b
(2) a=0,b=0,c=0, 解为任意值
(3) a=0,b=0,c≠0, 无解
(4) a≠0,b^2-4ac≥0, 有两个实根
(5) a≠0,b^2-4ac≤0, 有两个虚根

2. 程序流程图
3、if 语句的嵌套-项目3-一元二次方程全解

3. 代码实现

/*
*Copyright(c)2019,[email protected]
*All rights reserved.
*文件名称:answers_of_function_1.cpp
*作    者:马娅芳
*完成日期:2019.1.10
*版 本 号: v2.0

*问题描述:有一方程ax^2+bx+c=0,a,b,c的值由键盘输入,请编程序,打印出以下情况时方程的解。
           (1) a=0,b≠0时, 解为-c/b
           (2) a=0,b=0,c=0, 解为任意值
           (3) a=0,b=0,c≠0, 无解
           (4) a≠0,b^2-4ac≥0, 有两个实根
           (5) a≠0,b^2-4ac≤0, 有两个虚根
*程序输入:一元二次方程的系数 a, b, c 
*程序输出:方程根的情况 
*/

#include <stdio.h>
#include <math.h>

int main(){
	double a, b, c, x1, x2;
	double delta;            //如果在这里直接写 delta = b*b - 4*a*c, 系统默认将其初始化为 0  
	                         //则在调试时无论 a,b,c为何值,delta都为 0 
	
	printf("输入一元二次方程的系数:");
	scanf("%lf%lf%lf",&a, &b, &c);

	delta = b*b - 4*a*c;
	printf("delta= %f\n", delta);
	
	if(a == 0)
	{
		if(b == 0)
		{
			if(c == 0)
			{
				printf("方程的解为任意值。");
			}
			else
			{
				printf("方程无解。");
			}
		}
		else
		{
			x1 = x2 = -c/b;
			printf("%.2f", x1);
		}
	} 
	
	else
	{
		if(delta >= 0)
		{
			x1 = (-b + sqrt(delta)) / 2*a;
			x2 = (-b - sqrt(delta)) / 2*a;
			printf("%.2f\t%.2f", x1, x2);
		}
		else
		{
			printf("方程有2个虚根。"); 
		}
	}
	return 0;
}

4. 运行结果

(1) a=0,b≠0时, 解为-c/b
3、if 语句的嵌套-项目3-一元二次方程全解

(2)a=0,b=0,c=0, 解为任意值
3、if 语句的嵌套-项目3-一元二次方程全解

(3)a=0,b=0,c≠0, 无解
3、if 语句的嵌套-项目3-一元二次方程全解

(4)a≠0,b^2-4ac≥0, 有两个实根
3、if 语句的嵌套-项目3-一元二次方程全解

(5) a≠0,b^2-4ac≤0, 有两个虚根
3、if 语句的嵌套-项目3-一元二次方程全解

5. 心得

流程图是写代码的好帮手。