练习2-1 Programming in C is fun!

本题要求编写程序,输出一个短句“Programming in C is fun!”。
输入格式:
本题目没有输入。
输出格式:
在一行中输出短句“Programming in C is fun!”。
解题思路:练习使用 printf 函数。

  1. #include <stdio.h>
  2. int main () {
  3. printf("Programming in C is fun!");
  4. return 0;
  5. }

练习2-3 输出倒三角图案

本题要求编写程序,输出指定的由“”组成的倒三角图案。
输入格式:
本题目没有输入。
输出格式:
按照下列格式输出由“
”组成的倒三角图案。

  1. * * * *
  2. * * *
  3. * *
  4. *

解题思路:最简单就是使用 printf 跨行输出,或者找到规律后使用 for 循环输出。

  1. #include <stdio.h>
  2. int main () {
  3. printf("* * * *\n"
  4. " * * *\n"
  5. " * *\n"
  6. " *\n"
  7. );
  8. return 0;
  9. }

找到规律:输出任意 N 行三角形

  1. #include <stdio.h>
  2. #define N 4
  3. int main () {
  4. for (int i = 0; i < N; i++) {
  5. // 1.打印前缀空格
  6. for (int j = 0; j < i; j++) {
  7. printf(" ");
  8. }
  9. // 2.打印asterisk
  10. for (int j = N - i; j > 0; j--) {
  11. if (j == N - i) { // 首个处理
  12. printf("*");
  13. } else {
  14. printf(" *");
  15. }
  16. }
  17. // 3.换行
  18. printf("\n");
  19. }
  20. return 0;
  21. }

练习2-4 温度转换

本题要求编写程序,计算华氏温度150°F对应的摄氏温度。计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。
输入格式:
本题目没有输入。
输出格式:
按照下列格式输出

  1. fahr = 150, celsius = 计算所得摄氏温度的整数值

解题思路:本题已经给定公式且不用处理输入,直接输出即可。

  1. #include <stdio.h>
  2. int main () {
  3. int fahr = 150, celsius = 5 * (fahr - 32) / 9;
  4. printf("fahr = 150, celsius = %d", celsius);
  5. return 0;
  6. }

练习2-6 计算物体自由下落的距离

一个物体从100米的高空自由落下。编写程序,求它在前3秒内下落的垂直距离。设重力加速度为10米/秒2。
输入格式:
本题目没有输入。
输出格式:
按照下列格式输出

  1. height = 垂直距离值

结果保留2位小数。
解题思路:高中物理公式:PTA编程—顺序 - 图1

  1. #include <stdio.h>
  2. #define G 10
  3. #define T 3
  4. int main () {
  5. printf("height = %.2f\n", 1.0 * G / 2 * T * T);
  6. return 0;
  7. }

练习2-8 计算摄氏温度

给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。
输入格式:
输入在一行中给出一个华氏温度。
输出格式:
在一行中按照格式“Celsius = C”输出对应的摄氏温度C的整数值。
输入样例:

  1. 150

输出样例:

  1. Celsius = 65

解题思路:本题同上提区别在于要手动处理 IO ,即给定 F 是由用户输入决定,因此需要使用 scanf 函数从 stdin 读取用户输入的数据。

  1. #include <stdio.h>
  2. int main () {
  3. int fahr, celsius;
  4. scanf("%d", &fahr);
  5. celsius = 5 * (fahr - 32) / 9;
  6. printf("Celsius = %d", celsius);
  7. return 0;
  8. }
Case Hint Result Score Run Time Memory
0 sample, 输入超过32 Accepted 6 3 ms 256 KB
1 输入小于32 Accepted 2 3 ms 384 KB
2 等于32 Accepted 2 3 ms 296 KB

练习2-9 整数四则运算

本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。
输入格式:
输入在一行中给出2个正整数A和B。
输出格式:
在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。
输入样例:

  1. 3 2

输出样例:

  1. 3 + 2 = 5
  2. 3 - 2 = 1
  3. 3 * 2 = 6
  4. 3 / 2 = 1

