C语言代码题-----函数指针
题目:
初次代码:
代码修改:``
# include<stdio.h>
#include<math.h>
float y_1(float x)
{
float y1;
y1=1+x*x;
return y1;
}
float y_2(float x)
{
float y2;
y2=x/(1+x*x);
return y2;
}
float Integral (float (*f)(float),float a, float b)
{
float x=0;/*注意,不论以后的变量是否会在原值基础上叠加,最好都要初始化,否则在后续代码修改时会出现未初始化错误,输出垃圾值。*/
float h=0;
float s=0;
h=(b-a)/100//注意:此处应该是b-a而不是a-b,b比a大,原版本代码在此处出现了大小判断错误。
float i=0;//注意:在此处,i因其作用不同不再是简单程序中的int值了,见后续程序。
for(i=0;i+h<=(b-a);i+=h)//思想:将b-a分为100份,在草纸上进行演算,提出同类项后会发现公式。
{
x=x+((*f)(a+i)+(*f)(a+i+h))/2;//注意:这里要累加起来,不要忘记加上原来的x
}
s=x*h;
return s;
}
int main(void)
{
int main (void)
{
float y1,y2;
y1=Integral(y_1,0,1);
y2=Integral(y_2,0,3);
printf("y1=%f\ny2=%f\n",y1,y2);
return 0;
}
//
啊这,第一次使用优快云,卡在代码块里出不来了(吐血)
总结:关注每一个变量的意义和作用
关注边界的问题
学到的新知识:在第三个函数中第一个参量(float)(*f)(float a)第一个float指的是这个函数的返回值是float类型,*f是调用的函数地址,在调用时直接传输被调函数的名字(就是一级指针类型变量);
举个栗子:float (*f)(int ,float)-----后面的int,float是被调函数接收的参数类型,就是被调函数的定义的时候后面那一块。
2019.10.19