改进此前的一元二次方程代码(do...while的用法)

作者在 2011-08-19 12:00:42 发布以下内容
/*
时间:2011年8月19日11:54:55
功能:输入一元二次方程的3个系数,判断解的个数,并求出解
目的:改善之前学过的一元二次方程代码,掌握do...while的用法
*/

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

int main(void)
{
    double a,b,c;
    double delta;
    double x1,x2;
    char ch;
    
    do                                                        //do...while主要用于人机交互
    {
        printf("请输入一元二次方程的3个系数\n");
        printf("a = ");
        scanf("%lf", &a);
        printf("b = ");
        scanf("%lf", &b);
        printf("c = ");
        scanf("%lf", &c);
        
        delta = b*b - 4*a*c;
        
        if (delta > 0)
        {
            x1 = (-b + sqrt(delta)) / 2*a;
            x2 = (-b - sqrt(delta)) / 2*a;
            printf("此一元二次方程有两个实数解 x1 = %lf, x2 = %lf\n", x1,x2);        
        }
        else if (0 == delta)
        {
            x1 = (-b + sqrt(delta)) / 2*a;
            printf("此一元二次方程有一个实数解 x = %lf\n", x1);        
        }
        else
            printf("此一元二次方程无实数解\n");                    
        
        printf("是否继续(Y/N)?\n");
        scanf(" %c", &ch);                    // %c前面必需加空格,参见《c prime plus》的空白符问题    

    } while ('y'==ch || 'Y'==ch);        //要考虑到消除键盘输入的大小写区别
    
    return 0;
}

/*
在VC++6.0中的输出结果为:
————————————
请输入一元二次方程的3个系数
a = 1
b = 2
c = 1
此一元二次方程有一个实数解 x = -1.000000
是否继续(Y/N)?
y
请输入一元二次方程的3个系数
a = 1
b = 5
c = 6
此一元二次方程有两个实数解 x1 = -2.000000, x2 = -3.000000
是否继续(Y/N)?
y
请输入一元二次方程的3个系数
a = 1
b = 2
c = 3
此一元二次方程无实数解
是否继续(Y/N)?
n
Press any key to continue
————————————
*/
 
再修改一下,增加对a=0时的判断
/*
时间:2011年8月22日9:15:14
功能:输入一元二次方程的3个系数,判断解的个数,并求出解
目的:改善之前学过的一元二次方程代码,掌握do...while的用法
附注:受好友laznrbfe指点,增加对a=0时的判断
*/

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

int main(void)
{
    double a,b,c;
    double delta;
    double x1,x2;
    char ch;
    
    do                                                        //do...while主要用于人机交互
    {
        printf("请输入一元二次方程的3个系数\n");
        printf("a = ");
        scanf("%lf", &a);
        printf("b = ");
        scanf("%lf", &b);
        printf("c = ");
        scanf("%lf", &c);
        
        if(a != 0)
        {
            delta = b*b - 4*a*c;
            
            if (delta > 0)
            {
                x1 = (-b + sqrt(delta)) / 2*a;
                x2 = (-b - sqrt(delta)) / 2*a;
                printf("此一元二次方程有两个实数解 x1 = %lf, x2 = %lf\n", x1,x2);        
            }
            else if (0 == delta)
            {
                x1 = (-b + sqrt(delta)) / 2*a;
                printf("此一元二次方程有一个实数解 x = %lf\n", x1);        
            }
            else
                printf("此一元二次方程无实数解\n");        
        }
        else
        {
            x1 = -c / b;
            printf("这是一元一次方程,解为x = %lf\n",x1);
        }
        printf("是否继续(Y/N)?\n");
        scanf(" %c", &ch);                    // %c前面必需加空格,参见《c prime plus》的空白符问题    
        
    } while ('y'==ch || 'Y'==ch);        //要考虑到消除键盘输入的大小写区别
    
    return 0;
}

/*
在VC++6.0中的输出结果为:
————————————
请输入一元二次方程的3个系数
a = 1
b = 2
c = 1
此一元二次方程有一个实数解 x = -1.000000
是否继续(Y/N)?
y
请输入一元二次方程的3个系数
a = 1
b = 2
c = 3
此一元二次方程无实数解
是否继续(Y/N)?
y
请输入一元二次方程的3个系数
a = 1
b = 5
c = 6
此一元二次方程有两个实数解 x1 = -2.000000, x2 = -3.000000
是否继续(Y/N)?
y
请输入一元二次方程的3个系数
a = 0
b = 2
c = 5
这是一元一次方程,解为x = -2.500000
是否继续(Y/N)?
n
Press any key to continue
————————————
*/
郝斌视频笔记 | 阅读 1370 次
文章评论,共4条
贾文慧
2011-08-19 12:24
1
为了骗积分,赞一个
laznrbfe
2011-08-20 11:30
2
哥们儿,你试试a=0;b=2;c=5。看看结果,,,
edwardflee(作者)
2011-08-22 09:29
3
<div class="quote"><span class="q"><b>laznrbfe</b>: 哥们儿,你试试a=0;b=2;c=5。看看结果,,,</span></div>又给忘了,嘻嘻,改进了一下,哥们再帮我看看<img src="image/face/14.gif" class="face">
zzgtjt
2011-08-25 16:59
4
<img src="image/face/3.gif" class="face">看看看了
游客请输入验证码
最新评论