第三章程序的选择执行

3.1if语句和关系表达式

例3.1快递业务

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
	int a,b,n;
	long long s;
	cin>>a>>b>>c;
	s=((long long)a+b)*n/2;
	cout<<s<<endl;
	return 0;
}

3.1.1if语句格式

格式1

if(表达式) 语句;

功能:当条件成立即表达式为真时,执行“语句”,否则执行if语句下方的语句。

例3.2判断负数

#include<iostream>
using namespace std;
int main()
{
	int n;
	cout<<"n=";
	cin>>n;
	if (n<0) cout<<"注意负数!"<<endl; 
	cout<<n<<endl;
	return 0;
} 

格式2

if(表达式) 语句1;

else 语句;

例3.3判定数的奇偶

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	if (n%2==0) cout<<n<<"是偶数"<<endl; 
	else cout<<n<<"是奇数"<<endl; 
	return 0;
} 

例3.4招收社员
方法一

#include<iostream>
using namespace std;
int main()
{
	int m;
	cout<<"m=";
	cin>>m;
	if (n>=80) cout<<"非常欢迎你参加音乐社"<<endl; 
	else cout<<"欢迎你参加音乐社"<<endl; 
	return 0;
} 

方法二

#include<iostream>
using namespace std;
int main()
{
	int m;
	cout<<"m=";
	cin>>m;
	if (m>=80) cout<<"非常"; 
	else cout<<"欢迎你参加音乐社"<<endl; 
	return 0;
} 

3.1.2关系表达式

关系运算符

== != > < >= <=

一般形式 表达式 关系运算符 表达式

表达式可以是算术表达式,也可以是关系表达式,逻辑表达式,赋值表达式,字符表达式。

例3.5关系表达式计算

例3.6购买计划

#include<iostream>
using namespace std;
int main()
{
	int cup;
	float a,b;
	cout<<"cup=";
	cin>>cup;
	a=cup*3*0.88;
	b=(cup-cup/9)*3;
	if (a<b) cout<<"大洋商城"<<endl;
	else cout<<"百汇商厦"<<endl;
	return 0;
} 

例3.7种树

#include<iostream>
using namespace std;
int main()
{
	int money;
	cout<<"money=";
	cin>>money;
	if (monkey<100000) cout<<"梨树="<<money/500<<"棵"<<endl;
	else 
	{
		cout<<"梨树="<<floor(money*0.3/500)<<"棵"<<endl;
		cout<<"桃树="<<floor(money*0.5/600)<<"棵"<<endl;
		cout<<"苹果树="<<floor(money*0.2/800)<<"棵"<<endl;	
	}
	return 0;
} 

复合语句:用{}括起来,将几个语句括起来的语句组合称为复合语句

3.2逻辑表达式和条件表达式

例3.8评先进

#include<iostream>
using namespace std;
int main()
{
	int cmark,mmark;
	cin>>cmark>>mmark;
	if (cmark>=75&&mmark>=85) cout<<"有资格"<<endl;
	else cout<<"无资格"<<endl; 
	return 0;
} 

3.2.1逻辑运算符

&& || !

逻辑运算符中&&和||低于关系运算符,!高于算术运算符。

将两个关系表达式用逻辑运算符连接起来的表达式,称为逻辑表达式,逻辑表达式的一般可以表示为

表达式 逻辑运算符 表达式

逻辑表达式的值是一个逻辑值。在c++中,整数数据可以出现在逻辑表达式中,在进行逻辑运算时,根据整型数据的值是0或非0,把它作为逻辑值“假”或“真”,然后参加逻辑运算。

逻辑非

逻辑与

逻辑或

例3.9写出条件表达式

例3.10判断闰年

#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;
} 

例3.11三角形面积
方法一

#include<iostream>
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;
	}
	else
	cout<<"不能构成三角形"; 
	return 0;
} 

方法二

#include<iostream>
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<<"不能构成三角形"; 
	else
	{
		p=(a+b+c)/2;
		s=sqrt(p*(p-a)*(p-b)*(p-c));
		cout<<"三角面积为:"<<s;
	}
	return 0;
} 

3.2.2逻辑变量

bool标识符

例3.12阅读程序写程序结果

#include<iostream>
using namespace std;
int main()
{
	bool found,flag=false;
	found=true;
	cout<<flag<<" "<<found<<endl;
	flag=5;
	found=0;
	cout<<flag<<" "<<found<<endl;
	return 0;
} 

3.2.3条件表达式

格式<表达式1>?<表达式2>:<表达式3>

条件表达式要求有3个操作对象,称为三目(元)运算符,它是c++中唯一个三目运算符。

条件表达式的运算规则

(1)计算表达式1的值

(2)若表达式1的值为真(或非0),则只计算表达之2,并将其结果作为整个表达式的值

(3)反之,则只计算表达式3,并将其结果作为整个表达式的值。

例3.13解释下列条件表达的作用

