Like Share Discussion Bookmark Smile

J.J. Huang   2019-10-15   C   瀏覽次數:

C語言 - 第十一章 | 循環演算 - 迴圈

什麼是迴圈?

有時候我們需要讓程式重複做某一件事情,我們可以藉由兩種方法做到,一是迴圈,二是遞迴,因為遞迴太過麻煩且不易使用所以在此不做贅述,留待未來。
C++中使用迴圈和C語言相同,使用whilefor


while

while使用方式為,小括號內為繼續執行條件,大括號為執行動作。
假設我們想讓使用者持續輸入數字,並使這些數字相加,當總和大於100時結束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main()
{
int sum = 0, num;

while (sum <= 100) {
printf("please input a number to sum:");
scanf("%d", &num);
sum = sum + num;
printf("The \"sum\" is %d\n", sum);
}

return 0;
}

一般迴圈我們都會做三件事情,設定條件變數、設立終止條件、更改條件變數:
設定條件變數:int sum = 0;
設立繼續條件:sum <= 100
更改條件變數:sum = sum + num;

另外我們更常會遇到的狀況,條件變數是持續+1,所以我們就有了for的使用。


for

for的使用方式為,小括號內依序放入條件變數設定、繼續條件設立、條件變數更改,並用;隔開,大括號內為執行動作。

九九乘法表,使用雙層for迴圈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main()
{
int i;
int j;

for (i = 2; i < 10; i++) {
for (j = 1; j < 10; j++) {
printf("%d*%d=%d\n", i, j, i * j);
}
}

return 0;
}


do-while

do-while的意義為不論如何都先做一次迴圈內的事情,再進行while迴圈。

1
2
3
4
5
6
7
if (i < 1)
{
while (i < 1)
{}
}
else
{}

代碼能走到if裡,i一定是小於1的,這個時候可以直接執行while的循環體了,不用先判斷了。
這裡如果用do-while,可以節省一次判斷。


break

猜拳的程式,使用了無限迴圈,並使用break跳出迴圈代替旗標的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int user,prog;
srand(time(NULL));
while(1){
printf("please input your hand(3>2,2>1,1>3):");
scanf("%d",&user);
prog = rand() %3+1;
if( (prog-user == -2)||(prog-user == 1) ){
printf("program: %d\n",prog);
printf("you : %d\n",user);
printf("you lose\n");
}else if( (user-prog == -2)||(user-prog == 1) ){
printf("program: %d\n",prog);
printf("you : %d\n",user);
printf("you win\n");
break;
}else{
printf("program: %d\n",prog);
printf("you : %d\n",user);
printf("draw\n");
}
printf("\n");
}

return 0;
}


continue

continue的意義為馬上重新執行迴圈,有別於break的跳出迴圈。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main()
{
int i;

for (i = 0; i < 100; i++) {
printf("%d:", i);
if (i % 5 == 0) {
printf("i am 5\n");
continue;
}
printf("i am not 5\n");
}

return 0;
}


註:以上參考了
hackersir gitbooks