發信人: 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
如果你的程式扣除掉大括號的部份在十行以內的話,那麼恭喜你,你合格了。
參考答案以後會公布。