当前位置:文档之家› C语言常用函数手册

C语言常用函数手册

C语言常用函数手册
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为弧度

double tanh(double x) 返回x的双曲正切tanh(x)值,x为弧度

double hypot(double x,double y) 返回直角三角形斜边的长度(z),

x和y为直角边的长度,z2=x2+y2

double ceil(double x) 返回不小于x的最小整数

double floor(double x) 返回不大于x的最大整数

void srand(unsigned seed) 初始化随机数发生器

int rand() 产生一个随机数并返回这个数

double poly(double x,int n,double c[])从参数产生一个多项式

double modf(double value,double *iptr)将双精度数value分解成尾数和阶

double fmod(double x,double y) 返回x/y的余数

double frexp(double value,int *eptr) 将双精度数value分成尾数和阶

double atof(char *nptr) 将字符串nptr转换成浮点数并返回这个浮点数double atoi(char *nptr) 将字符串nptr转换成整数并返回这个整数

double atol(char *nptr) 将字符串nptr转换成长整数并返回这个整数

char *ecvt(double value,int ndigit,int *decpt,int *sign)

将浮点数value转换成字符串并返回该字符串

char *fcvt(double value,int ndigit,int *decpt,int *sign)

将浮点数value转换成字符串并返回该字符串

char *gcvt(double value,int ndigit,char *buf)

将数value转换成字符串并存于buf中,并返回buf的指针

char *ultoa(unsigned long value,char *string,int radix)

将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数char *ltoa(long value,char *string,int radix)

将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数char *itoa(int value,char *string,int radix)

将整数value转换成字符串存入string,radix为转换时所用基数

double atof(char *nptr) 将字符串nptr转换成双精度数,并返回这个数,错误返回0

int atoi(char *nptr) 将字符串nptr转换成整型数, 并返回这个数,错误返回0

long atol(char *nptr) 将字符串nptr转换成长整型数,并返回这个数,错误返回0 double strtod(char *str,char **endptr)将字符串str转换成双精度数,并返回这个数, long strtol(char *str,char **endptr,int base)将字符串str转换成长整型数,

并返回这个数,

int matherr(struct exception *e)

用户修改数学错误返回信息函数(没有必要使用)

double _matherr(_mexcep why,char *fun,double *arg1p,

double *arg2p,double retval)

用户修改数学错误返回信息函数(没有必要使用)

unsigned int _clear87() 清除浮点状态字并返回原来的浮点状态

void _fpreset() 重新初使化浮点数学程序包

unsigned int _status87() 返回浮点状态字

3.目录函数,所在函数库为dir.h、dos.h

int chdir(char *path) 使指定的目录path(如:"C:\\WPS")变成当前的工作目录,成

功返回0

int findfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的文件,成功返回0

pathname为指定的目录名和文件名,如"C:\\WPS\\TXT"

ffblk为指定的保存文件信息的一个结构,定义如下:

struct ffblk

{

char ff_reserved[21]; /*DOS保留字*/

char ff_attrib; /*文件属性*/

int ff_ftime; /*文件时间*/

int ff_fdate; /*文件日期*/

long ff_fsize; /*文件长度*/

char ff_name[13]; /*文件名*/

}

attrib为文件属性,由以下字符代表

FA_RDONL Y 只读文件FA_LABEL 卷标号

FA_HIDDEN 隐藏文件FA_DIREC 目录

FA_SYSTEM 系统文件FA_ARCH 档案

例:

struct ffblk ff;

findfirst("*.wps",&ff,FA_RDONL Y);

int findnext(struct ffblk *ffblk) 取匹配finddirst的文件,成功返回0

void fumerge(char *path,char *drive,char *dir,char *name,char *ext)

此函数通过盘符drive(C:、A:等),路径dir(\TC、\BC\LIB等),

文件名name(TC、WPS等),扩展名ext(.EXE、.COM等)组成一个文件名

存与path中.

int fnsplit(char *path,char *drive,char *dir,char *name,char *ext)

此函数将文件名path分解成盘符drive(C:、A:等),路径dir(\TC、\BC\LIB等),

文件名name(TC、WPS等),扩展名ext(.EXE、.COM等),并分别存入相应的变量中. int getcurdir(int drive,char *direc) 此函数返回指定驱动器的当前工作目录名称drive 指定的驱动器(0=当前,1=A,2=B,3=C等)

direc 保存指定驱动器当前工作路径的变量成功返回0

char *getcwd(char *buf,iint n) 此函数取当前工作目录并存入buf中,直到n个字节长为为止.错误返回NULL

int getdisk() 取当前正在使用的驱动器,返回一个整数(0=A,1=B,2=C等)

int setdisk(int drive) 设置要使用的驱动器drive(0=A,1=B,2=C等),

返回可使用驱动器总数

int mkdir(char *pathname) 建立一个新的目录pathname,成功返回0

int rmdir(char *pathname) 删除一个目录pathname,成功返回0

char *mktemp(char *template) 构造一个当前目录上没有的文件名并存于template中

char *searchpath(char *pathname) 利用MSDOS找出文件filename所在路径, ,此函数使用DOS的PATH变量,未找到文件返回NULL

4.进程函数,所在函数库为stdlib.h、process.h

void abort() 此函数通过调用具有出口代码3的_exit写一个终止信息于stderr,并异常终止程序无返回值

int exec…装入和运行其它程序

int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)

int execle( char *pathname,char *arg0,char *arg1,…,

char *argn,NULL,char *envp[])

int execlp( char *pathname,char *arg0,char *arg1,…,NULL)

int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])

int execv( char *pathname,char *argv[])

int execve( char *pathname,char *argv[],char *envp[])

int execvp( char *pathname,char *argv[])

int execvpe(char *pathname,char *argv[],char *envp[])

exec函数族装入并运行程序pathname,并将参数

arg0(arg1,arg2,argv[],envp[])传递给子程序,出错返回-1

在exec函数族中,后缀l、v、p、e添加到exec后,

所指定的函数将具有某种操作能力

有后缀p时,函数可以利用DOS的PA TH变量查找子程序文件l时,函数中被传递的参数个数固定

v时,函数中被传递的参数个数不固定

e时,函数传递指定参数envp,允许改变子进程的环境,

无后缀e时,子进程使用当前程序的环境

void _exit(int status)终止当前程序,但不清理现场

void exit(int status) 终止当前程序,关闭所有文件,写缓冲区的输出(等待输出), 并调用任何寄存器的"出口函数",无返回值

int spawn…运行子程序

int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL)

int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL,char *envp[])

int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL)

int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL,char *envp[])

int spawnv( int mode,char *pathname,char *argv[])

int spawnve( int mode,char *pathname,char *argv[],char *envp[])

int spawnvp( int mode,char *pathname,char *argv[])

int spawnvpe(int mode,char *pathname,char *argv[],char *envp[]) spawn函数族在mode模式下运行子程序pathname,并将参数

arg0(arg1,arg2,argv[],envp[])传递给子程序.出错返回-1

mode为运行模式

mode为P_W AIT 表示在子程序运行完后返回本程序

P_NOW AIT 表示在子程序运行时同时运行本程序(不可用)

