希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 阅读指南:
本文继续介绍浙江大学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
我们首先来看思路:
scanf按顺序读取四个数据,格式控制符为%f %d %c %f(注意空格分隔,字符无需额外处理空格)。%.2f保留两位小数。#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;
}这是最终结果:程序正确读取输入并按指定格式输出,浮点数保留两位小数,符合样例预期。

编写一个程序,要求用户输入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小时制的小时和分钟(直接处理冒号)。#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。 正确代码:
#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
我们首先来看思路:
#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
我们首先来看思路:
#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
我们首先来看思路:
%.2f保留两位小数输出周薪。#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)。