
🌏个人博客主页:意疏-CSDN博客
希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~
阅读指南:
开篇说明
本文继续介绍浙江大学PTA平台的经典代码,第6至第10题。
题目六、混合类型数据格式化输入
本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。
输入格式:
输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。
输出格式:
在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。
输入样例:
2.12 88 c 4.7
输出样例:
c 88 2.12 4.70
我们首先来看思路:
- 数据类型定义:需定义浮点数(float)存储两个浮点输入,整数(int)存储整数输入,字符(char)存储字符输入。
- 输入读取 :使用
scanf
按顺序读取四个数据,格式控制符为%f %d %c %f
(注意空格分隔,字符无需额外处理空格)。 - 输出格式控制 :按"字符、整数、浮点数1、浮点数2"的顺序输出,其中两个浮点数需用
%.2f
保留两位小数。
- 这是示例代码:
c
#include <stdio.h>
int main() {
float f1, f2;
int i;
char c;
scanf("%f %d %c %f", &f1, &i, &c, &f2);
printf("%c %d %.2f %.2f\n", c, i, f1, f2);
return 0;
}
这是最终结果 :程序正确读取输入并按指定格式输出,浮点数保留两位小数,符合样例预期。
题目七、12-24小时制
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
输入格式:
输入在一行中给出带有中间的:符号(半角的冒号)的24小时制的时间,如12:34表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6表示5点零6分。
输出格式:
在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM或表示下午的字符串PM。如5:6 PM表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:0 PM;而0点被认为是第二天的时间,所以是0:0 AM。
输入样例:
21:11
输出样例:
9:11 PM
我们首先来看思路:
- 时间拆分 :使用
scanf("%d:%d", &hour, &minute)
读取24小时制的小时和分钟(直接处理冒号)。 - 12小时制转换规则 :
- 若小时为0(凌晨):转换为12,标记为AM。
- 若小时在1-11(上午):保持原小时,标记为AM。
- 若小时为12(中午):保持12,标记为PM。
- 若小时在13-23(下午):转换为"小时-12",标记为PM。
- 输出格式:按"转换后的小时:分钟 AM/PM"格式输出,小时和分钟保持输入时的无前置零格式。
- 这是示例代码:
c
#include <stdio.h>
int main() {
int hour, minute;
scanf("%d:%d", &hour, &minute);
int h12;
char *period;
if (hour == 0) {
h12 = 12;
period = "AM";
} else if (hour < 12) {
h12 = hour;
period = "AM";
} else if (hour == 12) {
h12 = 12;
period = "PM";
} else {
h12 = hour - 12;
period = "PM";
}
printf("%d:%d %s\n", h12, minute, period);
return 0;
}
这个代码居然之后14分?我们再来看看
其实hour == 0时h12 = 12 这肯定是错的,因为将h12设置为12,会导致输出12:xx AM,例如输入0:0时,代码会输出12:0 AM,而正确输出应该是0:0 AM。
正确代码:
c
#include <stdio.h>
int main() {
int hour, minute;
scanf("%d:%d", &hour, &minute);
int h12;
char *period;
if (hour == 0) {
h12 = 0; // 0点应转换为0,而非12
period = "AM";
} else if (hour < 12) {
h12 = hour;
period = "AM";
} else if (hour == 12) {
h12 = 12;
period = "PM";
} else {
h12 = hour - 12;
period = "PM";
}
printf("%d:%d %s\n", h12, minute, period);
return 0;
}

这是最终结果:这次果然满分了,程序正确转换24小时制到12小时制,并正确标记AM/PM。
题目八、超速判断
模拟交通警察的雷达测速仪。输入汽车速度,如果速度超出60 mph,则显示"Speeding",否则显示"OK"。
输入格式:
输入在一行中给出1个不超过500的非负整数,即雷达测到的车速。
输出格式:
在一行中输出测速仪显示结果,格式为:Speed: V - S,其中V是车速,S或者是Speeding、或者是OK。
输入样例1:
40
输出样例1:
Speed: 40 - OK
输入样例2:
75
输出样例2:
Speed: 75 - Speeding
我们首先来看思路:
- 输入读取:读取一个非负整数表示车速。
- 判断逻辑:若车速>60,则结果为"Speeding";否则为"OK"。
- 输出格式:按"Speed: V - S"格式输出,其中V为输入的车速,S为判断结果。
- 这是示例代码:
c
#include <stdio.h>
int main() {
int speed;
scanf("%d", &speed);
if (speed > 60) {
printf("Speed: %d - Speeding\n", speed);
} else {
printf("Speed: %d - OK\n", speed);
}
return 0;
}

这是最终结果:程序正确判断车速是否超速,并按指定格式输出结果,符合两个样例的预期。
题目九、用天平找小球
三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。
输入格式:
输入在一行中给出3个正整数,顺序对应球A、B、C的重量。
输出格式:
在一行中输出唯一的那个不一样的球。
输入样例:
1 1 2
输出样例:
C
我们首先来看思路:
- 比较逻辑 :三个球中只有一个不同,因此通过两两比较即可确定:
- 若A与B重量相等,则不同的球是C。
- 若A与C重量相等,则不同的球是B。
- 若B与C重量相等,则不同的球是A。
- 输出结果:根据比较结果输出对应的球(A、B或C)。
- 这是示例代码:
c
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if (a == b) {
printf("C\n");
} else if (a == c) {
printf("B\n");
} else {
printf("A\n");
}
return 0;
}

这是最终结果:程序通过简单的两两比较,准确找出重量不同的球,符合样例及所有可能情况。
题目十、计算工资
某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。
输入格式:
输入在一行中给出2个正整数,分别为某员工入职年数和周工作时间,其间以空格分隔。
输出格式:
在一行输出该员工的周薪,精确到小数点后2位。
输入样例1:
5 40
输出样例1:
2000.00
输入样例2:
3 50
输出样例2:
1650.00
我们首先来看思路:
- 确定时薪 :根据入职年数判断职工类型:
- 入职年数≥5→老职工,时薪50元。
- 入职年数<5→新职工,时薪30元。
- 计算工作报酬 :
- 若周工作时间≤40小时:工资=工作时间×时薪。
- 若周工作时间>40小时:工资=40×时薪 +(工作时间-40)×时薪×1.5。
- 输出格式 :用
%.2f
保留两位小数输出周薪。
- 这是示例代码:
c
#include <stdio.h>
int main() {
int years, hours;
scanf("%d %d", &years, &hours);
float rate;
// 确定时薪
if (years >= 5) {
rate = 50.0;
} else {
rate = 30.0;
}
// 计算周薪
float salary;
if (hours <= 40) {
salary = hours * rate;
} else {
salary = 40 * rate + (hours - 40) * rate * 1.5;
}
printf("%.2f\n", salary);
return 0;
}

这是最终结果 :程序正确区分新老职工,按工作时间计算工资,并精确到两位小数,符合两个样例的预期(如样例2:3年→30元/时,50小时→40×30 +10×30×1.5=1200+450=1650.00)。
意气风发,漫卷疏狂
学习是成长的阶梯,每一次的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中。
如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝点赞、评论和收藏,也欢迎您关注我的博客。
您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力!
愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步。
我是意疏 下次见!