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语言 函数库
分享地址:http://scgulin.cn/article/doedcgj.html