学习c语言准备复试上机的第一天。
为了适应考试环境,题目集源于PTA 平台,代码均是在PTA平台上练习的。
1.厘米换算英尺英寸
如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。
代码如下
#include <stdio.h>
int main()
{
int CM;
scanf("%d",&CM);
int foot;
foot=CM/30.48;
int inch;
inch=12*(CM/30.48-foot);
printf("%d %d\n",foot,inch);
return 0;
}
2. 然后是几点
有时候人们用四位数字表示一个时间,比如 1106
表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530
;0 点 30 分表示为 030
。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。
#include <stdio.h>
int main(){
int start, minute, total, time, end;
scanf("%d %d", &start, &minute);
if(minute>=0){
total= start / 100 * 60 + start % 100;
time = total + minute;
end = time / 60 *100 + time % 60;
}else{
minute=~minute+1;
total= start / 100 * 60 + start % 100;
time = total - minute;
end = time / 60 *100 + time % 60;
}
if(end/100==0){
printf("00%d",end);
}else printf("%d",end);
return 0;
}
其实这道题是很简单的一道代码题,但是有很多不同的状况,我最开始写的时候就没有注意到负数和进位的情况,而且写的很繁杂,之后我在网上找到了一种很方便的思路,把时间直接转化为分钟计算,最后再换算回来就方便很多。
3.逆序的三位数 程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
#include<stdio.h>
int main(){
int num,a,b,c,end;
scanf("%d",&num);
a=num/100;
b=num%100/10;
c=num%10;
end=(c*100)+(b*10)+a;
printf("%d",end);
}
4. BCD解密
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!
现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。
#include<stdio.h>
int main(){
int num;
scanf("%d",&num);
int a;
a=num/16*10+num%16;
printf("%d",a);
return 0;
}
最开始被bcd数绕了很久,不是很理解题意,之后看了网上的讲解发现可以直接转成16进制,题也说了进制中不会出现字母。
5.表格输出
本题要求编写程序,按照规定格式输出表格。
#include<stdio.h>
int main(){
printf("------------------------------------\n");
printf("Province Area(km2) Pop.(10K)\n");
printf("------------------------------------\n");
printf("Anhui 139600.00 6461.00\n");
printf("Beijing 16410.54 1180.70\n");
printf("Chongqing 82400.00 3144.23\n");
printf("Shanghai 6340.50 1360.26\n");
printf("Zhejiang 101800.00 4894.00\n");
printf("------------------------------------\n");
return 0;
}
感觉隔一段时间没有敲代码好像迟钝了一点,有些题目中明显出现多种情况但是也没有看出来,还是要仔细一点,明天继续加油