注册 登录
编程论坛 C++教室

一道C++的题目 怎么解释

hippo4414 发布于 2013-06-29 12:27, 479 次点击
#include <stdio.h>
main ()
{ int m,n;
  for (m=10;m<=11;m++)
  {for (n=9;n<m;n++)
     if (!(m%n)) break;
if (n>m-1) printf("%d",n);
    }
  }
 求大神解释啊 为什么是10 11
3 回复
#2
lzj125302013-06-29 14:26
m%n 是取余数 那么这一语句 !(m%n) 就等效于m==n?1:0; 如果m等于n那么判断为真,否则就为假。而你限定了n<m 所以永远为假。于是只会执行下一个语句,从程序上来看
#include <stdio.h>
 main ()
 {
    int m,n;
    for (m=10;m<=11;m++)  //外for循环
   {
        for (n=9;n<m;n++)   //1.2这两句是一个内部for循环。
          if (!(m%n)) break;//2,这一句永远为假,不执行
        if (n>m-1) printf("%d",n);  //3.这一句是属于外for循环
    }
 }
第一次循环m=10 ,n=9。由于语句2永远不执行,于是只是执行n++命令。则一个循环后就是n=10这时n<m不成立于是跳出内for循环,进入语句3执行.n>m-1成立,于是输出10
第二次m=11,n=9 执行n++ 一直到n=11  进入语句3 于是输出11
#3
hippo44142013-06-29 14:46
回复 2楼 lzj12530
大神!!!谢谢啊!懂了!
#4
ydown2013-06-29 14:52
n一出来的值就已经是9了,
符合(n>m-1)的只有:9,10,11
符合(!(m%n))的,只有10,11
1