| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 909 人关注过本帖
标题:新手,一元二次方程 functionz中,变量undeclear,且输出结果错误
只看楼主 加入收藏
xjxjxj
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2022-7-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
新手,一元二次方程 functionz中,变量undeclear,且输出结果错误
double getnum(int i, int j, int k)
{

    delta = j*j - 4*i*k;

    if(delta > 0)

    {
        x1 = (-b + sqrt(delta))/(2 * a);
        x2 = (-b - sqrt(delta))/(2 * a);
        printf("该一元二次方程有两个解,x1 = %f,x2 = %f\n",x1, x2);
    }
    else  if(delta == 0)
    {
        x1 = (-b)/(2*a);
        x2 = x1;
        printf("该一元二次方程有一个解,x1=x2=%f\n",x1 ,x2);
    }
    else
    {
        printf("该一元二次方程无解\n");
    }

}


int main(void)
{
    double delta;
    double x1;
    double x2;
    int a,b,c;


    printf("请输入a的值: \n");
    scanf("%d",&a);
    printf("请输入b的值: \n");
    scanf("%d",&b);
    printf("请输入c的值: \n");
    scanf("%d",&c);

    getnum(a,b,c);

    return 0;
}

/*在code::blocks 16.01 中
C:\Users\xujiang\Desktop\ccccccc\一元二次方程\main.c|8|error: 'delta' undeclared (first use in this function)|
C:\Users\xujiang\Desktop\ccccccc\一元二次方程\main.c|13|error: 'x1' undeclared (first use in this function)|
C:\Users\xujiang\Desktop\ccccccc\一元二次方程\main.c|13|error: 'b' undeclared (first use in this function)|
C:\Users\xujiang\Desktop\ccccccc\一元二次方程\main.c|13|error: 'a' undeclared (first use in this function)|
C:\Users\xujiang\Desktop\ccccccc\一元二次方程\main.c|14|error: 'x2' undeclared (first use in this function)|

C:\Users\xujiang\Desktop\ccccccc\一元二次方程\main.c|27|warning: 'return' with no value, in function returning non-void [-Wreturn-type]|
C:\Users\xujiang\Desktop\ccccccc\一元二次方程\main.c|35|warning: unused variable 'x2' [-Wunused-variable]|
C:\Users\xujiang\Desktop\ccccccc\一元二次方程\main.c|34|warning: unused variable 'x1' [-Wunused-variable]|
C:\Users\xujiang\Desktop\ccccccc\一元二次方程\main.c|33|warning: unused variable 'delta' [-Wunused-variable]|
C:\Users\xujiang\Desktop\ccccccc\一元二次方程\main.c|28|warning: control reaches end of non-void function [-Wreturn-type]|
*/
搜索更多相关主题的帖子: Users 一元二次 方程 Desktop main 
2022-07-06 16:21
不会游泳的虾
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:27
帖 子:107
专家分:675
注 册:2021-7-1
收藏
得分:20 
修改如下,供参考:
程序代码:
#include <stdio.h>
#include <math.h>
void  getnum(double i, double j, double k)
//double getnum(int i, int j, int k)
{
    double x1,x2;
    double delta = j*j - 4*i*k;

    if(delta > 0)

    {
        x1 = (-j + sqrt(delta))/(2 * i);
        // x1 = (-b + sqrt(delta))/(2 * a);
        x2 = (-j - sqrt(delta))/(2 * i);
        //x2 = (-b - sqrt(delta))/(2 * a);
        printf("该一元二次方程有两个解,x1 = %f,x2 = %f\n",x1, x2);
    }
    else  if(delta == 0)
    {
        x1 = (-j)/(2*i);
        //x1 = (-b)/(2*a);
        x2 = x1;
        printf("该一元二次方程有一个解,x1=x2=%f\n",x1 ,x2);
    }
    else
    {
        printf("该一元二次方程无解\n");
    }

}


int main(void)
{
    //double delta;
    //double x1;
    //double x2;
    //int a,b,c;
    double a,b,c;

    printf("请输入a的值: \n");
    scanf("%lf",&a);
    //scanf("%d",&a);
    printf("请输入b的值: \n");
    scanf("%lf",&b);
    //scanf("%d",&b);
    printf("请输入c的值: \n");
    scanf("%lf",&c);
    //scanf("%d",&c);

    getnum(a,b,c);

    return 0;
}
2022-07-06 20:21
xjxjxj
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2022-7-6
收藏
得分:0 
回复 2楼 不会游泳的虾
谢谢您
2022-07-06 20:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
题目本身就不好,形如 ax² + bx + c = 0,要计算 b*b 与 4*a*c 谁大谁小?
第一个难点,比如用户输入1.3,但double未必能精确保存1.3这个值呀;
第二个难点,即使a、b、c都精确保存着用户输入值,但计算 b*b - 4*a*c 时仍然存在着误差。

可能导致的结果就是,
1. 用户输入的值,应当是delta==0,但输出却是“有两个解”或“无解”
2. 用户输入的值,应当是delta>0,但输出却是“有一个解”或“无解”
3. 用户输入的值,应当是delta<0,但输出却是“有一个解”或“有两个解”
4. 输出“有两个解”,但这两个解的值一样。(即包括解值不一样但输出一样,也包括解值一样且输出一样)
2022-07-07 11:06
快速回复:新手,一元二次方程 functionz中,变量undeclear,且输出结果错误
数据加载中...
 
   



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

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