C语言:求三个数的平均数和最大值 这么写为什么不对呢?

来源:百度知道 编辑:UC知道 时间:2024/05/13 14:29:59
#include<stdio.h>
void max_avg(float a,float b,float c,float *ave,float *max)
{
float sum,f,g,temp;
ave=&g,max=&f;
if(a<b)
{ temp=b;b=a;a=temp;}
if(c<b)
{ temp=b;b=c;c=temp;}
if(b>a)
{ temp=b;b=a;a=temp;}
*max=temp;
sum=a+b+c;
*ave=sum/3;
}
main()
{
float a,b,c,*p1,*p2,g,f;
p1=&g,p2=&f;
printf("please input three numbers:\n");
scanf("%f%f%f",&a,&b,&c);
printf("%4f%4f%4f\n",a,b,c);
max_avg(a,b,c,p1,p2);
printf("max=%4f,ave=%4f\n",p2,p1);
}

当c>b时,*max=temp=b
把*max=temp;
改为*max=a;

整体不错。main函数无返回值
应在最后一行加上return(0);
用vc调试通过

#include<stdio.h>
void max_avg(float a,float b,float c,float *ave,float *max)
{
int temp;
if(a<b) { temp=b;b=a;a=temp;}
if(b<c) { temp=b;b=c;c=temp;}
if(a<b) { temp=b;b=a;a=temp;}
*max=a;
*ave=(a+b+c)/3.0;
}
main()
{
float a,b,c,*p1,*p2,g,f;
p1=&g;
p2=&f;
printf("please input three numbers:\n");
scanf("%f%f%f",&a,&b,&c);
printf("%4f%4f%4f\n",a,b,c);
max_avg(a,b,c,p1,p2);
printf("max=%4f,ave=%4f\n",*p2,*p1);
}
改成这样就ok了!

本着学习交流的目的,现在指出楼主的问题有下所示:
(1)不明白参数的传递。max_avg(a,b,c,p1,p2)这个函数中的实参是传递给max_avg(float a,float b,float c,float *ave,float *max) 中的形参,也就是说在子函数里对ave,max指针操作,其实就是对p1,p2的操作,所以在子函数里不需要再像楼主那样对ave,max指针赋值。
(2)楼主对参数传递应该要加强理解,在main函数里,写p1=&g,p2=&f;