PTA 11-15

题目要求:

11.计算平均分

已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均成绩(结果按整型输出)。

输入格式:

本题无输入


输出格式:

按照下列格式输出结果:

math = 87, eng = 72, comp = 93, average = 计算所得的平均成绩

实现代码:

#include <stdio.h>
int main(){
    int m=87,e=72,c=93;
	printf("math = %d, eng = %d, comp = %d, average = %d",m,e,c,(m+e+c)/3);
    return 0;
}

题目要求:

12.日期格式化

世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。

输入格式:

输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。

输出格式:

在一行中按照“yyyy-mm-dd”的格式给出年、月、日。

输入样例:

03-15-2017

输出样例:

2017-03-15

实现代码:

#include <stdio.h>
int main(){
    int year,month,day;
    scanf("%d-%d-%d",&month,&day,&year);
    if(year>=1900&day<32&day>0&month>0&month<13)
        printf("%04d-%02d-%02d",year,month,day);
//%04d,%4d右对齐,宽度为4,左边填充空格,当变量的实际宽度大于4时,输出变量的所有数字;
//%04d与%4d的唯一区别就是左边填充0。
}

题目要求:

13.后天

如果今天是星期三,后天就是星期五;如果今天是星期六,后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天,请你输出那天的“后天”是星期几。

输入格式:

输入第一行给出一个正整数D(1 ≤ D ≤ 7),代表星期里的某一天。

输出格式:

在一行中输出D天的后天是星期几。

输入样例:

3

输出样例:

5

实现代码:

#include <stdio.h>
int main(){
    int day;
    scanf("%d",&day);
    if(day>0&day<6)
        printf("%d",day+2);
    else 
    {
        printf("%d",(day+2)%7);
    }
    
}

题目要求:

14.然后是几点

有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。

读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。

输入格式:

输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。

输出格式:

输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

输入样例:

1120 110

输出样例:

1310

实现代码:

#include <stdio.h>
int main(){
    int old_time,elapse,hour,minute,sum,new_time;
    scanf("%d %d",&old_time,&elapse);
    hour=old_time/100;//取时间前两位
    minute=old_time%100;//取时间后两位
    sum=hour*60+minute;//总分钟
    sum=sum+elapse;//加上流逝时间
    hour=sum/60;
    minute=sum%60;
    new_time=hour*100+minute;//化回题目要求形式
    if(new_time>=0)
        printf("%03d",new_time);
    else
        printf("%d",2360+new_time);
    return 0;
}
//思路:时间和分钟一起难以计算,全部化成分钟;用/100取前两位,%100取后两位

题目要求:

15.BCD解密

BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!

现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。

输入格式:

输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。

输出格式:

输出对应的十进制数。

输入样例:

18

输出样例:

12

实现代码: 

//其实就是10进制转16进制...
#include <stdio.h>
int main(){
    int f,t,ge,shi;
    scanf("%d",&f);
    ge=f%16;
    shi=f/16;
    t=shi*10+ge;
    printf("%d",t);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值