C Primer Plus 第6章 C控制语句:循环 6.7 逗号运算符

原创
2016/05/31 06:32
阅读数 91

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

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部