标题:调试过程监视到全局变量的值是正确的,输出的时候却都是0,麻烦帮忙看看。
取消只看楼主
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
结帖率:100%
已结贴  问题点数:10 回复次数:10 
调试过程监视到全局变量的值是正确的,输出的时候却都是0,麻烦帮忙看看。
昨天晚上看了一晚上自己的代码,没看出来问题在哪。
今天早上起床又看了一遍,反复调试,在调试过程中max和min在监视器里面的最终值是98和43.
主函数输出到屏幕后却都是0。
代码如下:

#include <stdio.h>
double average,max,min;
double result(double x[]);
double result(double x[])
{
    int i;
    for(i=0,average=0.0;i<10;i++)
    {
        average+=x[i];
    };
    average/=i;
    max=x[0];
    for(i=0;i<10;i++)
    {
        if(x[i]>max)
        {
            max = x[i];
        };
    };
    min=x[0];
    for(i=0;i<10;i++)
    {
        if(x[i]<min)
        {
            min = x[i];
        }
    };
    return average;
}
int main()
{
    double array[10]={98,77,43,95,83,94,88,81,73,88.5};
    printf("the average is:%lf\nthe max is:%lf\nthe min is:%lf\n",result(array),max,min);
}

烦请各位大神给点指导,问题在哪。
搜索更多相关主题的帖子: average include double result 
2016-03-30 13:51
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
得分:0 
回复 7楼 丰峰风疯
这个解释有点复杂,不过看了半天也找到点感觉了。
综合了前面其他人的回答。
谢谢!

程序员应该足够懒,追求一劳永逸,写出来的代码,应是可以反复使用的.
2016-03-30 14:25
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
得分:0 
回复 3楼 TonyDeng
谢谢偶像回答。
工作太忙,我都是抽空业余学习学习。
现在基础都称不上,刚学到全局变量和局部变量的区别。
编写能力也不是很成熟,见谅见谅!

程序员应该足够懒,追求一劳永逸,写出来的代码,应是可以反复使用的.
2016-03-30 14:27
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
得分:0 
回复 4楼 wp231957
谢谢回答!

程序员应该足够懒,追求一劳永逸,写出来的代码,应是可以反复使用的.
2016-03-30 14:28
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
得分:0 
感谢各位指导,
尝试了一下。
把max/min从result函数分离出来单独输出结果输出是正确的。
各位大神指出的一些细节上的部分错误已更正。

代码如下:

#include <stdio.h>
double average,max,min;
double result(double x[])
{
    int i;
    for(i=0,average=0.0;i<10;i++)
    {
        average+=x[i];
    }
    average/=i;
    max=x[0];
    for(i=0;i<10;i++)
    {
        if(x[i]>max)
        {
            max = x[i];
        }
    }
    min=x[0];
    for(i=0;i<10;i++)
    {
        if(x[i]<min)
        {
            min = x[i];
        }
    }
    return average;
}
int main()
{
    double array[10]={98,77,43,95,83,94,88,81,73,88.5};
    printf("the average is:%lf\n",result(array));
    printf("the max is:%f\nthe min is:%f\n",max,min);
}

程序员应该足够懒,追求一劳永逸,写出来的代码,应是可以反复使用的.
2016-03-30 14:35
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
得分:0 
回复 2楼 qq1023569223
谢谢解答。
多了很多分号是因为......
早上起床迷迷糊糊的,重新写了一遍昨天晚上的练习题。
然后编译器提示我缺少了很多分号,我就按着提示一个一个的加分号。
虽然自己都感觉很奇怪为什么要加这么多分号....

由于没睡醒,所以也没太在意。
哈哈哈。


程序员应该足够懒,追求一劳永逸,写出来的代码,应是可以反复使用的.
2016-03-30 14:38
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
得分:0 
回复 3楼 TonyDeng
我在家用的是vs2010.
在办公室用devc++5.11.

程序员应该足够懒,追求一劳永逸,写出来的代码,应是可以反复使用的.
2016-03-30 14:40
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
得分:0 
回复 14楼 TonyDeng
#include <stdio.h>
double average,max,min;
double result(double x[])
{
    int i;
    max=x[0];
    min=x[0];
    for(i=0;i<10;i++)
    {
        if(x[i]>max)
        {
            max = x[i];
        }
        else if(x[i]<min)
        {
            min = x[i];
        }
        average+=x[i];
    }
    average/=i;
    return average;
}
int main()
{
    double array[10]={98,77,43,95,83,94,88,81,73,88.5};
    printf("the average is:%lf\n",result(array));
    printf("the max is:%lf\nthe min is:%lf\n",max,min);
}

做了一些尝试。
如果是将调用result(array)的printf放在max/min变量输出语句后面,max/min的值还是0.
可见,需要先调用result(array),让全局变量max/min进行运算才会得到预期的值。
如上是经一些思考修改的代码。
max.min,average都使用了for(i=0;i<10;i++)语句,组合起来使用看起来代码精炼了很多。

多谢指导!

程序员应该足够懒,追求一劳永逸,写出来的代码,应是可以反复使用的.
2016-03-30 15:29
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
得分:0 
回复 15楼 TonyDeng
刚开始学习函数的时候我的确是会声明一个临时变量用来存储函数的返回值。
但是。。
受到你那句话的影响.....程序员应该要足够懒。。
所以。。觉得直接写在printf语句中方便多了。

程序员应该足够懒,追求一劳永逸,写出来的代码,应是可以反复使用的.
2016-03-30 15:31
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
得分:0 
回复 18楼 wp231957
...
我是初学者。还在基础学习阶段。
刚学到全局变量和局部变量的区别。
要求必须使用全局变量。

...

程序员应该足够懒,追求一劳永逸,写出来的代码,应是可以反复使用的.
2016-03-30 15:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-463076-1-1.html




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

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