鱼C论坛

 找回密码
 立即注册
查看: 1547|回复: 3

[已解决]if(flag)等于if(flag != 0),而flag != 0就是flag = 1,那为什么不能注释掉else

[复制链接]
发表于 2021-12-24 18:09:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
源代码(原代码)

#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;
               
}
最佳答案
2021-12-24 18:22:47
本帖最后由 jackz007 于 2021-12-24 18:28 编辑
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int i = 2;
  5.         int j,math;
  6.         bool flag = 1
  7.         for (math = 5;math<10000;math++)
  8.         {
  9.                 for(j = 2 ; j < math / 2 ; j ++)  // 这个循环是在 2 ~ math / 2 - 1 的范围内寻找 math 可能的因子,如果找到,那就说明当前 math 不是一个素数
  10.                 {                                 // 进入循环的时候,flag = 1,预先假定 math 是一个素数,如果经此循环未能找出因子,那么假设成立,flag = 1,否则不成立,flag = 0。
  11.                         if(math % j == 0)
  12.                         {
  13.                                 flag = 0 ;        // 找到了一个因子,置 flag 为 0 值,供循环外判断素数使用
  14.                                 break    ;        // 循环的目的就是寻找 math 的因子,既然找到了,目的也就达到了,退出循环
  15.                         }
  16.                        
  17.                 }
  18.                 if (flag != 0)                    // 根据 flag 的数值判断 math 是否是素数,flag != 0,意味着 math 是一个素数
  19.                 {
  20.                         i++ ;                     // 素数计数器加 1
  21.                 }
  22.                 else                              // 否则,flag == 0,为了下一次循环,需要在这里把 flag 重新初始化为 1
  23.                 {
  24.                         flag = 1;
  25.                 }
  26.         }
  27.         printf("10000以内共有%d个素数!\n",i);
  28.       
  29.         return 0;
  30.                
  31. }
复制代码

         既然定义 flag 为 bool 型变量,那么,为其赋值应该用 true 和 false,不要赋 0 和 1,如果要赋 0 和 1,那就最好把 flag 定义为 int 型。

注释掉else程序块后结果不是1229,而是3

注释掉else程序块后结果不是1229,而是3
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-24 18:22:47 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-12-24 18:28 编辑
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int i = 2;
  5.         int j,math;
  6.         bool flag = 1
  7.         for (math = 5;math<10000;math++)
  8.         {
  9.                 for(j = 2 ; j < math / 2 ; j ++)  // 这个循环是在 2 ~ math / 2 - 1 的范围内寻找 math 可能的因子,如果找到,那就说明当前 math 不是一个素数
  10.                 {                                 // 进入循环的时候,flag = 1,预先假定 math 是一个素数,如果经此循环未能找出因子,那么假设成立,flag = 1,否则不成立,flag = 0。
  11.                         if(math % j == 0)
  12.                         {
  13.                                 flag = 0 ;        // 找到了一个因子,置 flag 为 0 值,供循环外判断素数使用
  14.                                 break    ;        // 循环的目的就是寻找 math 的因子,既然找到了,目的也就达到了,退出循环
  15.                         }
  16.                        
  17.                 }
  18.                 if (flag != 0)                    // 根据 flag 的数值判断 math 是否是素数,flag != 0,意味着 math 是一个素数
  19.                 {
  20.                         i++ ;                     // 素数计数器加 1
  21.                 }
  22.                 else                              // 否则,flag == 0,为了下一次循环,需要在这里把 flag 重新初始化为 1
  23.                 {
  24.                         flag = 1;
  25.                 }
  26.         }
  27.         printf("10000以内共有%d个素数!\n",i);
  28.       
  29.         return 0;
  30.                
  31. }
复制代码

         既然定义 flag 为 bool 型变量,那么,为其赋值应该用 true 和 false,不要赋 0 和 1,如果要赋 0 和 1,那就最好把 flag 定义为 int 型。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-24 18:24:14 | 显示全部楼层
你的代码如同:
  1. if(flag == 1)
  2. {
  3.     i++;
  4. }
  5. else if(flag == 0)
  6. {
  7.     flag = 1;
  8. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-24 21:06:20 | 显示全部楼层
进来学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 04:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表