if(flag)等于if(flag != 0),而flag != 0就是flag = 1,那为什么不能注释掉else
源代码(原代码)#include<stdio.h>
int main()
{
int i = 2;
int j,math;
bool flag = 1;//强调布尔类型为flag
for (math = 5;math<10000;math++)
{
for(j = 2;j < math / 2;j++)
{
if(math%j == 0)
{
//i++
flag = 0;
break;
}
}
if (flag != 0)
{
i++;
}
else
{
flag = 1;
}
}
printf("10000以内共有%d个素数!\n",i);
return 0;
} 本帖最后由 jackz007 于 2021-12-24 18:28 编辑
#include<stdio.h>
int main()
{
int i = 2;
int j,math;
bool flag = 1
for (math = 5;math<10000;math++)
{
for(j = 2 ; j < math / 2 ; j ++)// 这个循环是在 2 ~ math / 2 - 1 的范围内寻找 math 可能的因子,如果找到,那就说明当前 math 不是一个素数
{ // 进入循环的时候,flag = 1,预先假定 math 是一个素数,如果经此循环未能找出因子,那么假设成立,flag = 1,否则不成立,flag = 0。
if(math % j == 0)
{
flag = 0 ; // 找到了一个因子,置 flag 为 0 值,供循环外判断素数使用
break ; // 循环的目的就是寻找 math 的因子,既然找到了,目的也就达到了,退出循环
}
}
if (flag != 0) // 根据 flag 的数值判断 math 是否是素数,flag != 0,意味着 math 是一个素数
{
i++ ; // 素数计数器加 1
}
else // 否则,flag == 0,为了下一次循环,需要在这里把 flag 重新初始化为 1
{
flag = 1;
}
}
printf("10000以内共有%d个素数!\n",i);
return 0;
}
既然定义 flag 为 bool 型变量,那么,为其赋值应该用 true 和 false,不要赋 0 和 1,如果要赋 0 和 1,那就最好把 flag 定义为 int 型。 你的代码如同:if(flag == 1)
{
i++;
}
else if(flag == 0)
{
flag = 1;
} 进来学习了
页:
[1]