在线编译器 C

#include<stdio.h> int main() { int N; int arr[10]; scanf("%d",&N); int i,num; for(num=2;num<=N;num++) { int arr[10]={0}; for(i=2;i<10;i++) { int digit=i; if(num%digit==0) { arr[i]++; } } } for(i=2;i<10;i++) { printf("%d ",arr[i]); } return 0; }
这段代码试图统计从2到N之间每个数字(2到9)作为因子出现的次数,但存在几个关键问题。

- 你在循环内部重新声明了 `int arr[10]={0};`,这创建了一个新的局部数组,覆盖了外部的 `arr`,导致外部的 `arr` 从未被更新。
- 你只检查了数字本身(`digit=i`)是否能整除 `num`,但应该检查的是每个数字 `i` 是否能整除 `num`,而不是用 `digit` 变量。
- 外部的 `arr` 没有初始化,直接使用会导致未定义行为。

- 检查一下数组的作用域:内部声明的 `arr` 只在循环内有效,循环结束后外部的 `arr` 仍然是未初始化的。
- 思考如何正确地在循环中更新同一个数组,而不是创建新数组。