程序清單 6.13 postage.cpost
//postage.c -- 一類郵資費率 #include <stdio.h> int main (void) { const int FIRST_OZ = 37; const int NEXT_OZ = 23; int ounces,cost; printf(" ounces cost\n"); for (ounces=1,cost=FIRST_OZ;ounces<=16;ounces++,cost+=NEXT_OZ) printf("%5d $4.2f\n ",ounces,cost/100.0); return 0; } /*輸出的前4行看上去是這樣的 ounces cost 1 $0.37 2 $0.60 3 $0.83 4 $1.06 */
這個程序在初始化表達式和更新表達中使用了逗號運算符。這一個表達式中的逗號使ounces和cost 的值都進行了初始化。逗號的第二次出現使每次循環中ounces增長1,cost增長23(NEXT_OZ的值)。全部計算都在for循環語句中執行。code
逗號運算符不僅限於在for循環中使用,可是這是最常使用的地方 。數學
該運算符還具備兩個屬性:it
首先,它保證被分開的表達式是按從左到右的順序計算(換句話說,逗號是個順序點,逗號左邊產生的全部反作用都在程序運行到逗號右邊以前生效)。io
其次,整個逗號表達式的值是右邊成員的值。for循環
houseprice=249,500;class
這並無語法錯誤,C把它解釋成一個逗號表達式, houseprice=249 是左子表達式,而500是右子表達式。所以整個逗號表達式的值就是右邊表達式的值,而且左邊的子語句把變動houseprice賦值爲249.這樣它的效果與下面的代碼相同:object
houseprice=249;循環
500;語法
另外一方面,語句
houseprice=(249,500);
把houseprice賦值爲500,由於該值是右子表達式的值。
程序清單6.14 zeno.c程序
/*zeno.c -- 求序列的和*/ #include <stdio.h> int main (void) { int t_ct; //項計數 double time,x; int limit; printf("Enter the number of terms you want:"); scanf("%d",&limit); for(time=0,x=1,t_ct=1;t_ct<=limit;t_ct++,x*=2.0) { time+=1.0/x; printf("time = %f when terms = %d.\n",time,t_ct); } return 0; } /*下面是前幾項的輸出 Enter the number of terms you want:15 time = 1.000000 when terms = 1. time = 1.500000 when terms = 2. ... time = 1.999939 when terms = 15. */
能夠看到,儘管不斷的添加新的項,總和看起來是變化不大的。數學家們確實證實了當項的數目接近無窮時,總和接近於2.0,就像這個程序代表的那樣。