分类：教育/科学-学习帮助
问题：C语言的问题题目:输入一个整数,判断是否是素数(只能被1和它本身 
题目: 输入一个整数,判断是否是素数(只能被1和它本身整除的并且大于1的自然数)看看底下的对不对,错了要怎么改?main(){int x=1,n,i;scanf("%d",&n);if (n=2) printf("是素数");else for (i=2;i<n;i++)   {if (n%i==0){x=0;break;}     else continue;}if (x=0) printf("不是素数")else printf("是素数")；} 
回答：main(){int x=1,n,i;scanf("%d",&n);if (n=2) printf("是素数");     /*这里应该是if(n==2)*/else for (i=2;i<n;i++){if (n%i==0){x=0;break;}else continue;}if (x=0) printf("不是素数")    /*这里应该是if(x==0)*/else printf("是素数")；} 开始没仔细看的逻辑，只看见if里面的错误了，现在补充如下：1.如果n的值为2，那么第一次判断if(n==2)成立会输出一次"是素数"，但是程序并没有结束，会再一次跳到判断if(x==0)，此时条件不成立会再次输出"是素数"。解决方法是加括号或者提前返回，在哪里 就不用说了吧。 r循环里面的判断按理说也不算错，就是有些效率上的浪费，因为计算素数只需要判断到n的平方根大小的数就OK了，比如说，假如n的值是7，没有必要从2一直除到6才证明是素数对吧。所以完整的算法可以这么写main(){   int x = 1, n, i;   int sqrtn = 0;   scanf( "%d", &n );   if ( n <= 1 )   {       printf( "%d不是素数\n", n );       return;   }   if( n==2 )   {       printf( "%d是素数\n", n );       return;   }   sqrtn = int(sqrt(n));   for( i=2; i<=sqrtn; i++ )   {          if( n%i == 0 )        {            x = 0;            break;        }   }   if( x == 0 )   {         printf( "%d不是素数\n", n);    }    else    {          printf( "%d是素数\n", n );    }}1.引入sqrtn是为了避免每次都计算n的平方根浪费2.引入对n<=0的判断是为避免后面计算平方根出错=======================谢谢青青子衿的提醒，对于n的值为1时判断为素数的错误已修改，另外，上面的程序我没有编译调试，应该是存在青青子衿所说的包含相应头文件及类型转换的问题，再次感谢青青子衿