想不明白的.....最好能再想想
如果实在想不明白,教你个办法,用printf()在程序运行过程中监视所有变量变化的情况,再用getch()进行单步跟踪,那样你就能很轻松的了解程序的数据流动情况了
“如闻仙乐耳暂明”。请LZ好好听听吧。

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
想不明白的.....最好能再想想
如果实在想不明白,教你个办法,用printf()在程序运行过程中监视所有变量变化的情况,再用getch()进行单步跟踪,那样你就能很轻松的了解程序的数据流动情况了
“如闻仙乐耳暂明”。请LZ好好听听吧。
我当然是运行了. 但还是不太明白. 谢谢.
建议用C-Free 等编译器单步调试~ 再不明白,你跳楼
for(j=2;j*j<=i&&i%j;j++); //解释如下
循环条件:1。首先要求除数j小于等于i的算术平方根,
2。其次要求被检测的i不是j的倍数。
循环体呢:空语句(什么也不干)。
该语句等价于
for(j=2;j*j<=i;j++)if(i%j==0)break;
该语句还等价于
for(j=2; ;j++)if(j*j>i||i%j==0)break;
总之,break条件是循环条件的否定命题。
就本题而言,根据德·摩根律,
!(j*j<=i&&i%j!=0)可化简为
!(j*j<=i)||!(i%j!=0)也即
(j*j>i || i%j==0)
高中的“集合论”、大学的“离散数学”重要呵。
for(j=2;j*j<=i&&i%j;j++); //解释如下
循环条件:1。首先要求除数j小于等于i的算术平方根,
2。其次要求被检测的i不是j的倍数。
循环体呢:空语句(什么也不干)。
该语句等价于
for(j=2;j*j<=i;j++)if(i%j==0)break;
该语句还等价于
for(j=2; ;j++)if(j*j>i||i%j==0)break;
总之,break条件是循环条件的否定命题。
就本题而言,根据德·摩根律,
!(j*j<=i&&i%j!=0)可化简为
!(j*j<=i)||!(i%j!=0)也即
(j*j>i || i%j==0)
高中的“集合论”、大学的“离散数学”重要呵。
"路漫漫兮, 吾将上下而求索" 谢谢.
改好了
int main(void){
int i,j,k;
int n;
for(i=100;i<=200;i++){
for(j=2;j<=i-1;j++) /*这边的算法可以再简单一点。j<=i/2*/
if( !(k=i%j) ) break;
printf("%d%s素数\n",i,k?"是":"不是");
}
return 0;
}
哇噻。我也写过这道题目。奇怪。再看看大家都讨论什么了。