i信息学奥赛

加入QQ群:1025629106,或关注微信公众号:i信息学奥赛,获取更多学习资源。

导航

if语句

Posted on 2016-12-10 11:55  shnoip  阅读(758)  评论(0编辑  收藏  举报

当行走到十字路口时,是直行还是右转或左转,需要根据目的地的方向进行选择;在程序设计中,有时并不是按照语句的书写顺序自上而下地执行,而是根据设定的条件选择所执行的语句,称为选择结构。
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、输入年、月,输出该月的天数。