在线编译器 C

#include <stdio.h> enum{p = 10}; int main() { int A[p], cymma=0; for(int i = 0; i < p; i++) { scanf ("%d", &A[i]); } for(int i = 0; i < p; i++) { if (A[i]%100 < 10) { cymma++; } } int B[cymma]; for(int i = 0; i < p ; i++) { int j =0; if (A[i]%100 < 10) { B[j] = A[i]; j++; } } for(int i = 0; i < cymma; i++) { printf ("%d ", B[i]); } return 0; }
这段代码的目的是:从10个整数中,找出那些最后两位数字小于10(即个位和十位组成的两位数小于10,实际上就是十位为0且个位小于10,也就是个位数)的数,并将它们存入一个新数组B中,最后输出B数组。

代码中存在一个逻辑错误,导致B数组的元素赋值不正确。

- 在第二个for循环中,变量`j`被定义在循环内部,每次循环都会重置为0。这意味着每次找到符合条件的数时,都会从B[0]开始覆盖写入,而不是依次向后存储。最终B数组中只有最后一个符合条件的数被正确存储,其他位置的值是未定义的。

- 提示:思考变量`j`应该在循环的什么位置定义和初始化,才能让它随着找到符合条件的数而递增,而不是每次循环都重新开始。