int main(){ int i,j; for(i=1;i<=100;i++){ for(j=1;j<=i;j++){ if(i%j!=0){ printf("%d",i); } } } return 0; } 有什么问题,如何改进
时间: 2024-09-06 17:03:00 浏览: 18
这段 C 语言代码是一个简单的程序,它使用嵌套 for 循环遍历从 1 到 100 的整数,并检查每个数字 `i` 是否能被 `j` 整除(即 `i % j == 0`)。如果不能整除,就打印出这个 `i` 的值。代码的主要目的是找出并打印出所有小于等于 100 的质数。
然而,有以下几个问题需要注意:
1. **性能优化**:当 `i` 变得很大时,内层循环会运行多次,尤其是对于非质数的 `i`,这可能导致不必要的计算。可以将条件改为只打印质数,避免非必要打印。
2. **输出格式**:使用 `printf("%d", i)` 输出的是单个数字,而不是一行或一个列表,若想输出质数序列,应考虑换行或者调整输出格式。
3. **缩进和代码结构**:虽然不是大问题,但为了提高代码可读性,可以适当增加缩进,使其更清晰。
针对这些问题,你可以对代码做如下的改进:
```c
#include <stdio.h>
int is_prime(int num) {
if (num <= 1) {
return 0;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int i, j;
printf("Prime numbers below 100:\n");
for (i = 2; i <= 100; i++) {
if (is_prime(i)) {
printf("%d ", i); // 使用空格分隔输出,便于查看
}
}
printf("\n"); // 结束打印行
return 0;
}
```
现在,我们添加了一个名为 `is_prime` 的辅助函数来判断是否为质数,然后仅在 `is_prime(i)` 返回 true 时才打印 `i`,同时优化了输出格式。此外,代码整体上更加清晰和易于理解。