利用循环语句求数
求100--200之间的素数,我用的方法哪里不对?求好心人指点#include <stdio.h>
#include <math.h>
void main()
{
int n,k,i;
for(n=100;n<=200;n++)
{
k=sqrt(n);
for(i=2;i<=k;i++)
{
if(n%i==0)
{
break;
}
}
}
if(i>k)
{
printf("%d is a prime number",n);
}
else
{
printf("%d is not a prime number",n);
}
}
本帖最后由 昨非 于 2020-8-23 19:25 编辑
设一个变量flag ,0/1表示是否为素数
for(n=100; n<=200; n++)
{
k=sqrt(n);
for(i=2; i<=k; i++)
if(m%i==0)
{
flag=0;
break;
}
if(flag)
{
printf("%-4d",n);
h++;//循环外初值设为零即可
if(h%10==0)
printf("\n");
}
flag=1;
} 昨非 发表于 2020-8-23 19:23
设一个变量flag ,0/1表示是否为素数
请问我的这种方法是哪里出问题了 本帖最后由 baige 于 2020-8-23 19:29 编辑
#include <stdio.h>
#include <math.h>
int main() {
int n,k,i;
for(n=100; n<=200; n++) {
k=sqrt(n);
for(i=2; i<=k; i++) {
if(n%i==0) {
break;
}
}
//要放在循环里
if(i>k) {
printf("%d is a prime number\n",n);
} else {
printf("%d is not a prime number\n",n);
}
}
} 本帖最后由 baige 于 2020-8-23 19:32 编辑
判断语句位置写错了,得写在循环里, 你写在外面,只有201会去判断是不是素数 本帖最后由 anxiaodai 于 2020-8-23 19:35 编辑
因为你的循环break只跳了一个循环,没有break外循环 内层循环判断当前的n是否为素数。设内循环变量为n,程序设计时i从2开始,直到根号n为止。用i依次去除需要判定的整数n,若n能够被i的范围中的任何一个整数所整除,则表示i必然小于或等于根号n,则可以确定当前的整数n不是素数,结束该次循环。如果n不能被中的任何一个整数所整除,则在完成最后一次循环后,i还需要加1之后才终止循环。此时,整数n为素数。
flag初值设为1,在内层循环中判断时,如果n能够被中的任何一个整数所整除,则在内循环中将flag设置为0。否则在内循环中不会修改flag标志的值,退出内循环后它的值仍为1。此时在外循环中对flag的值进行判断,如果flag=0,则不是素数,如果flag=1,是素数。 baige 发表于 2020-8-23 19:27
判断语句位置写错了,得写在循环里, 你写在外面,只有201会去判断是不是素数
老师,我原本写的不是放在循环里吗? 雨天Zz 发表于 2020-8-23 19:35
老师,我原本写的不是放在循环里吗?
不是,你把判断输出是否是素数的语句放在了外层循环的外面 baige 发表于 2020-8-23 19:27
判断语句位置写错了,得写在循环里, 你写在外面,只有201会去判断是不是素数
我明白了,感激{:5_109:} 这是你的代码:
#include <stdio.h>
#include <math.h>
void main()
{
int n,k,i;
for(n=100; n<=200; n++)
{
k=sqrt(n);
for(i=2; i<=k; i++)
{
if(n%i==0)
{
break;
}
}// 内层循环结束
}// 外层循环结束
// 这样写i = 201 k = sqrt(201), 只会对201进行判断然后输出201是素数还是不是素数
if(i>k)
{
printf("%d is a prime number",n);
}
else
{
printf("%d is not a prime number",n);
}
}
问题解决的话,就结帖吧 楼上那位老师说得对,不过C语言建议把所有语句块的前后大括号设成同一缩进,这样盯着屏幕不好找bug的 #include<stdio.h>
int main()
{
int i,j;
int k=2;
for(i=100;i<201;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
break;
}
if(i==j)
printf("%d\n",i);
}
return 0;
}
页:
[1]