Online Compiler C

#include<stdio.h> int main() { int N; int sum=0; int arr[i]; scanf("%d",&N); int i,num; for(num=2;num<N;num++) { sum=0; for(i=2;i<10;i++) { int digit=i; if(num%digit==0) { sum++; } arr[i]=sum; } } for(i=0;i<10;i++) { printf("%d ",arr[i]); } return 0; }
这段代码试图找出小于N的每个数中,能被2到9整除的数字个数,并存储到数组arr中。但代码存在几个关键问题。

- 数组arr[i]在声明时使用了未定义的变量i,这会导致编译错误。数组大小必须是常量,不能是变量。
- 外层循环遍历num从2到N-1,但内层循环只检查了数字2到9,且每次循环都重置sum为0,最终arr数组只保存了最后一个num的统计结果,而不是所有num的结果。
- 内层循环中,arr[i]=sum这一行将sum赋值给arr[i],但i是内层循环变量(从2到9),而arr数组下标应该对应num,这里逻辑混乱。

- 检查数组声明时,数组大小应该是一个常量,比如固定大小或者根据N动态分配(但动态分配需要用到malloc等,目前阶段建议用固定大小)。
- 思考一下:你需要为每个num(从2到N-1)统计它能被2到9中多少个数字整除,然后把这个统计结果存储到数组的对应位置。目前你的代码只存储了最后一个num的结果,而且存储位置也不对。