【语法篇】2、选择结构(一)
一、选择结构
程序就像人生一样,很多时候是顺其自然,按照一定顺序去进行的,这就类似于程序中的顺序结构,从左往右,从上到下。但是在人的一生中,总会遇到一些分岔路,让我们去做出选择和决定,程序也是也有类似的情况,我们把这种结构,称之为『选择结构』。
选择结构
这些分岔路,我们在程序中叫它分支,显然不同的分支可能会带来有不同的结果。就像我们由初中到高中一样,满足一定条件,就可以去到A校,不能满足就只能去B校,甚至没有其他选择了。
if( 布尔表达式 ) {
语块A; // 可以有多个语句
}
else { // else部分可以没有的
语块B; // 可以有多个语句
}
二、案例解析
1.判断奇偶数
输入一个整数,判断它是否为偶数,如果是,则输出“yes”,否则输出“no”。
这里很显然,关键就在于布尔表达式,判断是够是偶数,我们往往用能否被2整除来判定,如果能被2整数,即对2求余,余数是0,则为偶数,否则是奇数。假设这个整数是a,那么布尔表达式就可以写成 a%2 == 0 。假如这个条件是ture,那么就输出yes,否则输出 no。
#include <iostream>
using namespace std;
int main(){
int a; // 定义一个整型变量a
cin >> a; // 输入一个整数
if(a%2 == 0){ // 如果能被2整除
cout << "yes"; // 那么输出yes
}
else{ // 否则,即不能被2整除 a%2 != 0
cout << "no"; // 输出no
}
return 0;
}
2. 输出大小数
由键盘输入两个数a,b,将大数存于a中,小数存于b中,再输出变量a,b的值。
这里并没有说明这两个数是整数还是浮点数,所以为了全面考虑,我们选择浮点型double比较合适。显然这里的重点在于判断a,b两个数,谁比较大,先输出大的数,再输出小的数。我们很容易想到,再定义两个变量c、d,通过比较,我们把大的数赋值给c,小的数赋值给d,最后输出c,d即可。
#include <iostream>
using namespace std;
int main(){
double a, b, c, d;
cin >> a >> b;
if(a>b){
c = a;
d = b;
}
else{
c = b;
d = a;
}
cout << c << " " << d;
return 0;
}
上面的方法,我们是直接借助两个变量来实现,其实我们交换两个变量的值,只借助一个变量也可以很容易实现。我们可以把这个交换想象成是这样一件事情:两个瓶子A,B里,分别装着酱油和水,现在要将酱油和水相互换一个瓶子来装,我们可以借助于另外一个空瓶子C。方法很简单,我们只需要先将A里面的酱油倒入到C中,这时A变空了;然后再将B中的水倒入到A中,这时B空了;最后将C中的酱油倒入到A中,这样就可以实现A、B里面的东西互换了。其实我们的变量就相当于一个瓶子,一个容器,里面可以装东西,瓶子里装的东西我们可以看成是变量的值,往瓶子里倒入东西,可以看成是赋值给变量。这样利用三个变量实现两个变量的值进行交换的方法我们称之为『三变量交换法』,这是非常常用的方法。当然啦,有兴趣的同学可以再探究一下,不用三变量,只用两变量,能否交换它们的值呢?答案肯定是可以的,留待同学们课后去探究。
下面我们用『三变量交换法』来实现。
#include <iostream>
using namespace std;
int main(){
double a, b, c;
cin >> a >> b;
if(a<b){ // 只有当a<b时才需要交换,其他情况都不需要交换
c = a; // a的值被存起来了,下一步可以被覆盖
a = b; // b的值被存起来了,下一步可以被覆盖
b = c; // a,b的值进行了交换
}
cout << a << " " << b;
return 0;
}
从上面的案例,我们也可以看到,if/else中,其中else这个分支是可以省略的,同样其实if后面的分支也是可以省略的。
不完整的条件语句 if ( 布尔表达式) {
语块 A;
}
-------------------------------------------------------
if (布尔表达式)
else{
语块A;
}
三、练习
1、输入一个数,如果该数可以被3整除或者可以被5整除,则输出“YES”,否则输出“NO”。
2、输入一个年份,判断是不是一个闰年,如果是闰年,则输出“leap year”,否则输出“nonleap year”。(注意闰年判定方法是“能被4整除且不能被100整除,或者能被400整除”)
3、某超市举行购物优惠活动:所购物品不超过100元时,按九折付款,如超过100元,超过部分按六折收费。请你编一程序完成超市自动计费的工作。输入只有一个数M,表示购物的款数。输出打折后的款数。(如输入120,输出102)
4、老张有x元钱,打算存入银行两年。可以有两种储蓄方法:一种是存两年,年利率是4.50%;一种是先存一年,年利率是3.87%,到期时再把本金和税后利息取出来合在一起,再存一年。老张选择哪种储蓄方法得到的利息多?请编程,由键盘输入x,如果是第一种方法好,输出1,若是第二种方法好,则输出2。