自学新手,求教函数指针作参数的问题?
问题我已经标在下面程序,希望大大不吝回复。在此谢过。
- C/C++ code
#include<iostream>#include<stdlib.h>using namespace std;int main(){ int n; double peven(int); double podd(int); double scall(double,int); cout<<"Please input a number:"; cin>>n; if(n==1) { cout<<"Input a wrong number!"; abort(); } double sum=0; if(n%2==0) { sum=scall(peven,n); //错误:不能将‘double scall(double, int)’的实参‘1’从‘double (*)(int)’转换到‘double’ } else { sum=scall(podd,n); //同上错误 } cout<<"The sum of numbers:"<<sum<<endl; return 0;}double peven(int n){ double s; int i; s=0; for(i=2;i<=n;i+=2) s+=1/(double)i; return(s);}double podd(int n){ double s; int i; s=0; for(i=1;i<=n;i+=2) s+=1/(double)i; return(s);}double (*f)(int n);double scall(double (*f)(int),int n) //这里该怎么定义?{ double s=0; s=(*f)(n); return s;}[解决办法]
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef double (* pf)(int);
int main()
{
int n;
double peven(int);
double podd(int);
double scall(pf,int);
cout<<"Please input a number:";
cin>>n;
if(n==1)
{
cout<<"Input a wrong number!";
abort();
}
double sum=0;
if(n%2==0)
{
sum=scall(peven,n);
}
else
{
sum=scall(podd,n);
}
cout<<"The sum of numbers:"<<sum<<endl;
return 0;
}
double peven(int n)
{
double s;
int i;
s=0;
for(i=2;i<=n;i+=2)
s+=1/(double)i;
return(s);
}
double podd(int n)
{
double s;
int i;
s=0;
for(i=1;i<=n;i+=2)
s+=1/(double)i;
return(s);
}
double (*f)(int n);
double scall(pf f,int n) //这里该怎么定义?
{
double s=0;
s=(*f)(n);
return s;
}
[解决办法]
- C/C++ code
#include<iostream>#include<stdlib.h>using namespace std;double peven(int n){ double s; int i; s=0; for(i=2;i<=n;i+=2) s+=1/(double)i; return(s);}double podd(int n){ double s; int i; s=0; for(i=1;i<=n;i+=2) s+=1/(double)i; return(s);}typedef double (*f)(int n);double scall(f ff,int n) //这里该怎么定义?{ double s=0; s=(*ff)(n); return s;}int main(){ int n; //double peven(int); //double podd(int); //double scall(double,int); cout<<"Please input a number:"; cin>>n; if(n==1) { cout<<"Input a wrong number!"; abort(); } double sum=0; if(n%2==0) { sum=scall(peven,n); //错误:不能将‘double scall(double, int)’的实参‘1’从‘double (*)(int)’转换到‘double’ } else { sum=scall(podd,n); //同上错误 } cout<<"The sum of numbers:"<<sum<<endl; system("pause"); return 0; }