2021-2022-2-第4次单元练习后记//Pintia
- 一个简单的说明
- 本次练习的反思
- 关于源码中read()函数的说明
一个简单的说明
主要以记录题目,分享源码为主
顺带记录做题心路历程
太久没有做题了,手生了,难免犯一些低级错误
最后,顺便对我的后续练习起到一个规划的作用
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()语句。