请用C语言编写如下程序:设计一个子函数,用以判断一个整数是否为素数,如果是,则返回1;如果不是,则返回0,并利用此函数,在主函数中调用此函数,找出100-200之间的所有素数。
时间: 2023-06-24 18:07:41 浏览: 175
以下是程序代码:
```
#include <stdio.h>
int isPrime(int num) {
int i;
if (num <= 1) {
return 0;
}
for (i = 2; i <= num / 2; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int i;
printf("100-200之间的素数有:\n");
for (i = 100; i <= 200; i++) {
if (isPrime(i)) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
```
首先定义了一个函数 `isPrime`,用于判断一个整数是否为素数。在函数中,如果参数 `num` 小于等于1,则直接返回0,因为1不是素数。然后通过循环从2开始到 `num / 2`,依次判断 `num` 能否被整除。如果能被整除,则说明不是素数,返回0;否则就一直循环,最终返回1,说明是素数。
在 `main` 函数中,利用循环从100到200,依次判断每个数是否为素数,如果是,则输出该数。最后输出一个换行符,使输出结果更加美观。
相关问题
判断素数c语言
### 如何用C语言编写判断素数的程序
以下是几种常见的实现方式来判断一个数是否为素数:
#### 方法一:基本循环法
通过遍历从 `2` 到输入数值的一半范围内的所有整数,检查是否存在能被该数整除的情况。
```c
#include <stdio.h>
int main() {
int input = 0;
scanf("%d", &input);
int i = 0;
for (i = 2; i <= input / 2; i++) {
if (input % i == 0) {
printf("%d 不是素数\n", input);
return 0;
}
}
if (input > 1) {
printf("%d 是素数\n", input);
} else {
printf("%d 不是素数\n", input);
}
return 0;
}
```
这种方法的时间复杂度较高,适用于较小规模的数据处理[^3]。
---
#### 方法二:优化后的平方根算法
仅需检测到小于等于给定数开方的结果即可完成验证工作。如果在这个区间内发现任何因子,则可以断言这个数并非质数;反之则确认它是质数。
```c
#include <stdio.h>
#include <math.h> // 使用 sqrt 函数需要引入 math 库
int main() {
int n;
printf("请输入一个数字:");
scanf("%d", &n);
int i, isPrime = 1;
for (i = 2; i * i <= n; i++) {
if (n % i == 0) {
isPrime = 0;
break;
}
}
if (isPrime && n != 1) {
printf("%d 是素数\n", n);
} else {
printf("%d 不是素数\n", n);
}
return 0;
}
```
这种改进显著降低了不必要的计算量,提高了效率[^1]。
---
#### 方法三:函数封装版
将逻辑抽象成独立的功能模块——即定义一个新的名为 `prime()` 的辅助子过程负责实际运算部分,而主流程只专注于接收数据并调用它得到最终结论。
```c
#include <stdio.h>
// 定义用于测试单个值是否属于质数集合的工具方法
int prime(int num) {
int flag = 1, i;
for (i = 2; i < num / 2 && flag == 1; ++i) {
if (num % i == 0) {
flag = 0;
}
}
return flag;
}
int main() {
int number;
printf("请输入一个整数:");
scanf("%d", &number);
if (prime(number)) {
printf("%d 是一个素数。\n", number);
} else {
printf("%d 不是一个素数。\n", number);
}
return 0;
}
```
这种方式不仅让代码结构更加清晰易读,而且便于后续扩展维护[^4]。
---
#### 方法四:批量筛选素数(埃拉托斯特尼筛法)
当目标是从某个范围内找出所有的素数时,“埃氏筛”是一种非常高效的策略。其核心思想是以已知的小于当前候选者的所有先前找到过的素作为排除依据逐步缩小待考察对象集直至结束条件满足为止。
虽然题目并未提及具体需求涉及连续区间的查询操作,但这里仍提供一种可能的应用场景供参考学习之用:
```c
#include <stdio.h>
#define MAX_SIZE 1000
void sieveOfEratosthenes(int limit) {
char primes[MAX_SIZE];
memset(primes, 1, sizeof(primes));
primes[0] = primes[1] = 0;
for (int p = 2; p*p <= limit; p++) {
if (primes[p]) {
for (int multiple = p*p; multiple <= limit; multiple += p){
primes[multiple]=0;
}
}
}
for (int k=2;k<=limit;++k){
if (primes[k]){
printf("%d ",k);
}
}
}
int main(){
int upperBound;
printf("Enter Upper Bound:");
scanf("%d",&upperBound);
sieveOfEratosthenes(upperBound);
return 0;
}
```
此版本特别适合解决类似寻找一定界限以内全部符合条件项的任务类型问题[^2]。
---
### 总结说明
以上分别介绍了四种不同风格和技术特点的解决方案,每种都有各自适用场合以及优缺点考量因素存在。可以根据实际情况灵活选用最适合的一种或者组合起来综合应用达到最佳效果。
阅读全文
相关推荐














