邝(kuàng) 2021-09-06 15:36 采纳率: 100%
浏览 68
已结题

C++判断一个范围内的素数,当bool flag=1;放到for循环外面则不输出?

现在的代码是可以正常运行的,但当把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
  • 写回答

3条回答 默认 最新

  • 於黾 2021-09-06 15:39
    关注

    你的flag是用来判断一个数是不是素数的,你需要每个循环里把它先设置成1,当一次循环完毕后如果还是1,那么它是素数,如果是0,那么不是素数
    问题是你循环里并没有给它初始化,导致判断10的时候不是素数,那么到了11,flag还是0,变不回1了
    这个bool flag的定义可以放在外面,定义不一定要放在里面,但是每次循环开始你必须给它初始化才行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月14日
  • 已采纳回答 9月6日
  • 修改了问题 9月6日
  • 创建了问题 9月6日

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样