重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

如何测试函数执行c语言,如何测试函数执行c语言标准

如何用c语言实现多个函数执行

#includestdio.h

成都创新互联公司服务项目包括铜仁网站建设、铜仁网站制作、铜仁网页制作以及铜仁网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,铜仁网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到铜仁省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

void fun1(){}

void fun2(){}

void fun3(){}

void fun4(){}

void fun5(){}

void fun6(){}

void fun7(){}

void fun8(){}

void call(char choice)

{

switch(choice)

{

case '1':

fun1();

break;

case '2':

fun2();

break;  

case '3':

fun3();

break;

case '4':

fun4();

break;

case '5':

fun5();

break;

case '6':

fun6();

break;

case '7':

fun7();

break;

case '8':

fun8();

break;  

defult:

break;     

}

}

int main(void)

{

char choice[8]={0};

char ch;

int i=0;

printf("请输入你选择要运行的函数编号(1~8):");

ch=getchar();

while(ch!='\n')

{

if(ch='1'ch='8')

{

choice[i]=ch;

i++;

}

}

for(int j=0;ji;j++)

{

call(choice[j]);

}

return 0;

}

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语言:编写函数实现功能,并用相应的主函数进行测试?

#includestdio.h

void delStr(char *s,char p)

{char *p1,*p2;

for(p1=p2=s;*p1;p1++)

if(*p1!=p)*p2++=*p1;

*p2='\0';

}

int main()

{char s[300],ch;

gets(s);

ch=getchar();

delStr(s,ch);

printf("%s\n",s);

return 0;

}


新闻标题:如何测试函数执行c语言,如何测试函数执行c语言标准
URL标题:http://cqcxhl.cn/article/dssopgg.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP