程序清单 6.13 postage.c
//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循环语句中执行。
逗号运算符不只限于在for循环中使用,但是这是最常使用的地方 。
该运算符还具有两个属性:
首先,它保证被分开的表达式是按从左到右的顺序计算(换句话说,逗号是个顺序点,逗号左边产生的所有副作用都在程序运行到逗号右边之前生效)。
其次,整个逗号表达式的值是右边成员的值。
houseprice=249,500;
这并没有语法错误,C把它解释成一个逗号表达式, houseprice=249 是左子表达式,而500是右子表达式。因此整个逗号表达式的值就是右边表达式的值,并且左边的子语句把变更houseprice赋值为249.这样它的效果与下面的代码相同:
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,就像这个程序表明的那样。
来源:oschina
链接:https://my.oschina.net/u/2754880/blog/684525