//物品打折,全部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 回答
- 0 关注
- 1662 浏览
添加回答
举报
0/150
提交
取消