if 语句
1)语法:
if (表达式)
{
// 表达式为真时执行的语句。
}
else
{
// 表达式为假时执行的语句。
}
注意:
if (表达式)之间的空格可以不写。
表达式必须使用括号。
表达式可以是具体的值。
表达式一般是关系运算和逻辑运算表达式,也可以是赋值运算或其它的表达式。
不要把if(变量名==值)写成if(变量名=值)。
整个if语句可以没有else分支。
if或else分支花括号内的代码如果只有一行,花括号可以不写;如果一行也没有,花括号一定要写;如果有多行,花括号一定要写,如果不写,除了第一行,其它的代码将不是if语句的一部分。
if (表达式)和else后不能加分号,因为分号表示空语句。(C++用分号作为一条语句结束的标志。如果在C++程序中不小心多写了一个分号,那么该分号会被当成一条空语句。)
2)示例
嵌套使用 if 语句
1)嵌套使用if语句
if语句可以嵌套使用,实现多级(层)的条件判断(最多127层)。
语法:
if (表达式一)
{
if (表达式二)
{
// 表达式二为真时执行的语句。
}
else
{
// 表达式二为假时执行的语句。
}
}
else
{
// 表达式一为假时执行的语句。
}
2)示例
#include <iostream> // 包含头文件。 using namespace std; // 指定缺省的命名空间。 int main() { char sex; // 性别(X-女,Y-男)。 bool yz; // 颜值(1-漂亮,0-不漂亮)。 //提示用户输入sex cout << "请输入超女的性别(X-女,Y-男):"; // 输入性别,存放在变量sex中。 cin >> sex; // 判断性别,如果是女,流程继续,否则程序结束。 if (sex == 'X') { // 显示“请输入颜值(1-漂亮,0-不漂亮):”的提示文字。 cout << "请输入颜值(1-漂亮,0-不漂亮):"; // 输入颜值,存放在变量中。 cin >> yz; // 判断颜值 if (yz == true) // 漂亮。 { cout << "哇!大美女!"; } else ;//这里是一个空语句 } //性别为Y的输出信息 else { cout << "男人别来沾边!"; } }
嵌套if语句的坑
嵌套使用if语句时候,会出现if与else的配对问题。
C++编译器处理该问题的原则是:else总是与前面最近if 配对。(就近原则)
如果要改变这种配对关系,可以使用花括号来确定新的配对关系。
if (sex == 'X') { if (yz == true) cout << "sex==X,yz==true\n"; } else cout << "sex==Y,yz==true or false\n";
这里如果不仔细看,可能会认为else是与第二层的if匹配,但是由于加了花括号了,这里说明一下,程序中的花括号就表示了一个语句块,这里第二层的 if 就是一个语句块,else与最开始的 if 匹配。
多条件的if语句
1)多条件的if语句
语法:
if (表达式一)
{
// 表达式一为真时执行的语句。
}
else if (表达式二)
{
// 表达式二为真时执行的语句。
}
else if (表达式三)
{
// 表达式三为真时执行的语句。
}
……
else if (表达式n)
{
// 表达式n为真时执行的语句。
}
else
{
// 全部表达式都不为真时执行的语句。
}注意:
- 多条件的if语句本质上是嵌套的if语句。
- 最多只能有127个条件分支。
- 最后一个else可以没有。
三目运算
三目运算也叫条件运算或三元运算,可以实现简单if语句的功能,但是书写更简洁。
语法: 表达式一 ? 表达式二 : 表达式三
先计算表达式一的值,如果为真,整个表达式的结果为表达式二的值,如果为假,整个表达式的结果为表达式三的值。
int a,b,c; a=7; b=6; c=(a>b)?a:b;
等同于
if (a>b) c=a;
else c=b;
三目运算表达式可以嵌套使用,但是,过于复杂的三目运算表达式不方便理解。
switch语句
switch也是一种选择结构的语句,可以代替简单的多条件的if语句。
语法:
switch (表达式)
{
case 值一:
语句一;
break;
case 值二:
语句二;
break;
......
case 值n:
语句n;
break;
default:
上述条件都不满足时执行的语句;
}
注意:
- case后面必须是整数和字符,或者是结果为整数和字符的表达式,但不能使用变量。
- default不是必须的,当没有default时,如果全部的case匹配失败,那么就什么都不执行。
- 每个分支不要漏写break;语句。
while循环语句
语法:
while (表达式)
{
语句块
}
先计算表达式的值,如果为真就执行语句块,执行完语句块后,回到循环首部再次计算表达式的值,如果为真又执行一次语句块……,这个过程会一直重复,直到表达式的值为假时不再执行语句块。
注意:
- 如果表达式的值永远为真,那么将进入死循环,所以在循环中应该有改变表达式的值的方法。
- 如果循环体中的语句块只有一行代码,大括号可以不书写。
- 有疑问先放一边,在以后的课程中,会介绍循环的各种使用方法。
示例:
#include <iostream> // 包含头文件。 using namespace std; // 指定缺省的命名空间。 int main() { int n = 1; // 编号 while (n <= 10) { cout << "这是第" << n++ << "名同学" "<<endl; } }
循环的跳转
break和continue两个关键字用于控制循环体中代码的执行流程。
break跳出(中止)当前循环语句。
continue回到当前循环语句的首部。
continue是跳过此次循环,在上面代码中就是当不是5的倍数时跳过此次循环到下一次
这里你会发现控制台什么都没有输出,这里其实是当 n进入循环时,n++变成1,进入else的break中,直接结束循环。
for循环语句
语法:
for (语句一 ; 表达式 ; 语句二)
{
语句块
}
1)循环开始的时候,先执行语句一,在整个循环过程中语句一只会被执行一次。
2)计算表达式的值,如果为真,就执行一次循环体中的语句块。
3)执行完语句块后,执行一次语句二。
4)重复第2)步和第3),直到表达式的值不为真才结束for循环。
注意:
不要纠结for循环与while循环的区别,它们本质上没有区别。
for循环一般需要一个相当于计数器的变量,在语句一中对它进行初始化,在语句二中进行计数操作。
在for循环的语句一中,可以声明计数器变量。
在for循环中,语句一、表达式和语句二都可以为空,for (;;)等同于while (true)。
continue和break两个关键字也可以用在for循环体中。
#include<iostream> using namespace std; int main() { for(int i = 0;i < 10 ;i++) cout<< i << endl; }
嵌套使用循环
// 在控制台输出九九乘法表。 for (int ii=1; ii<=9; ii++) { for (int jj = 1; jj <= ii; jj++) { cout << ii << "*" << jj << "=" << ii*jj <<" "; } cout << endl; }
do…while循环语句
语法:
do
{
语句块
} while (表达式);
功能与while语句类似,不同的是:
- 进入循环时,先执行一次语句块,再计算表达式的值。
- 循环的首部书写在循环的尾部,(表达式)后面还有一个分号。
goto语句
goto语句也称为无条件转移语句。
goto的语法:goto 语句标号;
语句标号的语法:语句标号:
如果在程序中使用了goto,程序的流程将跳转到语句标号的位置,并执行它后面的代码。
其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,可以独占一行,标号后加半角冒号。
语句标号用于标识语句的位置,与goto语句配合使用。
在实际开发中,goto语句容易造成程序流程的混乱,不方便理解,调试也更麻烦,不建议使用。