C语言在if语句中希望x与i++比较却不希望对i的数值产生变化。
//此代码是为求解一个数是否为素数。
#include
int main()
{
int x;
scanf("%d",&x);
int i=2;
int prime=1;
while(x%i!=0)
{
if(i++==x)
prime=0;
i++;
}
if (prime==0)
{
printf("为素数");
}
else
{
printf("不为素数");
}
return 0;
}
每次运行if语句i的值都会变化
那你就别i++了啊
再说你这个逻辑也太莫名了,如果i和x相等,那x%i肯定等于0啊,你在while循环里的if(i++==x)永远不会成立的啊
按照你的主体思路进行修改
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
int i=2;
int prime=1;
while(i<x)
{
if(x%i==0)
{
prime=0;
break;
}
i++;
}
if (prime==1)
{
printf("为素数");
}
else
{
printf("不为素数");
}
return 0;
}
i的值不发生变化??
你得循环条件是x%i!=0,i不变化不是死循环了
C语言在if语句中希望x与i++比较却不希望对i的数值产生变化。那比较时如果时 x 与 i++比较,那么相当于x 和 i先比较,然后i再自增。如果不想再比较过程中让i自增,将i-1即可
修改如下,供参考:
#include<stdio.h>
int main()
{
int x;
scanf("%d", &x);
int i = 2;
int prime = 1;
while (x % i != 0 && x > 1) //修改 排除小于 1 的数
{
if ((i+1) == x) //if(i++ == x) 修改
prime = 0;
i++;
}
if (prime == 0 || x == 2) //修改 2 为素数
{
printf("为素数");
}
else
{
printf("不为素数");
}
return 0;
}
#include<stdio.h>
int main() {
int x;
scanf("%d",&x);
int i=2;
int prime=1;
while(x%i!=0) {
i++;
if(i==x){
prime=0;
}
}
if (prime==0) {
printf("为素数");
} else {
printf("不为素数");
}
return 0;
}
这么写,先i++然后判断i是否=x。还有个问题就是,这程序输入1判断不了的。
不是直接用i+1么
把比较的i++改成i+1