c语言找错,不需要新程序,只要指出错误行,并改正。谢谢

#1doubleaver(inta[],intn,int*p)#2{inti,sum=0;#3*p=0;#4for(i=0;i<n;i++)#5{sum=sum+a[i]... #1 double aver(int a[], int n, int *p)
#2 { int i,sum=0 ;
#3 *p=0 ;
#4 for(i=0;i<n;i++)
#5 { sum=sum+a[i] ;
#6 if(a[i]<0) *p++;
#7 }
#8 return sum/n;
#9 }
#10 #include "stdio.h"
#11 main()
#12 { int count,x[]={0,12,33,-9,-5,27,80,0,54,63};
#13 double av;
#14 av=aver(x,10,count);
#15 printf("count: %d\naverage: %.2f\n",count,av);
#16 }
展开
 我来答
百度网友6567883c53
2012-12-14 · TA获得超过4737个赞
知道大有可为答主
回答量:1260
采纳率:0%
帮助的人:1356万
展开全部
楼主你好。
#include<stdio.h>
double aver(int a[], int n, int *p){
int i,sum=0 ;
*p=0 ;
//printf("%p %d\n",p,*p);//测试代码
for(i=0;i<n;i++){
sum=sum+a[i];
if(a[i]<0){
*p++; //这里按理说不用加括号,但是我发现不加括号有问题
//printf("%p %d\n",p,*p);//测试代码
}
}
return (double)sum/n;//这里需要强制转换为double,否则就只能得到整数
}
main(){
int count=0,x[]={1,0,-1,-2};//{0,12,33,-9,-5,27,80,0,54,63};
double av;
av=aver(x,4, &count);//这里count需要取地址
printf("count: %d\naverage: %.2f\n",count,av);
}

输出:
count: 2
average: -0.50
Press any key to continue

开启测试代码
如果是*p++,可以看到输出:
0012FF44 0
0012FF48 1245064
0012FF4C 4199401
count: 0
average: -0.50
Press any key to continue

如果是(*p)++,可以看到输出:
0012FF44 0
0012FF44 1
0012FF44 2
count: 2
average: -0.50
Press any key to continue

可以看出不加括号是有问题的,连p的值都变了,因此count不会有变化。
我猜测是先进行了p++的操作然后再*。
于是我对*(p++);进行测试,发现果然,与*p++的结果一样。

但是根据我的经验*p++应该是相当于(*p)++的,不知道这里是怎么回事。我的测试环境是VC++6.0。
楼下说错了,事实上:
* 和++ (单目运算)两个处于同一优先级,结合方向是自右向左。
但是!前提是当++在变量【前面】的时候才处理同一优先级。
当++在变量【后面】时,你可以将++的优先级看成最低级的,甚至比逗号运算符的优先级还低。

因此*p++应该是先进行*p,运行完后再进行++运算。
furious_tauren
2012-12-14 · TA获得超过4053个赞
知道大有可为答主
回答量:1913
采纳率:100%
帮助的人:732万
展开全部
// 函数求n个数的平均值,并通过参数p传出负数的个数
double aver(int a[], int n, int *p)
{ int i,sum=0 ;
*p=0 ;
for(i=0;i<n;i++)
{ sum=sum+a[i] ;
if(a[i]<0) (*p)++; // 因为++ 比 * 优先级高,所以加括号
}
// 因为sum 和n都是整数,运算结果也是整数,需强制类型转化sum 或 n
return (double)sum/n;
}
#include "stdio.h"
main()
{ int count,x[]={0,12,33,-9,-5,27,80,0,54,63};
double av;
av=aver(x,10,&count); // aver的3个参数是指针,所以这里应该传&count
printf("count: %d\naverage: %.2f\n",count,av);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
thebabe
2012-12-14 · TA获得超过829个赞
知道小有建树答主
回答量:729
采纳率:66%
帮助的人:509万
展开全部
freedomkkkk基本上解决了所有问题。

但程序的功能有点奇怪,count返回了负数的个数,av是平均值,是不是要求这样的?
追问
是的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
__MomO___o_
2012-12-14
知道答主
回答量:42
采纳率:0%
帮助的人:12.2万
展开全部
你的count到底是要是一个指针还是一个变量,你这里既然是要用一个指针来跟踪数组中的负数的个数,那么12行定义的时候应该是int*count,而在15行输出的也应该是*count
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
希伯来爵
2012-12-14 · TA获得超过611个赞
知道答主
回答量:187
采纳率:100%
帮助的人:71.7万
展开全部
#14 av=aver(x,10,&count);
函数声明中第三个参数是int*型,而count是int型,所以要取地址传参
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式