c语言库函数测试 c语言 函数库

C语言库函数

假定你是在linux下做这件事 (在windows下应该也是类似的)

创新互联专注于企业营销型网站建设、网站重做改版、平罗网站定制设计、自适应品牌网站建设、H5技术商城开发、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为平罗等各大城市提供网站开发制作服务。

假定你要产生的库名字为 libtest.a

1. 实现库函数于 test.c

#include stdio.h

int test()

{

printf("hello world!\n");

return 0;

}

test.h内容:

extern int test();

2. 编译test.c并产生库文件

gcc -c test.c

ar -r libtest.a test.o

3. 其他程序如何调用 libtest.a 里的 test()函数?

main.c

#include "test.h"

int main()

{

return test();

}

4. 编译main.c产生可执行文件

gcc -o main.out main.c -L/path/to/libtest -ltest

5. 运行 main.out

./main.out

PS, 头文件的用处无非就是提供函数原型声明,在我上面给的例子中,可以把 test.h 删除, 但是必须在 main.c 里自己加上 extern int test(); 来声明函数。

C语言中怎样测试函数执行时间

有4种方法可以达成测算程序运行时间的目的。

它们分别是使用clock, times, gettimeofday, getrusage来实现的。

下面就来逐一介绍,并比较它们的优劣点。

系统测试环境:

VirtualBox (Ubuntu 9.10)

gcc version 4.4.1

libc6 2.10.1-0ubuntu16

Core Duo T2500 2GMHz

例程如下:

只要修改第11行的定义值,就可以使用不同的测量方法了。

#include sys/time.h

#include sys/resource.h

#include unistd.h

#include stdio.h

#include time.h

#define TEST_BY_CLOCK (char)(0x00)

#define TEST_BY_TIMES (char)(0x01)

#define TEST_BY_GETTIMEOFDAY (char)(0x02)

#define TEST_BY_GETRUSAGE (char)(0x03)

#define TEST_METHOD (TEST_BY_GETTIMEOFDAY)

#define COORDINATION_X (int)(1024)

#define COORDINATION_Y (int)(1024)

static int g_Matrix[COORDINATION_X][COORDINATION_Y];

double getTimeval()

{

struct rusage stRusage;

struct timeval stTimeval;

if (TEST_METHOD == TEST_BY_GETTIMEOFDAY)

{

gettimeofday(stTimeval, NULL);

}

else if (TEST_METHOD == TEST_BY_GETRUSAGE)

{

getrusage(RUSAGE_SELF, stRusage);

stTimeval = stRusage.ru_utime;

}

return stTimeval.tv_sec + (double)stTimeval.tv_usec*1E-6;

}

int main()

{

int i, j;

int n = 0;

clock_t clockT1, clockT2;

double doubleT1, doubleT2;

if (TEST_METHOD == TEST_BY_CLOCK)

{

clockT1 = clock();

}

else if (TEST_METHOD == TEST_BY_TIMES)

{

times(clockT1);

}

else if (TEST_METHOD == TEST_BY_GETTIMEOFDAY)

{

doubleT1 = getTimeval();

}

else if (TEST_METHOD == TEST_BY_GETRUSAGE)

{

doubleT1 = getTimeval();

}

for (i = 0; i COORDINATION_X; i++)

{

for (j = 0; j COORDINATION_Y; j++)

{

g_Matrix[i][j] = i * j;

}

}

if (TEST_METHOD == TEST_BY_CLOCK)

{

clockT2 = clock();

printf("Time result tested by clock = %10.30f\n",(double)(clockT2 - clockT1)/CLOCKS_PER_SEC);

}

else if (TEST_METHOD == TEST_BY_TIMES)

{

times(clockT2);

printf("Time result tested by times = %10.30f\n", (double)(clockT2 - clockT1)/sysconf(_SC_CLK_TCK));

}

else if (TEST_METHOD == TEST_BY_GETTIMEOFDAY)

{

doubleT2 = getTimeval();

printf("Time result tested by gettimeofday = %10.30f\n",(double)(doubleT2 - doubleT1));

}

else if (TEST_METHOD == TEST_BY_GETRUSAGE)

{

doubleT2 = getTimeval();

printf("Time result tested by getrusage = %10.70f\n", (double)(doubleT2 - doubleT1));

}

return 0;

}

1. 使用clock的方法:

clock是ANSI C的标准库函数,关于这个函数需要说明几点。

首先,它返回的是CPU耗费在本程序上的时间。也就是说,途中sleep的话,由于CPU资源被释放,那段时间将不被计算在内。

其次,得到的返回值其实就是耗费在本程序上的CPU时间片的数量,也就是Clock Tick的值。该值必须除以CLOCKS_PER_SEC这个宏值,才

能最后得到ss.mmnn格式的运行时间。在POSIX兼容系统中,CLOCKS_PER_SEC的值为1,000,000的,也就是

1MHz。

最后,使用这个函数能达到的精度大约为10ms。

2. 使用times的方法:

times的用法基本和clock类似,同样是取得CPU时间片的数量,所不同的是要除以的时间单位值为sysconf(_SC_CLK_TCK)。

3. 使用gettimeofday的方法:

用gettimeofday直接提取硬件时钟进行运算,得到的结果的精度相比前两种方法提高了很多。

但是也正由于它提取硬件时钟的原因,这个方法只能计算程序开始时间和结束时间的差值。而此时系统中如果在运行其他的后台程序,可能会影响到最终结果的值。如果后台繁忙,系统dispatch过多的话,并不能完全真实反映被测量函数的运行时间。

4. 使用getrusage的方法:

getrusage得到的是程序对系统资源的占用信息。只要指定了RUSAGE_SELF,就可以得到程序本身运行所占用的系统时间。

