跪求C语言牛人。求解答。很有深度的题目。

include<stdio.h>
void main()
{
int i,t;int j=0;
for(i=100;i<=200;i++)
{
for(t=2;t<=i;t++)这为什么< 或者<= 都不影响结果呢\、
if(i%t==0) break;
if(t==i)
{
printf("%d",i);
printf(" ");
j++;
if(j==10)
{
printf("%c",'\n');
j=0;
}
}
}
}

#include<stdio.h>
int main()
{
int i,j=0,t;
for(i=100;i<=200;i++)
{
/* 这为什么 t<i 或者 t<=i 都不影响结果呢
答: 这个 for 是用来判断 i 是不是质数的。

首先我们来看【 t<i 】的情形,也就是说 t∈[2,i-1],
我们来看看这个【 for 语句结束的时候,t 的值是多少】。
a. 如果 i 是质数,那么 if(i%t == 0) 在 t=[2,i-1] 都不成立。
for 语句在 t==i 是结束。

b. 如果 i 是合数, 那么 if(i%t == 0) 在 t=[2,i-1] 内的某一个数会成立,然后跳出循环。
for 语句结束的时候, 2 <= t <= (i-1)。

接着我们来看【 t<=i 】的情形,也就是说 t∈[2,i],
我们来看看这个【 for 语句结束的时候,t 的值是多少】。
a. 如果 i 是质数,那么 if(i%t == 0) 在 t=[2,i-1] 都不成立。
当 t==i 时候,if(i%t == 0) 一定会成立,跳出循环。

b. 如果 i 是合数, 那么 if(i%t == 0) 在 t=[2,i-1] 内的某一个数会成立,然后跳出循环。
for 语句结束的时候, 2 <= t <= (i-1)。

【结论】:不管【 t<i 】的情形,还是【 t<=i 】的情形,
如果 i 是质数,那么:【 for 语句结束的时候,t 的值都是 i】。
如果 i 是合数,那么:【 for 语句结束的时候,t 的值都大于 2 小于 i 的】。

*/
for(t=2;t<=i;t++)
if(i%t==0) break;

// 根据结论,不管 for(t=2;t<=i;t++) 还是 for(t=2;t<i;t++),
// 都可以通过 if(t==i) 成立,来判断 i 是质数。
if(t==i)
{
j++;
// 这里我给你优化了一下

printf("%d%s",i,(j%10 ? " " : "\n"));
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-17
for(t=2;t<=i;t++)
if (i%t==0) break;
改变一下形式就是:
for (t=2;t<=i;t++) // 判断 i 是否是质数 t <= i/2 就可以了, 你的 i 从 100 开始, 所以 i/2 远小于 i
{
if (i%t==0) // 此语句的作用使 for 循环提前结束
{
break;
}
}
但是你的其他语句包含在 for (i=100;i<=200;i++) 循环内部还是没有任何影响的执行.
第2个回答  2013-01-17
t<=i时,当t一直自加到等于i
你一句if(i%t==0) break;
就让他没用了
效果就和t<i一样
第3个回答  2013-01-17
因为if(i%t==0) t = i时,i % t = 0;退出if循环

printf("%c",'\n'); 这句话有错
相似回答
大家正在搜