控制程式流程--迴圈、判斷語句
前面學習的一些例子,他們都是按順序執行語句的。而控制程式流程的語句,不但避免了程式只能從上往下執行,而且可以提供不同執行路徑的條件語句和重複迴圈執行的語句。
if語句判斷
1 有條件的執行多條語句
先學習一下c_str()和strcpy_s():建議看一下下面的部落格
http://www.cnblogs.com/qlwy/archive/2012/03/25/2416937.html
https://www.cnblogs.com/woshitianma/p/3685661.html
下面的例子是將字串複製到char陣列之前,檢查陣列的容量是否足夠
#include "stdafx.h" #include "iostream" #include "string" using namespace std; int main() { char Buffer[20] = { '\0' }; cout << "Enter a line of text" << endl; string LineEnter; cin >> LineEnter; if (LineEnter.length() < 20) { strcpy_s(Buffer, LineEnter.c_str()); cout << "Buffer is : " << Buffer << endl; } system("pause"); return 0; }
2 巢狀if語句
下面的例子是執行乘法或除法運算
#include "stdafx.h" #include "iostream" #include "string" using namespace std; int main() { cout << "Please input two numbers : "<<endl; double num1 = 0, num2 = 0; cin >> num1; cin>> num2; cout << "Enter d to division,other to multiply : "; char intputlatter='\0'; cin >> intputlatter; if (intputlatter == 'd') if (num2 != 0) cout << num1 << "/" << num2 << "=" << num1 / num2<<endl; else cout << " Division by zero is not allowed "; else cout << num1 << "x" << num2 << "=" << num1 *num2; system("pause"); return 0; }
switch-case語句判斷
switch-case語句經常和列舉常量結合使用
列舉常量的定義在前面記錄過:https://mp.csdn.net/mdeditor/83898459#
下面是一個判斷一週內與哪個星星的名字對應
#include "stdafx.h" #include "iostream" #include "string" using namespace std; int main() { enum daysofweeks { monday = 1, Tuesday, wednesday, thursday, friday, saturday, sunday }; cout << "Enter a number of day" << endl; int day = monday; cin >> day; switch (day) { case monday: cout << "monday was named after moon" << endl; break; case Tuesday: cout << "Tuesday was named after mars" << endl; break; case wednesday: cout << "wednesday was named after mercury" << endl; break; case thursday: cout << "thursday was named after jupiter" << endl; break; case friday: cout << "friday was named after venus" << endl; break; case saturday: cout << "saturday was named after saturn" << endl; break; case sunday: cout << "sunday was named after again" << endl; break; default: cout << "Please input again " << endl; break; } system("pause"); return 0; }
注意:
1 在列舉型別的每一個常量間以逗號分開。
2 在每個語句的後面的break是必須的,而且在每一個case 後面為冒號。
3 defult 這一標籤必須的。
4 switch-case常和列舉型別結合使用,提高了程式碼的可讀性。
常用的迴圈語句
常用的迴圈有四種:while、do-while、for迴圈、巢狀迴圈
下面用一個根據使用者請求迴圈求解的例子來解釋四種迴圈的用法:
1 while迴圈
#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int main()
{
char inputlatters ='m';//確保程式進入迴圈
while (inputlatters = 'm')
{
cout << "Please input two numbers : " << endl;
double num1 = 0, num2 = 0;
cin >> num1;
cin >> num2;
cout << "Enter d to division,other to multiply : ";
char intputlatter = '\0';
cin >> intputlatter;
if (intputlatter == 'd')
if (num2 != 0)
cout << num1 << "/" << num2 << "=" << num1 / num2 << endl;
else
cout << " Division by zero is not allowed "<<endl;
else
cout << num1 << "x" << num2 << "=" << num1 * num2<<endl;
cout << "inputlatter m is continue,other is exit ; " << endl;
cin >> inputlatters;
}
system("pause");
return 0;
}
2 do- while迴圈
#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int main()
{
char inputlatters = 'm';
do
{
cout << "Please input two numbers : " << endl;
double num1 = 0, num2 = 0;
cin >> num1;
cin >> num2;
cout << "Enter d to division,other to multiply : ";
char intputlatter = '\0';
cin >> intputlatter;
if (intputlatter == 'd')
if (num2 != 0)
cout << num1 << "/" << num2 << "=" << num1 / num2 << endl;
else
cout << " Division by zero is not allowed "<<endl;
else
cout << num1 << "x" << num2 << "=" << num1 * num2<<endl;
cout << "inputlatter m is continue,other is exit ; " << endl;
cin >> inputlatters;
} while (inputlatters = 'm');
system("pause");
return 0;
}
3 for迴圈
#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int main()
{
for(char inputlatters = 'm' ; inputlatters = 'x' ;)
{
cout << "Please input two numbers : " << endl;
double num1 = 0, num2 = 0;
cin >> num1;
cin >> num2;
cout << "Enter d to division,other to multiply : ";
char intputlatter = '\0';
cin >> intputlatter;
if (intputlatter == 'd')
if (num2 != 0)
cout << num1 << "/" << num2 << "=" << num1 / num2 << endl;
else
cout << " Division by zero is not allowed "<<endl;
else
cout << num1 << "x" << num2 << "=" << num1 * num2<<endl;
cout << "inputlatter m is continue,x is exit ; " << endl;
cin >> inputlatters;
}
system("pause");
return 0;
}
注意:
1 每一種方法初始化的方法以及位置;
2 do-while執行完畢後面需要有分號;
3 for 迴圈有三個表示式,第一個表示式為迴圈起始的條件,第二個為終止條件,第三個為迭代器:在每次迴圈之後進行判斷,防止超越陣列邊界。
4 巢狀迴圈
同樣用一個求解斐波那契數列的例子來學習巢狀迴圈
#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int main()
{
cout<<"Please input the number of element : ";
int numbers=0;
cin>>numbers;
char continuelatters = '\0';
int num1 = 0, num2 = 1;
int nextnum1 = 0;
int index = 0;
cout << num1 << " " << num2<<" ";
do
{
for (index = 0; index < numbers; index++)
{
cout << num1 + num2<<" ";
nextnum1 = num2;
num2 = num1 + num2;
num1 = nextnum1;
}
cout << endl<<"Do you want to continue (y/n) : ";
cin >> continuelatters;
} while (continuelatters == 'y');
system("pause");
return 0;
}
輸出結果如下圖所示:
無限迴圈的處理方法–continue與break
在學習處理無限迴圈問題之前,
學習下常出現的無限迴圈的三種情況:
while(true)
do-while(true)
for(;;)
無限迴圈的處理方法
while(true)
{dosomething;
if(expression)
break;
}
do-while(true)
{dosomething;
if(expression)
break;
}
for(;;)
{dosomething;
if(expression)
break;
}
下面用一個小例子說明continue與break的終止迴圈的用法:
//未新增終止條件的無限迴圈
#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int main()
{
for( ; ;)
{
cout << "Please input two numbers : " << endl;
double num1 = 0, num2 = 0;
cin >> num1;
cin >> num2;
cout << "Enter d to division,other to multiply : ";
char intputlatter = '\0';
cin >> intputlatter;
if (intputlatter == 'd')
if (num2 != 0)
cout << num1 << "/" << num2 << "=" << num1 / num2 << endl;
else
cout << " Division by zero is not allowed "<<endl;
else
cout << num1 << "x" << num2 << "=" << num1 * num2<<endl;
} ;
system("pause");
return 0;
}
結果如下圖所示:
由圖可知:會出現一直要求輸入計算數字的提示,不會自動退出迴圈。
下面的程式碼有一個注意的地方:在判斷下面這兩個句子時,用的是等號“==”,不要馬虎,寫成賦值“=”,否則會一直提示重新輸入兩個數字。
if (changnumberslatter ==‘y’)
if (exitnumberslatter == ‘y’)
//添加了continue直接跳入下次迴圈,及break結束迴圈。
#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int main()
{
for(;;)
{
cout << "Please input two numbers : " << endl;
double num1 = 0, num2 = 0;
cin >> num1;
cin >> num2;
cout << "Do you want to change numbers (y/n) : " << endl;
char changnumberslatter = '\0';
cin >> changnumberslatter;
if (changnumberslatter =='y')
continue;
else
{
cout << "Enter d to division,other to multiply : ";
char intputlatter = '\0';
cin >> intputlatter;
if (intputlatter == 'd')
if (num2 != 0)
cout << num1 << "/" << num2 << "=" << num1 / num2 << endl;
else
cout << " Division by zero is not allowed " << endl;
else
cout << num1 << "x" << num2 << "=" << num1 * num2 << endl;
}
cout << "Do you want to exit circlation (y/n) : " << endl;
char exitnumberslatter = '\0';
cin >> exitnumberslatter;
if (exitnumberslatter == 'y')
break;
}
system("pause");
return 0;
}
執行結果如下圖所示: