0
点赞
收藏
分享

微信扫一扫

2021-2022-2-第4次单元练习后记

以沫的窝 2022-03-25 阅读 31
c语言c++

2021-2022-2-第4次单元练习后记//Pintia

一个简单的说明

主要以记录题目,分享源码为主
顺带记录做题心路历程
太久没有做题了,手生了,难免犯一些低级错误
最后,顺便对我的后续练习起到一个规划的作用

7-1 计算油费 (10 分)

题面

现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。

本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。

输入格式:

输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。

输出格式:

在一行中输出应付款额,保留小数点后2位。

输入样例:

40 97 m

输出样例:

301.34

C++源码

#include<cstdio>

inline int read(){
	int f=1,s=0;
	char k=getchar();
	while(k>'9'||k<'0'){if(k=='-')f=-1,k=getchar();}
	while(k>='0'&&k<='9'){s=(s<<3)+(s<<1)+k-'0';k=getchar();}
	return f*s;
}

double couts;
int a,b;
char c;

int main(){
	a=read(),b=read();
	scanf("%c",&c);
//	putchar(c);
	couts=0;
	if(b==90)couts+=(6.95*a);
	if(b==93)couts+=(7.44*a);
	if(b==97)couts+=(7.93*a);
	if(c=='m')couts*=0.95;
	if(c=='e')couts*=0.97;
	printf("%.2lf",couts);
	return 0;
}

7-2 邮资计算 (10 分)

题面

根据邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000克以内(包括1000克), 基本费8元。超过1000克的部分,每500克加收超重费4元,不足500克部分按500克计算;如果用户选择加急,多收5元。

输入格式:

输入一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加急。如果字符是y,说明选择加急;如果字符是n,说明不加急。

输出格式:

输出一行,包含一个整数,表示邮费。

输入样例:

1200 y

输出样例:

17

C++源码

#include<cstdio>

inline int read(){
	int f=1,s=0;
	char k=getchar();
	while(k>'9'||k<'0'){if(k=='-')f=-1,k=getchar();}
	while(k>='0'&&k<='9'){s=(s<<3)+(s<<1)+k-'0';k=getchar();}
	return f*s;
}

int a,ans;
char c;

int main(){
	ans=0;
	a=read();
	scanf("%c",&c);
	if(c=='y')ans+=5;\
	ans+=8;
	if(a>1000){
		ans+=((a-1000)/500)*4;
		if(((a-1000)%500)!=0)ans+=4;
	}
	printf("%d",ans);
	return 0;
}

7-3 出租车计价 (10 分)

题面

本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。

输入格式:

输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。

输出格式:

在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。

输入样例1:

2.6 2

输出样例1:

10

输入样例2:

5.1 4

输出样例2:

14

输入样例3:

12.5 9

输出样例3:

34

C++源码

#include<cstdio>
#include<cmath>

double b,ans;
int a;
char c;

int main(){
	ans=0;
	scanf("%lf%d",&b,&a);
	if(a>=5)ans+=((a/5)*2);
	ans+=10;
	if(abs(b)>3&&abs(b)<=10)ans+=(b-3)*2;
	if(abs(b)>10)ans+=(14+(b-10)*3);
	printf("%.0lf",ans);
	return 0;
}

7-4 计算个人所得税 (10 分)

题面

假设个人所得税为:税率×(工资−1600)。请编写程序计算应缴的所得税,其中税率定义为:
当工资不超过1600时,税率为0;
当工资在区间(1600, 2500]时,税率为5%;
当工资在区间(2500, 3500]时,税率为10%;
当工资在区间(3500, 4500]时,税率为15%;
当工资超过4500时,税率为20%。

输入格式:

输入在一行中给出非负工资。

输出格式:

在一行输出个人所得税,精确到小数点后2位。

输入样例1:

1600

输出样例1:

0.00

输入样例2:

1601

输出样例2:

0.05

输入样例3:

3000

输出样例3:

140.00

输入样例4:

4000

输出样例4:

360.00

输入样例5:

5000

输出样例5:

680.00

C++源码

#include<cstdio>
#include<cmath>

inline int read(){
	int f=1,s=0;
	char k=getchar();
	while(k>'9'||k<'0'){if(k=='-')f=-1,k=getchar();}
	while(k>='0'&&k<='9'){s=(s<<3)+(s<<1)+k-'0';k=getchar();}
	return f*s;
}

