读代码和读文章一样,不是把所有字认下来就算读懂了。读代码也要联系上下文。
另外,良好的代码风格可以使阅读变得轻松愉悦。
程序代码:
for(i=101;i<=200;i++)
{
k=sqrt(i+1);
for(j=2;j<=k;j++)
if(i%j==0)
{
leap=0;
break;
}
if(leap)
{
printf("%-4d",i);
h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThe total is %d",h);
先看第一个循环,知道i是一个101至200之间的数。记到这儿。
进入循环体,第一句k是i+1的2次方根。
之后,下一个循环,j从2开始到k循环。其实你看代码多了到这儿就已经知道它在干什么了。这是在测试i是否为素数。
进入循环体,果然是在判断i对j的余数。余数为0,则将leap置为0,跳出j循环。由此知leap是个标志,当i是合数时会被置为0。
j循环结束后,一个条件块,如果leap为真则打印i的值,并累加一个变量h。由此知h在计数i的个数。之后的两句是输出格式控制。
到了i循环的末尾,重新置leap为1,以进行下一轮的判断。否则,leap被之前置0后,就一直为0了。
总之,这段代码逻辑上没错,但太冗余。有很多不必要的东西。个人观点,解决同一个问题,水平越低,代码越长。
让我写,代码将是这样的。
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
int i, j, k, c;
for(c = 0, i = 101; i <= 200; i += 2)
{
for(k = sqrt(i), j = 3; j <= k && i % j; j += 2);
if(j > k) printf("%d%c", i, ++c % 10 ? ' ' : '\n');
}
return 0;
}