亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 1738 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號