C Primer Plus 第6章 C控制語句:循環 6.7 逗號運算符

程序清單 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,就像這個程序代表的那樣。

相關文章
相關標籤/搜索