1. 程式人生 > >控制程式流程--迴圈、判斷語句

控制程式流程--迴圈、判斷語句

前面學習的一些例子,他們都是按順序執行語句的。而控制程式流程的語句,不但避免了程式只能從上往下執行,而且可以提供不同執行路徑的條件語句和重複迴圈執行的語句。

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;
}

執行結果如下圖所示:
在這裡插入圖片描述