P_OVERLAY表示在本程序退出后运行子程序

在spawn函数族中,后缀l、v、p、e添加到spawn后,

所指定的函数将具有某种操作能力

有后缀p时, 函数利用DOS的PA TH查找子程序文件

l时, 函数传递的参数个数固定.

v时, 函数传递的参数个数不固定.

e时, 指定参数envp可以传递给子程序,允许改变子程序运行环境.

当无后缀e时,子程序使用本程序的环境.

int system(char *command) 将MSDOS命令command传递给DOS执行

5.转换子程序,函数库为math.h、stdlib.h、ctype.h、float.h

char *ecvt(double value,int ndigit,int *decpt,int *sign)

将浮点数value转换成字符串并返回该字符串

char *fcvt(double value,int ndigit,int *decpt,int *sign)

将浮点数value转换成字符串并返回该字符串

char *gcvt(double value,int ndigit,char *buf)

将数value转换成字符串并存于buf中,并返回buf的指针

char *ultoa(unsigned long value,char *string,int radix)

将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数char *ltoa(long value,char *string,int radix)

将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数char *itoa(int value,char *string,int radix)

将整数value转换成字符串存入string,radix为转换时所用基数

double atof(char *nptr) 将字符串nptr转换成双精度数,并返回这个数,错误返回0 int atoi(char *nptr) 将字符串nptr转换成整型数, 并返回这个数,错误返回0 long atol(char *nptr) 将字符串nptr转换成长整型数,并返回这个数,错误返回0 double strtod(char *str,char **endptr)将字符串str转换成双精度数,并返回这个数, long strtol(char *str,char **endptr,int base)将字符串str转换成长整型数,

并返回这个数,

int toascii(int c) 返回c相应的ASCII

int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z')

int _tolower(int ch) 返回ch相应的小写字母('a'-'z')

int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z')

int _toupper(int ch) 返回ch相应的大写字母('A'-'Z')

6.诊断函数,所在函数库为assert.h、math.h

void assert(int test) 一个扩展成if语句那样的宏,如果test测试失败,就显示一个信息并异常终止程序,无返回值

void perror(char *string) 本函数将显示最近一次的错误信息,格式如下:

字符串string:错误信息

char *strerror(char *str) 本函数返回最近一次的错误信息,格式如下:

字符串str:错误信息

int matherr(struct exception *e)

用户修改数学错误返回信息函数(没有必要使用)

double _matherr(_mexcep why,char *fun,double *arg1p,

double *arg2p,double retval)

7.用户修改数学错误返回信息函数(没有必要使用) 输入输出子程序,函数库为io.h、conio.h、stat.h、dos.h、stdio.h、signal.h

int kbhit() 本函数返回最近所敲的按键

int fgetchar() 从控制台(键盘)读一个字符,显示在屏幕上

int getch() 从控制台(键盘)读一个字符,不显示在屏幕上

int putch() 向控制台(键盘)写一个字符

int getchar() 从控制台(键盘)读一个字符,显示在屏幕上

int putchar() 向控制台(键盘)写一个字符

int getche() 从控制台(键盘)读一个字符,显示在屏幕上

int ungetch(int c) 把字符c退回给控制台(键盘)

char *cgets(char *string) 从控制台(键盘)读入字符串存于string中

int scanf(char *format[,argument…])从控制台读入一个字符串,分别对各个参数进行赋值,使用BIOS进行输出

int vscanf(char *format,Valist param)从控制台读入一个字符串,分别对各个参数进行赋值,使用BIOS进行输出,参数从Valist param中取得

int cscanf(char *format[,argument…])从控制台读入一个字符串,分别对各个参数进行赋值,直接对控制台作操作,比如显示器在显示时字符时即为直接写频方式显示

int sscanf(char *string,char *format[,argument,…])通过字符串string,分别对各个参数进行赋值

int vsscanf(char *string,char *format,Vlist param)通过字符串string,分别对各个参数进行赋值,参数从Vlist param中取得

int puts(char *string) 发关一个字符串string给控制台(显示器),

使用BIOS进行输出

void cputs(char *string) 发送一个字符串string给控制台(显示器),

直接对控制台作操作,比如显示器即为直接写频方式显示

int printf(char *format[,argument,…]) 发送格式化字符串输出给控制台(显示器) 使用BIOS进行输出

int vprintf(char *format,Valist param) 发送格式化字符串输出给控制台(显示器) 使用BIOS进行输出,参数从Valist param中取得

int cprintf(char *format[,argument,…]) 发送格式化字符串输出给控制台(显示器), 直接对控制台作操作,比如显示器即为直接写频方式显示

int vcprintf(char *format,Valist param)发送格式化字符串输出给控制台(显示器), 直接对控制台作操作,比如显示器即为直接写频方式显示,

参数从Valist param中取得

int sprintf(char *string,char *format[,argument,…])

将字符串string的内容重新写为格式化后的字符串

int vsprintf(char *string,char *format,Valist param)

将字符串string的内容重新写为格式化后的字符串,参数从Valist param中取得int rename(char *oldname,char *newname)将文件oldname的名称改为newname

int ioctl(int handle,int cmd[,int *argdx,int argcx])

本函数是用来控制输入/输出设备的,请见下表:

cmd值功能

0 取出设备信息

1 设置设备信息

2 把argcx字节读入由argdx所指的地址

3 在argdx所指的地址写argcx字节

4 除把handle当作设备号(0=当前,1=A,等)之外,均和cmd=2时一样

5 除把handle当作设备号(0=当前,1=A,等)之外,均和cmd=3时一样

6 取输入状态

7 取输出状态

8 测试可换性;只对于DOS 3.x

11 置分享冲突的重算计数;只对DOS 3.x

