:::info 1.當程式需要重複執行時就可以使用迴圈(Loop) 2.迴圈具備有:次數、進入迴圈的條件、離來開迴圈得˙條件、每次執行後計量的變化 ::: #c/c++的迴圈 :::success 1.for loop:已知要執行幾次時使用 2.While loop:包含loop的特性.但在不知道迴圈執行幾次時可使用While.噹條件成立時才會進入While loop 執行次數為0 3.do while loop:與while loop ::: ##for 迴圈 ![image.png](https://hackmd.io/_uploads/r1OdqLvQa.png) :::success 1~10000總和運算 ::: 1.1~10000的總和 2.1~10000的偶數和 3.1~10000的3與7的倍數總和 :::info 練習:階乘運算 ::: 1讓使用者輸入一個整數(n,在之間(需防呆) 2.計算 n! 的值後輸出 3.階層定義: :::into 練習:找出最大公因數 ::: 1.最大公因數定義:https://zh.wikipedia.org/zh-tw/%E6%9C%80%E5%A4%A7%E5%85%AC%E5%9B%A0%E6%95%B8 讓使用者輸入兩個正整數n1,n2,找出n1,n2的最大 因數 、、、cpp=1 、、、 #include <bits/stdc++.h> using namespace std; int main() { //資料輸入 int n1,n2; scanf("%d%d, &n1 ,&n2"); //處理資料 int gac = 1; //預設的gcd=1 //從2開始~(n1,n2的最小值) for(int i=2;i<=n1 && i<n2; i++){ if(n1%i==0 && n2%i==0){ // i同時為N1,N2的因數 if(n1%i==0 && n2%i==0) //最大公因數變成i gac=1 } } printf("GCD(%d, %d)=%d\n",n1 ,n2, gac); return 0; } ![image](https://hackmd.io/_uploads/HJGO_KlET.png) ![image](https://hackmd.io/_uploads/S1IPqtlEp.png) ## While 迴圈 :::success 計算1+2+...+n的總和 ::: '''cpp=1 ''' :::success 無限輸入a,b。輸入a+b的結果 ::: '''cpp=1 ''' :::success 無限輸入n。輸入3n+1的結果 ::: '''cpp ''' :::success 無限輸入n。輸入3n+1的結果 ::: '''cpp=1 ''' ![image](https://hackmd.io/_uploads/BkWpx5g4p.png) #include <iostream> using namespace std; int main() { int a, b; //c++的寫法 /* while(cin>>a>>b){ cout<<a+b<<endl; } /* //c++的寫法 while(scanf("%d%d", &a, &d)==2){ while(scanf("%d%d", &a, &b)!=EOF){//EOF:End Of File printf("%d\n", a+b); } return 0; } ''' :::success 無限輸入n。輸入3n+1 ::: 1.任意大於1的自然數,若n為奇數,將n變成3n+1,否則變成n的一半 2.經過若千次上述的變換,最後n一定會變成1 3.請輸入 n。 輸入變換次數 '''cpp ''' # do...while迴圈 ![image](https://hackmd.io/_uploads/rklQzjgV6.png) :::success do while 與while 不同在於條件判斷位置,while為一開始就判斷條件。do while 為在結尾判斷條件,所以do while迴圈一定最少會被執行一次。 ::: :::success 近似值計算: $\pi/4=1-1/3+1/5-1/7+1/9+\cdots$,直到最後一項小於$10^{-6}結束計算 ::: '''cpp=1 '''