利用指针函数 输入n为偶数时 调用函数求1/2+1/4+..1/n 当输入n为奇数时 调用1/1+1/3+…1/n 输出计算结果保留两位小数
时间: 2023-11-13 17:03:18 浏览: 110
这段代码是一个利用指针函数实现的计算偶数和奇数的程序。当输入n为偶数时,调用pEven函数计算1/2+1/4+...+1/n的和;当输入n为奇数时,调用pOdd函数计算1/1+1/3+...+1/n的和。dcall函数是一个指针函数,它的参数是一个指向函数的指针和一个整数n,返回值是一个浮点数。它的作用是根据传入的函数指针调用相应的函数,并返回计算结果。在主函数中,通过循环输入n的值,如果n小于1则退出循环,否则根据n的奇偶性调用相应的函数,并输出计算结果,保留两位小数。
相关问题
用C语言写题:利用指针函数 输入n为偶数时 调用函数求1/2+1/4+..1/n 当输入n为奇数时 调用1/1+1/3+…1/n 输出计算结果保留两位小数
这是一道利用指针函数的C语言编程题,根据输入的n的奇偶性,调用不同的函数计算并输出结果。当输入n为偶数时,调用pEven函数计算1/2+1/4+...+1/n的和;当输入n为奇数时,调用pOdd函数计算1/1+1/3+...+1/n的和。最后将计算结果保留两位小数输出。
下面是代码实现:
```
#include <stdio.h>
float pEven(int n) //偶数
{
float sum = 0;
for (float i = 2; i <= n; i += 2) {
sum += 1 / i;
}
return sum;
}
float pOdd(int n) //奇数
{
float sum = 0;
for (float i = 1; i <= n; i += 2) {
sum += 1 / i;
}
return sum;
}
float dcall(float (*fp)(int n), int n) //其中float (*p)(int n)是一个指向函数的指针类型,函数的参数是int n,返回值是float
{
float s = fp(n); //相当于调用了第一个函数指针参数指向的函数
return s;
}
int main()
{
int n = 0;
float sum = 0;
while (1) {
scanf("%d", &n);
if (n < 1) break;
else if ((n % 2) == 0) {
printf("Even=");
sum = dcall(pEven, n);
}
else {
printf("Odd=");
sum = dcall(pOdd, n);
}
printf("%.2f\n", sum); //保留两位小数输出
}
return 1;
}
```
编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)
好的,对于这个问题,我可以给出以下的代码示例:
```c++
#include <iostream>
using namespace std;
double *compute(int n){
double *sum = new double(0.0);
if(n % 2 == 0) {
for(int i = 2; i <= n; i += 2) {
*sum += 1.0 / i;
}
}
else {
for(int i = 1; i <= n; i += 2) {
*sum += 1.0 / i;
}
}
return sum;
}
int main()
{
int n = 6; // 偶数
double *sum = compute(n);
cout << "1/2 + 1/4 + ... + 1/" << n << " = " << *sum << endl;
delete sum;
n = 7; // 奇数
sum = compute(n);
cout << "1/1 + 1/3 + ... + 1/" << n << " = " << *sum << endl;
delete sum;
return 0;
}
```
上述代码中,我们定义了一个指针函数`compute`,它接受一个参数`n`,并返回一个指向`double`类型数据的指针。在函数中,我们通过判断`n`的奇偶性,分别计算不同的数列,并累加求和。最后返回累加和的指针。
在`main`函数中,我们分别调用了两次`compute`函数,并打印结果。需要注意的是,在使用完指针后,我们需要手动释放内存,以避免内存泄漏问题。
阅读全文