C++ 错那了

来源:百度知道 编辑:UC知道 时间:2024/06/19 04:07:29
#include <stdio.h>
void kkk(int n) //函kkk//
{int a,i;
for(i=2;i<=n;i++)
{for(a=2;a<=(i/2);a++)
{if(i%a==0)
break;}
printf("%d\n",i);}
}
void main()
{int m;
printf("输入一个数");
scanf("%d",&m);
kkk(m);}
下边答案 if(a>i/2) 看不懂;

不是大括号位置的问题,是你printf的问题。
你每次printf要打印什么?要打印出素数来,对吧?所以你要控制什么时候打印,什么时候不打印。当i是素数时,才去执行printf。
本程序亲自测试过,结果正常

#include <stdio.h>
void kkk(int n) //函kkk//
{
int a,i;
for (i=2;i<=n;i++)
{
for (a=2;a<=(i/2);a++)
{
if (i%a==0)
break;
}
if ( a>(i/2) )
printf("%d\n",i);
}
}
void main()
{
int m;
printf("输入一个数");
scanf("%d",&m);
kkk(m);
}

回答补充:
for (i=2;i<=n;i++)
{
for (a=2;a<=(i/2);a++)
{
if (i%a==0)
break;
}
if ( a>(i/2) )
printf("%d\n",i);
}
看这一段代码。里面的for循环是用来判断i是否是素数的,对吧?
如果i“不是”素数,那么for循环会因为那个break而跳出。比如,如果i为35,那么for循环会在a为5时跳出。
此时a显然还满足for括号内第二个表达式,也就是a<=(i/2)。所以可以用a是否小于等于(i/2),