当前位置:文档之家› C语言时间函数的应用

C语言时间函数的应用

C语言时间函数的应用
C语言时间函数的应用

C语言时间函数的应用

C语言时间函数的应用

C语言程序,常涉及时间的获取和计算,例如获取当前时间,倒计时计算,时间差计算。

C/C++语言提供了一些库函数,可用于此目的。下面以VC++ 6.0 编译器为例,叙述C语言时间函数的应用,调用时间函数需头文件time.h。

(1)获取现在时间并打印

C语言提供函数 time(),可以获取现在时间。函数原型是

time_t time ( time_t *t);

你可以通过实参获取时间,也可以通过返回值获取时间。例如:

time_t now;

now = time(NULL);

或 time(&now);

得到的time_t型数值是从1970年1月1日起到现在的秒数。

用C语言提供的函数 ctime 转换成字符串形式,打印出年月日时分秒。

见下面程序里的 print_current_time() 子程序。

(2)获取现在时间并转换成整数年月日时分秒形式

C语言提供的函数localtime(), 可以把 time_t 数值转换成 tm 结构,tm结构里含年月日时分秒和是否是闰年等信息,结构里的年加1900是真实的年,结构里的月加1是真实的月。

见子程序 get_current_YMD().

(3)输入年月日计算这天是该年的第几天

当我们要绘制某年度的统计数据时,常以天做横座标按比例绘图,这时就需要把月日换算为天。

把日加上前几个月的天数就可得结果。只要注意该年是平年还是闰年,闰年的2月份多一天。闰年的判断是:

