一.选择结构
1.if语句
<1>if
<2>if......else....
<3>if.....else if......else
【实例】输入一个年份,判断是否为闰年。闰年的年份必须满足以下两个条件之一)(1)能被4整除,但不能被100整除的年份都是闰年。
(2)能被400整除的年份都是闰年
include <iostream>
using namespace std;
int main()
{
int year;
cout << "Enter the year:";
cin >> year;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))//判断是否为闰年
cout << year << " is a leap year" << endl;
else
cout << year << " is not a leap year" << endl;
system("pause");
return 0;
}
2.嵌套if语句
if语句中,如果内嵌语句又是if语句,就构成了嵌套if语句。
一般形式如下:
if()
If()语句1
else语句2
Else
If()语句3
else语句4
应当注意if与else的配对关系。else总是与它上面最近的、且未配对的if配对。
假如写成:
if()
if()语句l
else
if()语句2
else语句3
第一个else写在与第一个if(外层if) 同一列上, 看似else与第一个if对应, 但实际上,else是与第二个if配对,因为它们相距最近,而且第二个if并未与任何else配对。
为了避免误用,最好使每一层内嵌的if语句都包含else子句, 这样if的数目和else的数目相同,从内层到外层一一对应,不至于出错。
如果if与else的数目不一样,为实现程序设计者的意图,可以加花括号来确定配对关系。
例如:
if()
{if()语句1}//这个语句是上一行if语句的内嵌if
else语句2//本行与第一个if配对
这时{}限定了内嵌if语句的范围,{}外的else不会与{}内的if配对。关系清楚,不易出错。
【实例】用嵌套if语句实现上个例子的功能。代码如下:
#include <iostream>
using namespace std;
int main()
{
int year;
bool leap;
cout << "Enter the year:";
cin >> year;
if (year % 4 == 0) {
if (year % 100 == 0) {
if (year % 400 == 0) leap = true;
else leap = false;
}
else leap = false;
}
else leap = false;
if( leap)
cout << year << " is" << endl;
else
cout << year << " is not" << endl;
cout <<"a leap year" << endl;
system("pause");
return 0;
}
3.switch语句
c++提供了一个switch语句, 称为多分支语句(开关语句) , 可以用来实现多分支选择程序结构。
switch语句的语法格式为:
switch(表达式){
case 常量表达式1:语句序列1; break;
case 常量表达式2:语句序列2; break;
case 常量表达式n:语句序列n; break;
default: 语句序列n+1;
}
(1)当switch后面括号中表达式的值与某一个case分支的常量表达式匹配时,就执行该分支。如果所有的case分支中常量表达式都不能与switch后面括号中表达式的值匹配,
就执行default分支。
(2)break语句可选,如果没有break语句,每一个case分支都只作为开关语句执行入口,执行完该分支后,还将接着执行其后的所有分支。因此,为保证逻辑的正确实现,
通常每个case分支都与break语句联用。
(3) 每个常量表达式的取值必须各不相同, 否则将引起歧义。各case子句后面必须是常量, 而不能是变量或表达式。各个case(包括default) 分支出现的次序可以任意, 通常将
default分支放在最后。
(4)允许多个常量表达式对应同一个语句序列。例如:
char score;
cin>>score;
switch (score)
case 'A':
case 'a': cout<<"excellent";
break;
case 'B':
case 'b': cout<<"good";
break;
default:cout<<"fair";
(5)从形式上看, switch语句的可读性比嵌套if语句好, 但不是所有多选一的问题都 可由开关语句完成, 这是因为开关语句中限定了switch后面括号中表达式的类型, 它的类型可以是整型、字符型、枚举类型,而不能是浮点型。
【实例】用switch语句编写程序实现如下功能:某百货公司为了促销,采用购物打折的办法。在1000元以上者,按九五折优惠:在2000元以上者,按九折优惠:在3000元以上者,按八五折优惠;在5000元以上者,按八折优惠。编写程序,输入购物款数,计算并出优惠价。
#include <iostream>
using namespace std;
int main(){
int imoney;
cout << "请输入您消费的金额:" << endl;
cin >> imoney;
switch (imoney / 1000)
{
case 0:
cout << "您的消费没有折扣,金额是:" << imoney << endl;
case 1:
cout << "您的消费享受95折优惠,金额是:" << imoney << ",优惠后的金额是:" << imoney * 0.95 << endl;
break;
case 2:
cout << "您的消费享受9折优惠,金额是:" << imoney << ",优惠后的金额是:" << imoney * 0.9 << endl;
break;
case 3:case 4:
cout << "您的消费享受85折优惠,金额是:" << imoney << ",优惠后的金额是:" << imoney * 0.85 << endl;
break;
default:
cout << "您的消费享受8折优惠,金额是:" << imoney << ",优惠后的金额是:" << imoney * 0.8 << endl;
break;
}
system("pause");
return 0;
}
二.循环结构
1 .while循环语句
作用:满足循环条件,执行循环语句
语法: while(循环条件){ 循环语句 }
解释:只要循环条件的结果为真,就执行循环语句
示例:
int main() {
int num = 0;
while (num < 10)
{
cout << "num = " << num << endl;
num++;
}
system("pause");
return 0;
}
注意:在执行循环语句时候,程序必须提供跳出循环的出口,否则出现死循环。
作用: 满足循环条件,执行循环语句
语法: do{ 循环语句 } while(循环条件);
**注意:**与while的区别在于==do...while会先执行一次循环语句==,再判断循环条件
示例:
int main() { int num = 0; do { cout << num << endl; num++; } while (num < 10); system("pause"); return 0; }//与while循环区别在于,do...while先执行一次循环语句,再判断循环条件
3. for循环语句
作用: 满足循环条件,执行循环语句
语法: for(起始表达式;条件表达式;末尾循环体) { 循环语句; }
示例:
int main() {
for (int i = 0; i < 10; i++)
{
cout << i << endl;
}
system("pause");
return 0;
}
详解:
注意:for循环中的表达式,要用分号进行分隔
总结:while , do...while, for都是开发中常用的循环语句,for循环结构比较清晰,比较常用
4. 嵌套循环
作用: 在循环体中再嵌套一层循环,解决一些实际问题
示例:
int main() {
//外层循环执行1次,内层循环执行1轮
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout << "*" << " ";
}
cout << endl;
}
system("pause");
return 0;
}
【实例】输出九九乘法表。
#include <iostream>
#include<iomanip>/*io代表输入输出,manip是manipulator(操纵器)的缩写(在c++上只能通过输入缩写才有效。)
iomanip的作用:
主要是对cin, cout之类的一些操纵运算子,比如setfill, setw, setbase, setprecision等等*/
using namespace std;
int main() {
cout << "*";
for (int i = 1; i <= 9; i++)
cout << setw(8) << i;
cout<< endl;//输出循环语句每一行的表头,其中setw(int n)是c++中在输出操作中使用的字段宽度设置,设置输出的域宽,n表示字段宽度
for (int i = 1; i <= 9; i++){
cout << i;//输出行号
for (int j = 1; j <= i; j++)
cout << setw(3) << i << '*' << j << '=' << setw(2) << i * j;
cout<< endl;
}
system("pause");
return 0;
}
三. 跳转语句
1.break语句
作用: 用于跳出==选择结构==或者==循环结构==
break使用的时机:
- 出现在switch条件语句中,作用是终止case并跳出switch
- 出现在循环语句中,作用是跳出当前的循环语句
- 出现在嵌套循环中,跳出最近的内层循环语句
示例:
int main() {
//在循环语句中用break
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break; //跳出循环语句
}
cout << i << endl;
}
system("pause");
return 0;
}
2. continue语句
作用:在==循环语句==中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
示例:
int main() {
for (int i = 0; i < 100; i++)
{
if (i % 2 == 0)
{
continue;
}
cout << i << endl;
}
system("pause");
return 0;
}
注意:continue并没有使整个循环终止,而break会跳出循环
四.goto语句
作用:可以无条件跳转语句
语法: goto 标记;
解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置
注意:在程序中不建议使用goto语句,以免造成程序流程混乱