int (*ssignal(int sig,int(*action)())()执行软件信号(没必要使用)

int gsignal(int sig) 执行软件信号(没必要使用)

int _open(char *pathname,int access)为读或写打开一个文件,

按后按access来确定是读文件还是写文件,access值见下表

access值意义

O_RDONL Y 读文件

O_WRONL Y 写文件

O_RDWR 即读也写

O_NOINHERIT 若文件没有传递给子程序,则被包含

O_DENYALL 只允许当前处理必须存取的文件

O_DENYWRITE 只允许从任何其它打开的文件读

O_DENYREAD 只允许从任何其它打开的文件写

O_DENYNONE 允许其它共享打开的文件

└┴┘

8.接口子程序,所在函数库为:dos.h、bios.h

unsigned sleep(unsigned seconds)暂停seconds微秒(百分之一秒)

int unlink(char *filename)删除文件filename

unsigned FP_OFF(void far *farptr)本函数用来取远指针farptr的偏移量

unsigned FP_SEG(void far *farptr)本函数用来没置远指针farptr的段值

void far *MK_FP(unsigned seg,unsigned off)根据段seg和偏移量off构造一个far指针unsigned getpsp()取程序段前缀的段地址,并返回这个地址

char *parsfnm(char *cmdline,struct fcb *fcbptr,int option)

函数分析一个字符串,通常,对一个文件名来说,是由cmdline所指的一个命令行.

文件名是放入一个FCB中作为一个驱动器,文件名和扩展名.FCB是由fcbptr所指

定的.option参数是DOS分析系统调用时,AL文本的值.

int absread(int drive,int nsects,int sectno,void *buffer)本函数功能为读特定的磁盘扇区,drive为驱动器号(0=A,1=B等),nsects为要读的扇区数,sectno为开始的逻辑扇区号,buffer为保存所读数据的保存空间

int abswrite(int drive,int nsects,int sectno,void *buffer)本函数功能为写特定的磁盘扇区,drive为驱动器号(0=A,1=B等),nsects为要写的扇区数,sectno为开始的逻辑扇区号,buffer为保存所写数据的所在空间

void getdfree(int drive,struct dfree *dfreep)本函数用来取磁盘的自由空间, drive为磁盘号(0=当前,1=A等).函数将磁盘特性的由dfreep指向的dfree结构中.

dfree结构如下:

struct dfree

{

unsigned df_avail; /*有用簇个数*/

unsigned df_total; /*总共簇个数*/

unsigned df_bsec; /*每个扇区字节数*/

unsigned df_sclus; /*每个簇扇区数*/

}

char far *getdta() 取磁盘转换地址DTA

void setdta(char far *dta)设置磁盘转换地址DTA

void getfat(int drive,fatinfo *fatblkp)

本函数返回指定驱动器drive(0=当前,1=A,2=B等)的文件分配表信息

并存入结构fatblkp中,结构如下:

struct fatinfo

{

char fi_sclus; /*每个簇扇区数*/

char fi_fatid; /*文件分配表字节数*/

int fi_nclus; /*簇的数目*/

int fi_bysec; /*每个扇区字节数*/

}

void getfatd(struct fatinfo *fatblkp) 本函数返回当前驱动器的文件分配表信息, 并存入结构fatblkp中,结构如下:

struct fatinfo

{

char fi_sclus; /*每个簇扇区数*/

char fi_fatid; /*文件分配表字节数*/

int fi_nclus; /*簇的数目*/

int fi_bysec; /*每个扇区字节数*/

}

int bdos(int dosfun,unsigned dosdx,unsigned dosal)本函数对MSDOS系统进行调用, dosdx为寄存器dx的值,dosal为寄存器al的值,dosfun为功能号

int bdosptr(int dosfun,void *argument,unsiigned dosal)本函数对MSDOS系统进行调用, argument为寄存器dx的值,dosal为寄存器al的值,dosfun为功能号

int int86(int intr_num,union REGS *inregs,union REGS *outregs)

执行intr_num号中断,用户定义的寄存器值存于结构inregs中,

执行完后将返回的寄存器值存于结构outregs中.

int int86x(int intr_num,union REGS *inregs,union REGS *outregs,

struct SREGS *segregs)执行intr_num号中断,用户定义的寄存器值存于结构inregs中和结构segregs中,执行完后将返回的寄存器值存于结构outregs中. int intdos(union REGS *inregs,union REGS *outregs)

本函数执行DOS中断0x21来调用一个指定的DOS函数,用户定义的寄存器值存于结构inregs中,执行完后函数将返回的寄存器值存于结构outregs中

int intdosx(union REGS *inregs,union REGS *outregs,struct SREGS *segregs) 本函数执行DOS中断0x21来调用一个指定的DOS函数,用户定义的寄存器值存于结构inregs和segregs中,执行完后函数将返回的寄存器值存于结构outregs中void intr(int intr_num,struct REGPACK *preg)本函数中一个备用的8086软件中断接口它能产生一个由参数intr_num指定的8086软件中断.函数在执行软件中断前,

从结构preg复制用户定义的各寄存器值到各个寄存器.软件中断完成后,

函数将当前各个寄存器的值复制到结构preg中.参数如下:

intr_num 被执行的中断号

preg为保存用户定义的寄存器值的结构,结构如下

struct REGPACK

{

unsigned r_ax,r_bx,r_cx,r_dx;

unsigned r_bp,r_si,r_di,r_ds,r_es,r_flags;

}

函数执行完后,将新的寄存器值存于结构preg中

void keep(int status,int size)以status状态返回MSDOS,但程序仍保留于内存中,所占用空间由size决定.

void ctrlbrk(int (*fptr)()) 设置中断后的对中断的处理程序.

void disable() 禁止发生中断

void enable() 允许发生中断

void geninterrupt(int intr_num)执行由intr_num所指定的软件中断

void interrupt(* getvect(int intr_num))() 返回中断号为intr_num的中断处理程序, 例如: old_int_10h=getvect(0x10);

void setvect(int intr_num,void interrupt(* isr)()) 设置中断号为intr_num的中断处理程序为isr,例如: setvect(0x10,new_int_10h);

void harderr(int (*fptr)()) 定义一个硬件错误处理程序,

每当出现错误时就调用fptr所指的程序

void hardresume(int rescode)硬件错误处理函数

void hardretn(int errcode) 硬件错误处理函数

int inport(int prot) 从指定的输入端口读入一个字,并返回这个字

int inportb(int port)从指定的输入端口读入一个字节,并返回这个字节

void outport(int port,int word) 将字word写入指定的输出端口port

void outportb(int port,char byte)将字节byte写入指定的输出端口port

int peek(int segment,unsigned offset) 函数返回segment:offset处的一个字

char peekb(int segment,unsigned offset)函数返回segment:offset处的一个字节

void poke(int segment,int offset,char value) 将字value写到segment:offset处

void pokeb(int segment,int offset,int value) 将字节value写到segment:offset处

int randbrd(struct fcb *fcbptr,int reccnt)

函数利用打开fcbptr所指的FCB读reccnt个记录.

int randbwr(struct fcb *fcbptr,int reccnt)

函数将fcbptr所指的FCB中的reccnt个记录写到磁盘上

void segread(struct SREGS *segtbl)函数把段寄存器的当前值放进结构segtbl中

int getverify() 取检验标志的当前状态(0=检验关闭,1=检验打开)

void setverify(int value)设置当前检验状态,

value为0表示关闭检验,为1表示打开检验

int getcbrk()本函数返回控制中断检测的当前设置

int setcbrk(int value)本函数用来设置控制中断检测为接通或断开

当value=0时,为断开检测.当value=1时,为接开检测

int dosexterr(struct DOSERR *eblkp)取扩展错误.在DOS出现错误后,此函数将扩充的错误信息填入eblkp所指的DOSERR结构中.该结构定义如下:

struct DOSERR

{

int exterror;/*扩展错误*/

char class; /*错误类型*/

char action; /*方式*/

char locus; /*错误场所*/

}

9.操作函数,所在函数库为string.h、mem.h

mem…操作存贮数组

void *memccpy(void *destin,void *source,unsigned char ch,unsigned n)

void *memchr(void *s,char ch,unsigned n)

void *memcmp(void *s1,void *s2,unsigned n)

int memicmp(void *s1,void *s2,unsigned n)

void *memmove(void *destin,void *source,unsigned n)

void *memcpy(void *destin,void *source,unsigned n)

void *memset(void *s,char ch,unsigned n)

这些函数,mem…系列的所有成员均操作存贮数组.在所有这些函数中,数组是n字节长. memcpy从source复制一个n字节的块到destin.如果源块和目标块重迭,则选择复制方向, 以例正确地复制覆盖的字节.

memmove与memcpy相同.

memset将s的所有字节置于字节ch中.s数组的长度由n给出.

memcmp比较正好是n字节长的两个字符串s1和s2.些函数按无符号字符比较字节,因此, memcmp("0xFF","\x7F",1)返回值大于0.

memicmp比较s1和s2的前n个字节,不管字符大写或小写.

memccpy从source复制字节到destin.复制一结束就发生下列任一情况:

(1)字符ch首选复制到destin.

(2)n个字节已复制到destin.

memchr对字符ch检索s数组的前n个字节.

返回值:memmove和memcpy返回destin

memset返回s的值

memcmp和memicmp┬若s1

若s1=s2返回值等于0

若s1>s2返回值大于0

memccpy若复制了ch,则返回直接跟随ch的在destin中的字节的一个指针;

否则返回NULL

memchr返回在s中首先出现ch的一个指针;如果在s数组中不出现ch,就返回NULL. void movedata(int segsrc,int offsrc,

int segdest,int offdest,

unsigned numbytes)

本函数将源地址(segsrc:offsrc)处的numbytes个字节

复制到目标地址(segdest:offdest)

void movemem(void *source,void *destin,unsigned len)

本函数从source处复制一块长len字节的数据到destin.若源地址和目标地址字符串重迭,则选择复制方向,以便正确的复制数据.

void setmem(void *addr,int len,char value)

本函数把addr所指的块的第一个字节置于字节value中.

str…字符串操作函数

char stpcpy(char *dest,const char *src)

将字符串src复制到dest

char strcat(char *dest,const char *src)

将字符串src添加到dest末尾

char strchr(const char *s,int c)

检索并返回字符c在字符串s中第一次出现的位置

int strcmp(const char *s1,const char *s2)

比较字符串s1与s2的大小,并返回s1-s2

char strcpy(char *dest,const char *src)

将字符串src复制到dest

size_t strcspn(const char *s1,const char *s2)

扫描s1,返回在s1中有,在s2中也有的字符个数

char strdup(const char *s)

将字符串s复制到最近建立的单元

int stricmp(const char *s1,const char *s2)

比较字符串s1和s2,并返回s1-s2

size_t strlen(const char *s)

返回字符串s的长度

char strlwr(char *s)

将字符串s中的大写字母全部转换成小写字母,并返回转换后的字符串

char strncat(char *dest,const char *src,size_t maxlen)

将字符串src中最多maxlen个字符复制到字符串dest中

int strncmp(const char *s1,const char *s2,size_t maxlen)

比较字符串s1与s2中的前maxlen个字符

char strncpy(char *dest,const char *src,size_t maxlen)

复制src中的前maxlen个字符到dest中

int strnicmp(const char *s1,const char *s2,size_t maxlen)

比较字符串s1与s2中的前maxlen个字符

char strnset(char *s,int ch,size_t n)

将字符串s的前n个字符置于ch中

char strpbrk(const char *s1,const char *s2)

扫描字符串s1,并返回在s1和s2中均有的字符个数

char strrchr(const char *s,int c)

扫描最后出现一个给定字符c的一个字符串s

char strrev(char *s)

将字符串s中的字符全部颠倒顺序重新排列,并返回排列后的字符串

char strset(char *s,int ch)

将一个字符串s中的所有字符置于一个给定的字符ch

size_t strspn(const char *s1,const char *s2)

扫描字符串s1,并返回在s1和s2中均有的字符个数

char strstr(const char *s1,const char *s2)

扫描字符串s2,并返回第一次出现s1的位置

char strtok(char *s1,const char *s2)

检索字符串s1,该字符串s1是由字符串s2中定义的定界符所分隔

char strupr(char *s)

将字符串s中的小写字母全部转换成大写字母,并返回转换后的字符串

10.存贮分配子程序,所在函数库为dos.h、alloc.h、malloc.h、stdlib.h、process.h

int allocmem(unsigned size,unsigned *seg)利用DOS分配空闲的内存, size为分配内存大小,seg为分配后的内存指针

int freemem(unsigned seg)释放先前由allocmem分配的内存,seg为指定的内存指针int setblock(int seg,int newsize)本函数用来修改所分配的内存长度,

seg为已分配内存的内存指针,newsize为新的长度

int brk(void *endds)

本函数用来改变分配给调用程序的数据段的空间数量,新的空间结束地址为endds char *sbrk(int incr)

本函数用来增加分配给调用程序的数据段的空间数量,增加incr个字节的空间unsigned long coreleft() 本函数返回未用的存储区的长度,以字节为单位

void *calloc(unsigned nelem,unsigned elsize)分配nelem个长度为elsize的内存空间并返回所分配内存的指针

void *malloc(unsigned size)分配size个字节的内存空间,并返回所分配内存的指针void free(void *ptr)释放先前所分配的内存,所要释放的内存的指针为ptr

void *realloc(void *ptr,unsigned newsize)改变已分配内存的大小,ptr为已分配有内存区域的指针,newsize为新的长度,返回分配好的内存指针.

long farcoreleft() 本函数返回远堆中未用的存储区的长度,以字节为单位

void far *farcalloc(unsigned long units,unsigned long unitsz)

从远堆分配units个长度为unitsz的内存空间,并返回所分配内存的指针void *farmalloc(unsigned long size)分配size个字节的内存空间,

并返回分配的内存指针

void farfree(void far *block)释放先前从远堆分配的内存空间,

所要释放的远堆内存的指针为block

void far *farrealloc(void far *block,unsigned long newsize)改变已分配的远堆内存的大小,block为已分配有内存区域的指针,newzie为新的长度,返回分配好的内存指针

11.时间日期函数,函数库为time.h、dos.h

在时间日期函数里,主要用到的结构有以下几个:

总时间日期贮存结构tm

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-11*/

int tm_year; /*自1900的年数*/

int tm_wday; /*自星期日的天数0-6*/

int tm_yday; /*自1月1日起的天数,0-365*/

int tm_isdst; /*是否采用夏时制,采用为正数*/

}

