Онлайн компилятор C

#include <stdio.h> #include <stdlib.h> int main() { int input_arr[10]; int output_arr[10]; int count = 0; // 1. 读取 10 个通过空格分隔的整数 for (int i = 0; i < 10; i++) { scanf("%d", &input_arr[i]); } // 2. 筛选倒数第二位(十位数)为 0 的数字 for (int i = 0; i < 10; i++) { int num = abs(input_arr[i]); // 取绝对值,防止负数干扰计算 int tens_digit = (num / 10) % 10; // 获取倒数第二位数字 if (tens_digit == 0) { output_arr[count] = input_arr[i]; // 存入结果数组(保留原数字的正负号) count++; } } // 3. 按要求格式化输出结果,数字间用空格分隔 for (int i = 0; i < count; i++) { printf("%d", output_arr[i]); if (i < count - 1) { printf(" "); } } printf("\n"); return 0; }
这段代码的功能是:读取10个整数,筛选出其中十位数为0的数字,然后按原顺序输出这些数字。

代码逻辑基本正确,但有一个潜在问题需要注意:

- 对于一位数(如5)或两位数(如10),计算十位数的方式是 `(num / 10) % 10`。当数字是一位数时,`num / 10` 结果为0,`0 % 10` 也是0,所以一位数会被错误地判定为十位数为0。你需要思考:题目要求的是“倒数第二位(十位数)为0”,一位数没有十位数,是否应该被包含?

- 另外,对于负数,你使用了 `abs()` 取绝对值,这可以正确处理负数的十位数判断。但需要注意,如果输入是0,`0 / 10` 为0,`0 % 10` 也是0,0是否应该被包含?这取决于题目对“十位数”的定义。