前面学习的一些例子,他们都是按顺序执行语句的。而控制程序流程的语句,不但避免了程序只能从上往下执行,而且可以提供不同执行路径的条件语句和重复循环执行的语句。
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;
}
运行结果如下图所示: