【例3.10】随机输入一个年份year,判定并输出该年是否为闰年。
- 分析:设变量year存放读入的年份。闰年的条件是:年份能被4整除但不能被100整除,或者能被400整除。
- 表示“年份能被4整除但不能被400整除”的逻辑表达式为
- year%4==0&&year%100!=0
- 表示“年份能被4被400整除”的逻辑表达式为
- year%400==0
- 两个条件构成“或”的关系,逻辑表达式表示如下:
- (year%4==0&&year%100!=0)||(year%400==0)
- 当表达式(year%4==0&&year%100!=0)||(year%400==0)的值为真时,则表示year就是闰年,否则为不是闰年
程序如下:
#include<iostream>
using namespace std;
int main() {
int year;
cin>>year;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
cout<<year<<"是闰年"<<endl;
else
cout<<year<<"不是闰年"<<endl;
return 0;
}
思考:
对于程序中第6行的的逻辑表达式是否有其他的表示方式?
【例3.11】
输入三角形的三条边a,b,c的值,判断能否构成三角形,如果能,请求出三角形的面积?
- 分析:根据数学定理,构成三角形的三条边满足任意两边之和大于第三边的条件,逻辑表达式如下:
- a+b>c&&b+c>a&&a+c>b
- 当表达式a+b>c&&b+c>a&&a+c>b的值为真时,a,b,c能够构成三角形,否则不构成三角形,也可以说成只要有某两边之和小于等于第三边时a,b,c就不能构成三角形,其逻辑表达式如下:
- a+b<=c||b+c<=a||a+c<=b
两边之和大于第三边的程序如下:
#include<iostream>
#include<cmath>
using namespace std;
int main(){
float a,b,c;
float p;
float s;
cin>>a>>b>>c;
if(a+b>c&&a+c>b&&b+c>a){
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
cout<<"三角形的面积为:"<<s<<endl;
}else{
cout<<"不能构成三角形"<<endl;
}
return 0;
}
任意两边之和小于等于第三边不构成三角形,否则构成三角形的程序如下:
#include<iostream>
#include<cmath>
using namespace std;
int main(){
float a,b,c;
float p;
float s;
cin>>a>>b>>c;
if(a+b<=c||a+c<=b||b+c<=a){
cout<<"不能构成三角形"<<endl;
}else{
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
cout<<"三角形的面积为:"<<s<<endl;
}
return 0;
}
思考:
两个程序分别使用逻辑与和逻辑或来解决问题的,那么,逻辑与和逻辑或能不能相互转化呢