关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

小符号 大影响

发布时间:2023-06-27 20:00:32

项目场景:


用函数实现判断100~200之间的素数

问题描述:


写代码过程成中在if (1 == is_prime(i))语句后面加上了;(分号)

从而导致代码运行结果出现偏差。

#include#includeint 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#includeint 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; }

   


/template/Home/leiyu/PC/Static