当行走到十字路口时,是直行还是右转或左转,需要根据目的地的方向进行选择;在程序设计中,有时并不是按照语句的书写顺序自上而下地执行,而是根据设定的条件选择所执行的语句,称为选择结构。
C++语言中实现选择的语句有if语句和情况语句。
一、if语句的格式
格式1:
if (条件表达式)
语句;
功能:如果条件表达式的值为真,即条件成立,语句将被执行;否则语句将被忽略(不被执行),程序将按顺序从整个if语句之后的下一条语句继续执行。
例1:读入一个数,若这个数大于1并且小于100,则输出yes。
#include<iostream>
using namespace std;
int main()
{ int a;
cin>>a;
if ((a>1)&&(a<100))
cout<<"yes"<<endl;
return 0;
}
例2:读入一个数a,若a为偶数在屏幕上输出yes。
#include<iostream>
using namespace std;
int main()
{ int a;
cin>>a;
if (a%2==0)
cout<<"yes"<<endl;
return 0;
}
思考:若题目改为:读入一个数a,若a为偶数在屏幕上输出yes;若a为奇数在屏幕上输出no。应该如何修改程序?
格式2:
if (条件表达式)
语句1;
else
语句2;
功能:如果条件表达式的值为真,即条件成立,则执行语句1,执行完语句1后继续执行整个if语句的后继语句;如果条件表达式的值为假,即条件不成立,那么跳过语句1选择执行语句2,执行完语句2后继续执行整个if语句的后继语句;也就是说根据条件表达式的结果,选择语句1或语句2中的一个执行,执行完以后,整个if语句就算执行完了。
注意:若语句1或语句2由多个句子构成,必须把这些句子括在一对花括号{}内;两条或两条以上的语句用一对{}括起来叫做复合语句。
例3:根据输入的成绩,判断是否通过了考试。
#include<iostream>
using namespace std;
int main()
{ int a;
cin>>a;
if (a>59)
cout<<"pass!"<<endl;
else
cout<<"sorry!"<<endl;
return 0;
}
二、逻辑运算及布尔表达式
1、逻辑运算
C++提供了三种逻辑运算符:
&& 逻辑与:双目运算符,具有左结合性。
|| 逻辑或:双目运算符,具有左结合性。
! 逻辑非:单目运算符,具有右结合性。
运算符的优先级由高到低为:!(非)、算术运算符、关系运算符、&&和||、赋值运算符。
即:
a>b && c>d 等价于 (a>b) && (c>d)
!b==c||d<a 等价于 ((!b)==c)||(d<a)
a+b>c && x+y<b 等价于 ((a+b)>c)&&((x+y)<b)
2、逻辑运算的值
逻辑运算的值有“真”和“假”两种,用 1 和 0 来表示;但在判断一个量是否为真时,以非0代表“真”。其求值规则如下:
与运算&&:参与运算的两个量都为真时,结果才为真,否则为假。
或运算||:参与运算的两个量只要有一个为真,结果就为真;两个量都为假时,结果为假。
非运算!:参与运算量为真时,结果为假;参与运算量为假时,结果为真。
三、if语句的嵌套
if语句中又包含if语句称为if语句的嵌套。当出现if语句嵌套时,不管书写格式如何,else都将与它前面最靠近的if
(未曾配对的)配对,构成一条完整的if语句。如:
1、
if (表达式1)
if (表达式2)
语句1;
else 语句2;
2、
if (表达式1) {if (表达式2) 语句1;} else 语句3;
3、
if (表达式1) 语句1;
else if (表达式2) 语句2;
else 语句3;
4、
if (表达式1) 语句1;
else if (表达式2) 语句2;
else if (表达式3) 语句3;
else 语句4;
注意:在第2条语句中,else不是同它前面复合语句中的if配对,而是与处于同一层次的最前面的if配对。
例4:某学校规定90分以上(含90分),等级为A,80-89分为B,60-79分为C,60分以下为D。输入某同学的成绩,输出其等级。
#include<iostream>
using namespace std;
int main()
{ float s;
char d;
cin>>s;
if (s>=90) d='A';
else if (s>=80) d='B';
else if (s>=60) d='C';
else d='D';
cout<<d<<endl;
return 0;
}
例5:输入某一年份,判断是否是闰年。
#include<iostream>
using namespace std;
int main()
{ int y,l;
cin>>y;
if ((y%400==0) || ((y%4==0)&&(y%100!=0))) l=1;
else l=0;
if (l) cout<<"This is a leap year."<<endl;
else cout<<"This is not a leap year."<<endl;
return 0;
}
四、三目运算符
C++有一个常用来代替if语句的操作符,这个操作符被称为三目运算符(?:),它是C++中唯一一个需要3个操作数的操作符。其通用格式如下:
b?a:c
如果b为真,则整个表达式的值为a;否则,整个表达式的值为c。
例如:
x=5>3? 10:12; //5>3为真,所以x=10
x=3==9? 25:18; //3==9为假,所以x=18
三目运算符返回的是一个值,可以将其赋给变量或者将其放到一个更大的表达式中。如:
x=a>b? (c>d? e:f):g;
相当于:
if (a>b)
{ if (c>d) x=e;
else x=f;
}
else x=g;
例6:输入两个数,输出其中较大的那个。
#include<iostream>
using namespace std;
int main()
{ int a,b;
cin>>a>>b;
int c=a>b? a:b;
cout<<c<<endl;
return 0;
}
五、作业
1、zerojudge:
基础题:a003、a799、d063、d064、d067、d071、d068
if语句的嵌套:d058、d065、a053
思考题:d050、d060、d066、d073、d277
2、输入两门课程的考试成绩,如果都及格就显示PASS,否则显示FAIL。
3、输入三个整数,按从小到大的顺序输出。
4、输入年、月,输出该月的天数。