| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 668 人关注过本帖
标题:源代码W-tc调试成功,却结果错误?
只看楼主 加入收藏
hanyutianming
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-11-25
收藏
 问题点数:0 回复次数:1 
源代码W-tc调试成功,却结果错误?
说明:这是为一个计算方法编写的程序:
ps:这是为一道题编写的两个程序:
请问这两个程序中的f(x)有什么不同?

——————————————————————————
#include<stdio.h>
#include<math.h>

#define a   2
#define b   3
#define e   0.00005
#define f(x)    1/(x*x-1)

double T(int N)
{
    int i,n;

    double h,x[20]={0},y[20]={0},result=0;
    n=N;
    h=(b-a)/n;
    for(i=1;i<n;i++)
        {
            x[i]=a+h*i;
            y[i]=f(x[i]);
           
        }
    for(i=1;i<n;i++)
        result+=y[i];
    result+=f(a)/2+f(b)/2;
    result*=h;
    return result;

}
int main()
{

    int i=2;
    double tmp;
    do{

        tmp=T(i)-T(i-1);


        if(tmp>e)
            i++;
        else
        {
            printf("\nT(%d)=%f,T(%d)=%f",i,T(i),(i-1),T(i-1));
            printf("\n复化梯形公式求得的结果:T(%d)=%f",i,T(i));
            return ;
        }
    }
    while(1);
    getch();
}



——————————————————————————————
#include<stdio.h>
#include<math.h>

#define a   2
#define b   3
#define e   0.00005

    f(x)
double f(int x) {
    return 1/(x*x-1);
}



double T(int N)
{
    int i,n;

    double h,x[20]={0},y[20]={0},result=0;
    n=N;
    h=(b-a)/n;
    for(i=1;i<n;i++)
        {
            x[i]=a+h*i;
            y[i]=f(x[i]);
            printf("\t y[%d]=%lf",i,y[i]);
        }
    for(i=1;i<n;i++)
        result+=y[i];
    result+=f(a)/2+f(b)/2;
    result*=h;
    return result;

}


int main()
{

    int i=2;
    double tmp;

   
    do{

        tmp=T(i)-T(i-1);


        if(tmp>e)
            i++;
        else
        {
            printf("\nT(%d)=%f,T(%d)=%f",i,T(i),(i-1),T(i-1));
            printf("\n复化梯形公式求得的结果:T(%d)=%f",i,T(i));
            return ;
        }
    }
    while(1);
    getch();
}
搜索更多相关主题的帖子: 源代码 结果 调试 
2008-11-25 16:45
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
两个完全不同..
第一个define的,它是宏替换,是等量代换的,不能够上括号啊~之类的,给你举一个例子
程序代码:
#include <stdio.h>
#include <conio.h>
#define a(x) 1+x*x
main(){
  printf("%d",2*a(3));
  getch();
}


他的计算方式是等量代换,也就是说
2*a(3)=2*1+x*x,仔细看看啊,不是等于2*(1+x*x)
所以结果和return不同..
也就是说如果用自定义函数和宏替换来比较的话
这样好说一点:
#define a(x) x+x
int a(x){
  return x+x;
}
调用时,前面增加了一个2*,也就是调用时是:2*a(x)
x都输入5,结果就是:
宏:2*a(x)=2*x+x然后x=5时就是2*5+5=15
自定义函数:2*a(x)=2*(x+x)=2*(5+5)=2*10=20

嗯..看看,结果不一样吧?呵呵..再仔细研究研究,有问题问啊.

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-25 18:23
快速回复:源代码W-tc调试成功,却结果错误?
数据加载中...
 
   



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

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