解题思路:考察 printf 函数

  1. #include <stdio.h>
  2. int main () {
  3. int A, B;
  4. scanf("%d %d", &A, &B);
  5. printf("%d + %d = %d\n", A, B, A + B);
  6. printf("%d - %d = %d\n", A, B, A - B);
  7. printf("%d * %d = %d\n", A, B, A * B);
  8. printf("%d / %d = %d\n", A, B, A / B);
  9. return 0;
  10. }
Case Hint Result Score Run Time Memory
0 同sample,换个数字 Accepted 6 3 ms 296 KB
1 减法有负数, 除法结果为0 Accepted 4 3 ms 240 KB

习题2-1 求整数均值

本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。
输入格式:
输入在一行中给出4个整数,其间以空格分隔。
输出格式:
在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。
输入样例:

  1. 1 2 3 4

输出样例:

  1. Sum = 10; Average = 2.5

解题思路:模拟即可。

  1. #include <stdio.h>
  2. int main () {
  3. int a, b, c, d;
  4. scanf("%d %d %d %d", &a, &b, &c, &d);
  5. printf("Sum = %d; Average = %.1f", a + b + c + d, (a + b + c + d) / 4.0);
  6. return 0;
  7. }
Case Hint Result Score Run Time Memory
0 同sample Accepted 6 2 ms 296 KB
1 有负数,平均为0 Accepted 4 2 ms 228 KB

习题9-1 时间换算

本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)。
输入格式:
输入在第一行中以hh:mm:ss的格式给出起始时间,第二行给出整秒数n(<60)。
输出格式:
输出在一行中给出hh:mm:ss格式的结果时间。
输入样例:

  1. 11:59:40
  2. 30

输出样例:

  1. 12:00:10

解题思路:根据它的输入格式直接进行操作,明白生活中的小时是 24 进制,而分和秒都是 60 进制。

  1. #include <stdio.h>
  2. int main () {
  3. int hour, minute, second, add;
  4. scanf("%d", &hour);
  5. getchar(); // 吸收':'
  6. scanf("%d", &minute);
  7. getchar(); // 吸收':'
  8. scanf("%d", &second);
  9. scanf("%d", &add);
  10. // 2.进位处理,60进制与24进制
  11. second += add;
  12. minute += second / 60;
  13. hour += minute / 60;
  14. printf("%02d:%02d:%02d\n", hour % 24, minute % 60, second % 60);
  15. return 0;
  16. }

运行结果:

Case Hint Result Run Time Memory
0 sample等价,秒分进位 Accepted 3 ms 400 KB
1 最后1秒到0点 Accepted 3 ms 384 KB
2 秒进位,最小起始、最大n Accepted 3 ms 296 KB
3 无进位 Accepted 3 ms 256 KB
4 全为零 Accepted 3 ms 256 KB

习题9-3 平面向量加法

本题要求编写程序,计算两个二维平面向量的和向量。
输入格式:
输入在一行中按照“_x_1 _y_1 _x_2 _y_2”的格式给出两个二维平面向量_v_1=(_x_1,_y_1)和_v_2=(_x_2,_y_2)的分量。
输出格式:
在一行中按照(x, y)的格式输出和向量,坐标输出小数点后一位(注意不能输出−0.0)。
输入样例:

  1. 3.5 -2.7 -13.9 8.7

输出样例:

  1. (-10.4, 6.0)

解题思路:本题主要考浮点数格式化输出和控制小数点位。一般保留一位小数输出都是使用 printf("%.1f") 输出;但是当 PTA编程—顺序 - 图2,由于保留一位小数,那么最终打印出现 -0.0 。因此对于这种需要额外判断。

  1. #include <stdio.h>
  2. int main () {
  3. double x1, y1, x2, y2;
  4. scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
  5. double x = -0.05 < (x1 + x2) && (x1 + x2) < 0 ? 0.0 : x1 + x2;
  6. double y = -0.05 < (y1 + y2) && (y1 + y2) < 0 ? 0.0 : y1 + y2;
  7. printf("(%.1f, %.1f)", x, y);
  8. return 0;
  9. }
Case Hint Result Score Run Time Memory
0 sample,有负数,输出.0 Accepted 10 4 ms 184 KB
1 小数点后多位,检查舍入和-0 Accepted 5 4 ms 188 KB