日期贮存结构date

struct date

{

int da_year; /*自1900的年数*/

char da_day; /*天数*/

char da_mon; /*月数1=Jan*/

}

时间贮存结构time

struct time

{

unsigned char ti_min; /*分钟*/

unsigned char ti_hour; /*小时*/

unsigned char ti_hund;

unsigned char ti_sec; /*秒*/

char *ctime(long *clock)

本函数把clock所指的时间(如由函数time返回的时间)转换成下列格式的

字符串:Mon Nov 21 11:31:54 1983\n\0

char *asctime(struct tm *tm)

本函数把指定的tm结构类的时间转换成下列格式的字符串:

Mon Nov 21 11:31:54 1983\n\0

double difftime(time_t time2,time_t time1)

计算结构time2和time1之间的时间差距(以秒为单位)

struct tm *gmtime(long *clock)本函数把clock所指的时间(如由函数time返回的时间) 转换成格林威治时间,并以tm结构形式返回

struct tm *localtime(long *clock)本函数把clock所指的时间(如函数time返回的时间) 转换成当地标准时间,并以tm结构形式返回

void tzset()本函数提供了对UNIX操作系统的兼容性

long dostounix(struct date *dateptr,struct time *timeptr)

本函数将dateptr所指的日期,timeptr所指的时间转换成UNIX格式,并返回

自格林威治时间1970年1月1日凌晨起到现在的秒数

void unixtodos(long utime,struct date *dateptr,struct time *timeptr)

本函数将自格林威治时间1970年1月1日凌晨起到现在的秒数utime转换成DOS格式并保存于用户所指的结构dateptr和timeptr中

void getdate(struct date *dateblk)本函数将计算机内的日期写入结构dateblk 中以供用户使用

void setdate(struct date *dateblk)本函数将计算机内的日期改成

由结构dateblk所指定的日期

void gettime(struct time *timep)本函数将计算机内的时间写入结构timep中, 以供用户使用

void settime(struct time *timep)本函数将计算机内的时间改为

由结构timep所指的时间

long time(long *tloc)本函数给出自格林威治时间1970年1月1日凌晨至现在所经过的秒数,并将该值存于tloc所指的单元中.

int stime(long *tp)本函数将tp所指的时间(例如由time所返回的时间) 写入计算机中.

C语言常用函数

C语言的常用库函数 函数1。absread()读磁盘绝对扇区函数 原形:int absread(int drive,int num,int sectnum,void *buf) 功能:从drive指定的驱动器磁盘上,sectnum指定的逻辑扇区号开始读取(通过DOS中断0x25读取)num 个(最多64K个)扇区的内容,储存于buf所指的缓冲区中。 参数:drive=0对应A盘,drive=1对应B盘。 返回值:0:成功;-1:失败。 头文件:dos.h 函数2。abswrite()写磁盘绝对扇区函数 原形:int abswrite(int drive,int nsects,int lsect,void *buffer) drive=0(A驱动器)、1(B驱动器)、 nsects=要写的扇区数(最多64K个); lsect=起始逻辑扇区号; buffer=要写入数据的内存起始地址。 功能:将指定内容写入(调用DOS中断0x26)磁盘上的指定扇区,即使写入的地方是磁盘的逻辑结构、文件、FAT表和目录结构所在的扇区,也照常进行。 返回值:0:成功;-1:失败。 头文件:dos.h 函数3。atof()将字符串转换成浮点数的函数 原形:double atof(const char *s) 功能:把s所指向的字符串转换成double类型。 s格式为:符号数字.数字E符号数字 返回值:字符串的转换值。 头文件:math.h、stdlib.h 函数4。atoi()将字符串转换成整型数的函数 原形:int atoi(const char *s) 功能:把s所指向的字符串转换成int类型。 s格式为:符号数字 返回值:字符串的转换值。若出错则返回0。 头文件:stdlib.h 函数5。atol()将字符串转换成长整型数的函数 原形:long atol(const char *s)

C语言输入输出函数printf与scanf的用法格式

C 语言输入输出函数printf 与scanf 的用法格式 printf()函数用来向标准输出设备(屏幕)写数据; scanf() 函数用来从标准输入设备(键盘)上读数据。下面详细介绍这两个函数的用法。 一、printf()函数 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式控制字符, 以"%"开始, 后跟一个或几个控制字符,用来确定输出内容格式。 参量表是需要输出的一系列参数,可以是常量、变量或表达式,其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想不到的错误。 例如: printf("a=%d b=%d",a,b); 1. 格式控制符Turbo C 2.0提供的格式化规定符如下: 格式控制字符 参量表 正常字符

━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号作用 ────────────────────────── %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e,%E 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %o 无符号以八进制表示的整数 %g,%G 自动选择合适的表示法 ━━━━━━━━━━━━━━━━━━━━━━━━━━ printf的附加格式说明字符 字符说明 l 用于长整型数或双精度实型,可加在格式 符d、o、x、u和f前面 m(代表一个正整数据最小输出显示宽度

C语言中常见的功能函数

C语言中常见的功能函数(应掌握的编程) 1、两个变量值的交换 void exchang(float *x,float *y) /*形参为两个变量的地铁(指针)*/ {float z; z=*x; *x=*y; *y=z; } void main() {float a,b; scanf(“%f%f”,&a,&b); exchang(&a,&b); /*因为形参是指针,所以实参必须给变量的地址,不能给变量名*/ printf(“a=%f,b=%f”,a,b); } 2、判断一个整数的奇偶 int jou(int n) /*如果是奇数返回1,否则返回0*/ { if(n%2==0) return 0; return 1; } 3、小写字符转换成大写字符 根据实参传给形参的字母,判断是否是小写字母,如果是小写字母,则转换成大写字母,否则不进行转换,函数返回转换后或原来的字符。 本函数仿照toupper()库函数的功能编写(toupper(c) 是将变量c字母转换成大写字母,如果不是小写字母不转换)。 char toupper1(char ch) {if(ch>=?a?&&ch<=?z?) ch-=32; /*小写字母比对应的大写字母ASCII码值大32*/ return ch; } 4、判断一个字符是否是字母(或数字) 根据实参传给形参的字符,判断是否是字母(或数字),如果是字母(或数字)返回1,否则返回0。此函数是根据库函数isalpha()(或isdigit())来编写的。 int isalpha1(char ch) /*判断是否是字母*/ {if(ch>=?A?&&ch<=?Z?||ch>=?a?&&ch<=?z?) return 1; else return 0; } int isdigit1(char ch) /*判断是否是数字字符*/ {if(ch>=?0?&&ch<=?9?) return 1; else return 0; } 5、根据学生成绩,返回其等级 char fun(float cj) {char c; switch((int)cj/10) {case 10:

C语言常用IO函数

一些比较常用的io函数,总结了一下,一块贴出来了 stdin标准输入流 stdout标准输出流 stderr标准错误流 字符IO函数 1.int getchar() 说明:从stdin读取1个字符 返回值:成功,返回该字符;出错,返回EOF; 2.int fgetc(FILE fp) 说明:功能同getchar,默认从文件fp读取; 返回值:成功,返回该字符;出错,返回EOF; 可以重定向 3.int getc(FILE fp) 说明:功能与fgetc相同,但getc既可以被用作 函数实现,也可以被用作宏实现,并且它的编码效率 可能会更高. 可以重定向 4.int putchar(int ch) 说明:向stdout输出字符ch; 返回值:成功,返回该字符;出错,返回EOF; 5.int fputc(int c,FILE fp) 说明:功能同putchar,默认向fp输出字符ch; 返回值:成功,返回该字符;出错,返回EOF; 6.int putc(int c,FILE fp) 说明:功能与fputc相同,但putc与getc一样既可能被用作 函数实现,也可能被用作宏实现,并且它的编码效率可能会更高;可以重定向 字符串IO函数 1.char gets(char str) 说明:从stdin读取字符串(不包括'n')写入到字符串str中; 返回值:成功,返回str首地址;错误,返回NULL; 2.char fgets(char str,int N,FILE fp) 说明:默认从文件fp中读取N个字符(包括'n')写入到字符串str中,

如果实际输入字符串小于N,fgets自动添加'n', 返回值:成功,返回字符串首地址;错误或遇到EOF,返回NULL;可以重定向 3.int puts(const char str) 说明:向stdout输出字符串str,然受输出一个'n', 返回值:成功,返回非负值;错误,EOF; 4.int fputs(const char str,FILE fp) 说明:功能同puts,默认向文件fp写入字符串str; 返回值:成功,返回非负值;错误,EOF; 可以重定向 格式化IO函数 1.int scanf(const char format,...) 说明:根据format从stdin格式化读取N个值,并输入到... 返回值:成功,返回读取的项数;出错,返回EOF 2.int fscanf(FILE fp,const char format,...) 说明:功能同scanf,默认从文件fp读取, 返回值:成功,返回读取的项数;出错或遇到文件尾,返回EOF 可以重定向 3.int sscanf(const char buf,const char format,...) 说明:根据format从buf格式化读取N个值,并输入到... 返回值:成功,返回读取的项数;出错,返回EOF 4.int printf(const char format,...) 说明:根据format格式化数据,并输出到stdout 返回值成功,返回输出字符数;错误,返回负数; 5.int fprintf(FILE fp,const char format,...) 说明:功能同printf,默认向文件fp写入; 可以重定向 6.int sprintf(char buf,const char format,...) 说明:根据format格式化数据,并输出到buf, 返回值:成功,返回输出字符数;错误,返回负数

C语言标准库函数

标准库函数 本附录描述了标准C支持的库函数①。使用此附录时,请记住下列要点。 为了简洁清楚,这里删除了一些细节。如果想看全部内容,请参考标准。本书的其他地方已经对一些函数(特别是printf函数、scanf函数以及它们的变异函数)进行了详细介绍,所以这里 只对这类函数做简短的描述。为了获得关于某个函数更详细的信息(包括如何使用这个函数的示 例),请见函数描述右下角用楷体列出的节号。 每个函数描述结尾都有其他与之相关函数的列表。相似函数非常接近于正在描述的函数。相关函数经常会和在描述的函数联合使用。(例如,calloc函数和realloc函数与malloc函数“类似”, 而free函数则与malloc函数“相关”。)也可参见的函数和在描述的函数没有紧密联系,但是却 可能有影响。 如果把函数行为的某些方面描述为由实现定义的,那么这就意味着此函数依赖于C库的实现方式。 函数将始终行为一致,但是结果却可能会由于系统的不同而千差万别。(换句话说,请参考手册了 解可能发生的问题。)另一方面,未定义的行为是一个不好的消息:不但函数的行为可能会因系统 不同而不同,而且程序也可能会行为异常甚至崩溃。 中许多函数的描述提到了定义域错误和取值范围错误。在本附录的末尾对这两种错误进行了定义。 601 下列库函数的行为是会受到当前地区影响的: 字符处理函数(除了isdigit函数和isxdigit函数)。 格式化输入/输出函数。 多字节字符和字符串函数。 字符串转换函数。 Strcoll函数、strftime函数和strxfrm函数。 例如,isalpha函数实际上检测字符是否在a到z之间或者在A到Z之间。在某些区域内也把其他字符看成是字母次序的。本附录描述了在"C"(默认的)地区内库函数的行为。 一些函数实际上是宏。然而,这些宏的用法和函数完全一样,所以这里不对它们区别对待。 abort 异常终止程序 void abort(void); 产生SIGABRT信号。如果无法捕获信号(或者如果信号处理函数返回),那么程序会异常 终止,并且返回由实现定义的代码来说明不成功的终止。是否清洗输出缓冲区,是否关 闭打开的流,以及是否移除临时文件都是由实现定义的。 相似函数exit函数、raise函数 相关函数assert函数、signal函数 也可参见atexit函数 26.2节abs 整数的绝对值 int abs(int j); 返回整数j的绝对值。如果不能表示j的绝对值,那么函数的行为是未定义的。 ①这些材料经ANSI许可改编自American National Standards Institude ANSI/ISO 9899?1990。这个标准的副本可从 ANSI购买(ANSI, 11 West 42nd Street, New York, NY 10036)。

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语言输入输出函数知识点总结

c语言输入输出函数知识点总结 1.I/O input output(输入端,输出端) 输入:从计算机向外部输出设备(显示器,打印机)输出数据。 输出:从输入设备(键盘、鼠标、扫描仪)向计算机输入数据。 2.C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数实现的。 3.字符输出函数一般形式:putchar(a);a可以是字符型变量、整型变量、字符常量、整型常量。函数作用:向终端输出一个字符。 4.字符输入函数一般形式:a=getchar( );函数作用:从终端输入一个字符。函数值:从输入设备得到的字符。 5.格式输出字符 %d:以十进制输出整数;%o:以八进制形式输出整数;%c:以字符形式输出一个字符;%s:输出字符串;%f:以小数形式输出单、双精度数,隐含输出六位小数。 6.getchar一次只能输入一个字符,有几个getchar()就输入几个字符,多输入的计算机不能识别。 7.getchar()输入的时候,空格键、Enter键、Tab键不能乱用,他们都当成字符对待。 printf("%d,%c,%f,%o,%x,%s",a,b,c,d,e,f); .......................................... 8.格式控制都是小写字母; 9.格式控制与后面要输出的变量是一一对应;................................................... 10.printf("%md",a); 1).m是整数; 2).m是指输出的结果占m列宽度; 3).m是正整数的话,输出结果差几列左补几个空格; m是负整数的话,输出结果差几列右补几个空格; 4).如果m的绝对值小于原来数的宽度,则原样输出。................................................... 11.printf("%m.nf",a); 1).m是指输出占几列宽度,n是指输出结果小数点后保留几位有效数字; 2).m是正整数的话,输出结果差几列左补几个空格; m是负整数的话,输出结果差几列右补几个空格; 3).printf("%2.5f",a); m

1C语言入门_3简单函数_3形参和实参解读

第 3 章 简单函数 3. 形参和实参
下面我们定义一个带参数的函数, 我们需要在函数定义中指明参数的个数和每个 参数的类型,定义参数就像定义变量一样,需要为每个参数指明类型,参数的命 名也要遵循标识符命名规则。例如: 例 3.4. 带参数的自定义函数
#include
void print_time(int hour, int minute) { printf("%d:%d\n", hour, minute); }
int main(void) { print_time(23, 59); return 0; }
需要注意的是, 定义变量时可以把相同类型的变量列在一起,而定义参数却不可 以,例如下面这样的定义是错的:
void print_time(int hour, minute) {

printf("%d:%d\n", hour, minute); }
学习 C 语言的人肯定都乐意看到这句话:“变量是这样定义的,参数也是这样 定义的,一模一样”,这意味着不用专门去记住参数应该怎么定义了。谁也不愿 意看到这句话:“定义变量可以这样写,而定义参数却不可以”。C 语言的设计 者也不希望自己设计的语法规则里到处都是例外, 一个容易被用户接受的设计应 该遵循最少例外原则(Rule of Least Surprise)。其实关于参数的这条规定也不 算十分例外,也是可以理解的,请读者想想为什么要这么规定。学习编程语言不 应该死记各种语法规定,如果能够想清楚设计者这么规定的原因(Rationale), 不仅有助于记忆,而且会有更多收获。本书在必要的地方会解释一些 Rationale, 或者启发读者自己去思考, 例如上一节在脚注中解释了 void 关键字的 Rationale。 [C99 Rationale]是随 C99 标准一起发布的,值得参考。 总的来说,C 语言的设计是非常优美的,只要理解了少数基本概念和基本原则就 可以根据组合规则写出任意复杂的程序, 很少有例外的规定说这样组合是不允许 的,或者那样类推是错误的。相反,C++的设计就非常复杂,充满了例外,全世 界没几个人能把 C++的所有规则都牢记于心,因而 C++的设计一直饱受争议, 这个观点在[UNIX 编程艺术]中有详细阐述。 在本书中,凡是提醒读者注意的地方都是多少有些 Surprise 的地方,初学者如 果按常理来想很可能要想错, 所以需要特别提醒一下。而初学者容易犯的另外一 些错误, 完全是因为没有掌握好基本概念和基本原理,或者根本无视组合规则而 全凭自己主观臆断所致, 对这一类问题本书不会做特别的提醒,例如有的初学者 看完第 2 章 常量、变量和表达式之后会这样打印π 的值:
double pi=3.1416; printf("pi\n");
之所以会犯这种错误,一是不理解 Literal 的含义,二是自己想当然地把变量名 组合到字符串里去, 而事实上根本没有这条语法规则。如果连这样的错误都需要 在书上专门提醒,就好比提醒小孩吃饭一定要吃到嘴里,不要吃到鼻子里,更不 要吃到耳朵里一样。 回到正题。我们调用 print_time(23, 59)时,函数中的参数 hour 就代表 23,参 数 minute 就代表 59。确切地说,当我们讨论函数中的 hour 这个参数时,我们 所说的“参数”是指形参(Parameter),当我们讨论传一个参数 23 给函数时, 我们所说的“参数”是指实参(Argument),但我习惯都叫参数而不习惯总把 形参、实参这两个文绉绉的词挂在嘴边(事实上大多数人都不习惯),读者可以 根据上下文判断我说的到底是形参还是实参。 记住这条基本原理: 形参相当于函

