从其他不带头的c文件导入函数

从其他不带头的c文件导入函数,c,import,C,Import,我的任务是创建一个程序来测试我在另一个c文件中创建的库。我的问题是如何在没有标题的情况下调用库。图书馆计划是: /* Program: statlib.c A Statistical library consisting of the following seven functions: mean, variance, standard deviation, sort, minimum value median, and max value. */ #include <mat

我的任务是创建一个程序来测试我在另一个c文件中创建的库。我的问题是如何在没有标题的情况下调用库。图书馆计划是:

/* 
Program: statlib.c 

A Statistical library consisting of the following 
seven functions: mean, variance, standard deviation, 
sort, minimum value median, and max value. 
*/

#include <math.h>

/* Calculates the mean value of the data in the list */
double mean(int totnum, double data[]) {
double meanval, sum;
int i;
sum = 0.0;
for(i=0; i<totnum; i++) {
    sum += data[i];
}
meanval = sum/totnum;
return meanval;
}

// Calculate the variance of the data in the list
double variance(int totnum, double data[]) {
double meanval, sum, var;
int i;

meanval = mean(totnum, data);
sum = 0.0;
for(i=0; i<totnum; i++){
    sum += (data[i] - meanval)*(data[i] - meanval);
}
var = sum/(totnum-1);
return var;
    }

/* Calculate the standard deviation of data in the list */
double stdDeviation(int totnum, double data[]) {
double var, std;
var = variance(totnum, data);
std = sqrt(var);
return std;
}

/* Sorts the array data in ascending order. */
void sort(int totnum, double data[]) {
int i, j;
double temp;

/* find the smallest value in the reaming part of the array
in each iteratio staring with data[i]. */
for(i = 0; i < totnum-1; i++) {
    /* compare with data[i] with data[j], swap their values */
    for(j = i+1; j < totnum; j++) {
        /* when data[i] > data[j], swap their values */
        if(data[i] > data[j]) {
            temp = data[i];
            data[i] = temp;
        }
    }
}
}

/* Calculates the min value of an array. */
double minValue(int totnum, double data[]) {
double minval;
int i;

/* start at the intial value */
minval = data[0];
for(i = 1; i < totnum; i++) {
    if(data[i] < minval) {
        minval = data[i];
    }
    return minval;
}
}

/* Calculate the median of an array. Must be sorted first using the sort
function.*/
double median(int totnum, double data[]) {
double medianval;

if(totnum % 2) {
    medianval = data[totnum/2];
}
else {
    medianval = (data[totnum/2 -1] + data[totnum/2]/2.0);
}
return medianval;
}

/* Returns the maximum value of an array. */
double maxValue(int totnum, double data[]) {
double maxval;
int i;
maxval = data[0];
for(i = 1; i < totnum; i++) {
    if(data[i] > maxval) {
        maxval = data[i];
    }
}
return maxval;
}
/*
程序:statlib.c
由以下内容组成的统计库
七个函数:均值、方差、标准差、,
排序、最小值中值和最大值。
*/
#包括
/*计算列表中数据的平均值*/
双平均值(整数总和,双数据[]){
双平均值,和;
int i;
总和=0.0;
对于(i=0;i数据[j]){
温度=数据[i];
数据[i]=温度;
}
}
}
}
/*计算数组的最小值*/
双最小值(int-totnum,双数据[]){
双米瓦尔;
int i;
/*从初始值开始*/
minval=数据[0];
对于(i=1;imaxval){
maxval=数据[i];
}
}
返回maxval;
}
我用来测试第一个程序的程序是:

/* 
Program: teststatlib.c 
This program tests my statlib.c program in order to
verify whether or not it is in working order.
*/

#include <stdio.h>

/* add code from statlib.c */
#pragma importf <statlib.c>

/* Declare extern functions so that the can be used */
extern double mean(int totnum, double data[]);
//extern double variance(int totnum, double data[]);
//extern double stdDeviation(int totnum, double data[]);
//extern void sort(int totnum, double data[]);
//extern double minValue(int totnum, double data[]);
//extern double median(int totnum, double data[]);
//extern double maxValue(int totnum, double data[]);

int main() {
int input[] = {30,90,100,84,72,40,34,91,80,62};
int totnum = sizeof(input)/sizeof(double);

printf("The unsorted array is %d.", input);
printf("The mean is ");
mean(totnum, input);
}
/*
程序:teststatlib.c
这个程序测试我的statlib.c程序,以便
验证其是否处于工作状态。
*/
#包括
/*从statlib.c添加代码*/
#布拉格进口
/*声明外部函数,以便可以使用*/
外部双平均值(int-totnum,双数据[]);
//外部双方差(int-totnum,双数据[]);
//外部双标准偏差(int totnum,双数据[]);
//外部无效排序(int-totnum,double-data[]);
//外部双最小值(int-totnum,double-data[]);
//外部双中位数(int-totnum,双数据[]);
//外部双最大值(int-totnum,double-data[]);
int main(){
int输入[]={30,90100,84,72,40,34,91,80,62};
int totnum=sizeof(输入)/sizeof(双精度);
printf(“未排序的数组是%d.”,输入);
printf(“平均值”);
平均值(totnum,输入);
}

我发现你的问题令人困惑,因为你没有很好地陈述你的问题。事实上你从来没问过问题。也许我还能帮点忙

您可以解决以下几个问题:

  • sizeof(输入)
    not
    sizeof(输入[])
  • 倒数第二个打印行不符合您的要求。如果删除
    []
    ,它将编译并打印数组的地址(我认为这不是您想要的)。您可能希望打印数组中的每个元素,并且应该考虑在<<代码>中执行< <代码>循环。您所拥有的看起来非常像python esk,但不是我们在c中的工作方式
  • 在最后一行中,您调用
    mean()
    ,就好像您希望它打印一些东西一样。我想您应该将最后两行合并到
    printf(“平均值是%f\n”,平均值(totnum,input))
  • input
    需要声明为类型为
    double
    的数组。(另外,您需要将该行下方的
    sizeof(int)
    更改为
    sizeof(double)

我使用命令
gcc teststatlib.c statlib.c
在linux中编译并运行了您的程序。我不认识
#pragma importf
,这让我怀疑您可能正在使用一个我不熟悉的开发环境。

为什么不制作(或生成)一个标题?为什么它不能按编写的那样工作?你得到了什么错误?它给了我一个错误,“对‘mean’的未定义引用”。这让我相信我没有正确导入库。对此有何想法?您使用的
extern
是正确的。如果您告诉编译器同时编译这两个文件,那么它应该可以工作。这听起来像是您的开发环境的一个细节,因为您的代码看起来相当不错。你在用什么编译器?我已经解决了在你评论之前删除括号的问题,我只是忘记了编辑我的代码。至于使用“#pragma importf”,我是基于一些我目前找不到的网站。这通常是如何做到的?我对编程很陌生。