题目:判断m是否为素数。 #include <stdio.h> void wwjt(); int fun(int n)
时间: 2024-05-06 13:15:41 浏览: 109
题目给出了函数名为fun,参数为整数n,但是函数体并没有给出。同时,代码中还有一个没有用到的函数wwjt,可以删除掉。下面给出一个简单的判断素数的函数实现:
```c
#include <stdio.h>
int is_prime(int m) {
if (m <= 1) {
return 0;
}
for (int i = 2; i * i <= m; i++) {
if (m % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int m;
scanf("%d", &m);
if (is_prime(m)) {
printf("%d是素数\n", m);
} else {
printf("%d不是素数\n", m);
}
return 0;
}
```
其中is_prime函数用于判断一个数是否为素数,如果是则返回1,否则返回0。在主函数中读入一个整数m,然后调用is_prime函数判断m是否为素数,输出相应的信息。
相关问题
(1) 功能:判断m是否为素数,若是返回1,否则返回0。 #include <stdio.h> /**********FOUND**********/ void fun( int n) { int i,k=1; if(m<=1) k=0; /**********FOUND**********/ for(i=1;i<m;i++) /**********FOUND**********/ if(m%i=0) k=0; /**********FOUND**********/ return m; } void main() { int m,k=0; for(m=1;m<100;m++) if(fun(m)==1) { printf("%4d",m);k++; if(k%5==0) printf("\n"); } }
下面是修改后的程序:
```
#include <stdio.h>
int fun(int m) {
int i,k=1;
if(m<=1) k=0;
for(i=2;i<m;i++)
if(m%i==0) {
k = 0;
break;
}
return k;
}
int main() {
int m,k=0;
for(m=1;m<100;m++)
if(fun(m)==1) {
printf("%4d",m);
k++;
if(k%5==0) printf("\n");
}
return 0;
}
```
主要修改如下:
1. 函数返回类型应该是 `int` 而不是 `void`。
2. 函数参数应该是 `m` 而不是 `n`。
3. 在判断是否为素数时,应该从 `2` 开始循环而不是从 `1` 开始,同时循环条件应该是 `i<m` 而不是 `i<=m`。
4. 判断是否为素数时,应该用 `m%i==0` 而不是 `m%i=0`。
5. 在判断是否为素数时,如果找到一个能整除的数,应该立即停止循环,可以用 `break` 语句实现。
6. `main` 函数应该返回一个值,一般情况下返回 `0` 表示程序正常结束。
功能:判断m是否为素数,若是返回1,否则返回0。 请修改下列程序,使其输出正确结果 /***********FOUND***********/ 后是有问题的代码 #include <stdio.h> /**********FOUND**********/ void fun( int n) { int i,k=1; if(m<=1) k=0; /**********FOUND**********/ for(i=1;i<m;i++) /**********FOUND**********/ if(m%i=0) k=0; /**********FOUND**********/ return m; } int main() { int m,k=0; for(m=1;m<100;m++) if(fun(m)==1) { printf("%4d",m);k++; if(k%5==0) printf("\n"); } }
修改后的代码如下:
```c
#include <stdio.h>
int is_prime(int m) { // 修改函数名和形参名
int i, k = 1;
if (m <= 1) { // 添加花括号
k = 0;
}
for (i = 2; i < m; i++) { // 将 1 修改为 2
if (m % i == 0) {
k = 0;
break; // 添加 break
}
}
return k;
}
int main() {
int m, k = 0;
for (m = 1; m < 100; m++) {
if (is_prime(m) == 1) {
printf("%4d", m);
k++;
if (k % 5 == 0) {
printf("\n");
}
}
}
return 0;
}
```
原代码存在以下问题:
1. 函数名和形参名为 `fun` 和 `n`,而不是 `m`;
2. 在函数中,判断素数的循环应该从 2 开始,而不是 1;
3. 判断素数的循环应该到 `m` 而不是 `m - 1`;
4. 判断素数的循环中,如果发现 `m` 能被某个数整除,就应该令 `k` 等于 0,并且使用 `break` 退出循环;
5. 判断素数的循环中,应该判断 `m % i == 0`,而不是 `m % i = 0`,因为 `=` 表示赋值,而 `==` 表示相等性判断;
6. 函数中应该使用 `return k`,而不是 `return m`;
7. 在主函数中,应该调用函数 `is_prime(m)`,而不是 `fun(m)`。
阅读全文