C语言:编写函数MyStrCmp并用相应主函数进行测试

#includestdio.h

#includestring.h

int MyStrCmp( char *s1,char *s2 );

int main()

{

char s1[30], s2[30];

gets(s1);

gets(s2);

printf("%d\n", MyStrCmp(s1, s2));

return 0;

}

int MyStrCmp(char * s1, char * s2)

{

int flag = 0;//0表示相等,1表示s1大于s2,-1表示s1小于s2

int minLength = 0; //较短串的长度

int i = 0;

minLength = strlen(s1) = strlen(s2) ? strlen(s1) : strlen(s2);

for(i = 0; i  minLength; i++)

{

if(s1[i] != s2[i])

{

if(s1[i]  s2[i])

flag = 1;

else

flag = -1;

break;

}

else

continue;

}

return flag;

}

C语言一些题。。说的明白的追加分!

代码如下:

浮点四舍五入保留n位小数

#包括 stdio, h

Floatfun(Floatx,intm);

Intmain()

浮动;

Intn;

Printf(“输入a:”);输入一个浮点数

扫描文件(" % f ", a);

Printf(“输入n:”);输入保留的小数点

scanf (" % d ", n);

A=fun(A,n);

Printf("%f\n",a);

返回0;

浮动乐趣(浮动x,intm)

Int我;

Intk=1;

For(I=0;I"m+1;I++)//x把小数点往后移m+1

K=K*10;

X=X*k;

X=X+5;//+5

X=X/10;小数点左移一位

X=(int)X;//丢弃小数

X=(浮点数)/X(k/10);//再次漂浮

返回x;

//////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////

//n位输出n-1位

#包括 stdio, h

无符号的fun1(无符号的w);

无符号的fun2(无符号的w);

Intmain()

无符号;

Printf(“输入a:”);

scanf (" % d ", a);

A=fun1(A);

Printf("%d\n",a);

A=fun2(A);

Printf("%d\n",a);

返回0;

//不是32313133353236313431303231363533e4b893e5b19e31333238666366来理解你的意思…

无符号fun1(无符号w)

W = W 1;//向右移一点

返回w;

无符号fun2(无符号w)

W=W/10;//把个位去掉

返回w;

//////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////

//绘制偶数位

#包括 stdio, h

龙智fun(龙智a);

Intmain()

长整型;

Printf(“输入a:”);

扫描文件(" % ld ", a);

A=fun(A);

Printf("%ld\n",a);

返回0;

龙龙凤(龙龙凤a)

长整型x=0;

Intt[10]。

IntI,j。

For(I=0;一个!!!!=0;我++)

[I]t=a%10;//每个位都被分配给一个数组

A=A/10;

J=我;

For (I = 0;I j. I++)

如果((I+1)%2==0)//取出偶数

X=X+t[I];

X=X*10;

X=X/10;//上面的循环最后乘以了一个额外的10

返回x;

//////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////

//2-hexadecimal转换

#include“stdio.h”

VoidTurn_Num(intx,intn);

Intmain()

Intx;

Intn;

Printf(“输入anum:”);

scanf(“% d”, x);

Printf("输入n (n=2):");输入转换的基础

scanf (" % d ", n);

如果(n 2)

Printf("nerr!"));

如果(x 0)//小于0,首先打印一个'-'

Printf(“-”);

X=abs(X);//或x=x;*x或x=√x;

Turn_Num(x,n);

Printf("\n");

返回0;

VoidTurn_Num(intx,intn)

Int问;

Q=x/n。

如果问!=0)

Turn_Num(q,n);//从个位递归输出转换后的字符

Putchar("0123456789abcdef"[x%n]);

//////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////

//很奇怪!

#include“stdio.h”

Intfun(Intx);

Intmain()

Int;

Int我;

的做

Printf(“输入a:”);

scanf (" % d ", a);

}while (a9 || ((a+1)%!)= 0));

For (I = 1;I = a;I = I + 2)

Printf("%d\n",fun(I));

返回0;

Intfun(Intx)

如果(x==1)

返回1;

其他的

Return(x*fun(x-1));

//////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////

//2222-222-22-2

#include“stdio.h”

Intmain()

Int;

Intn;

Ints,m=0;

Int我;

Printf(“输入a:”);

scanf (" % d ", a);

Printf(“输入n:”);

scanf (" % d ", n);

For (I = 0;I n. I++)

M=M+a;

M=M*10;

M=M/10;

S=m;//s等于na

For (I = 0;I n. I++)

M=M/10;

S=S-m;

Printf("s=%d\n",s);

返回0;

//////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////

//PI/4材料1/3++1/5-1/71/9…

#包括 stdio, h

Intmain()

Doublef=1.0,thesum=0.0;

Intm,n;

双的;

Lf scanf (" % ", a);/ /输入精度

对于(m = 1, n = 1;M a * n. n = n + 2)

和是和加上f(m/n)

F=F*(1);

Sum=Sum*4;

Printf("PI=%lf\n",sum);

返回0;

//////////////////////////////////////////////////////////////////////

扩展资料:

注意事项:

C语言库函数,常用库函数有:

1.以scanf格式输入函数

2.printf格式的输出函数

3.Systemdos命令功能

4.分类排序

5.主要

6.fgets文件读取字符串函数

7.fput文件将写入字符串函数

8.Fscanf文件格式读取功能

9.fprintf文件格式编写函数

10.Fopen打开文件函数

11.Getchar输入字符函数

12.Putchar输出字符函数

13、malloc动态应用内存功能

14.自由存储功能

15.abs的绝对值数学函数

16.SQRT取一个数学函数的平方根


本文名称:c语言库函数测试 c语言 函数库
当前URL:http://myzitong.com/article/doedcgj.html