关于外部变量问题
本帖最后由 风之残月 于 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;
}
两个问题:
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;
} .........变量在average()中改变,不能影响全局,除非定义成static 跟printf压栈顺序有关,C中printf计算参数时是从右往左压栈的。 只要是全局变量,无论在哪里改变他的值,都会有影响,这才是全局变量。你再看看main里面的输出语句是在调用average函数时同时输出max和min的值,这样就达不到你要的效果,应该是先调用完再输出,你试试多写一个 printf 语句输出max 和min 的值就可以了。(话说你的average函数有点问题) 你的程序连子函数都未调用,怎么会改变max和min的值呢,另外,你输入数据那句也不对,你那明显是下标输入,可是连个下标都没。 跟printf压栈顺序有关,C中printf计算参数时是从右往左压栈的。因此先输出min 和 max 都等于0. 有点了解了谢谢各位 赚点鱼币来了
页:
[1]