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

#include <stdio.h> enum { size = 10 }; int main() { int a[size]; for (int i = 0; i < size; i++) { scanf("%d", &a[i]); } for (int i = 0; i < size; i++) { if (a[i] >= 0) { if (a[i] >= 100) { if ((a[i] /10)%10 == 0) { printf("%d ", a[i]); } } if (a[i] < 10 && a[i] > 0) { printf("%d ", a[i]); } } if (a[i] < 0) { a[i] = -a[i]; if (a[i] >= 0) { if (a[i] >= 100) { if ((a[i]/10) % 10 == 0) { printf("%d ", -a[i]); } } if (a[i] < 10 && a[i] > 0) { printf("%d ", -a[i]); } } } } return 0; }
这段代码的功能是:读取10个整数,然后输出其中“十位数字为0”的数(包括一位数,因为一位数的十位可以视为0)。代码对正数和负数分别做了处理,但逻辑有些重复和复杂。

- 代码中处理正数和负数的部分几乎完全重复,实际上可以通过统一处理绝对值来简化。
- 对于负数,代码先取绝对值判断,再输出时加上负号,这个思路是对的,但实现上可以更简洁。
- 注意条件 `a[i] >= 0` 在负数分支中再次出现,这是多余的,因为此时 `a[i]` 已经取反,肯定非负。

提示:
- 考虑先统一取绝对值,然后只用一个条件判断十位是否为0,最后根据原数的正负决定输出时是否加负号。
- 检查一下 `a[i] < 10 && a[i] > 0` 这个条件,它排除了0的情况。题目是否要求输出0?如果0的十位也是0,那么0也应该被输出。