现在的代码是可以正常运行的,但当把bool flag = 1; 放到for循环之外则没有输出,为什么呢?
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int min, max, i, j, k ;
//输入判断素数的范围
LABEL: {
cout << "请输入判断素数范围的下限:";
cin >> min;
cout << "请输入判断素数范围的上限:";
cin >> max; }
//求值范围只能为正整数
if (min < 1)
{
min = 1;
}
//若输入范围有误,让用户重新输入
while (max <= min)
{
cout << "范围上限必须大于范围下限" << endl << "请重新输入:" << endl;
goto LABEL;
}
//输出结果
cout << "您所给出范围内的素数有:" << endl;
for (i = min; i < max; i++) //遍历范围内所有整数
{ bool flag = 1; //表明当前整数是否素数的标志
if (i == 1 || i == 2) //如果1和2在范围内,直接输出
{
flag = 1;
}
else //从2开始遍历到这个数的平方根,都除这个数,如果可以被整除,则不是素数
{
k = static_cast<int>(sqrt(i));
for (j = 2; j <= k; j++)
{
if ((i % j) == 0)
{
flag = 0;
break;
}
}
}
//如果是素数,则输出
if (flag)
cout << i << endl;
}
return 0;
}
请输入判断素数范围的下限:10
请输入判断素数范围的上限:60
您所给出范围内的素数有:
11
13
17
19
23
29
31
37
41
43
47
53
59
你的flag是用来判断一个数是不是素数的,你需要每个循环里把它先设置成1,当一次循环完毕后如果还是1,那么它是素数,如果是0,那么不是素数
问题是你循环里并没有给它初始化,导致判断10的时候不是素数,那么到了11,flag还是0,变不回1了
这个bool flag的定义可以放在外面,定义不一定要放在里面,但是每次循环开始你必须给它初始化才行
因为你是在for循环内遍历上下限之间的所有数字,每个数字都要将对应flag初始为1,所以在for内去做,如果放在for外,下一个数字的初始flag会受到上一个数字的影响
有帮助望采纳
你放到循环外面的话,这个值就不会每次循环恢复为1了,后面将一直为0
这是个标志位,每次循环都需要重新恢复为1,所以必须放在循环内部
希望以上回复对你有所帮助