if ((Y%4==0)&&(Y%100!=0)||(Y%400==0) {printf("闰年");}

见子程序 YMD_2_JD();

(4)输入年月日计算这天是星期几

公元计年从1年1月1日开始,这天是星期一。平年一年有365天,365除7取余数为1。也就是说平年的星期几等于上一年的星期几加1。闰年的星期几等于上一年的星期几加2。

所以,若知年份,就可以推算出这年元旦推移了多少天,变星期几,再调用YMD_2_JD(),算出某月某日推移了多少天,就算得这天是星期几。

见子程序 YMD_2_WeekDay()。

(5)输入整型值年月日时分秒转换为time_t

库函数 mktime,可以把 tm 结构转换为 time_t。

我们可以用localtime把当前时间转为tm 结构,再修改里面的年月日时分秒,这样,tm 里的其它项,例如星期几,这天是该年的第几天等成员变量会自动改

正,不须自己操心。然后调mktime,得到 time_t型时间值。

(6)暂停多少秒或多少毫秒的控制

暂停,可以用 Windows.h 里的 Sleep() 函数,也可以自己写。

Sleep(1000); 参数是1000毫秒,就是暂停 1 秒。一般人认为,Sleep函数,每秒可能有25毫秒误差。

自己写,可以利用 clock () 函数,clock () 函数送返从程序开始运行到调用时的时间间隔,单位是毫秒。暂停开始,用clock () 取开始时间,然后,只要用clock ()再取时间,判断是否到结束时间,没到则继续暂停。

见子程序 wait (int seconds) 和 wait_ms ( int ms )。

(7)倒计时

输入目标年月日时分秒,显示倒计时。

先把目标日期转换为time_t,然后取当前时间,用库函数 difftime()计算时间差单位秒,折算成倒计时时分秒。

见子程序 time_down()

(8)时间差计算

获取时间差有多种方法。简单方法是用clock()函数。clock()函数返回当时时间读数,计时开始用clock()得到开始时间,计时结束,用clock()得到结束时间,两个数相减就是时间差,单位是毫秒。

见子程序example_dt_ms()。

另一种方法是用QueryPerformanceCounter()函数返回当时时钟读数,计时开始用它得到开始读数,计时结束用它得到结束读数,两个数相减是时间差读数。读数转换为时间,要用QueryPerformanceFrequency()函数获得时钟频率,读数除以时钟频率,得时间,单位是秒。乘1000得毫秒。据说,这种方法比较精确。

见子程序accurate_dt_ms()。

还有一种方法是用Pentium芯片汇编指令 0x0F 和 0x31,读取时钟计数图章,类似QueryPerformanceCounter()函数,计时开始和结束分别调用一次,得读数差,并扣除执行一次调用函数消耗的额外时间。读数差怎样转化成时间是个问题,如果知道CPU速度可以算得时间,如果知道时间,可以估算CPU速度。子程序 get_CPU_speed() 计算CPU的速度,单位百万赫。

完整的C语言示范程序如下:

#define NOMINMAX

#include

#include

#include

#include

char *WeekDayName[]={" ","Mon","Tue","Wen","Thu","Fri","Sat","Sun"}; void example_dt_ms();

void accurate_dt_ms();

void print_current_time();

void get_current_YMD(int *Y,int *M,int *D,int *hh,int *mm, int *ss); void get_current_tm(struct tm * timeinfo);

int YMD_2_JD(int Y, int M, int D);

int YMD_2_WeekDay(int Y, int M, int D); // 1,2,3,4,5,6,7

void wait ( int seconds );

void wait_ms ( int ms );

time_t YMD_hhmmss_2_s70(int Y, int M, int D, int hh, int mm, int ss); void check_mk(int Y, int M, int D, int hh, int mm, int ss);

void time_down(int Y, int M, int D, int hh, int mm, int ss);

__forceinline unsigned _int64 My_clock(void);

unsigned _int64 Start(void);

unsigned _int64 Stop(unsigned _int64 m_start, unsigned _int64

m_overhead);

void get_CPU_speed();

void main(){

int y,m,d,hh,mm,ss,jd,wd;

example_dt_ms();

accurate_dt_ms();

print_current_time();

get_current_YMD(&y,&m,&d,&hh,&mm,&ss);

printf("It is %d-%02d-%02d %02d-%02d-%02d int

values\n",y,m,d,hh,mm,ss);

jd=YMD_2_JD(y,m,d);

printf("JD is %d\n",jd);

wd = YMD_2_WeekDay(y,m,d);

printf("weekday %d -- %s\n",wd,WeekDayName[wd]);

get_CPU_speed();

time_down(2011,10,1,0,0,0);

exit(0);

}

void example_dt_ms()

{

clock_t tick1,tick2;

int i,j,k;

double dt;

tick1=clock(); //ms

//for (i=0;i<1000;i++) for (j=0;j<1000;j++) for (k=0;k<100;k++) {}; wait_ms(2000);

tick2=clock();

dt = (double) (tick2 - tick1);

printf("==============\nexample_dt_ms:\n");

printf("dt = %lf ms\n",dt);

}

void accurate_dt_ms()

{

LARGE_INTEGER nFreq;

LARGE_INTEGER nBeginTime;

LARGE_INTEGER nEndTime;

int executionTime;

double dt,d_freq,d_begin_t,d_end_t;

// Start of time interval

QueryPerformanceFrequency(&nFreq);

d_freq = (double) nFreq.QuadPart;

QueryPerformanceCounter(&nBeginTime);

// Any code

// ...

wait_ms(2000);

// End of time interval

QueryPerformanceCounter(&nEndTime);

// time interval in ms

executionTime = (nEndTime.QuadPart - nBeginTime.QuadPart) * 1000 / nFreq.QuadPart;

dt = (double) ((nEndTime.QuadPart - nBeginTime.QuadPart) * 1000) / d_freq;

printf("==============\naccurate_dt_ms:\n");

printf("dt=%d in ms or dt=%lf ms\n", executionTime,dt);

}

void print_current_time()

{

time_t seconds;

struct tm *t;

char str[80];

seconds = time ( NULL);

printf("==============\nprint_current_time:\n");

printf("%ld hours since January 1, 1970\n", seconds/3600);

printf( "The current local date/time is: %s\n", ctime (&seconds) ); t = localtime(&seconds);

printf("print in nicer format:\n");

strftime (str, 80, "Today is %A, %B %d.", t);

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

strftime (str, 80, "The time is %I:%M %p.", t);

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

}

void get_current_YMD(int *Y,int *M,int *D,int *hh,int *mm, int *ss){ struct tm info,*t=&info;

time_t rawtime;

time ( &rawtime );

t = localtime(&rawtime);

*Y = t->tm_year + 1900;

*M = t->tm_mon + 1;

*D = t->tm_mday;

*hh = t->tm_hour;

*mm = t->tm_min;

*ss = t->tm_sec;

}

int YMD_2_JD(int Y, int M, int D){

const short MonthDay[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int JD,i;

JD=D;

for (i=1;i

if ((Y%4==0)&&(Y%100!=0)||(Y%400==0) && M>2) JD++;

return JD;

}

int YMD_2_WeekDay(int Y, int M, int D){

int offset,jd,weekD;

offset = ((Y-1)+(Y-1)/4-(Y-1)/100+(Y-1)/400) % 7 ;

jd = YMD_2_JD(Y,M,D);

weekD = (jd + offset) % 7;

return weekD;

}

void wait ( int seconds )

{

clock_t endwait;

endwait = clock () + seconds * CLOCKS_PER_SEC ;

while (clock() < endwait) {}

}

void wait_ms ( int ms )

{

clock_t endwait;

endwait = clock () + ms;

while (clock() < endwait) {}

}

time_t YMD_hhmmss_2_s70(int Y, int M, int D, int hh, int mm, int ss){ struct tm *target_tm;

time_t tt;

time (&tt);

target_tm=localtime(&tt);

target_tm->tm_year = Y - 1900;

target_tm->tm_mon= M - 1;

target_tm->tm_mday = D;

target_tm->tm_hour = hh; // hour

target_tm->tm_min = mm;

target_tm->tm_sec = ss;

tt = mktime(target_tm); // from tm to time_t (s)

return tt;

}

void time_down(int Y, int M, int D, int hh, int mm, int ss){

time_t target, now;

long double dif,r;

int d,h,m,s,k=0;

target= YMD_hhmmss_2_s70(Y,M,D,hh,mm,ss);

printf("time down to %d-%02d-%02d %02d-%02d-%02d\n",Y,M,D,hh,mm,ss); while (k < 5)

{

now = time(NULL);

dif = difftime (target,now);

d = (int) (dif / 86400.0);

r = dif - d * 86400.0;

h = (int) (r / 3600.0);

r = r - h * 3600.0;

m = (int) (r / 60.0);

r = r - m * 60.0;

s = (int) (r);

printf("%d--days %d--hours %d--min %d--sec\n",d,h,m,s);

(void) wait ( 2 ); // every 2 seconds print

k = k + 1;

}

}

// Pentium instruction "Read Time Stamp Counter".

__forceinline unsigned _int64 My_clock(void)

{

_asm _emit 0x0F

_asm _emit 0x31

}

unsigned _int64 Start(void) { return My_clock();}

unsigned _int64 Stop(unsigned _int64 m_start, unsigned _int64

m_overhead)

{return My_clock()-m_start - m_overhead; }

void get_CPU_speed()

{

unsigned _int64 m_start=0, m_overhead=0;

unsigned int CPUSpeedMHz;

m_start = My_clock();

m_overhead = My_clock() - m_start - m_overhead;

printf("overhead for calling My_clock=%I64d\n", m_overhead);

m_start = My_clock();

wait_ms(2000);

CPUSpeedMHz=(unsigned int) ( (My_clock()- m_start - m_overhead) / 2000000);

printf("CPU_Speed_MHz: %u\n",CPUSpeedMHz);

C语言计时函数

C语言计时函数 (2012-05-16 09:30:18) 转载▼ 分类:c*cpp 标签: 杂谈 1. 中函数clock(),返回类型clock_t,精确度,毫秒级别 实例: #include #include #include void test() { int i = 0; int j = 0; double a = 0; while (i++ < 1000000) while (j++ < 1000000) { a = sqrt(2.0); } } int main(void) { clock_t start, finish; double duration = 0.0; start = clock(); test(); finish = clock(); duration = (double)(finish - start);输出单位ms duration = (double)(finish - start) / CLOCKS_PER_SEC; //输出单位为妙,精确到毫秒级 //#define CLOCKS_PER_SEC 1000 printf("%f seconds\n", duration);

return 0; } 2、中函数time(&t),精确度,秒级别 功能:取以秒为单位的,从1970年1月1日格林威治时间00:00:00算起的当前时间,并把它存在长整形变量t中,函数返回如前所述的时间秒值。 测试程序如下: #include "stdio.h " #include "time.h " #include "stdlib.h " main() { long start,end; time(&start); delay(50000); time(&end); printf( "end-start=%ld\n ",end-start); getch(); } 3. 最精确的计时:QueryPerformanceCounter来查询定时器的计数值,如果硬件里有定时器,它就会启动这个定时器,并且不断获取定时器的值,这样的定时器精度,就跟硬件时钟的晶振一样精确的。 #include #include #include void test() { int i = 0; int j = 0; double a = 0; while (i++ < 1000000) while (j++ < 1000000) { a = sqrt(2.0); } } int main(void) {

C语言日期时函数

asctime(将时间和日期以字符串格式表示) 相关函数:time,ctime,gmtime,localtime 表头文件:#include 定义函数:char * asctime(const struct tm * timeptr); 函数说明:asctime()将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法, 然后将结果以字符串形态返回。此函数已经由时区转换成当地时间, 字符串格式为:“Wed Jun 30 21:49:08 1993\n” 返回值:若再调用相关的时间日期函数,此字符串可能会被破坏。 此函数与ctime不同处在于传入的参数是不同的结构。 附加说明:返回一字符串表示目前当地的时间日期。 范例: 1#include 2main() { 3 time_t timep; 4 time (&timep); 5printf(“%s”,asctime(gmtime(&timep))); 6} 执行结果:Sat Oct 28 02:10:06 2000 ctime(将时间和日期以字符串格式表示) 相关函数:time,asctime,gmtime,localtime 表头文件:#include 定义函数:char *ctime(const time_t *timep); 函数说明:ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法, 然后将结果以字符串形态返回。此函数已经由时区转换成当地时间, 字符串格式为“Wed Jun 30 21 :49 :08 1993\n”。 若再调用相关的时间日期函数,此字符串可能会被破坏。 返回值:返回一字符串表示目前当地的时间日期。 范例: 1#include 2main(){ 3 time_t timep; 4 time (&timep); 5printf(“%s”,ctime(&timep)); 6} 执行结果:Sat Oct 28 10 : 12 : 05 2000 gettimeofday(取得目前的时间) 相关函数:time,ctime,ftime,settimeofday 表头文件:#include #include 定义函数:int gettimeofday ( struct timeval * tv , struct timezone * tz ) 函数说明:gettimeofday()会把目前的时间有tv所指的结构返回,当地时区的信息则放到tz所指的结构中。

c语言函数段测试时间方法及比较

函数段测试时间方法及比较 作者:Peter 2011.4.7 一.用四种函数测量同一程序所需时间 1.函数段的测试有4中方法,分别是clock,times,gettimeofday,getrusage来实现的。 2.四种函数的精度如下: clock()函数的精确度是10毫秒(ms); times()函数的精确度是10毫秒(ms); gettimofday()函数的精确度是微秒(μs); getrusage()函数的精确度是纳秒(ns)。 =============================================================== 3.编写test5.c程序,测试1024*1024矩阵运行的时间,比较四种函数测量相同函数段所需的时间。 测试程序如下: =======================/*调用所需的头文件*/======================= #include #include #include #include #include =================/*定义宏变量:所需的4中测试方法*/================= #define TEST_BY_CLOCK (char)(0x00) //CLOCK测试 #define TEST_BY_TIMES (char)(0x01) //TIME测试 #define TEST_BY_GETTIMEOFDAY (char)(0x02) //GETTIMEOFDAY测试 #define TEST_BY_GETRUSAGE (char)(0x03) //GETRUSAGE测试 #define TEST_METHOD (TEST_BY_CLOCK) //选择需要的测试方法 ====================== /*矩阵格式定义*/======================== #define COORDINATION_X (int)(1024) #define COORDINATION_Y (int)(1024) static int g_Matrix[COORDINATION_X][COORDINATION_Y]; =============/*geTimeval类型及gettimeofday和getrusage计算方法*/==========

C语言中的时间处理函数

C语言中的时间处理函数收藏 来源:https://www.doczj.com/doc/6111631349.html,/8892167_d.html C语言时间函数 [原创 2007-04-16 23:30:50] C语言的标准库函数包括一系列日期和时间处理函数,它们都在头文件中说明。下面列出了这些函数。在头文件中定 义了三种类型:time_t,struct tm和clock_t。在头文件 中说明的C语言时间函数 time_t time(time_t *timer); double difftime(time_t time1,time_t time2); struct tm *gmtime(const time_t *timer); struct tm *localtime(const time_t *timer); char *asctime(const struct tm *timeptr); char *ctime(const time_t *timer); size_t strftime(char *s,size_t maxsize,const char *format,const struct tm *timeptr); time_t mktime(struct tm *timeptr); clock_t clock(void); 下面是我从网上收集到的时间函数集 asctime(将时间和日 期以字符串格式表示)相关函数 time,ctime,gmtime,localtime 表头文件#i nclude 定义函数 char * asctime(const struct tm * timeptr); 函数说明 asctime()将参数timeptr所指的tm结构中的信息转换成真 实世界所使用的时间日期表示方法,然后将结果以字符串形 态返回。此函数已经由时区转换成当地时间,字符串格式为:"Wed Jun 30 21:49:08 1993\n" 返回值若再调用相关的 时间日期函数,此字符串可能会被破坏。此函数与ctime不 同处在于传入的参数是不同的结构。附加说明返回一字符 串表示目前当地的时间日期。范例#include

C语言函数手册(DOC)

一、字符测试函数 isupper()测试字符是否为大写英文字 ispunct()测试字符是否为标点符号或特殊符号isspace()测试字符是否为空格字符 isprint()测试字符是否为可打印字符 islower()测试字符是否为小写字母 isgraphis()测试字符是否为可打印字符 isdigit()测试字符是否为阿拉伯数字 iscntrl()测试字符是否为ASCII码的控制字符isascii()测试字符是否为ASCII码字符 isalpha()测试字符是否为英文字母 isalnum()测试字符是否为英文或数字 isxdigit()测试字符是否为16进制数字 二、字符串操作函数 strtok()字符串分割函数 strstr()字符串查找函数 strspn()字符查找函数 strrchr()定位字符串中最后出现的指定字符 strpbrk()定位字符串中第一个出现的指定字符strncpy()复制字符串 strncat()字符串连接函数 strncasecmp()字符串比较函数(忽略大小写) strlen()字符串长度计算函数 strdup()复制字符串 strcspn()查找字符串 strcpy()复制字符串 strcoll()字符串比较函数(按字符排列次序) strcmp()字符串比较函数(比较字符串) strchr()字符串查找函数(返回首次出现字符的位置) strcat()连接字符串 strcasecmp()字符串比较函数(忽略大小写比较字符串) rindex()字符串查找函数(返回最后一次出现的位置) index()字符串查找函数(返回首次出现的位置) toupper()字符串转换函数(小写转大写) tolower()字符串转换函数(大写转小写) toascii()将整数转换成合法的ASCII码字符 strtoul()将字符串转换成无符号长整型数

C语言函数库详解(收藏版)

c语言函数库 目录 第一章(C标准库) (4) 1. :诊断 (4) 2. :字符类别测试 (5) 3. :错误处理 (5) 4. :整型常量 (6) 5. :地域环境 (6) 6. :数学函数 (7) 7. :非局部跳转 (8) 8. :信号 (9) 9. :可变参数表 (11) 10. :公共定义 (11) 11. :输入输出 (12) 12. :实用函数 (13) 13. :日期与时间函数 (13) 第二章(IO函数) (14) clearerr:复位错误标志函数 (15) feof:检测文件结束符函数 (16) ferror:检测流上的错误函数 (17) fflush:清除文件缓冲区函数 (18) fgetc:从流中读取字符函数 (19) fgetpos:取得当前文件的句柄函数 (20) fgets:从流中读取字符串函数 (21) fopen、fclose:文件的打开与关闭函数 (22) fprintf:格式化输出函数 (23) fputc:向流中输出字符函数 (25) fputs:向流中输出字符串函数 (25) fread:从流中读取字符串函数 (26) freopen:替换文件中数据流函数 (27) fscanf:格式化输入函数 (28) fseek:文件指针定位函数 (28) fsetpos:定位流上的文件指针函数 (30) ftell:返回当前文件指针位置函数 (31) fwrite:向文件写入数据函数 (31) getc:从流中读取字符函数 (32) getchar:从标准输入文件中读取字符函数 (33) gets:从标准输入文件中读取字符串函数 (34) perror:打印系统错误信息函数 (34) printf:产生格式化输出的函数 (35) putc:向指定流中输出字符函数 (36) putchar:向标准输出文件上输出字符 (37)

C语言中日期时间函数大全

C语言日期时间函数大全 头文件:#include 1、asctime 定义函数:char *asctime(const struct tm * timeptr); 函数说明:asctime()将参数timeptr 所指的tm 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为:"Wed Jun 30 21:49:08 1993\n" 返回值:若再调用相关的时间日期函数,此字符串可能会被破坏。此函数与ctime 不同处在于传入的参数是不同的结构。 附加说明:返回一字符串表示目前当地的时间日期. 范例 #include main(){ time_t timep; time (&timep); printf("%s", asctime(gmtime(&timep))); }

执行 Sat Oct 28 02:10:06 2000 2、ctime 定义函数:char *ctime(const time_t *timep); 函数说明:ctime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为"Wed Jun 30 21 :49 :08 1993\n"。 注意:若再调用相关的时间日期函数,此字符串可能会被破坏。 返回值:返回一字符串表示目前当地的时间日期。 范例 #include main(){ time_t timep; time (&timep); printf("%s", ctime(&timep)); } 执行 Sat Oct 28 10 : 12 : 05 2000 3、gettimeofday 头文件:#include #include 定义函数:int gettimeofday (struct timeval * tv, struct timezone * tz); 函数说明:gettimeofday()会把目前的时间有tv 所指的结构返回,当地时区的信息则放到tz 所指的结构中。

C语言函数大全

功能: 异常终止一个进程 用法: void abort(void) 函数名: abs 功能: 求整数的绝对值 用法: int abs(int i) 函数名: absread, abswirte 功能: 绝对磁盘扇区读、写数据 用法: int absread(int drive, int nsects, int sectno, void *buffer) int abswrite(int drive, int nsects, in tsectno, void *buffer 函数名: access 功能: 确定文件的访问权限 用法: int access(const char *filename, int amode) 函数名: acos 功能:反余弦函数 用法: double acos(double x) 函数名: allocmem 功能: 分配DOS存储段 用法:int allocmem(unsigned size, unsigned *seg) 函数名: arc 功能: 画一弧线 用法:void far arc(int x, int y, int stangle, int endangle, int radius)函数名: asctime 功能: 转换日期和时间为ASCII码 用法:char *asctime(const struct tm *tblock) 函数名: asin 功能:反正弦函数 用法: double asin(double x) 函数名: assert 功能: 测试一个条件并可能使程序终止 用法:void assert(int test) 函数名: atan 功能: 反正切函数 用法: double atan(double x)

C语言常用函数手册

1.分类函数,所在函数库为ctype.h int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0 int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9'),返回非0值,否则返回0 int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0 int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F) 返回非0值,否则返回0 int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0 int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0 int islower(int ch) 若ch是小写字母('a'-'z')返回非0值,否则返回0 int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否则返回0 int ispunct(int ch) 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0 int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回车符('\r'), 走纸换行('\f'),垂直制表符('\v'),换行符('\n') 返回非0值,否则返回0 int isupper(int ch) 若ch是大写字母('A'-'Z')返回非0值,否则返回0 int isxdigit(int ch) 若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值, 否则返回0 int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z') int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z') 2.数学函数,所在函数库为math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long labs(long n) 返回长整型参数n的绝对值 double exp(double x) 返回指数函数ex的值 double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中double ldexp(double value,int exp); 返回value*2exp的值 double log(double x) 返回logex的值 double log10(double x) 返回log10x的值 double pow(double x,double y) 返回xy的值 double pow10(int p) 返回10p的值 double sqrt(double x) 返回+√x的值 double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度 double asin(double x) 返回x的反正弦sin-1(x)值,x为弧度 double atan(double x) 返回x的反正切tan-1(x)值,x为弧度 double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x为弧度double cos(double x) 返回x的余弦cos(x)值,x为弧度 double sin(double x) 返回x的正弦sin(x)值,x为弧度 double tan(double x) 返回x的正切tan(x)值,x为弧度 double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度 double sinh(double x) 返回x的双曲正弦sinh(x)值,x为弧度

c语言中常用的函数和头文件

头文件ctype.h 函数列表<> 函数类别函数用途详细说明 字符测试是否字母和数字isalnum 是否字母isalpha 是否控制字符iscntrl 是否数字isdigit 是否可显示字符(除空格外)isgraph 是否可显示字符(包括空格)isprint 是否既不是空格,又不是字母和数字的可显示字符ispunct 是否空格isspace 是否大写字母isupper 是否16进制数字(0-9,A-F)字符isxdigit 字符大小写转换函数转换为大写字母toupper 转换为小写字母tolower 地区化 本类别的函数用于处理不同国家的语言差异。 头文件local.h 函数列表 函数类别函数用途详细说明 地区控制地区设置setlocale 数字格式约定查询国家的货币、日期、时间等的格式转换localeconv 数学函数 本分类给出了各种数学计算函数,必须提醒的是ANSI C标准中的数据格式并不符合IEEE754标准,一些C语言编译器却遵循IEEE754(例如frinklin C51) 头文件math.h 函数列表 函数类别函数用途详细说明 错误条件处理定义域错误(函数的输入参数值不在规定的范围内) 值域错误(函数的返回值不在规定的范围内) 三角函数反余弦acos 反正弦asin 反正切atan 反正切2 atan2 余弦cos

正弦sin 正切tan 双曲函数双曲余弦cosh 双曲正弦sinh 双曲正切tanh 指数和对数指数函数exp 指数分解函数frexp 乘积指数函数fdexp 自然对数log 以10为底的对数log10 浮点数分解函数modf 幂函数幂函数pow 平方根函数sqrt 整数截断,绝对值和求余数函数求下限接近整数ceil 绝对值fabs 求上限接近整数floor 求余数fmod 本分类函数用于实现在不同底函数之间直接跳转代码。头文件setjmp.h io.h 函数列表 函数类别函数用途详细说明 保存调用环境setjmp 恢复调用环境longjmp 信号处理 该分类函数用于处理那些在程序执行过程中发生例外的情况。 头文件signal.h 函数列表 函数类别函数用途详细说明 指定信号处理函数signal 发送信号raise 可变参数处理 本类函数用于实现诸如printf,scanf等参数数量可变底函数。 头文件stdarg.h 函数列表

C语言编写S函数方法

S函数(system function)是模块的核心,是完成功能实现的关键。S函数的编写可以使用多种程序语言,其中M语言是最常用的,同时也是最简单的。在运用M语言进行s函数编写的时候,可以调用MATLAB提供的函数,简化了开发过程。但是如果要与其他进程通讯或驱动外部硬件接口,则要调用API函数,这样就需要用C语言来开发S函数。较M语言的开发,C语言开发S函数更具有灵活性,但是相对复杂一些。 C语言写S函数,顾名思义,运用C语言语法,依照S函数格式要求,最后在MATLAB中MEX命令编译,编译成功既得函数。 S函数格式可简单看成:初始化、采样时间设定、系统输出、结束四个部分。对应的函数分别为mdlInitializeSizes()、mdlInitializeSampleTimes()、mdlOutputs()、mdlTerminate()。这四个函数是一个S函数必不可少的,缺少任何一个在编译的时候都无法通过,输出信息会提示哪个函数没有写。 一个最基本的C语言S函数模版如下: #define S_FUNCTION_NAME name #define S_FUNCTION_LEVEL 2 #include “” Static void mdlInitializeSizes(SimStruct *S){} Static void mdlInitializeSampleTimes(SimStruct *S){} Static void mdlOutputs(SimStruct *S,int_T tid){} Static void mdlTerminate(SimStruct *S){} #ifdef MATLAB_MEX_FILE #include “” #else #include “” #endif S函数的运行依托于Simulink,Simulink的运行是采用循环方式,计算各采样时间点的系统状态得到的,由此可理解S函数,在初始化之后,S函数也通过循环完成输出状态计算。 结合上述格式,首先自定义S函数名称,然后定义S函数级别,这里写2,1级是老版本Simulink使用的,现已经不是用,之所以保留1级是为了兼容原有的老程序,现在写的S函数都是2级的。接下来将需要的头文件包含进来,这里必须包含文件,这里的SimStruc是Simulink提供的数据结构,S函数中的输入输出等信息都包含在这个结构体中,同时,在编写S函数的时候也要把使用到的C语言库中的头文件包含进来,所有的C语言库文件在这里都可以使用。接下来即可按照格式顺序编写代码。最后要注意,如果用于仿真则添加文件,如果用于RTW 代码生成,则添加头文件。这里的RTW代码生成是指非内嵌的S函数,如果要做一个内嵌的S函数则需要在S函数中添加mdlRTW()函数,并额外编写TLC文件。其中,TLC文件用于优化的C代码生成,mdlRTW()函数则把模块参数传递到生成的代码当中。具体TLC文件的编写方法这里不再赘述。 除了上述必需的函数外,系统提供了其他可选用的函数,功能各异,例如mdlStart()等。 只要理解了Simulink运行方式就可以理解文件的开发过程了,其中,系统函数和特定的变量类型都可以在SimStruct数据结构中找到。至此,基本的S函数都可以编写了。

单片机c语言中nop函数的使用方法和延时计算

单片机c语言中nop函数的使用方法和延时计算 标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。 这在汇编语言中很容易实现,写几个nop就行了。 在keil C51中,直接调用库函数: #include // 声明了void _nop_(void); _nop_(); // 产生一条NOP指令 作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。 NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M 晶振,延时1uS。 对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。 在选择C51中循环语句时,要注意以下几个问题

第一、定义的C51中循环变量,尽量采用无符号字符型变量。 第二、在FOR循环语句中,尽量采用变量减减来做循环。 第三、在do…while,while语句中,循环体内变量也采用减减方法。这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的。 下面举例说明: unsigned char I; for(i=0;i<255;i++); unsigned char I; for(i=255;i>0;i--); 其中,第二个循环语句C51编译后,就用DJNZ指令来完成,相当于如下指令: MOV09H,#0FFH LOOP:DJNZ09H,LOOP 指令相当简洁,也很好计算精确的延时时间。 同样对do…while,while循环语句中,也是如此 例: unsigned char n; n=255; do{n--}

C语言中的22个数学函数

C语言的22个数学函数 在使用C语言数学函数时候,应该在该源文件中使用以下命令行: #include <> 或#include "",这里的<>跟""分别表示:前者表示系统到存放C库函数头文件所在的目录寻找需要包含的文件,这是标准方式;后者表示系统先在拥护当前目录中寻找要包含的文件,若找不到,再按前者方式查找。为节省时间,在使用自己编写的文件时使用的是“”,自己编写的文件一般是在当前目录下。 22个数学函数中只有abs的数据类型是:”整型“,”int“。 log10、logE中的10与E是在log的左下角位置。其余求弧度函数需要看清楚是不是指数。 排列方式如下:函数名:函数功能参数介绍,返回值,说明。函数原型。 abs: 求整型x的绝对值,返回计算结果。 int abs(int x); acos:计算COS-1(x)的值,返回计算结果,x应在-1到1范围内。 double acos(double x); asin: 计算SIN-1(x)的值,返回计算结果,x应在-1到1范围内。 double asin(double x); atan: 计算TAN-1(x)的值,返回计算结果。double atan(double x); atan2: 计算TAN-1/(x/y)的值,返回计算结果。 double atan2(double x,double y); cos: 计算COS(x)的值,返回计算结果,x的单位为弧度。 double cos(double x); cosh: 计算x的双曲余弦COSH(x)的值,返回计算结果。 double cosh(double x); exp: 求e x的值,返回计算结果。 double exp(double x); fabs: 求x的绝对值,返回计算结果。 duoble fabs(fouble x); floor: 求出不大于x的最大整数,返回该整数的双精度实数。 double floor(double x); fmod: 求整除x/y的余数,返回该余数的双精度。 double fmod(double x,double y); frexp: 把双精度数val分解为数字部分(尾数)x和以2为底的指数n,即val=x*2n,n存放在eptr 指向的变量中。返回数字部分<=x<1。 double frexp(double x, double *eptr); log: 求log e x,ln x。返回计算结果。 double log(double x); log10: 求log10x。返回计算结果。 double log10(double x); modf: 把双精度数val分解为整数部分和小数部分,把整数部分存到iptr指向的单元。返回val 的小数部分。 double modf(double val,double *iptr); pow: 计算x y的值,返回计算结果。 double pow(double x,double y); rand: 产生-90到32767间的随机整数。返回随机整数。 int rand(void); sin: 计算SINx的值。返回计算结果。x单位为弧度。 double sin(double x); sinh: 计算x的双曲正弦函数SINH(x)的值,返回计算结果。 double sinh(double x); sqrt: 计算根号x。返回计算结果。x应>=0。 double sqrt(double x); tan: 计算TAN(x)的值,返回计算结果。x单位为弧度。 double tan(double x); tanh: 计算x的双曲正切函数tanh(x)的值。返回计算结果。 double tanh(double x);

C语言中有关处理系统时间的知识

C语言中有关处理系统时间的知识 C语言的标准库函数包括一系列日期和时间处理函数,它们都在头文件time.h中说明,含有三种类型:time_t,struct tm和clock_t。 定义的C语言时间函数原型,如下: time_t time(time_t *timer); double difftime(time_t time1,time_t time2); struct tm *gmtime(const time_t *timer); struct tm *localtime(const time_t *timer); char *asctime(const struct tm *timeptr); char *ctime(const time_t *timer); size_t strftime(char *s,size_t maxsize,const char *format,const struct tm *timeptr); time_t mktime(struct tm *timeptr); clock_t clock(void); 时间函数具有知识和应用: 1.asctime(将时间和日期以字符串格式表示) 相关函数:time,ctime,gmtime,localtime 头文件:#include 定义函数:har * asctime(const struct tm * timeptr); 函数说明:asctime()将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为:“Wed Jun 30 21:49:08 1993\n” 返回值:返回一字符串表示目前当地的时间日期。

C语言程序怎样实现时间间隔

C语言中的Sleep函数 2012-12-27 11:24 5424人阅读评论(0) 收藏举报cCC语言c语言 Sleep函数: 功能: 执行挂起一段时间 用法: unsigned sleep(unsigned seconds); 注意: 在VC中使用带上头文件#include ,在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include 在VC中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C中是sleep, 不要大写,简单的说VC用Sleep, 别的一律使用sleep 在VC中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000); 在Linux下,sleep()里面的单位是秒,而不是毫秒。 示例: #include int main() { int a; a=1000; Sleep(a); return 0; } usleep函数: 功能:usleep功能把进程挂起一段时间,单位是微秒us(百万分之一秒)。 语法: void usleep(int micro_seconds); 返回值: 无 注意:这个函数不能工作在Windows 操作系统中。 usleep() 与sleep()类似,用于延迟挂起进程。进程被挂起放到reday queue。只是一般情况下,延迟时间数量级是秒的时候,尽可能使用sleep()函数。且此函数已被废除,可使用nanosleep。 如果延迟时间为几十毫秒,或者更小,尽可能使用usleep()函数。这样才能最佳的利用CPU 时间。 delay函数: 功能: 将程序的执行暂停一段时间,单位是毫秒ms(千分之一秒)

C语言时间函数的应用

C语言时间函数的应用 C语言时间函数的应用 C语言程序,常涉及时间的获取和计算,例如获取当前时间,倒计时计算,时间差计算。 C/C++语言提供了一些库函数,可用于此目的。下面以VC++ 6.0 编译器为例,叙述C语言时间函数的应用,调用时间函数需头文件time.h。 (1)获取现在时间并打印 C语言提供函数 time(),可以获取现在时间。函数原型是 time_t time ( time_t *t); 你可以通过实参获取时间,也可以通过返回值获取时间。例如: time_t now; now = time(NULL); 或 time(&now); 得到的time_t型数值是从1970年1月1日起到现在的秒数。 用C语言提供的函数 ctime 转换成字符串形式,打印出年月日时分秒。 见下面程序里的 print_current_time() 子程序。 (2)获取现在时间并转换成整数年月日时分秒形式 C语言提供的函数localtime(), 可以把 time_t 数值转换成 tm 结构,tm结构里含年月日时分秒和是否是闰年等信息,结构里的年加1900是真实的年,结构里的月加1是真实的月。 见子程序 get_current_YMD(). (3)输入年月日计算这天是该年的第几天 当我们要绘制某年度的统计数据时,常以天做横座标按比例绘图,这时就需要把月日换算为天。 把日加上前几个月的天数就可得结果。只要注意该年是平年还是闰年,闰年的2月份多一天。闰年的判断是: if ((Y%4==0)&&(Y%100!=0)||(Y%400==0) {printf("闰年");} 见子程序 YMD_2_JD(); (4)输入年月日计算这天是星期几 公元计年从1年1月1日开始,这天是星期一。平年一年有365天,365除7取余数为1。也就是说平年的星期几等于上一年的星期几加1。闰年的星期几等于上一年的星期几加2。 所以,若知年份,就可以推算出这年元旦推移了多少天,变星期几,再调用YMD_2_JD(),算出某月某日推移了多少天,就算得这天是星期几。 见子程序 YMD_2_WeekDay()。 (5)输入整型值年月日时分秒转换为time_t 库函数 mktime,可以把 tm 结构转换为 time_t。 我们可以用localtime把当前时间转为tm 结构,再修改里面的年月日时分秒,这样,tm 里的其它项,例如星期几,这天是该年的第几天等成员变量会自动改

c语言对时间的处理函数和计时的实现

c语言对时间的处理函数和计时的实现 1,时间的获取: 通过time()函数来获得日历时间(Calendar Time),其原型为:time_t time(time_t * timer); #include "stdafx.h" #include "time.h" #include "stdio.h" #include "stdlib.h" int main(void) { struct tm t; //定义tm时间结构,用来存储时间格式的数据信息 time_t t_of_day; //定义time_t时间结构 t.tm_year=2006-1900;//以1900年为标准计算时间 t.tm_mon=6; //为结构体成员赋值 t.tm_mday=1; t.tm_hour=0; t.tm_min=0; t.tm_sec=1; t.tm_isdst=0; t_of_day=mktime(&t); //使用mktime()函数将用tm结构表示的时间转化为日历时间:time_t型变量。其函数原型如下:time_t mktime(struct tm * timeptr);ctime()函数(参数为time_t 结构)将时间以固定的格式显示出来,返回值是char*型的字符串。 return 0; } 2,时间的储存,通过预定义的两种结构来存储: 1,日历时间(Calendar Time)是通过time_t数据类型来表示的,用time_t表示的时间(日历时间)是从一个时间点(例如:1970年1月1日0时0分0秒)到此时的秒数。在time.h中,我们也可以看到time_t是一个长整型数: #ifndef _TIME_T_DEFINED typedef long time_t; /* 时间值 */ #define _TIME_T_DEFINED /* 避免重复定义 time_t */ #endif 2,在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下: struct tm { int tm_sec; /* 秒–取值区间为[0,59] */ int tm_min; /* 分 - 取值区间为[0,59] */ int tm_hour; /* 时 - 取值区间为[0,23] */ int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */ int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11]

c语言函数库-第六章(时间和日期函数)

c语言函数库 第六章(时间和日期函数) 1. asctime:日期和时间转换函数 (1) 2. clock:测定运行时间函数 (2) 3.ctime:时间转换函数 (3) 4. difftime:计算时间差函数 (3) 5. gmtime:将日历时间转换为GMT (4) 6. localtime:把日期和时间转变为结构 (5) 7. mktime:时间类型转换函数 (5) 8. time:获取系统时间函数 (7) 1.asctime:日期和时间转换函数 函数原型:char *asctime(const struct tm *tblock) 头文件:#include 是否是标准函数:是 函数功能:本函数把指定的tm结构类的日期(分段日期)转换成下列格式的字符串: Mon Nov 21 11:31:54 1983\n\0 返回值:转换后的字符串指针。 例程如下:用asctime函数转换时间格式。 #include #include #include int main(void) { struct tm t; char str[80]; /*设置tm结构类变量t的时间成员*/ t.tm_sec = 1; /* 秒*/ t.tm_min = 30; /*分钟*/ t.tm_hour = 9; /* 时*/ t.tm_mday = 22; /* 日*/ t.tm_mon = 11; /* 月*/ t.tm_year = 56; /* 年*/ t.tm_wday = 4; /*星期*/ t.tm_yday = 0; /*不必设置*/ t.tm_isdst = 0; /*不必设置*/ /*格式转换*/ strcpy(str, asctime(&t)); printf("%s\n", str); return 0; } 例程说明: (1)首先定义tm结构类的变量t,并设置t的时间成员。 (2)通过函数asctime将t的时间转换为指定格式。

相关主题
文本预览
相关文档 最新文档