项目场景:
用函数实现判断100~200之间的素数
问题描述:
写代码过程成中在if (1 == is_prime(i))语句后面加上了;(分号)
从而导致代码运行结果出现偏差。
#include<stdio.h>
#include<math.h>
int is_prime(int i)
{
int j = 0;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
return 0;
}
return 1;
}
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
if (1 == is_prime(i));//是素数返回1,不是返回0
{
count++;
printf("%d ", i);
}
}
printf("\ncount=%d\n", count);
return 0;
}
原因分析:
if(条件)
语句1;
的代码,当if(条件)后面加了分号之后,将成为
if(条件);
语句1;
这样,当条件表达式为真或不为真,都会执行语句1,且为真时,执行的是空语句,即分号前的语句,相当于:
if( 条件) 空语句;
语句1;
在你的代码中第十八行,if后面加了分号,意味着不管1 == is_prime(i)是否为真,都会直接执行count++;printf("%d ", i);。
所以运行结果就是100~200之间的数
解决方案:
将if (1 == is_prime(i))后的分号去掉
#include<stdio.h>
#include<math.h>
int is_prime(int i)
{
int j = 0;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
return 0;
}
return 1;
}
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
if (1 == is_prime(i))//是素数返回1,不是返回0
{
count++;
printf("%d ", i);
}
}
printf("\ncount=%d\n", count);
return 0;
}