例3.14判断字母大小写,进行相应操作

#include<iostream>
using namespace std;
int main()
{
	char ch;
	cin>>ch;
	ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
	cout<<ch<<endl;
	return 0;
} 

3.3嵌套if语句

例3.15输入年份,输出该年是否是闰年

#include<iostream>
using namespace std;
int main()
{
	int year;
	cin>>year;
	if (year%400==0) cout<<year<<"是闰年"<<endl;
	else 
	if(year%4==0)
	  if (year%100!=0) cout<<year<<"是闰年"<<endl;
	  else cout<<year<<"不是闰年"<<endl;
	 else cout<<year<<"不是闰年"<<endl; 
	return 0;
} 

嵌套if语句是指在if…else语句分支中还存在if…else语句。

在使用嵌套if语句时,需要特别注意if与else的配对关系,else总是与它上面最近的,且未配对的if配对。

例3.16分析程序的区别
程序1

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	if (n%3==0) 
	if (n%5==0) cout<<n<<"是15的倍数"<<endl;
	else cout<<n<<"是3的倍数但不是5的倍数"<<endl;
	cout<<"结束"<<endl; 
	return 0;
} 

程序2

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	if (n%3==0) 
	{
		if (n%5==0) cout<<n<<"是15的倍数"<<endl;	
	}
	else cout<<n<<"不是3的倍数"<<endl;
	cout<<"结束"<<endl; 
	return 0;
} 

3.3.2嵌套if语句的应用

例3.17商场优惠活动

#include<iostream>
using namespace std;
int main()
{
	float price,discount,amount;
	int count;
	cout<<"输入单价:"<<endl;
	cin>>price;
	cout<<"输入购买件数:"<<endl;
	cin>>count;
	if (cout<5) discount=1;
	else if(count<10) discount=0.9;
	else discount=0.8;
	amount=price*count*discount;
	cout<<"单价:"<<price<<" 购买件数:"<<count<<" 折扣:"<<discount<<" 总价:"<<amount<<endl;
	return 0;
} 

例3.18三个数中的最大数
方法一

#include<iostream>
using namespace std;
int main()
{
	float a,b,c,maxn;
	cout<<"输入三个数:";
	cin>>a>>b>>c;
	if (a>b&&a>c) maxn=a;
	else if(b>a&&b>c) maxn=b;
	else maxn=c;
	cout<<"最大数为:"<<maxn<<endl;
	return 0;
} 

方法二

#include<iostream>
using namespace std;
int main()
{
	float a,b,c,maxn;
	cout<<"输入三个数:";
	cin>>a>>b>>c;
	maxn=a;
	if(b>maxn) maxn=b;
	if (c>maxn) maxn=c;
	cout<<"最大数为:"<<maxn<<endl;
	return 0;
} 

例3.19三个数从大到小输出
方法一

#include<iostream>
using namespace std;
int main()
{
	float a,b,c;
	cin>>a>>b>>c;
	if (a>b)
	  if(b>c)
	     cout<<a<<","<<b<<","<<c<<endl;
	  else
	     if(a>c)
		   cout<<a<<","<<c<<","<<b<<endl;
		 else
		 cout<<c<<","<<a<<","<<b<<endl;
	else
	if (b>c)
	if (a>c)
	   cout<<b<<","<<a<<","<<c<<endl;
	else
	   cout<<b<<","<<c<<","<<a<<endl;
	else
	   cout<<c<<","<<b<<","<<a<<endl; 
	return 0;
} 

 方法二

#include<iostream>
using namespace std;
int main()
{
	float a,b,c,temp;
	cin>>a>>b>>c;
	if (a<b) {
		temp=a;a=b;b=temp;
	}
	if (a<c){
		temp=a;a=c;c=temp;
	}
	if (b<c){
		temp=b;b=c;c=temp;
	}
	cout<<a<<" "<<b<<" "<<c<<endl;
	return 0;
} 

3.4switch语句

例3.20简单的计算器

#include<iostream>
using namespace std;
int main()
{
	float num1,num2;
	char op;
	cin>>num1>>num2>>op;
	switch(op)
	{
		case'+':cout<<num1<<op<<num2<<"="<<num1+num2;break;
		case'-':cout<<num1<<op<<num2<<"="<<num1-num2;break;
		case'*':cout<<num1<<op<<num2<<"="<<num1*num2;break;
		case'/':if (num2!=0)
		cout<<num1<<op<<num2<<"="<<num1+num2;
		else cout<<"Divided by zero"<<endl;break;
		defaut:cout<<"Invalid operator";
	}
	return 0;
} 

3.4.1switch语句格式

switch(表达式)

{

   case 常量表达1:语句1;break;

   case 常量表达2:语句2;break;

 

   case 常量表达n:语句n;break;

   default 语句n+1

}

例3.21阅读下面程序说明程序的区别
程序1

