为了账号安全,请及时绑定邮箱和手机立即绑定

for循环中如果判断条件为函数的返回值,就会出错,请教下大神该怎么解决?

for循环中如果判断条件为函数的返回值,就会出错,请教下大神该怎么解决?

C C++
慕粉1600176492 2016-12-13 18:05:21
//物品打折,全部8.5折,且单品满500的有礼品相送。 //现在要统计打折后的价格,并保存打完折后单品价格仍然大于500的单品的价格。 #include"stdio.h" #define N 6  int  discount(float *p,float *g)  {   int i,j=0;   for(i=0;i<N;i++)   {   *(p+i)*=0.85;   printf("%.1f ",*(p+i));       if(*(p+i)>500)       {        g[j++]=*(p+i); } } return j;  }  int main()  {   int i,j; float g[6];   float a[N]={238.0,958.0,1050.0,599.0,799.0,198.0};   printf("打折前的价格分别是:");    for(i=0;i<N;i++)    {   printf("%.1f   ",*(a+i));  }  printf("\n打折后输出的结果是:");  j=discount(a,g);  printf("判断一下g的长度%d",j);      putchar('\n');  for(i=0;i<N;i++)  {   printf("%.1f   ",*(a+i));//再输出一次  }  printf("\n打折后仍然超过500的:");  for(i=0;i<discount(a,g);i++)//这个地方如果把discount(a,g)改为j,结果就不会出错,但数值上不是一样的吗?  {                                              //请问一下这是为什么呢?   printf("%.1f   ",*(g+i));  }  putchar('\n');  return 0;  }
查看完整描述

1 回答

已采纳
?
朕日理万机

TA贡献27条经验 获得超28个赞

因为你在调用函数的同时,也同时改变了数组a和g的值。每调用一次,会做这么几件事:

1.会把a中的每个元素乘以0.85,2.把g中的前若干个元素改为a对应的元素,3.返回你当前a中有多少个超过多少个超过500的。所以你连续多次调用以后,a的值会不断变小,返回值也会变小,g里的元素不再有什么意义。

函数,甚至基本表达式,不光是返回给你一个值,你也要考虑它在执行过程会产生什么后果。

查看完整回答
1 反对 回复 2016-12-14
  • 1 回答
  • 0 关注
  • 1674 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信