鱼C论坛

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

[学习笔记] 每日一学6

[复制链接]
发表于 2024-11-29 14:16:19 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 6bingame 于 2024-11-29 14:15 编辑

结构化程序设计方法

课本例题

求解一元二次方程

题1:求一元二次方程ax平方+bx+c=0的根

解:

第1步:结构化分析

先从最上层考虑,求解问题的算法可以分成3个小问题,即输入问题、求解问题和输出问题。
这3个小问题就是求一元二次方程根的3个功能模块——输入模块M1、计算处理模块M2和输出模块M3。
其中,M1模块完成输入必要的原始数据,M2模块根据求根算法求解,M3模块完成所得结果的显示或打印。
这样的划分,可使求一元二次方程根的问题变成3个相对独立的子问题。
其模块机构如下所示。

->M1[输入数据]->M2[根据算法求解]->M3[输出结果]

分解出的3个模块从总体上是顺序结构。
其中,M1和M3模块完成简单的输入和输出,可以直接设计出程序流程,不需要再分解。
而M2模块完成求根计算,求根则需要首先判断二次项系数a是否为0.
当a=0时,方程蜕化成一次方程,求根方法就不同于二次方程。
如果a≠0,则要根据b平方-4ac的情况求二次方程的根。
可见M2模块比较复杂,可以将其再细化成M21和M22两个子模块,分别对应一次方程和二次方程的求根。
其模块结构如下所示。

->{a=0?}->Y->M21[x1=c/b]
              ->N->M22[求二次方程根]

然后,分别对M1、M21和M3的算法进行结构组成,最终得到细化后完整的流程图。

->[d=b平方-4ac]->[x=-b/(2a)]->{a>=0}->Y->[x1=x+sqrt(d)/(2a)  x2=x-sqrt(d)/(2a)]
                                                           ->N->[x1=x+sqrt(-d)/(2a)  x2=x-sqrt(-d)/(2a)]


第2步:编程实现
#include<stdio.h>

#include<math.h>            //调用sqrt()函数,必须包含头文件math.h

int main()
{
    float a,b,c,d;

    float x1,x2,x;

    printf("请输入a,b,c值:");   //提示用户输入

    scanf("%f%f%f",&a,&b,&c);    //用户由键盘输入a,b,c的值

    if(a==0.0)      //如果a为零,方程的两个根均为-c/b
    {
        x1=x2=-c/b;
    }

    else        //如果a不为零,执行以下代码
        {
            d=b*b-4*a*c;

            x=-b/(2*a);

            if(d>=0)    //如果b*b-4*a*c>=0,计算出如下平方根
            {
                x1=x+sqrt(d)/(2*a);

                x2=x-sqrt(d)/(2*a);
            }

            else        //如果b*b-4*a*c<0,计算出如下平方根
            {
                x1=x+sqrt(-d)/(2*a);

                x2=x-sqrt(-d)/(2*a);
            }
        }

        printf("\n该方程式的两个根分别为:%f,%f\n",x1,x2);      //输出结果

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-31 02:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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