项目场景:
用函数实现判断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; }