| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1305 人关注过本帖
标题:无聊发个求一元二次方程的代码
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
下面的对应的C代码:

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>

double GetCoefficient(const char* tips);        // 交互获取方程系数

int main(int argc, char* argv[])
{
    double coefficient_A, coefficient_B, coefficient_C;
    while ((coefficient_A = GetCoefficient("\n请输入二次项系数(输入零结束程序) A: ")) != 0)
    {
        coefficient_B = GetCoefficient("请输入一次项系数 B: ");
        coefficient_C = GetCoefficient("请输入常数项系数 C: ");
        printf_s("您需要求解的方程是:%.4f * x^2 + %.4f * x + %.4f = 0\n", coefficient_A, coefficient_B, coefficient_C);
        double delta = coefficient_B * coefficient_B - 4 * coefficient_A * coefficient_C;
        if (delta == 0)
        {
            double theUnknown = - coefficient_B / (2 * coefficient_A);
            printf_s("方程的根为: %.4f\n", theUnknown);
        }
        if (delta > 0)
        {
            double theUnknown1, theUnknown2;
            theUnknown1 = (- coefficient_B + sqrt(delta)) / (2 * coefficient_A);
            theUnknown2 = (- coefficient_B - sqrt(delta)) / (2 * coefficient_A);
            printf_s("方程的根为: %.4f, %.4f", theUnknown1, theUnknown2);
        }
        if (delta < 0)
        {
            printf_s("方程没有实数根");
        }
    }

    return EXIT_SUCCESS;
}

// 交互获取方程系数
double GetCoefficient(const char* tips)
{
    double returnValue;

    do
    {
        printf_s(tips);
        fflush(stdin);
    } while (scanf_s("%lf", &returnValue) != 1);

    return returnValue;
}


补充:这个代码,变量的声明和定义位置在内部花括号内,原本是C++的语法,但C99吸纳了C++的若干语法,要求C编译器也支持这种语法,故这种代码只能在支持C99标准的C编译器上编译通过。微软的vc++是C++编译器,虽然可以被强制为C编译器使用(把源代码文件扩展名定为.c即可),不过这时它不支持C99,所以要让这类代码正常运行,请使用C++编译器,即把源代码文件扩展名定为.cpp。


[ 本帖最后由 TonyDeng 于 2014-12-15 22:40 编辑 ]

授人以渔,不授人以鱼。
2014-12-15 21:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
比较一下三个代码,实际上除了个别语法和某些函数的细微表现(scanf()和ReadLine()在运行时的表现有少许差别)不同,程序的思想和结构是完全一样的。懂任何一个,都能轻松转换到另一个;搞不通一个,全部都搞不通。

btw: 实际上test7和test8是同一个程序,当用软件反编译test7的可执行文件后,将得到和test8完全一样的结果,这两个程序在编译后是无差别的。


[ 本帖最后由 TonyDeng 于 2014-12-15 22:43 编辑 ]

授人以渔,不授人以鱼。
2014-12-15 22:09
msl12
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2015-2-6
收藏
得分:0 
好长。。答案会更精确么?
2015-02-28 11:34
快速回复:无聊发个求一元二次方程的代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017893 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved