学习笔记---自定义函数提高---2

41 篇文章 0 订阅
10 篇文章 0 订阅
自定义函数提高 第二部分
函数原型: 函数声明的形式


函数原型与函数定义的一致:
1.返回值类型一致
2.函数名一致
3.参数个数一致
4.参数类型一致
5.参数顺序一致


示例:

//以下的函数声明方式是等价的

float max(float,float);
float max(float x,float y);
float max(float a,float b);

注:函数声明并不要求参数名称一致,所以声明时int max(int x,int y)而在定义时int max(int a,int b){}也是可以的。


函数原型对函数调用的指导

对照函数原型即可确定函数调用的形式,以及对返回值的利用方法。



通过函数解决数学问题

用弦截法解方程:

代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*
用弦截法求解方程

数学基础:
介值定理:设函数f(x)在闭区间[a,b]上连续,
且f(a)与f(b)异号(即f(a)*f(b)<0)则在开区间(a,b)内至少有函数f(x)的一个解

据此设计算法:
连接(x1,f(x1))和(x2,f(x2))两点,此弦交X轴于:x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1))
若f(x)与f(x1)同号,则根在(x,x2)区间内,将x作为新的x1
若f(x)与f(x2)同号,则根在(x1,x)区间内,将x作为新的x2
重复运算直到f(x)的绝对值等于零或小于某个极小的值,就能将x作为方程的近似解
*/
double f(double);//用于通过x的值运算f(x)的值
double xpoint(double,double);//用于通过x1,x2的值运算x的值
double root(double,double);//基础方法
int main()
{
    double x1,x2,f1,f2,x;
    do//此循环用于保证输入的x1,x2区间内有解
    {
        printf("input x1,x2:");
        scanf("%lf%lf",&x1,&x2);
        f1=f(x1);
        f2=f(x2);
    }
    while(f1*f2>=0);
    x=root(x1,x2);
    printf("A root is %.5f\n",x);
    return 0;
}

double root(double x1,double x2)
{
    double x,y,y1;
    y1=f(x1);
    do
    {
        x=xpoint(x1,x2);
        y=f(x);
        if(y*y1>0)
        {
            y1=y;
            x1=x;
        }
        else
        {
            x2=x;
        }
    }
    while(fabs(y)>=0.00001);//当f(x)的绝对值小于0.00001时,就认为x是一个近似解
    return x;
}

double xpoint(double x1,double x2)
{
    double x;
    x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
    return x;
}
/*
方程算式
可以通过改变这个方程,来改变这个架构解决的问题
*/
double f(double x)
{
    double y;
    y=x*x*x-5*x*x+16*x-80;
    return y;
}
结果:



解析:
1.通过合理的使用函数,一个复杂的程序被分割整理的十分简洁易懂
2.弦截法是在高中的数学学习中被我们扣上无用、繁琐的帽子。但在程序编写中却发挥了巨大的作用,还有很多数学上的方法也是如此(如数列的递推公式)。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值