| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 582 人关注过本帖
标题:算法问题
只看楼主 加入收藏
A306452792
Rank: 1
等 级:新手上路
帖 子:31
专家分:7
注 册:2010-8-18
结帖率:100%
收藏
 问题点数:0 回复次数:5 
算法问题
  #include "stdio.h"
  #include "1plyv.c"
  main()
  { int i;
    static double a[7]={-20.0,7.0,-7.0,1.0,3.0,-5.0,2.0};
    static double x[6]={0.9,-0.9,1.1,-1.1,1.3,-1.3};
    printf("\n");
    for (i=0; i<=5; i++)
      printf("x(%d)=%5.2lf   p(%d)=%13.7e\n",
             i,x[i],i,plyv(a,7,x[i]));
    printf("\n");
  }
程序运行不了,#include "1plyv.c"是什么的,貌似没见过,但算法集中全有这类型的,在VC中运行不了。。。。。。
搜索更多相关主题的帖子: 算法 
2010-12-14 12:50
mengcong3959
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:41
专家分:113
注 册:2010-12-6
收藏
得分:0 
1plyv.c是资源文件,,你当然运行部了,,include包含的是头文件,,当然1plyv.c可以是头文件下的资源文件,,只是不知道你这里面是什么东东
2010-12-14 13:33
A306452792
Rank: 1
等 级:新手上路
帖 子:31
专家分:7
注 册:2010-8-18
收藏
得分:0 
多项式计算的算法,百度一下就知了,只不过为什么有这样的算法却运行不了,是编辑器的问题吗?
2010-12-14 13:45
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
你的这个问题是出现了相同的外部函数名,因为你加了 #include "1plyv.c" ,所以在预处理的时候会将1plyv.c中的内容包含在你建立的文件中,这样在连接的时候就出错了!

举一个例子
假设你建立了一个main.c文件,该文件中的内容是:
程序代码:
# include <stdio.h>
# include "add.c"

int main()
{
    printf("%d\n" , add(1 , 3)) ;
    return 0 ;
}

然后在add.c文件中写下了如下代码(实现两个数相加)

int add(int x , int y)
{
    return x + y ;
}

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


那么在预处理的时候会将add.c文件中的内容包含在main.c文件中,也就是替代了# include "add.c",这样main.c文件中的内容就变为了:

程序代码:
# include <stdio.h>
int add(int x , int y)
{
    return x + y ;
}
int main()
{
    printf("%d\n" , add(1 , 3)) ;
    return 0 ;
}

c语言的编译是以文件作为单位的,就是有几个源文件c编译器就会编译几个源文件(c编译器是不会去编译头文件的),那么在连接的时候就出现了两个外部的函数add ,因此就出错了!


因此为了避免这个问题,你可以在你的头文件中申明这个函数add ,这样只在main.c文件中加上这个头文件就可以了呀!!!

(最好不要在头文件中定义一个函数的实现,因为当多个.c文件都需要包含这个头文件的时候会出现多个外部函数,因此就会出错了呀!)

愿用余生致力编程
2010-12-14 15:55
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
#ifdef XXXXX
#define XXXXX 1
.............
#endif

                                         
===========深入<----------------->浅出============
2010-12-14 16:05
A306452792
Rank: 1
等 级:新手上路
帖 子:31
专家分:7
注 册:2010-8-18
收藏
得分:0 
我想把这两个C文件合并,怎样合?因为按四楼创建两个文件的方法,调试是没问题,但运行不了。。。
(主文件)
  #include "stdio.h"
  #include "1plys.c"
  main()
  { int i;
    double p[6];
    static double a[7]={-20.0,7.0,-7.0,1.0,
                        3.0,-5.0,2.0};
    static double x[6]={0.9,-0.9,1.1,-1.1,1.3,-1.3};
    plys(a,7,x,6,p);
    printf("\n");
    for (i=0; i<=5; i++)
      printf("x(%d)=%5.2lf   p(%d)=%13.7e\n",
             i,x[i],i,p[i]);
    printf("\n");
  }
(包含的文件)

  #include "math.h"
  #include "stdlib.h"
  void plys(a,n,x,m,p)
  int n,m;
  double a[],x[],p[];
  { int i,j,mm,nn,ll,t,s,kk,k;
    double *b,y,z;
    b=malloc(2*n*sizeof(double));
    y=a[n-1];
    for (i=0; i<=n-1; i++) b[i]=a[i]/y;
    k=log(n-0.5)/log(2.0)+1;
    nn=1;
    for (i=0; i<=k-1; i++) nn=2*nn;
    for (i=n; i<nn-1; i++) b[i]=0.0;
    b[nn-1]=1.0;
    t=nn; s=1;
    for (i=1; i<=k-1; i++)
      { t=t/2; mm=-t;
        for (j=1; j<=s; j++)
          { mm=mm+t+t; b[mm-1]=b[mm-1]-1.0;
            for (kk=2; kk<=t; kk++)
              b[mm-kk]=b[mm-kk]-b[mm-1]*b[mm+t-kk];
          }
        s=s+s;
      }
    for (kk=1; kk<=m; kk++)
      { for (i=0; i<=(nn-2)/2; i++)
           a[i]=x[kk-1]+b[2*i];
        mm=1; z=x[kk-1];
        for (i=1; i<=k-1; i++)
          { mm=mm+mm; ll=mm+mm; z=z*z;
            for (j=0; j<=nn-1; j=j+ll)
              a[j/2]=a[j/2]+a[(j+mm)/2]*(z+b[j+mm-1]);
          }
        z=z*z/x[kk-1];
        if (nn!=n) a[0]=a[0]-z;
        p[kk-1]=a[0]*y;
      }
    return;
  }
2010-12-14 16:46
快速回复:算法问题
数据加载中...
 
   



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

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