1.7 结构化程序设计
C++支持最基本的3种程序运行结构:顺序结构、选择结构、循环结构。
● 顺序结构:程序按顺序执行,不发生语句跳转,此处不单独介绍。
● 选择结构:根据条件是否满足,有选择地执行相应的代码。
● 循环结构:根据条件是否满足,循环多次执行某段代码。
· 1.7.1 选择结构
█ 1.if语句
作用:执行满足条件的语句。
if语句的3种形式如下。
● 单行格式if语句。
● 多行格式if语句。
● 多条件的if语句。
(1)单行格式if语句:if(条件){条件满足时执行的语句},流程如图1-30所示,使用方法见例1-15。
图1-30 单行格式if语句条件判断流程
例1-15:单行格式if语句。
#include <iostream>
using namespace std;
int main() {
//选择结构—单行格式if语句
//输入一个分数,如果分数大于600分,视为考上本科第一批录取的大学(一本大学),并输出
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;
cout << "您输入的分数为: " << score << endl;
//if语句
//注意事项:在if判断语句后面不要加分号
if (score > 600)
{
cout << "我考上了一本大学!!!" << endl;
}
return 0;
}
例1-15运行结果如图1-31所示。
注意:if条件表达式后不要加分号。
(2)多行格式if语句:if(条件){条件满足时执行的语句}else{条件不满足时执行的语句},流程如图1-32所示,使用方法见例1-16。
图1-31 例1-15运行结果
图1-32 多行格式if语句条件判断流程
例1-16:多行格式if语句。
#include <iostream>
using namespace std;
int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600)
{
cout << "我考上了一本大学" << endl;
}
else
{
cout << "我未考上一本大学" << endl;
}
return 0;
}
例1-16运行结果如图1-33所示。
(3)多条件的if语句:if(条件1){条件1满足时执行的语句}else if(条件2){条件2满足时执行的语句}...else{都不满足时执行的语句},流程如图1-34所示,使用方法见例1-17。
图1-33 例1-16运行结果
图1-34 多条件的if语句条件判断流程
例1-17:多条件的if语句。
#include <iostream>
using namespace std;
int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600)
{
cout << "我考上了一本大学" << endl;
}
else if (score > 500)
{
cout << "我考上了二本大学" << endl;
}
else if (score > 400)
{
cout << "我考上了三本大学" << endl;
}
else
{
cout << "我未考上本科" << endl;
}
return 0;
}
例1-17运行结果如图1-35所示。
总结:在if语句中,可以嵌套使用if语句,以达到更精确的条件判断。
█ 2.三目运算符
作用:通过三目运算符实现简单的判断。
语法:表达式1 ?表达式2:表达式3。
解释:如果表达式1的值为真,执行表达式2,并返回表达式2的结果;如果表达式1的值为假,执行表达式3,并返回表达式3的结果。
具体使用方法见例1-18。
例1-18:三目运算符。
#include <iostream>
using namespace std;
int main() {
int a = 10;
int b = 20;
int c = 0;
c = a > b ? a : b;
cout << "c = " << c << endl;
//C++中三目运算符返回的是变量,可以继续赋值
(a > b ? a : b) = 100;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
return 0;
}
例1-18运行结果如图1-36所示。
图1-35 例1-17运行结果
图1-36 例1-18运行结果
总结:和if语句相比较,三目运算符的优点是短小、整洁;缺点是如果用嵌套,结构不清晰。
█ 3.switch语句
作用:执行多条件分支语句。
语法:
switch(表达式)
{
case 结果1:执行语句;break;
case 结果2:执行语句;break;
...
default:执行语句;break;
}
具体使用方法见例1-19。
例1-19:switch语句。
#include <iostream>
using namespace std;
int main() {
//请给电影评分
//10~9: 经典
// 8: 非常好
// 7~6: 一般
// 5分及以下: 较差
int score = 0;
cout << "请给电影打分" << endl;
cin >> score;
switch (score)
{
case 10:
case 9:
cout << "经典" << endl;
break;
case 8:
cout << "非常好" << endl;
break;
case 7:
case 6:
cout << "一般" << endl;
break;
default:
cout << "较差" << endl;
break;
}
return 0;
}
例1-19运行结果如图1-37所示。
图1-37 例1-19运行结果
注意1:switch语句中表达式的类型只能是整型或者字符型。
注意2:case里如果没有break,那么程序会一直向下执行。
总结:与if语句相比较,在多条件判断时,switch语句的结构更清晰,执行效率更高;缺点是switch语句不可以判断区间。
· 1.7.2 循环结构
█ 1.while循环语句
作用:满足循环条件,执行循环语句。
语法:while(循环条件){执行语句}。
解释:只要循环条件的结果为真,就执行循环语句,否则跳出循环。流程如图1-38所示,使用方法见例1-20。
例1-20:while循环语句。
#include <iostream>
using namespace std;
int main() {
int num = 0;
while (num < 10)
{
cout << "num = " << num << endl;
num++;
}
return 0;
}
例1-20程序运行结果如图1-39所示。
图1-38 while循环语句流程
图1-39 例1-20运行结果
注意:在执行循环语句时,程序必须提供跳出循环的出口,否则会出现死循环,即程序不能结束运行。
█ 2.do-while循环语句
作用:满足循环条件,执行循环语句。
语法:do{执行语句} while(循环条件)。
流程如图1-40所示,具体使用方法见例1-21。
例1-21:do-while循环语句。
#include <iostream>
using namespace std;
int main() {
int num = 0;
do
{
cout << num << endl;
num++;
} while (num < 10);
return 0;
}
例1-21运行结果如图1-41所示。
图1-40 do-while循环语句流程
图1-41 例1-21运行结果
总结:do-while循环语句与while循环语句的区别在于,do-while循环语句先执行一次循环语句,再判断循环条件。
█ 3.for循环语句
作用:满足循环条件,执行循环语句。
语法:for(起始表达式;条件表达式;末尾循环体) {循环语句}。
具体使用方法见例1-22。
例1-22:for循环语句。
#include <iostream>
using namespace std;
int main() {
for (int i = 0; i < 10; i++)
{
cout << i << endl;
}
return 0;
}
例1-22运行结果如图1-42所示。
图1-42 例1-22运行结果
注意:for循环语句中的表达式,要用分号进行分隔。
总结:while循环语句、 do-while循环语句、for循环语句都是开发中常用的循环语句,for循环语句结构清晰,比较常用。
█ 4.嵌套循环
作用:在循环体中再嵌套一层循环,解决一些实际问题。
嵌套循环语句的具体使用方法见例1-23。
例1-23:嵌套循环语句。
#include <iostream>
using namespace std;
int main() {
//外层循环执行1次,内层循环执行1轮
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout << "*" << " ";
}
cout << endl;
}
return 0;
}
例1-23运行结果如图1-43所示。
图1-43 例1-23运行结果
· 1.7.3 跳转语句
在循环语句执行过程中,跳转语句用于实现程序语句的跳转。在C++中,跳转语句有break语句、continue语句、goto语句3种,下面分别进行介绍。
█ 1.break语句
作用:跳出选择结构或者循环结构。
break语句使用的情况有以下3种。
● 出现在switch条件语句中,作用是终止case并跳出switch条件语句。
● 出现在循环语句中,作用是跳出当前的循环语句。
● 出现在嵌套循环语句中,作用是跳出最近的内层循环语句。
具体使用方法见例1-24、例1-25、例1-26。
例1-24:跳转语句。
#include<iostream>
using namespace std;
int main() {
//在switch 语句中使用break
cout << "请选择您挑战副本的难度:" << endl;
cout << "1.普通" << endl;
cout << "2.中等" << endl;
cout << "3.困难" << endl;
int num = 0;
cin >> num;
switch (num)
{
case 1:
cout << "您选择的是普通难度" << endl;
break;
case 2:
cout << "您选择的是中等难度" << endl;
break;
case 3:
cout << "您选择的是困难难度" << endl;
break;
}
return 0;
}
例1-24运行结果如图1-44所示。
例1-25:跳出循环语句。
#include <iostream>
using namespace std;
int main() {
//在循环语句中使用break
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break; //跳出循环语句
}
cout << i << endl;
}
return 0;
}
例1-25运行结果如图1-45所示。
图1-44 例1-24运行结果
图1-45 例1-25运行结果
例1-26:跳转语句。
#include <iostream>
using namespace std;
int main() {
//在嵌套循环语句中使用break,退出内层循环
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (j == 5)
{
break;
}
cout << "*" << " ";
}
cout << endl;
}
return 0;
}
例1-26运行结果如图1-46所示。
图1-46 例1-26运行结果
█ 2.continue语句
作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环,具体使用方法见例1-27。
例1-27:continue语句。
#include <iostream>
using namespace std;
int main() {
for (int i = 0; i < 100; i++)
{
if (i % 2 == 0)
{
continue;
}
cout << i << endl;
}
return 0;
}
例1-27运行结果如图1-47所示。
注意:continue语句并没有使整个循环终止,而break语句会跳出循环。
█ 3.goto语句
作用:可以无条件跳转语句。
语法:goto 标记。
解释:如果标记的名称存在,执行到goto语句时会跳转到标记的位置。
具体使用方法见例1-28。
例1-28:goto语句。
#include <iostream>
using namespace std;
int main() {
cout << "1" << endl;
goto FLAG;
cout << "2" << endl;
cout << "3" << endl;
cout << "4" << endl;
FLAG:
cout << "5" << endl;
return 0;
}
例1-28运行结果如图1-48所示。
图1-47 例1-27运行结果
图1-48 例1-28运行结果
注意:在程序中不建议使用goto语句,以免造成程序流程混乱。