| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 264 人关注过本帖
标题:这程序是有问题的,由于之前没有注释大家都不知道求什么,现在尽可能的打算 ...
只看楼主 加入收藏
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
这程序是有问题的,由于之前没有注释大家都不知道求什么,现在尽可能的打算注释,看看大家能帮忙解决没有
#include<stdio.h>
#include<math.h>
#define maxsize 100
#define eps 0.000001
int main(void)
 {
     double a,b,t,x[maxsize],step,s0,s1,f();
     int i,n;
 
    printf("please input a= and b=\n");
     scanf("%lf  %lf",&a,&b);
 
    n=1;
     s0=(f(a)+f(b))*(b-a)*step/2;
     do
     {
             n=n+1;
             step=(b-a)/n;
         for(i=0;i<n;i++)
         {
         
             x[i]=a+i*step;
             s1=0;
                 for(i=1;i<=n;i++)
                 
                    s1+=(f(x[i]))*step;
                 
                    t=s0;
                     s0=s1;
                 
                    
         
         }
         
     }
     while (fabs(s0-t)>eps);
     {
         printf("s0=%lf\n",s0);
         printf("此时步长为:%d",n);
         printf("\n");
     }
     return 0;
 }
 double f(double m)
 {
     double y;
     y=sqrt(1+pow(m,2));
     return y;
 }
     
求得积分近似值=(f(a)+f(b)+两倍(求和公式(i从1到n-1)(f(i)+f(i+1))*(h/2)  xi=a+i*n (i=0,....,n),step=(b-a)/n,(a,b)为积分区间。放出来几天了,没有注释,因为这里打不了符号这能这么打,希望大家原谅
搜索更多相关主题的帖子: please include 
2012-11-22 23:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:7 
图片附件: 游客没有浏览图片的权限,请 登录注册


程序代码:
// 求定积分

#include <clocale>
#include <cstdio>
#include <cmath>
#include <conio.h>

void Pause(void);
double Func(double x);
void Show_Func(void);
double Definite_Iintegral(double lower_limit, double upper_limit, double increase);

void wmain(void)
{
    double lower_limit(0);
    double upper_limit(1);
    double increase(1E-6);

    _wsetlocale(LC_ALL, L"chs");
    wprintf_s(L"函数f(x)=");
    Show_Func();
    wprintf_s(L"\n下限a=%f\n", lower_limit);
    wprintf_s(L"上限b=%f\n", upper_limit);
    wprintf_s(L"微分步进量dx=%f\n", increase);
    wprintf_s(L"定积分的近似值=%f\n", Definite_Iintegral(lower_limit, upper_limit, increase));
    Pause();
}

// 暂停
void Pause(void)
{
    wprintf_s(L"\n按任意键继续...");
    _getwch();
}

// 原函数
double Func(double x)
{
    return sqrt(1 + pow(x, 2));
}

void Show_Func(void)
{
    wprintf_s(L"sqrt(1 + pow(x, 2))");
}

// 功能:求定积分
// 参数:lower_limit -- 积分下限
//       upper_limit -- 积分上限
//       increase    -- 微分步进量
double Definite_Iintegral(double lower_limit, double upper_limit, double increase)
{
    double result(0);
    for (double x = lower_limit; x <= upper_limit; x += increase)
    {
        result += Func(x) * increase;
    }
    return result;
}


图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2012-11-23 03:13
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:7 
楼主啊,你这个问题都开了多少个贴了,就不看大家的回复吗?

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-11-23 06:54
youngdavid
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:698
注 册:2012-9-24
收藏
得分:7 
顶楼上的,你之前这个贴开了三次我回了三次,没想到你又跑这儿来了,下面把我前三次的回复附上:


楼主代码有点小问题
do
    {
        n++;
        step=(b-a)/n;
        for(i=0;i<=n;i++)
        {
            x[i]=a+i*step;
            s1=0;
      
            for(i=1;i<=n;i++)
                s1+=(f(x[i+1])+f(x[i]))*step/2;
            t=s0;
            s0=s1;
      
        }
    }
这里面内层for循环运行到最后的时候x[i+1]超出输入设定的界限了,另外比如n=20对于某一个外层for循环i=5,内层for循环x[i]中i从6到20是没有赋值的,为随机值,所以会运行出错。
2012-11-24 19:00
快速回复:这程序是有问题的,由于之前没有注释大家都不知道求什么,现在尽可能的 ...
数据加载中...
 
   



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

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