Yth961102zxc 发表于 2020-4-12 12:06:51

萌新求助 求大佬解释一下代码的意思

#include <stdio.h>

int main()
{
      int count = 2; // 已知2和3是素数
      int i, j;
      _Bool flag = 1;

      for (i = 5; i < 10000; i++)
      {
                for (j = 2; j < i / 2; j++)
                {
                        if (i % j == 0)
                        {
                              flag = 0;
                              break;
                        }
                }

                if (flag)
                {
                        count++;
                }
                else
                {
                        flag = 1;
                }
      }

      printf("10000以内共有%d个素数!\n", count);

      return 0;
}

对于这个if else语句中,flag=1这句代码没太明白起的作用是什么 求大佬帮小弟解释一下 感谢感谢!

Hello. 发表于 2020-4-12 12:29:20

标志性变量
当flag=1时就结束

4goodworld 发表于 2020-4-12 15:05:38

int main()
{
        int count = 2; // 已知2和3是素数
        int i, j;
        _Bool flag = 1;//相等于一个布尔型变量,ture(非零),false(为零)

        for (i = 5; i < 10000; i++)
        {
                for (j = 2; j < i / 2; j++)
                {
                        if (i % j == 0)
                        {
                                flag = 0;//如果i与j的模=0,不就是意味着这个当前的i能被别的数除尽,那就不是素数,所以flag为false(=0)
                                break;
                        }
                }

                if (flag)//if语言里面 当flag为真(也就是flag仍然=1)时,执行count++,flag到这一步还是1,说明前面的循环没有改变flag的值,则意味着i除了被自己整除以外,没有别的数可以除尽,不就说明是素数吗?所以count的个数+1
                {
                        count++;
                }
                else//调到这儿意味着flag为false 也就是flag被赋值为0了,说明当前的i不为素数,然后准备下一个数,假设下一数为素数,这时候得重置flag为1
                {
                        flag = 1;
                }
        }

        printf("10000以内共有%d个素数!\n", count);

        return 0;
}

Yth961102zxc 发表于 2020-4-13 09:20:28

4goodworld 发表于 2020-4-12 15:05


哇 这下真的特别明白啦 原来这个flag=1的意义就是为了回到上一个循环 感谢大佬!
页: [1]
查看完整版本: 萌新求助 求大佬解释一下代码的意思