C Primer Plus(6) 中文版 第6章 C控制语句:循环 6.7 逗号运算符

6.7 逗号运算符
逗号运算符扩展了for循环的灵活性,以便在循环头部包含更多的表达式。
打印一类邮件资费(first-class postage rate)的程序。
// postage.c -- first-class postage rates
#include <stdio.h>
int main(void)
{
    const int FIRST_OZ = 46; // 2013 rate
    const int NEXT_OZ = 20;  // 2013 rate
    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;

 

/* 输出:

*/

该程序在初始化和更新表达式中使用了逗号运算符。
逗号运算符并不局限于for循环体中使用,但是这是它最常用的地方。逗号运算符有两个其他性质。首先,它保证了被它分隔的表达式从左到右求值(换言之,逗号是一个序列点,所以逗号左侧项的所有副作用都在程序执行逗号右侧项之前发生)。
其次,整个逗号表达式的值是右侧项的值。
houseprice = 249,500;
这不是语法错误,C编译器会将其解释为一个逗号表达式,即houseprice=249是逗号左侧的子表达式,500是右侧的子表达式。因此,整个逗号表达式的值是逗号右侧表达式的值,而且右侧的赋值表达式把249赋给变量houseprice。因此,这与下面代码的效果相同:
houseprice = 249;
500; 
记住,任何表达式后面加上一个分号就成了表达式语句。所以,500;也是一条语句,但是什么也不做。
另外,下面的语句
houseprice = (249, 500);
赋给houseprice的值是逗号右侧子表达式的值,即500。
逗号也可用作分隔符。例如:
char ch, date;
printf( "%d %d\n", chimps, chumps );
小结:新的运算符
组合赋值运算符与普通赋值运算符的优先级相同,都比算术运算符的优先级低。因此,
contents *= old_rate + 1.2;
最终的效果与下面的语句相同:
contents = contents * (old_rate + 1.2);
6.7.1 当Zeno遇到for循环
希腊哲学家Zeno曾经提出箭永远不到达到它的目标。 
/* zeno.c -- series sum */
#include <stdio.h>

int main(void)
{
    int t_ct;       // term count
    double time, power_of_2;
    int limit;
    
    printf("Enter the number of terms you want: ");
    scanf("%d", &limit);
    for (time=0, power_of_2=1, t_ct=1; t_ct <= limit;
                            t_ct++, power_of_2 *= 2.0)
    {
        time += 1.0/power_of_2;
        printf("time = %f when terms = %d.\n", time, t_ct);
    }
    
    return 0;
}
/* 输出:

*/ 

数学家的确证明了当项的数组接近无穷时,总和无限接近2.0。
从这个示例得到的气势是,在进行复杂的计算之前,先看看数学上是否有简单的方法可用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40186813

你的能量无可限量。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值