For and While
===
---
## while迴圈
----
**當條件符合(true)**
**就執行括號內的程式,直到條件不符合為止(false)**
```cpp
while (執行條件){
do_something;
}
```
----
### 印出1~10的數字
----
```cpp
#include<iostream>
using namespace std;
int main(){
int i = 1;
while (i <= 10){
cout << i << endl;
i++;
}
return 0;
}
```
----
### 印出5\*5的正方形

----
```cpp
#include <iostream>
using namespace std;
int main() {
int i = 1;
while (i <= 5) {
int j = 1;
while (j <= 5) {
cout << "*";
j++;
}
cout << endl;
i++;
}
return 0;
}
```
----

```cpp
while (跟罹患阿茲海默症的阿嬤要錢成功) {
等待二十分鐘
}
```
---
## FOR迴圈
----
### 格式
```cpp=
for(初始化;執行條件;每次要幹麻){
do_something;
}
for(int i = 0; i < 3; i++)
cout << "HI" << endl;
//宣告的i作用範圍只有迴圈內喔!
```
----
### 印出1~10
----
```cpp
#include<iostream>
using namespace std;
int main (){
for(int i = 0; i < 10; i++){
cout << i + 1 << endl;
}
return 0;
}
```
----
### 印出5\*5個星星
```cpp=
for(int i = 0 ; i < 5 ; i ++){
for(int j = 0 ; j < 5 ; j++){
cout<<'*'<<endl;
}
cout<<endl;
}
```
---
## for v.s. while
----
| | For | While |
| -------- | -------- | -------- |
| 初始化 | for(<font color="#f00">here</font>; xxx; xxx) | 自行在外面設定 |
|判斷結束|for(xxx; <font color="#f00">here</font>; xxx)|while(<font color="#f00">here</font>)|
|迴圈執行|for(;;<font color="#f00">here</font>)|自行在裡面設定|
|差異|迴圈前固定次數|迴圈中改變執行次數|
|優點|新手容易debug|使用彈性高|
|注意|**盡量不要在裡面修改結束條件**|**要確保能夠結束**|
---
## 進階用法
----
### while cin
----
如果題目沒有說會給多少次輸入 則可以使用以下語法
```cpp=
//a+b problem
int main(){
int a, b;
while(cin >> a >> b)
cout << a + b <<endl;
return 0;
}
```
----
### 不斷輸入直到輸入-1
```cpp=
int main(){
int a;
while(cin >> a && a != -1)
cout << a <<endl;
return 0;
}
```
---
## 練習時間
---
## 數字塔
給定數字n 印出如圖中的數字塔(n < 10)

----
### while
```cpp=
#include <iostream>
using namespace std;
int main() {
int c, a = 1, b, d;
cin >> c;
while (a <= c) {
b = c - a;
while (b > 0) {
cout << " ";
b--;
}
d = a;
while (d > 0) {
cout << a;
d--;
}
cout << " ";
d = a;
while (d > 0) {
cout << a;
d--;
}
cout << endl;
a++;
}
}
```
----
### for
```cpp=
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - i - 1; j++)
cout << ' ';
for (int j = 0; j < (i + 1) * 2; j++)
cout << i + 1;
cout << endl;
}
return 0;
}
```
---
## 給定a,b求 a^b^
example:
input: 5 3
output: 125
----
```cpp
#include<iostream>
using namespace std;
int main (){
int a, b, ans = 1;
//ans(總數)的初始值要設為1,不然0乘以多少都是0
cin >> a >> b;
for(int i = 0; i < b; i++ ){
ans = ans * a;
}
cout << ans << endl;
return 0;
}
```
----
### 進階算法 fastpow
```cpp=
int main(){
int a, b, res=1; cin >> a >> b;
while(b){
if(b&1) res=res*a;
a*=a,b>>=1;
}
cout << res <<endl;
}
```
---
## 輸入一個數,問是否為質數
## 並找出它的因數

----
```cpp
#include <iostream>
using namespace std;
int main() {
int a, t = 0;
cin >> a;
for (int i = 1; i <= a; i++) {
if (a % i == 0) {
cout << i << " ";
t++;
}
}
if (t > 2)
cout << "no" << endl;
else
cout << "yes" << endl;
return 0;
}
```
{"metaMigratedAt":"2023-06-15T14:56:29.972Z","metaMigratedFrom":"Content","title":"For and While","breaks":true,"contributors":"[{\"id\":\"7d4f22ac-9934-417b-aa5e-c76934d4fc98\",\"add\":3812,\"del\":1561},{\"id\":\"25ed14ea-ce8a-4b9d-80a1-c8eda43fe6c7\",\"add\":3126,\"del\":1656}]"}