發信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信區: test
標  題: 星星流講座 0022
發信站: ☆清華電機☆ (Thu May 25 15:17:58 1995)
轉信站: star

星星流講座 0022         C 語言教室

第 4 講 之 6            基本的流程控制
                        Topic: for loop (2)

下面的程式片段是用來把一個陣列的排列順序反過來的,傳入該陣列以及該陣
列元素的個數:

void reverse (int a[], int n)
{
    int temp, i, j;

    i = 0;
    j = n - 1;          /* array ranges from a[0] ~ a[n - 1] */
    while (i < j)
    {
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;    /* swap a[i], a[j] */
        i++;
        j--;
    }
}

這個東西也可以用 for 迴圈來達成:

void reverse (int a[], int n)
{
    int temp, i, j;

    for (i = 0, j = n - 1; i < j; i++, j--)
        temp = a[i], a[i] = a[j], a[j] = temp;
}

這是利用了逗號運算子 , (comma operator) 的特性。逗號運算子的功用就
是把幾個敘述式 (statement) 合成一個,也就是說:

        temp = a[i];
        a[i] = a[j];
        a[j] = temp;

相當於

        temp = a[i], a[i] = a[j], a[j] = temp;

for 迴圈中一次是可以數好幾個迴圈變數的,但是程式的長度有時短些會比
較好。我們的例子中是把一個整數的陣列反轉過來,在實際的應用上把字串
反轉過來的機會會大的多,技術上是一模一樣的。現在請你翻翻你的程式庫
手冊,我要如何獲得字串的長度呢?

談到這裡,請你動手實作一個九九乘法表的程式,它的輸出如下:

2 * 1 = 2       3 * 1 = 3       4 * 1 = 4       5 * 1 = 5
2 * 2 = 4       3 * 2 = 6       4 * 2 = 8       5 * 2 = 10
2 * 3 = 6       3 * 3 = 9       4 * 3 = 12      5 * 3 = 15
2 * 4 = 8       3 * 4 = 12      4 * 4 = 16      5 * 4 = 20
2 * 5 = 10      3 * 5 = 15      4 * 5 = 20      5 * 5 = 25
2 * 6 = 12      3 * 6 = 18      4 * 6 = 24      5 * 6 = 30
2 * 7 = 14      3 * 7 = 21      4 * 7 = 28      5 * 7 = 35
2 * 8 = 16      3 * 8 = 24      4 * 8 = 32      5 * 8 = 40
2 * 9 = 18      3 * 9 = 27      4 * 9 = 36      5 * 9 = 45

6 * 1 = 6       7 * 1 = 7       8 * 1 = 8       9 * 1 = 9
6 * 2 = 12      7 * 2 = 14      8 * 2 = 16      9 * 2 = 18
6 * 3 = 18      7 * 3 = 21      8 * 3 = 24      9 * 3 = 27
6 * 4 = 24      7 * 4 = 28      8 * 4 = 32      9 * 4 = 36
6 * 5 = 30      7 * 5 = 35      8 * 5 = 40      9 * 5 = 45
6 * 6 = 36      7 * 6 = 42      8 * 6 = 48      9 * 6 = 54
6 * 7 = 42      7 * 7 = 49      8 * 7 = 56      9 * 7 = 63
6 * 8 = 48      7 * 8 = 56      8 * 8 = 64      9 * 8 = 72
6 * 9 = 54      7 * 9 = 63      8 * 9 = 72      9 * 9 = 81

如果你的程式扣除掉大括號的部份在十行以內的話,那麼恭喜你,你合格了。
參考答案以後會公布。