鱼C论坛

 找回密码
 立即注册
查看: 2151|回复: 8

关于外部变量问题

[复制链接]
发表于 2014-7-21 23:21:53 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 风之残月 于 2014-11-10 10:16 编辑

为什么我最后打出来的max和min的值会是0?求解!
#include<stdio.h>
float max=0,min=0;
void main()
{
        float average(float x[]);
        float x[10];
        int i;
        printf("Enter the ten grade students\n");
        for(i=0;i<10;++i)
        {
                scanf("%f",&x);
        }

        printf("average=%0.2f\nmax=%.0f\nmin=%.0f\n",average(x),max,min);

}
float average(float x[])
{
        int n;
        float p=0;
        max=min=x[0];
        for(n=0;n<10;++n)
        {
                if(max<x[n])
                        max=x[n];
                else if(min>x[n])
                        min=x[n];
                p+=x[n];
        }

   p=p/10;
        return p;
}


最佳答案

查看完整内容

两个问题: 1. 数组输入代码错误 2. printf语句先对max和min求值(得到0),然后才调用average求平均(此时改变max和min已经没用了,因为printf函数之前就已经记录了它们的值),把这句拆分成两句就OK
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-21 23:21:54 | 显示全部楼层
两个问题:
1. 数组输入代码错误
2. printf语句先对max和min求值(得到0),然后才调用average求平均(此时改变max和min已经没用了,因为printf函数之前就已经记录了它们的值),把这句拆分成两句就OK
#include<stdio.h>
float max=0,min=0;
int main()
{
        float average(float x[]);
        float x[10];
        float aver;
        int i;
        printf("Enter the ten grade students\n");
        for(i=0;i<10;++i)
        {
                //scanf("%f",&x);
                scanf("%f",&x[i]);
        }
        
        //printf("average=%0.2f\nmax=%.0f\nmin=%.0f\n",average(x),max,min);
        aver = average(x);
        printf("average=%0.2f\nmax=%.0f\nmin=%.0f\n",aver,max,min);


        return 0;
        
}
float average(float x[])
{
        int n;
        float p=0;
        max=min=x[0];
        for(n=0;n<10;++n)
        {
                if(max<x[n])
                        max=x[n];
                else if(min>x[n])
                        min=x[n];
                p+=x[n];
        }
        
        p=p/10;
        return p;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-22 00:10:25 | 显示全部楼层
.........变量在average()中改变,不能影响全局,除非定义成static
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-22 08:53:59 | 显示全部楼层
跟printf压栈顺序有关,C中printf计算参数时是从右往左压栈的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-22 09:02:18 | 显示全部楼层
只要是全局变量,无论在哪里改变他的值,都会有影响,这才是全局变量。你再看看main里面的输出语句是在调用average函数时同时输出max和min的值,这样就达不到你要的效果,应该是先调用完再输出,你试试多写一个 printf 语句输出max 和min 的值就可以了。(话说你的average函数有点问题)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-22 10:20:22 | 显示全部楼层
你的程序连子函数都未调用,怎么会改变max和min的值呢,另外,你输入数据那句也不对,你那明显是下标输入,可是连个下标都没。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-22 12:48:25 | 显示全部楼层
跟printf压栈顺序有关,C中printf计算参数时是从右往左压栈的。因此先输出min 和 max 都等于0.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-22 19:32:16 | 显示全部楼层
有点了解了谢谢各位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-23 17:36:37 | 显示全部楼层
赚点鱼币来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 17:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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