1. 程式人生 > 實用技巧 >《c++入門經典》筆記6

《c++入門經典》筆記6

《c++入門經典》筆記6

第六章 控制程式流程

6.1 迴圈

在程式中執行多次的程式碼塊稱為迴圈,其中每次迴圈都稱為迭代

6.2 while迴圈

while迴圈導致程式重複執行一組語句,直到開始條件為false。

下面的while迴圈顯示數字0~99:

int x = 0;
while(x < 100)
{
std::cout<< x <<"\n";
x++;
}

程式清單6.1中,程式Thirteens使用一個while迴圈顯示可被13整除且小於500的所有數字。

程式清單6.1 Thirteens.cpp

#include <iostream>
int main()
{
int counter = 0;
while (counter < 500)
{
counter++;
if (counter % 13 == 0)
{
std::cout << counter << " ";
}
}
std::cout << "\n";
return 0;
}

break語句導致迴圈立即終止,而不等待條件為false。

程式清單6.2這個程式顯示前20個可被14整除的數

程式清單6.2 Fourteens.cpp

#include <iostream>
int main()
{
int counter = 0;
int multiples = 0;
while (true)
{
counter++;
if (counter % 14 == 0)
{
std::cout << counter << " ";
multiples++;
}
if (multiples > 19)
{
break;
}
}
std::cout << "\n";
return 0;
}

另一種改變迴圈行為的方式是使用continue語句。在迴圈中遇到continue語句時,將跳過餘下的語句,開始下一次迴圈迭代

程式清單6.3這個程式顯示前20個可被15整除的數

程式清單6.3 Fifteens.cpp

#include <iostream>
int main()
{
int counter = 0;
int multiples = 0;
while (multiples < 19)
{
counter++;
if (counter % 15 != 0)
continue;
std::cout << counter << " ";
multiples++;
}
std::cout << "\n";
return 0;
}

6.3 do-wihle迴圈

while迴圈執行迴圈語句前檢查條件表示式,如果條件不可能為true,迴圈語句就不會執行。

而do-while語句將在迴圈末尾檢查條件

也就是do-while迴圈的迴圈體至少會執行一次

程式清單6.4 Badger.cpp

#include <iostream>
int main()
{
int badger;
std::cout<<"How many badgers? ";
std::cin>>badger;
do
{
std::cout<<"Badger ";
badger--;
} while (badger > 0);
std::cout<<"\n";
return 0;
}

6.4 for迴圈

for迴圈是一種複雜的迴圈,將設定計數器變數、檢查計數器變數是否滿足條件、迭代修改計數器變數這三個步驟合併到了一條語句中。該語句使用關鍵字for,後面是一對括號。括號內,是三條用分號分隔的語句,它們分別初始化計數器、檢查條件和修改計數器

程式清單6.5 MultTable.cpp

#include <iostream>
int main()
{
int number;
std::cout << "Enter a number:";
std::cin >> number;

std::cout << "\nFirst 10 Multiples of " << number << "\n";
for (int counter = 1; counter < 11; counter++)
{
std::cout << number * counter << " ";
}
std::cout << "\n";
return 0;
}

多變數for迴圈:

for(int x = 0,y = 0; x < 10;x++,y++)
{
std::cout<< x * y << "\n";
}

這個就等同於:

int x = 0,y = 0;
for(; x < 10;x++,y++)
{
std::cout<< x * y << "\n";
}

巢狀迴圈:

程式清單6.6 BoxMaker.cpp

#include <iostream>
int main()
{
int rows, columns;
char character;

std::cout << "How many rows? ";
std::cin >> rows;
std::cout << "How many columns? ";
std::cin >> columns;
std::cout << "what character to display? ";
std::cin >> character;

std::cout << "\n";
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
std::cout << character;
}
std::cout << "\n";
}
return 0;
}

6.5 switch語句

switch語句檢查一個表示式,並根據其值執行多個程式碼塊中的一個

std::cout<<"You have kulled "<< zombies << " zombie";
switch(zombies)
{
case 0:
std::cout << "s\n";
break;
case 1:
std::cout << "\n";
break;
default:
std::cout << "s\n";
}

在switch語句的case部分,只能進行相等比較,而不能進行關係運算和布林運算。如果有case值與表示式匹配,將執行相應的語句,然後繼續執行到switch塊末尾或遇到的第一個break語句。如果沒有匹配的case部分,將執行可選的default部分。

在上例中,每個case部分都以一條break語句結尾,用於退出switch語句。如果case部分末尾沒有break語句,將繼續執行下一個case部分。在有些情況下,可利用這種辦法來只想多個case部分。

程式清單6.7 BadTeacher.cpp

#include <iostream>
int main()
{
char grade;
std::cout << "Enter your letter grade (ABCDF):";
std::cin >> grade;
switch (grade)
{
case 'A':
std::cout << "Finally!\n";
break;
case 'B':
std::cout << "You can do better!\n";
break;
case 'C':
std::cout << "I'm disappointed in you!\n";
break;
case 'D':
std::cout << "You are not smart!\n";
break;
case 'F':
std::cout << "Get out of my sight!\n";
break;
default:
std::cout << "That's not even a grade!\n";
break;
}
return 0;
}