C语言输入输出函数格式详解

1、输入和输出: 输入:输入也叫读,数据由内核流向用户程序 输出:输出也称写、打印,数据由用户程序流向内核 以下介绍一些输入输出函数,尽管都是一些有缺陷的函数,但比较适合初学者使用 2、printf用法(其缺陷在于带缓存) printf输出时必须加上\n(刷新缓存) 解释:第一幅图没有加'\n',不会刷新缓存区,则不会打印出来;第二幅图是因为主函数结束时刷新了缓存区,但由于没有换行符,所以没有换行便显示了后面的内容;第三幅图时正常打印。 变量定义的是什么类型,在printf打印时就需要选择什么格式符,否则会造成数据的精度丢失(隐式强转),甚至会出现错误

修饰符功能 m输出数据域宽,数据长度

如何学好并精通C语言

程序员之路——如何学习C语言并精通C语言 程序员之路——如何学习C语言 学习C语言不是一朝一夕的事情,但也不需要花费十年时间才能精通。如何以最小的代价学习并精通C 语言是本文的主题。请注意,即使是“最小的代价”,也绝不是什么捷径,而是以最短的时间取得最多的收获,同时也意味着你需要经历艰苦的过程。 一、要读就读好书,否则不如不读 所有初学者面临的第一个问题便是:如何选择教材。好的开始是成功的一半,选择一本优秀的教材是事半功倍的关键因素。不幸的是,学校通常会帮你指定一本很差劲的C语言课本;而幸运的是,你还可以再次选择。 大名鼎鼎的谭浩强教授出了一本《C语言程序设计》,据说发行量有超过400万,据我所知,很多学校都会推荐这本书作为C语言课本。虽然本人的名字(谭浩宇)跟教授仅仅一字之差,但我是无比坚定地黑他这本书的。这本书不是写给计算机专业的学生的,而是给那些需要考计算机等级考试的其它专业学生看的。这本书的主要缺点是:例子程序非常不专业,不能教给你程序设计应该掌握的思考方式;程序风格相当地不好,会让你养成乱写代码的恶习;错误太多,曾经有人指出过这本书的上百个错误,其中不乏关键的概念性错误。好了,这本书我也不想说太多了,有兴趣大家可以百度一下:) Kernighan和Ritchie的《The C Programming Language》(中译名《C程序设计语言》)堪称经典中的经典,不过旧版的很多内容都已过时,和现在的标准C语言相去甚远,大家一定要看最新的版本,否则不如不看。另外,即使是最经典最权威的书,也没有办法面面俱到,所以手边常备一本《C语言参考手册》是十分必要的。《C语言参考手册》就是《C Reference Manual》,是C语言标准的详细描述,包括绝大多数C标准库函数的细节,算得上是最好的标准C语言的工具书。顺便提一句,最新的《C程序设计语言》是根据C89标准修订的,而《C语言参考手册》描述的是C99标准,二者可能会有些出入,建议按照C99标准学习。还有一本《C和指针》,写得也是相当地不错,英文名是《Pointers on C》,特别地强调指针的重要性,算是本书的一个特点吧。不过这本书并不十分适合初学者,如果你曾经学过C语言,有那么一些C语言的基础但又不是很扎实,那么你可以尝试一下这本书。我相信,只要你理解了指针,C语言便不再神秘。 如果你已经啃完了一本C语言教材,想要更进一步,那么有两本书你一定要看。首先是《C Traps and Pitfalls》(中译名《C陷井与缺陷》),很薄的一本小册子,内容非常非常地有趣。要注意一点,这本书是二十多年前写成的,里面提到的很多C语言的缺陷都已被改进,不过能够了解一些历史也不是什么坏事。然后你可以挑战一下《Expert C Programming》(中译名《C专家编程》),书如其名,这本书颇具难度,一旦你仔细读完并能透彻理解,你便可以放心大胆地在简历上写“精通C语言”了。 切记一个原则,不要读自己目前还看不懂的书,那是浪费生命。如果你看不懂,那你一定是缺失了某些必需基础知识。此时,你要仔细分析自己需要补充哪些内容,然后再去书店寻找讲述的这些内容的书籍。把基础知识补充完毕再回头来学习,才会真正的事半功倍。 二、Unix/Linux还是Windows,这是个很大的问题 不同的编程环境会造就出不同思维的程序员。Windows的程序员大多依赖集成开发环境,比如Visual Studio,而Unix程序员更加钟爱Makefile与控制台。显而易见,集成开发环境更容易上手,在Windows上学习C语言,只需要会按几个基本的Visutal C++工具栏按钮就可以开始写Hello, World!了,而在Unix下,你需要一些控制台操作的基本知识。有人也许认为Unix的环境更简洁,但习惯的力量是很大的,大家都很熟悉Windows的基本操作,而为了学习C语言去专门装一个Unix系统,似乎有点不划算。 对于一个只懂得Windows基本操作、连DOS是什么都不知道的新手而言,尽快做一些有趣而有意义的事情才是最重要的。用C语言写一个小程序远比学习ls、cat等命令有趣,况且我们要专注于C语言本身,就不得不暂时忽略一些东西,比如编译链接的过程、Makefile的写法等等等等。 所以我建议初学者应该以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作为主要的学习环境,而且千万不要在IDE的使用技巧上过多纠缠,因为今后你一定要转向Unix环境的。Visual C++ 6.0使用很方便,调试也很直观,但其默认的编译器对C标准的支持并不好,而Dev C++使用gcc编译器,对C99的标准都支持良好。使用顺带提一下,很多大学的C语言课程还在使用Turbo C 2.0作为实验环境,这是相当不可取的,原因其一是TC 2.0对C标准几乎没有支持,其二是TC 2.0编译得到的程序是16位的,这对今后理解32位的程序会造成极大的困扰(当然,用djgpp之类的东西可以使TC

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等参数数量可变底函数。

C语言字符串的输入和输出

C语言字符串的输入和输出 字符串的输入和输出 %c人为加入\0进行输入输出 %s直接输入输出 *输入输出字符串时字符数组应有足够的存储空间,指针变量作为输入项时,指针必须已经指向确切的、足够大的存储空间 %s的使用 scanf("%s",地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 例:char str[15]; scanf("%s",str); abc123 1.不读入空格和回车,从空格处结束 2.输入字符串长度超过字符数组元素个数,不报错 3.当输入项为字符指针时,指针必须已指向确定的有足够空间的连续 存储单元 4.当为数组元素地址时,从此元素地址开始存放 2.printf("%s",地址值) 输出时遇到第一个'\0'为止 3.gets和puts函数 开头必须stdio.h #include"stdio.h"

1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 4.当为数组元素地址时,从此元素地址开始存放 5.printf("%s",地址值) 输出时遇到第一个'\0'为止 6.gets和puts函数 开头必须stdio.h #include"stdio.h" 1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 7.例: char str[10]; gets(str); 包括空格符 8. 2.puts(字符串起始地址) 遇第一个'\0'结束,自动加入换行符 9.字符串数组:数组中每个元素都是一个存放字符串的数组 可以将一个二维数组看作是字符串数组 10.char ca[3][5]={"A","BB","CCC"}; A\0 B B\0 C C C\0 字符型指针数组 char*pa[3]={"a","bb","ccc"}; pa[0]pa[1]pa[2] 可以重新赋值gets(pa[2]);

C++高级参考手册04

第4章初始化与清除 第2章利用了一些分散的典型C语言库的构件,并把它们封装在一个s t r u c t中,从而在库的应用方面做了有意义的改进。(从现在起,这个抽象数据类型称为类)。 这样不仅为库构件提供了单一一致的入口指针,也用类名隐藏了类内部的函数名。在第3章中,我们介绍了存取控制(隐藏实现),这就为类的设计者提供了一种设立界线的途径,通过界线的设立来决定哪些是用户可以处理的,哪些是禁止的。这意味着数据类型的内部机制对设计者来说是可控的和能自行处理的。这样让用户也清楚哪些成员是他们能够使用并加以注意的。 封装和实现的隐藏大大地改善了库的使用。它们提供的新的数据类型的概念在某些方面比从C中继承的嵌入式数据类型要好。现在C ++编译器可以为这种新的数据类型提供类型检查,这样在使用这种数据类型时就确保了一定的安全性。 当然,说到安全性,C ++的编译器能比C编译器提供更多的功能。在本章及以后的章节中,我们将看到许多C ++的另外一些性能。它们可以让我们程序中的错误暴露无遗,有时甚至在我们编译这个程序之前,帮我们查出错误,但通常是编译器的警告和出错信息。所以我们不久就会习惯:在第一次编译时总听不到编译器那意味着正确的提示音。 安全性包括初始化和清除两个方面。在C语言中,如果程序员忘记了初始化或清除一个变量,就会导致一大段程序错误。这在一个库中尤其如此,特别是当用户不知如何对一个s t r u c t 初始化,甚至不知道必须要初始化时。(库中通常不包含初始化函数,所以用户不得不手工初始化s t r u c t)。清除是一个特殊问题,因为C程序员一旦用过了一个变量后就把它忘记了,所以对一个库的s t r u c t来说,必要的清除工作往往被遗忘了。 在C ++中,初始化和清除的概念是简化类库使用的关键所在,并可以减少那些由于用户忘记这些操作而引起的许多细微错误。本章就来讨论C ++的这些特征。 4.1 用构造函数确保初始化 在s t a s h和s t a c k类中都曾调用i n i t i a l i z e()函数,这暗示无论用什么方法使用这些类的对象,在使用之前都应当调用这一函数。很不幸的是,这要求用户必须正确地初始化。而用户在专注于用那令人惊奇的库来解决他们的问题的时候,往往忽视了这些细节。在C ++中,初始化实在太重要了,所以不能留给用户来完成。类的设计者可以通过提供一个叫做构造函数的特殊函数来保证每个对象都正确的初始化。如果一个类有构造函数,编译器在创建对象时就自动调用这一函数,这一切在用户使用他们的对象之前就已经完成了。对用户来说,是否调用构造函数并不是可选的,它是由编译器在对象定义时完成的。 接下来的问题是这个函数叫什么名字。这必须考虑两点,首先这个名字不能与类的其他成员函数冲突,其次,因为该函数是由编译器调用的,所以编译器必须总能知道调用哪个函数。S t r o u s t r u p的方法似乎是最容易也是最符合逻辑的:构造函数的名字与类的名字一样。这使得这样的函数在初始化时自动被调用。 下面是一个带构造函数的类的简单例子:

C语言常见基本词汇及词汇解释

C语言常用基本词汇及其他提示语运算符与表达式: 1.constant 常量 2. variable 变量 3. identify 标识符 4. keywords 关键字 5. sign 符号 6. operator 运算符 7. statement语句 8. syntax 语法 9. expression 表达式 10. initialition初始化 11. number format 数据格式 12 declaration 说明 13. type conversion 类型转换 14.define 、definition 定义 条件语句: 1.select 选择 2. expression 表达式 3. logical expression 逻辑表达式 4. Relational expression 关系表达式 5.priority优先

6. operation运算 7.structure 结构 循环语句: 1.circle 循环 2. condition 条件 3. variant 变量 4. process过程 5.priority优先 6. operation运算 数组: 1. array 数组 2. reference 引用 3. element 元素 4. address 地址 5. sort 排序 6. character 字符 7. string 字符串 8. application 应用函数: 1.call 调用 2.return value 返回值 3.function 函数

4. declare 声明 5. `parameter 参数 6.static 静态的 7.extern 外部的 指针: 1. pointer 指针 2. argument 参数 3. array 数组 4. declaration 声明 5. represent 表示 6. manipulate 处理 结构体、共用体、链表: 1 structure 结构 2 member成员 3 tag 标记 4 function 函数 5 enumerate 枚举 6 union 联合(共用体) 7 create 创建 8 insert 插入 9 delete 删除 10 modify 修改

C语言库函数参考手册

C语言库函数参考手册 转载说明:可能有些函数已经过时,但从学习的角度来看,还是有一定的参考价值。 分类函数,所在函数库为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') 数学函数,所在函数库为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为弧度

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