如何使用C语言实现素数判断函数IsPrime(),分别用goto、break和标志变量试商法来判断素数。
时间: 2024-09-19 15:03:58 浏览: 47
c语言:实现一个函数,判断一个数是不是素数
5星 · 资源好评率100%
在C语言中,素数判断函数通常通过试除法进行,即检查一个数是否能被小于它的所有数整除。这里有三种常见的实现方式:
1. **使用 goto 和 break** (非推荐做法,因为这会使代码难以理解和维护):
```c
#include <stdio.h>
void IsPrimeUsingGoto(int num) {
int i;
if (num <= 1) {
printf("%d 不是素数\n", num);
return;
}
for (i = 2; i <= num / 2; i++) {
if (num % i == 0) {
goto is_not_prime; // 如果找到因子,直接跳到标记处
}
}
printf("%d 是素数\n", num);
is_not_prime:
printf("%d 不是素数\n", num);
}
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
IsPrimeUsingGoto(n);
return 0;
}
```
2. **使用 break** (更清晰一些):
```c
#include <stdio.h>
int IsPrimeUsingBreak(int num) {
if (num <= 1)
return 0;
for (int i = 2; i * i <= num; i++) { // 只需检查到根号即可
if (num % i == 0) {
break;
}
if (i * i == num) // 防止测试偶数时重复
break;
}
if (i * i > num)
return 1; // 没有找到因子,所以是素数
return 0; // 找到了因子,不是素数
}
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
if (IsPrimeUsingBreak(n))
printf("%d 是素数\n", n);
else
printf("%d 不是素数\n", n);
return 0;
}
```
3. **使用标志变量(推荐的做法,采用循环条件改变)**:
```c
#include <stdio.h>
int is_prime(int num, int* flag) { // 使用指针避免多次声明标志变量
if (num <= 1) {
*flag = 0;
return 0;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
*flag = 0;
break;
}
}
*flag = 1; // 没有找到因子,设标志为1表示是素数
return 1;
}
int main() {
int n, prime_flag = 0;
printf("请输入一个正整数:");
scanf("%d", &n);
if (is_prime(n, &prime_flag)) {
if (prime_flag)
printf("%d 是素数\n", n);
else
printf("%d 不是素数\n", n);
}
return 0;
}
```
阅读全文