#include<iostream>
using namespace std;
int main()
{
	int n;
	cout<<"n=";
	cin>>n;
	switch(n)
	{
		case 1:cout<<"f=n";break;
		case 2:cout<<"f=n*n";break;
		case 3:cout<<"f=n*n*n";break;
		defaut:cout<<"f=0";
	}
	return 0;
} 

程序2

#include<iostream>
using namespace std;
int main()
{
	int n;
	cout<<"n=";
	cin>>n;
	switch(n)
	{
		case 1:cout<<"f=n";
		case 2:cout<<"f=n*n";
		case 3:cout<<"f=n*n*n";
		defaut:cout<<"f=0";
	}
	return 0;
} 

例3.22写程序结果

#include<iostream>
using namespace std;
int main()
{
	char score;
	cout<<"score=";
	cin>>score;
	switch(score)
	{
		case 'A':case 'a': cout<<"excellent";break;
		case 'B':case 'b': cout<<"good";break;
		defaut:cout<<"general";
	}
	return 0;
} 

例3.23恩格尔系数
方法一

#include<cstdio>
using namespace std;
int main()
{
	float n;
	float x,y;
	scanf("%f %f",&x,&y);
	n=100*x/y;
	if (n>=60) printf("贫穷\n");
	else if(n>=50) printf("温饱\n");
	else if (n>=40) printf("小康\n");
	else if (n>=30) printf("相对富裕\n");
	else if (n>=20) printf("富裕\n");
	else printf("极其富裕\n");
	return 0; 
}

方法二

#include<cstdio>
using namespace std;
int main()
{
	int n;
	float x,y;
	scanf("%f %f",&x,&y);
	n=100*x/y+0.5;
	switch(n/10)
	{
		case 0:case 1:printf("极其富裕\n");break;
		case 2:printf("富裕\n");break;
		case 3:printf("相对富裕\n");break;
		case 4:printf("小康\n");break;
		case 5:printf("温饱\n");break;
		default:printf("贫穷\n"); 
	}
	return 0; 
}

 

例3.24春节来临

#include<iostream>
using namespace std;
int main()
{
	int x,a,b,c,d;
	cin>>x;
	a=x/6;
	switch(x%6)
	{
		case 0:b=0,c=0,d=0;break;
		case 1:a=a-2,b=1,c=0,d=0;break;
		case 2:a=a-3,b=0,c=0,d=1;break;
		case 3:a=a-2,b=0,c=1,d=0;break;
		case 4:a=a-4,b=1,c=1,d=0;break;
		case 5:a=a-5,b=0,c=1,d=1;break;
	}
	cout<<"6元:"<<a<<" 13元:"<<b<<" 15元:"<<c<<" 20元:"<<d<<endl;
	return 0; 
}

3.5分支结构程序设计实例

例3.25劳动课一元两次方程的解

#include<iostream>
using namespace std;
int main()
{
	double l,s,x1,x2;
	double d;
	cin>>l>>s;
	d=l*1/4-4*s;
	if (d<0)
		cout<<"找不到这样的矩形"<<endl;
	else
	{
		if (d==0)
			x1=x2=l/4;
		else
		{
			x1=(l/2+sqrt(d))/2;
			x2=(l/2-sqrt(d))/2;
		}
		cout<<"矩形的长和宽分别为:"<<x1<<","<<x2<<endl;
	}
	return 0; 
}

例3.26苹果
方法一

#include<iostream>
using namespace std;
int main()
{
	int n,x,y,t,rest;
	cin>>n>>x>>y;
	t=cell((double)y/x);
	if (t<n) rest=n-t;
	else rest=0;
	cout<<rest<<endl;
	return 0; 
}

方法二

#include<iostream>
using namespace std;
int main()
{
	int n,x,y,t,rest;
	cin>>n>>x>>y;
	if (y%x==0) rest=y/x>=n?0:n-y;
	else rest=y/t>=n-1?0:(n-1-y)/x;
	cout<<rest<<endl;
	return 0; 
}

例3.27大学校园
方法一

#include<iostream>
using namespace std;
int main()
{
	double dis;
	double t1,t2;
	cin>>dis;
	t1=dis/3+27+23;
	t2=dis/1.2;
	if (t1>t2)
	cout<<"walk"<<endl;
	else if(t1==t2)
	cout<<"The same"<<endl;
	else 
	cout<<"Bike"<<endl;
	return 0; 
}

方法二

#include<iostream>
using namespace std;
int main()
{
	double dis;
	double t1,t2;
	cin>>dis;
	t1=dis*2+(27+23)*6;
	t2=dis*5;
	if (t1>t2)
	cout<<"walk"<<endl;
	else if(t1==t2)
	cout<<"The same"<<endl;
	else 
	cout<<"Bike"<<endl;
	return 0; 
}

例3.28分段计费

 

posted @ 2022-12-11 22:38  心悟&&星际  阅读(99)  评论(0)    收藏  举报