程序清单 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,就像这个程序代表的那样。