Jocelyn·Flores 发表于 2022-3-26 22:30:51

课后作业S1E15动动手第二题~

#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;
}
C语言作业
请问一下~为什么这里不写else的话,循环好像就直接结束了,是为什么呀,是因为flag = 0了吗

monkey-D 发表于 2022-3-26 22:37:47

flag的意思是默认 i 是素数,经过一个判断如果不是素数就把flag置为0,这肯定每次都要重新初始化flag的,不然后面的素数也会因为flag是0而不count++

gandixiwang 发表于 2022-3-27 09:36:04

本帖最后由 gandixiwang 于 2022-3-27 09:39 编辑

是的,但是如果你这样写
#include <stdio.h>

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

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

               if (flag)
               {
                         count++;
               }
         }

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

         return 0;
}
就可以不用写else了
就是把flag变量写进循环里
页: [1]
查看完整版本: 课后作业S1E15动动手第二题~