程式設計菜鳥到大佬之路:C語言程式(七)
阿新 • • 發佈:2018-12-13
第七天學習精要
for迴圈
for迴圈語句
- for迴圈一般用於將某段程式碼(語句組)重複執行若干次。
- 第一步:計算“表示式1”。
- 第二步:計算“表示式2”,若其值為true,則執行“{ }”中的語句組,然後轉到第三步;若為false,則不再執行“{}”中的語句組,for語句結束,轉到第五步。
- 第三步:計算“表示式3”。
- 第四步:轉到第二步。
- 第五步:從for語句後面繼續往下執行程式。
for( 表示式1 ;表示式2;表示式3) { 語句組 }
# include <iostream> using namespace std; int main() { int i; // i是迴圈控制變數 for (i = 0; i < 26; ++i) { cout << char('a' + i); // 'a'+i強制轉換成char型別 } return 0; } # 第二種寫法 # include <iostream> using namespace std; int main() { for (int i = 0; i < 26; ++i) // 語句組裡只有一條一句就可以不用寫”{ }” cout << char('a' + i); return 0; }
-
迴圈控制變數定義在"表示式1"中,則其只在for語句內部起作用,可以不用擔心迴圈控制變數重名。
-
迴圈控制變數並非每次只能加1,for迴圈可以巢狀,形成多重for迴圈。
-
for迴圈結構裡的“表示式1”和“表示式3”都可以是用逗號連線的若干個表示式。
for( int i= 15, j = 0; i > j; i-=2, j+= 3)
cout << i << "," << j << endl;
- 例題: 寫一個程式,輸入一個正整數n,從小到大輸出它的所有因子。
# include <iostream> using namespace std; int main() { int n; cin >> n; for (int i = 1; i <= n; ++i) { if (n % i == 0) cout << i << endl; } return 0; }
- 例題: 給定正整數n和m,在1至n這n個數中,取出兩個不同的數,使得其和是m的因子,問有多少種不同的取法。
# include <iostream> using namespace std; int main() { int n, m, total = 0; // total表示取法總數 cin >> n >> m; for (int i = 1; i < n; ++i) // 取第一個數,共n-1種取法 { // 第二個數要比第一個數大,以免取法重複 for (int j = i + 1; j <= n; ++j) { if (m % (i + j) == 0) total += 1; } } cout << total; return 0; }
-
for 語句括號裡面的“表示式1”,“表示式2”,“表示式3”任何一個都可以不寫,甚至可以全都不寫,但是“;”必須保留。
-
可以用 break 語句從 for( ; ;)死迴圈中跳出。
while迴圈和do…while迴圈
while迴圈
- 並非到達指定次數,而是滿足某條件時即停止迴圈,則適合用while語句來實現迴圈。
-
第一步:判斷“表示式”是否為真,如果不為真,則轉第四步。
-
第二步:執行“語句組”。
-
第三步:轉第一步。
-
第四步:while語句結束,繼續執行while語句後面的語句。
while(表示式) { 語句組 }
-
- 例題:輸入若干個(至少1個)不超過100的正整數,輸出其中的最大值、最小值以及所有數的和。輸入的最後一個數是0,標誌著輸入結束。
# include <iostream>
using namespace std;
int main()
{
int min = 150, max = 0, n, sum = 0;
cin >> n;
while (n <= 100 && n > 0)
{
if (n > max)
max = n;
if (n < min)
min = n;
sum = sum + n;
cin >> n;
}
cout << max << "," << min << "," << sum;
return 0;
}
- 例題:用牛頓迭代法求輸入的數的平方根。
- 欲求a的平方根,首先猜測一個=(也可以是隨便什麼其他值)作為其平方根
- 根據迭代公式: 算出
- 再將代入公式右邊算出……
- 直到連續兩次算出的和的差的絕對值小於某個值ε,即認為找到了足夠精確的平方根。
- 這個ε值取得越小,計算出來的平方根就越精確。
# include <iostream>
using namespace std;
double EPS = 0.001; //用以控制計算精度
int main()
{
double a; // 輸入a,要求a的平方根
cin >> a;
if (a >= 0)
{
double x = a / 2;
double lastX = x + 1 + EPS; // 確保能夠進行至少一次迭代
//只要精度未達要求,就繼續迭代
while (x - lastX > EPS || lastX - x > EPS)
{
lastX = x;
x = (x + a/x)/2;
}
cout << x;
}
else
{
cout << "It can't be nagitive.";
}
return 0;
}
do…while迴圈
-
如果希望迴圈至少要執行一次,就可以使用do…while語句。
-
每執行一次迴圈後,都要判斷“表示式”的值是否為真,如果真就繼續迴圈,如果為假,就停止迴圈。
do {
語句組
} while(表示式);
- 輸出1到10000以內所有2的整數次冪:
int n = 1;
do {
cout << n << endl;
n *= 2;
} while( n < 10000);