user-0 提问: 大家好，我是新手刚开始接触c语言，请大神指导一下。

回复:
user: user-0
content: 引用 9 楼 weixin_40290083的回复:举两个例子，当m为7（7是素数，我们是知道的，需要程序来算）时，i的值需要从2自增到6 并且m%i == 0这个条件表达式的值始终为“假”，那么break是不会执行的。所以i最终的值就是6，因为当i自增到6时，还会执行i++,这时i < m的条件为假，终止循环，i的值自增到m(前两条回复有错之处，i会自增到m). 当m为9时，当i自增到3时，m%i ==0表达式的值为块，break语句执行，跳出循环，这时的跳出循环i++不执行。i的值就为3.  所以当i>=m时，M为素数，否则为和数。 谢谢大佬，终于明白了！！！！！

user: user-1
content: 举两个例子，当m为7（7是素数，我们是知道的，需要程序来算）时，i的值需要从2自增到6 并且m%i == 0这个条件表达式的值始终为“假”，那么break是不会执行的。所以i最终的值就是6，因为当i自增到6时，还会执行i++,这时i < m的条件为假，终止循环，i的值自增到m(前两条回复有错之处，i会自增到m). 当m为9时，当i自增到3时，m%i ==0表达式的值为块，break语句执行，跳出循环，这时的跳出循环i++不执行。i的值就为3.  所以当i>=m时，M为素数，否则为和数。

user: user-1
content: 如果m是素数i会循环自增到m-1，否则i会小于m-1

user: user-1
content: 那是不是说if(m%i==0)这个结果成立才会执行break?      这个理解是对的，在break 后面的if语句始终要执行，是不是素数是这个if根据i和m的关系判断的

user: user-0
content: 引用 5 楼 weixin_40290083的回复:[quote=引用 3 楼 ༺࿈军仔*江河湖海࿈༻ 的回复:] [quote=引用 1 楼 weixin_40290083的回复:]你的程序有错误 1、for(i = 2; i < m; i++) 2、if(i < m)   3、break终止的是循环 1.错误的地方是for(i = 2; i < =m; i++)吗？ 2.如果后面不加break, 加一个括号，把循环内容括起来。这样好像也不行，这又是什么情况？[/quote]  1、是的，必须是i<m，因为判断质时是从2——m-1作为除数的（其实通过数学方法证明 i <m的平方根即可，可以提高算法效率） 加不加{}无所谓，因为你是语句是单行的，所以可以省略{}，按你的算法这个break是必须要有的，因为在2——m-1之间有可以整除的数，那么这个数就是非质数，就必须提前终止循环，否则当i增长到m-1时，永远是m%i!=0;[/quote] 大佬，那是不是说if(m%i==0)这个结果成立才会执行break?和后面的if 语句，我感觉我这样理解是错的，还请大神指导一下。

user: user-2
content: #include<stdio.h>               /*函数头：输入输出头文件*/  //void main()                     /*空类型：主函数*/ int main()                     /*空类型：主函数*/ {     int m,i;                    /*定义变量的数据类型为整型*/      printf("输入一个数：");     /*输出文字提示*/     scanf("%d",&m);             /*输入一个数字*/      //for(i=2;i<=m;i++)           /*用for函数重复下面步骤*/     for(i=2;i<m;i++)           /*用for函数重复下面步骤*/         if(m%i==0)              /*判断输入的数是否能被除1和本身以外的数整除*/             break;     //if(i>m)                 /*判断i是否大于m*/     if(i>=m)                 /*判断i是否大于m*/         printf("%d 是素数\n",m);       /*输出是素数*/     else         printf("%d 不是素数\n",m);     /*输出不是素数*/      return 0; }  供参考～  break跳出的是循环，break的用途主要是switch和循环（while/for/do...while等等）中。  楼主的程序有点问题，循环条件和判断素数的条件需要做修改。  如果既然素数是1和他本身之外不能被整除，所以i不能等于m。

user: user-1
content: 你的程序有错误 1、for(i = 2; i < m; i++) 2、if(i < m)   3、break终止的是循环

user: user-1
content: 引用 3 楼 ༺࿈军仔*江河湖海࿈༻ 的回复:[quote=引用 1 楼 weixin_40290083的回复:]你的程序有错误 1、for(i = 2; i < m; i++) 2、if(i < m)   3、break终止的是循环 1.错误的地方是for(i = 2; i < =m; i++)吗？ 2.如果后面不加break, 加一个括号，把循环内容括起来。这样好像也不行，这又是什么情况？[/quote]  1、是的，必须是i<m，因为判断质时是从2——m-1作为除数的（其实通过数学方法证明 i <m的平方根即可，可以提高算法效率） 加不加{}无所谓，因为你是语句是单行的，所以可以省略{}，按你的算法这个break是必须要有的，因为在2——m-1之间有可以整除的数，那么这个数就是非质数，就必须提前终止循环，否则当i增长到m-1时，永远是m%i!=0;

user: user-0
content: 引用 2 楼 自信男孩的回复:#include<stdio.h>               /*函数头：输入输出头文件*/  //void main()                     /*空类型：主函数*/ int main()                     /*空类型：主函数*/ {     int m,i;                    /*定义变量的数据类型为整型*/      printf("输入一个数：");     /*输出文字提示*/     scanf("%d",&m);             /*输入一个数字*/      //for(i=2;i<=m;i++)           /*用for函数重复下面步骤*/     for(i=2;i<m;i++)           /*用for函数重复下面步骤*/         if(m%i==0)              /*判断输入的数是否能被除1和本身以外的数整除*/             break;     //if(i>m)                 /*判断i是否大于m*/     if(i>=m)                 /*判断i是否大于m*/         printf("%d 是素数\n",m);       /*输出是素数*/     else         printf("%d 不是素数\n",m);     /*输出不是素数*/      return 0; }  供参考～  break跳出的是循环，break的用途主要是switch和循环（while/for/do...while等等）中。  楼主的程序有点问题，循环条件和判断素数的条件需要做修改。  如果既然素数是1和他本身之外不能被整除，所以i不能等于m。 1.错误的地方是for(i = 2; i < =m; i++)吗？ 2.如果后面不加break, 加一个括号，把循环内容括起来。这样好像也不行，这又是什么情况

user: user-0
content: 引用 1 楼 weixin_40290083的回复:你的程序有错误 1、for(i = 2; i < m; i++) 2、if(i < m)   3、break终止的是循环 1.错误的地方是for(i = 2; i < =m; i++)吗？ 2.如果后面不加break, 加一个括号，把循环内容括起来。这样好像也不行，这又是什么情况？