double ans;
int a;
char c;

int main(){
	a=read();
	if(a<=1600)ans=0;
	else if(a>1600&&a<=2500)ans=(a-1600)*0.05;
	else if(a>2500&&a<=3500)ans=(a-1600)*0.1;
	else if(a>3500&&a<=4500)ans=(a-1600)*0.15;
	else if(a>4500)ans=(a-1600)*0.2;
	printf("%.2lf",ans);
	return 0;
}

7-5 高速公路超速处罚 (10 分)

题面

按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

输入格式:

输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

输出格式:

在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。

输入样例1:

65 60

输出样例1:

OK

输入样例2:

110 100

输出样例2:

Exceed 10%. Ticket 200

输入样例3:

200 120

输出样例3:

Exceed 67%. License Revoked

C++源码

#include<cstdio>
#include<cmath>

double ans,a,b;

int main(){
	scanf("%lf%lf",&a,&b);
	ans=((a-b)/b)*100.0;
	if(abs(ans)<10)printf("OK");
	else if(abs(ans)>=10&&abs(ans)<50)printf("Exceed %.0lf%%. Ticket 200",ans);
	else if(abs(ans)>=50)printf("Exceed %.0lf%%. License Revoked",ans);
	return 0;
}

7-6 成绩转换 (10 分)

题面

本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。

输入格式:

输入在一行中给出一个整数的百分制成绩。

输出格式:

在一行中输出对应的五分制成绩。

输入样例:

90

输出样例:

A

C++源码

#include<cstdio>
#include<cmath>

inline int read(){
	int f=1,s=0;
	char k=getchar();
	while(k>'9'||k<'0'){if(k=='-')f=-1,k=getchar();}
	while(k>='0'&&k<='9'){s=(s<<3)+(s<<1)+k-'0';k=getchar();}
	return f*s;
}

int ins;

int main(){
	ins=read();
	if(ins>=90)putchar('A');
	else if(ins>=80&&ins<90)putchar('B');
	else if(ins>=70&&ins<80)putchar('C');
	else if(ins>=60&&ins<70)putchar('D');
	else putchar('E');
	return 0;
}

7-7 计算天数 (10 分)

题面

本题要求编写程序计算某年某月某日是该年中的第几天。

输入格式:

输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。

输出格式:

在一行输出日期是该年中的第几天。

输入样例1:

2009/03/02

输出样例1:

61

输入样例2:

2000/03/02

输出样例2:

62
鸣谢湖北汽车工业学院袁科老师、用户潘明智补充数据!

C++源码

#include<cstdio>
#include<cmath>

int mth[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,d,ans;
bool yun;

int main(){
	ans=0,yun=0;
	scanf("%d/%d/%d",&y,&m,&d);
	if((y%400==0)||((y%4==0)&&(y%100!=0)))yun=true;
	for(int i=1;i<m;++i)ans+=mth[i];
	if((m>2)&&yun)ans+=1;
	ans+=d;
	printf("%d",ans);
	return 0;
}

7-8 简单四则运算 (10 分)

题面

读入一个实数、一个操作符(仅限于+ - * /)、一个实数,求该表达式的值。若除数为0,输出“The divisor is 0.”

输入格式:

读入操作数、操作符、操作数

输出格式:

输出表达式的值(保留两位小数)。若除数为0,输出“The divisor is 0.”

输入样例:

4/8

输出样例:

0.50

C++源码

#include<cstdio>
#include<cmath>

double a,b,ans;
char c;

int main(){
	ans=0;
	scanf("%lf%c%lf",&a,&c,&b);
	if(c=='+')ans=a+b;
	else if(c=='-')ans=a-b;
	else if(c=='*')ans=a*b;
	else if(c=='/'){
		if(abs(b)==0){
			printf("The divisor is 0.");
			return 0;
		}
		else ans=a/b;
	}
	printf("%.2lf",ans);
	return 0;
}

本次练习的反思

审题问题,粗心问题,态度问题。

关于源码中read()函数的说明

read()函数为自行定义的一个快速读入整数的函数,不熟悉快读的朋友可以自行改为scanf()语句。

举报

相关推荐

0 条评论