千寻0 发表于 2014-7-21 23:21:53

关于外部变量问题

本帖最后由 风之残月 于 2014-11-10 10:16 编辑

为什么我最后打出来的max和min的值会是0?求解!
#include<stdio.h>
float max=0,min=0;
void main()
{
      float average(float x[]);
      float x;
      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;
      for(n=0;n<10;++n)
      {
                if(max<x)
                        max=x;
                else if(min>x)
                        min=x;
                p+=x;
      }

   p=p/10;
      return p;
}


仰望天上的光 发表于 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;
        float aver;
        int i;
        printf("Enter the ten grade students\n");
        for(i=0;i<10;++i)
        {
                //scanf("%f",&x);
                scanf("%f",&x);
        }
       
        //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;
        for(n=0;n<10;++n)
        {
                if(max<x)
                        max=x;
                else if(min>x)
                        min=x;
                p+=x;
        }
       
        p=p/10;
        return p;
}

longtian 发表于 2014-7-22 00:10:25

.........变量在average()中改变,不能影响全局,除非定义成static

loveoobaby 发表于 2014-7-22 08:53:59

跟printf压栈顺序有关,C中printf计算参数时是从右往左压栈的。

HHR 发表于 2014-7-22 09:02:18

只要是全局变量,无论在哪里改变他的值,都会有影响,这才是全局变量。你再看看main里面的输出语句是在调用average函数时同时输出max和min的值,这样就达不到你要的效果,应该是先调用完再输出,你试试多写一个 printf 语句输出max 和min 的值就可以了。(话说你的average函数有点问题)

rhwcl 发表于 2014-7-22 10:20:22

你的程序连子函数都未调用,怎么会改变max和min的值呢,另外,你输入数据那句也不对,你那明显是下标输入,可是连个下标都没。

cck100 发表于 2014-7-22 12:48:25

跟printf压栈顺序有关,C中printf计算参数时是从右往左压栈的。因此先输出min 和 max 都等于0.

千寻0 发表于 2014-7-22 19:32:16

有点了解了谢谢各位

羽随风 发表于 2014-7-23 17:36:37

赚点鱼币来了
页: [1]
查看完整版本: 关于外部变量问题