源程序如下: #include <stdio.h> int fun(int m) {int i, k ; for (i = m + 1 ; ; i++) { for (k = 2 ; k < i ; k++) /**************found**************/ if (i % k != 0) break ; /**************found**************/ if (k < i) return(i); } } void main() { int n ; n = fun(20); printf("n=%d\n", n); }
时间: 2023-06-29 21:05:47 浏览: 91
这段程序的功能是找出大于 m 的第一个质数,并将其作为函数的返回值。
程序中的错误在于第二个 for 循环的判断条件不正确。应该在循环中判断 i 是否能被 k 整除,如果可以则说明 i 不是质数,跳出循环;如果循环结束后仍然没有找到 i 的因数,则说明 i 是质数,返回 i。
以下是修改后的程序:
```c
#include <stdio.h>
int fun(int m) {
int i, k;
for (i = m + 1;; i++) {
for (k = 2; k < i; k++) {
if (i % k == 0) {
break;
}
}
if (k == i) {
return i;
}
}
}
void main() {
int n;
n = fun(20);
printf("n=%d\n", n);
}
```
运行结果为:
```
n=23
```
相关问题
源程序如下: #include <math.h> #include <stdio.h> double fun(int n) { } main() { int n; double sum; printf("\n\nInput n: "); scanf("%d",&n); sum=fun(n); printf("\n\nsum=%f\n\n",sum); }按我上面说的完善这个程序
好的,根据你的需求,下面是完善后的程序:
```c
#include <math.h>
#include <stdio.h>
double fun(int n) {
double sum = 0.0;
for (int i = 1; i <= n; i++) {
sum += 1.0 / i;
}
return sum;
}
int main() {
int n;
double sum;
printf("\n\nInput n: ");
scanf("%d", &n);
sum = fun(n);
printf("\n\nsum=%f\n\n", sum);
return 0;
}
```
这个程序的作用是计算 $1+1/2+1/3+\cdots+1/n$ 的和,并将结果输出。其中 `fun` 函数实现了这个求和的过程,`main` 函数则负责输入和输出。
/*请编写函数fun,其功能是:计算并输出3到n之间所有素数的平方根之和。 例如,若主函数从键盘给n输入100后,则输出为sum=148.874270。注意:n的值要大于2但不大于1000。部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:*/ #include<stdio.h> #include<stdlib.h> #include<math.h> double fun(int n)
```c
double fun(int n)
{
int i, j, flag;
double sum = 0;
for (i = 3; i <= n; i++)
{
flag = 1;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
sum += sqrt(i);
}
}
return sum;
}
```
阅读全文