《我的第一本C++书》节选:4.2.1 if语句
更多尽在http://www.chenlq.net
4.2.1 if语句
我们总是用“如果……,就……”来表达条件选择,C++也向我们学习,提供了关键字if来实现选择结构。if语句的语法格式如下:
if ( 条件表达式 )
{
语句1;
}
else
{
语句2;
}
在条件选择语句中,首先计算条件表达式的值,然后根据表达式进行判断。如果表达式的值为true,则执行语句1;否则执行语句2。通过使用条件选择语句,可根据条件表达式的不同值而改变程序执行的流程,可以在语句1和语句2中实现不同的功能。if语句的执行过程如图4-1所示。 现在,就可以用if语句来解决“爱我还是她”这个令人烦恼的问题了。
// 得到漂亮指数
int nBeautyIndex = GetBeautyIndex();
// 以漂亮指数作为条件进行判断选择
if( nBeautyIndex > 85 )
{
// 如果“漂亮指数大于85”条件成立,选择“爱你”
cout<<"爱你!"<<endl;
}
else
{
// 如果“漂亮指数大于85”条件不成立,选择“爱她”
cout<<"爱她!"<<endl;
}
图4-1 条件选择结构的执行流程 在这里,首先得到漂亮指数,然后将漂亮指数跟一个标准进行比较,再将比较的结果作为条件进行判断。如果漂亮指数大于85,则比较结果为true,执行条件选择结构中的语句1,输出答案为“爱你!”;如果条件不能满足,则执行语句2,输出答案为“爱她!”。用程序解决问题就是这么简单。从现在开始,谁也别爱了,爱上C++吧。 if语句的形式虽然简单,但是在其使用上有如下几个需要注意的地方。
1. if语句中的else部分可以省略 很多时候,我们只关心条件为true的情况,即省略掉if语句中的else部分,只保留if判断条件和相应的语句,例如:
// 如果分数大于80,则输出“Good”
if( nScore > 80 )
{
cout<<"Good!";
}
这个条件选择结构表示,如果nScore的值大于80,就输出“Good!”以示嘉奖。对于nScore小于或等于80的情形,我们不关心,也不处理。
2. if语句可以实现嵌套 if语句可以嵌套在if语句中,表示在某个前提条件下做进一步的条件判断,从而实现更加复杂的选择。例如,要比较输入的v1和v2的大小关系,可以使用如下代码。
cout << "请输入两个整数:" << endl;
int v1, v2;
// 获取用户输入的数字
cin >> v1 >> v2;
if( v1 != v2 ) // 判断v1和v2是否相等,如果不相等,则继续判断大小
{
// 第二级if语句
// 如果不相等,则继续判断v1是否大于v2
if( v1 > v2 )
{
cout<<" v1 > v2 "<<endl;
}
else
{
cout<<" v1 < v2 "<<endl;
}
}
else // v1和v2相等
{
cout<<" v1 = v2 "<<endl;
}
在这段代码中,首先判断v1和v2是否相等。如果不相等,则继续判断v1是否大于v2,如果还是不满足,则直接输出结果。通过两级判断,实现了v1和v2大小的比较。
3. if语句可以并列 如果同一级的条件有多种情况,就可以使用并列的条件选择语句来实现。并列条件选择语句的语法格式如下:
if ( 条件表达式1 )
{
语句1;
}
else if ( 条件表达式2 )
{
语句2;
}
// …
else if ( 条件表达式n )
{
语句n;
}
else
{
语句n+1;
}
当程序开始执行一条并列条件选择语句时,会从上到下逐个计算条件表达式的值,并判断是否为true,如果条件表达式的值为true,则进入相应的分支,执行其中的语句,完成整个并列条件选择语句的执行。这里需要特别注意,并列条件选择语句只会执行其中的某一个分支,如果多个条件表达式都为true,则只会执行第一个分支。例如:
// 并列条件选择语句的执行
int a = 5;
if( a > 1 ) // 条件表达式为true,执行此分支
{
// …
}
// 条件表达式也为true,但是第一个分支已经执行,
// 所以虽然此分支的条件表达式也为true,但是不会执行
else if( a > 2 )
{
// …
}
else
{
// …
}
当使用并列条件选择语句时,应尽量避免条件范围的重复覆盖,不要让多个条件表达式同时为true,这样可能会造成程序逻辑上的混乱。之前比较v1和v2大小的例子中,会出现三种不同的情形,即v1>v2、v1
int v1, v2;
// 获取用户输入的数字
cin >> v1 >> v2;
if( v1 < v2 ) // 判断v1是否小于v2
{
cout<<" v1 < v2 "<<endl;
}
else if( v1 > v2 ) // 判断v1是否大于v2
{
cout<<" v1 > v2 "<<endl;
}
else // 如果v1既不大于v2,又不小于v2,则v1和v2必然相等
{
cout<<" v1 = v2 "<<endl;
}
通过if语句的并列,我们对各种条件判断的可能结果都进行了相应的处理,没有重复,也没有遗漏。
[解决办法]
LZ结贴吧。