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