2 回答

TA貢獻1876條經驗 獲得超6個贊
代碼錯誤已修改,下面的代碼可以正確運行了:
int f() { static int i=0; int s=1; s+=i; i++; return s; } void main() //加上返回值類型, 可以是void , 也可以是int { int i, a=0; for (i=0; i < 5; i++) //這里使用英文的符號 "<" { a+=f(); } printf ( "%d\n" , a); } |
運行結果如下:
注意事項以及建議:
1、代碼中存在語法錯誤, 編程時,只支持標點英文標點符號。
2、static 修改的變量在整個程序生命周期內只會被定義一次,并且在程序生命周期結束前,其上次的運行結果會被保存,供下次使用。
3、該算法其實就是在求 sum = 1+2+3+4+5 = 15;

TA貢獻1765條經驗 獲得超5個贊
結果是輸出15。
分析:
1、函數f中有兩個變量,一個是靜態整型變量i,一個是普通整型變量s。需要注意靜態變量i的值在退出函數f后并不消失,下一次再進入f函數后,上一次的喔值仍然存在!也就是說static int i=0;這一句只在第一次調用f函數時被執行,以后再調用f函數時,這一句會被越過去。后面就是兩句計算和賦值,最后返回s的值。
2、再看主函數main,它定義兩個變量i和a,也要注意此i與函數f中的i是兩個不同的變量,只是使用了相同的代號i,但因為它們分別出現在兩個函數中,這是允許的,不會沖突。
3、接下來是一個循環,循環變量i從0到4共執行5次。循環體只有一句a+=f();。也就是共調用5次f函數,每一次把返回值加到變量a中。
4、第一次調用f,聲明i=0、s=1,s=i+s=0+1=1,i++后i=1,返回s值1。主函數a=a+返回的1=0+1=1。
5、第二次調用f,保留上一次的i=1,重新聲明s=1,s=i+s=1+1=2,i++后i=2,返回s值2。主函數a=a+返回的2=1+2=3。
6、第三次調用f,保留上一次的i=2,重新聲明s=1,s=i+s=2+1=3,i++后i=3,返回s值3。主函數a=a+返回的3=3+3=6。
7、第四次調用f,保留上一次的i=3,重新聲明s=1,s=i+s=3+1=4,i++后i=4,返回s值4。主函數a=a+返回的4=6+4=10。
8、第五次調用f,保留上一次的i=4,重新聲明s=1,s=i+s=4+1=5,i++后i=4,返回s值5。主函數a=a+返回的3=10+5=15。
9、循環結束,輸出a的值15。
分析完畢。
- 2 回答
- 0 關注
- 208 瀏覽
添加回答
舉報