| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2026 人关注过本帖
标题:关于数组参数传递的过程中出现了问题,求大神解答
取消只看楼主 加入收藏
魂之子
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2019-12-25
结帖率:90.91%
收藏
已结贴  问题点数:18 回复次数:3 
关于数组参数传递的过程中出现了问题,求大神解答
问题描述;
二分法求函数根的原理为:如果连续函数f(x)在区间[a,b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0。
二分法的步骤为:
检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2;否则
如果f(a)f(b)<0,则计算中点的值f((a+b)/2);
如果f((a+b)/2)正好为0,则(a+b)/2就是要求的根;否则
如果f((a+b)/2)与f(a)同号,则说明根在区间[(a+b)/2,b],令a=(a+b)/2,重复循环;
如果f((a+b)/2)与f(b)同号,则说明根在区间[a,(a+b)/2],令b=(a+b)/2,重复循环。
本题目要求编写程序,计算给定3阶多项式f(x)的根
#include<stdio.h>
#define N 0.01
#define A 4

double F(double x,double a[]);
int main(){
   
    double a0,a1,a2,a3;
    double b0,b1;
    double roof;
    double x;
    double mediate;
   
    scanf("%fl %fl %fl %fl",&a0,&a1,&a2,&a3);
    double a[A]{a0,a1,a2,a3};
    scanf("%lf %lf",&b0,&b1);
    mediate = b0+b1;
   
    if(b0-b1<=N){
        printf("%f",(b1-b0)/2);
    }else{
        do{
            if(F(b0,a[])*F(mediate,a[])>0){
                b0 = mediate;
            } else{
                b1 = mediate;
            }
            mediate = b0+b1;
            roof = F(mediate,a[]);
            
        }while(roof-(int)roof>=N);   
   
    printf("%f",roof) ;
    }
    return 0;
   
}

    double F(double x,double a[]){
        double F;
        F = a[0]*x*x*x+a[1]*x*x+[a2]*x+a[3];
        return F;
    }   
搜索更多相关主题的帖子: 区间 参数 传递 double 数组 
2020-01-12 11:19
魂之子
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2019-12-25
收藏
得分:0 
回复 3楼 叶纤
我没太明白你说的定义是什么意思,主函数中double a【N】不是定义吗?
2020-01-12 11:47
魂之子
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2019-12-25
收藏
得分:0 
回复 6楼 吕孟伟
非常感谢大哥帮我通过编译,感激不尽。现在编译过了,但是代码还是有问题,do while中的判断有问题直接就跳出来了,调试半天也没找出来错误。
输入:
3 -1 -3 1
-0.5 0.5
应该输出:

0.33
2020-01-12 13:17
魂之子
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2019-12-25
收藏
得分:0 
回复 6楼 吕孟伟
#include <stdio.h>
#define N 0.000001
#define A 4
#include <math.h>

double F(double x,double a[]);
int main(){
   
    double a0,a1,a2,a3;
    double b0,b1;
    double root;
    double x;
    double mediate;
   
    scanf("%lf %lf %lf %lf",&a0,&a1,&a2,&a3);
    double a[A] = {a0,a1,a2,a3};
    scanf("%lf %lf",&b0,&b1);
    mediate = (b0+b1)/2;
   
    if(b1-b0<=N){
        printf("%f",(b1-b0)/2);
    }else{
        do{
            if(F(b0,a)*F(mediate,a)>0){
                b0 = mediate;
            } else{
                b1 = mediate;
            }
            mediate = (b0+b1)/2;
            root = mediate;
            
        }while (fabs(F(b1,a)-F(b0,a)>=N));   
   
    printf("%.2f",root) ;
    }
    return 0;
   
}

    double F(double x,double a[]){
        double f;
        f = a[0]*x*x*x+a[1]*x*x+a[2]*x+a[3];
        return f;
    }   
2020-01-12 13:17
快速回复:关于数组参数传递的过程中出现了问题,求大神解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015647 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved