C语言函数教学
C语言函数教学(精选12篇)
C语言函数教学 第1篇
在C语言的教学过程中,学生们通常难以理解一些概念和程序流程的控制,比如函数和函数调用。而在C语言中,函数是一个非常重要的部分,所有程序都是由函数组成的,如果没有掌握函数,就不可能掌握C语言。关于这一问题的教学,人们也在实践中做了很多思考。但在分析C语言函数时,大部分教材都是从知识传授的层面来思考的。
1 常见问题分析
1.1 简单地罗列语法
语法知识仅仅是从语法角度系统地进行罗列,从函数形式、参数等分别进行介绍。但是仅仅这样简单的罗列语法,学生们不能深刻理解函数的意义。
1.2 语法讲解与编程实例的衔接不好
花费大量时间详细介绍函数、形参、实参等概念与语法知识,而后面的函数编程等实用知识的讲授时间不够,学生们难以接受。
1.3 模块化编程训练不够
学生对于自始至终接触到的简单编程印象比较深刻,但是模块化编程思想不够。而且,函数的教学章节在C语言教学内容的后面。因此,对于函数的调用、函数参数的传递等,学生们平时训练的强度不大。
由此可见,我们需要设计一种新的教学方案,改善C语言函数教学的效果,着重加深学生们对函数概念的理解和函数调用的掌握。
2 函数教学新思路
2.1 用EXCEL来理解函数概念
EXCEL是一个非常简单且界面友好的软件,一般在学生进入大学的第一个学期就已经学习过了。同时,由于在平时的生活、学习当中都有可能要用到EXCEL,因此学生们对于EXCEL比较熟悉。
2.2 用HTML来理解函数概念
HTML是网页设计的基础。大部分学生愿意花很多时间学习HTML,因为几乎每一个新生都想创建自己的主页。学习HTML不仅能够帮助学生掌握简单的代码编写,还能够帮助学生理解函数的概念。
2.3 根据求解目的归纳不同函数
从语法角度,通常是从参数个数和有无函数体方面将函数分为无参函数、有参函数、空函数三类。根据编写函数的目的、功能或者说用途,函数可以被分为以下三类:
(1)求值类函数:使用这种函数是为了求一个值。
求值类函数的一般定义格式:
函数值类型函数名(类型形参1,类型形参2,……)
{
根据形参的值计算所求的值;
return结果;
}
求值类函数的定义步骤是:(1)编写函数头:根据函数所求值的数据类型确定函数值类型,分析函数要提供的参数及其类型从而确定形参。(2)编写函数体:根据提供的参数(即形参),求出所需的值,最后返回(return)该值。
求值类函数在调用时通常作为表达式使用,可用于赋值、输出、运算、或作为另一个函数调用的实参。调用格式:
函数名(实参1,实参2,……)
(2)判断类函数:使用这种函数是为了检查一个判断是否成立。
判断类函数是一种特殊的求值类函数,其值为1或者0,表示判断成立与不成立。因此判断类函数值的类型固定为int。下面给出判断类函数的一种参考格式:
int函数名(类型形参1,类型形参2,……)
{
int f;/*代表判断结果*/
根据形参的值进行判断,判断成立则令f为1,否则令f为0
return f;/*将判断结果返回*/
}
判断类函数调用时通常用于在选择结构或循环结构中作为判断条件。如:
if(函数名(实参1,实参2,......)==1)......(3)操作类函数:使用这种函数是为了完成某一项操作。
操作类函数不是为了求值,即函数没有值,其函数值的数据类型是void。函数体中不能使用return(值);语句来返回一个值,但可以使用return来结束函数的运行返回到主调函数。
操作类函数一般定义格式:
void函数名(类型形参1,类型形参2,……){
根据形参的值进行处理return;/*或者无return*/}
操作类函数调用时通常单独作为语句,其调用格式:
函数名(实参1,实参2,……);
2.4 典型小案例教学
在教学过程中,尽量选择典型小案例穿插讲解。所谓的典型小案例,是指这个案例集中解释某一个概念,是一个完整的程序,但又尽可能的短小。典型小案例既有利于学生学习,也有利于老师教授。对于学生来说,典型小案例易于自学,他们能够很快地阅读程序或者修改程序,能够更好地理解程序。对于老师来说,典型小案例便于课堂讲解,能够很快修改成另一个程序,并要求学生给出对应的输出。如果学生对源代码没有充分的理解,就不能给出正确的答案。因此,典型小案例教学具有很强的启发性。
摘要:本文分析了C语言在函数学习过程中存在的问题,从概念和函数调用两个方面进行探讨,提出函数教学的新思路。
关键词:C语言,函数,新思路
参考文献
[1]王涛伟,杨秀金.C++函数的参数传递和返回值问题的教学研讨[J].吉林大学学报(信息科学版),2005,(23):70-74.
C语言函数 第2篇
Turbo C函数
alloc.h brk 【功能】更改数据段空间的分配 【原型】int brk(void *endds)【位置】alloc.h
【说明】将程序数据段的顶部设置为endds所指向的内存位置。调用成功之后,返回0。如果调用失败则返回-1,同时设置errno。【参见】coreleft calloc 【功能】分配内存。
【原型】void *calloc(size_t nelem,size_t elsize)【位置】stdib.h,alloc.h
【说明】为nelem数据项的每elsize个字节分别分配空间,同时在空间中保存0值。返回一个指向新分配块的指针,如果没有足够的空间则返回NULL。【参见】malloc coreleft 【功能】返回测出的未使用内存量。
【原型】小型模块中unsigend long coreleft(void)【位置】alloc.h 【参见】malloc farcallc 【功能】从高端开始分配内存。
【原型】void far *farcalloc(unsigned ling nunits,unsigned ling unitsz)【位置】alloc.h
【说明】为nunits数据项的每unitsz个字节分配空间。返回指向新分配块的指针,如果没有足够的空间创建数据块,则返回NULL
【参见】farmalloc,farfree,farcoreleft,malloc,calloc farcoreleft 【功能】返回测出的高端未使用内存量。【原型】unsigned long farcoreleft(void)【位置】alloc.h
【说明】返回最高分配数据块和内存末端之间所剩的所有空间量(按照字节计算)。【参见】farcalloc,farmalloc,coreleft farfree 【功能】从高端释放一个数据块。
【原型】void farfree(void far *block)【位置】alloc
【参见】farmalloc,farcalloc farmalloc 【功能】从高端开始分配。
【原型】void far *farmalloc(unsigned long nbytes)【位置】alloc.h
【说明】返回一个指向新分配数据块的指针,如果没有足够的空间创建数据块则返回NULL 【参见】farcoreleft,farfree,farcalloc,malloc,farrealloc farrealloc
Turbo C函数
【功能】调整高端的分配数据块。
【原型】void far *farrealloc(void far *oldblock,unsigned long nbytes)【位置】alloc.h
【说明】返回重新分配数据块的地址,如果分配失败则返回NULL。返回值可能与源地址不同。【参见】farmalloc,realloc free 【功能】释放通过malloc或者calloc分配的数据块。【原型】void free(void *block)【位置】stdlib.h,alloc.h
【参见】maloc,calloc,freemem malloc 【功能】分配内存。
【原型】void *malloc(size_t size)【位置】alloc.h,stdlib.h
【说明】大小按照字节计算。返回一个指向新分配数据块的指针,如果没有足够的空间创建数据块,则返回NULL。如果size==0,则也返回NULL。
【参见】allicmem,free,calloc,realloc,farmalloc realloc 【功能】重新分配主存。
【原型】void *realloc(void *block,size_t size)【位置】alloc.h,stdlib.h
【说明】尝试将原先分配的数据块扩大或者缩小只size字节值。返回重新分配之后与原有地址不同的数据块的地址。如果数据块不能重新分配,或者size==0,则返回NULL 【参见】malloc,free sbrk 【功能】更改数据段的空间分配。【原型】void *sbrk(int incr)【位置】alloc.h
【说明】为数据块添加incr个字节。成功实现之后,sbrk返回原有中断值。如果失败则返回-1,同时设置errno.【参见】brk
ASSERT.H assert 【功能】对条件进行测试,可能会退出程序运行。【原型】void assert(int test)【位置】assert.h 【参见】abort
BIOS.H bioscom 【功能】RS-232的I/O通讯。
【原型】int bioscom(int cmd,char abyte,int port)【位置】bios.h
【说明】cmd的值及含义如下。0 设置通讯参数abyte。1 将abyte发送出去。接受一个字符(位于返回值的下8位中)。
Turbo C函数 返回状态。
Port为0表示COM1,为1表示COM2,依次类推。
返回值的高8位表示状态位,低8位内容根据cmd而定。biosdisk 【功能】BIOS磁盘服务。
【原型】int biosdisk(int cmd,int drive,int head,int track,int sector,int nsects,void *buffer)
【位置】bios.h
【说明】成功返回0,否则返回值为错误代码。biosequip 【功能】检查设备。
【原型】int biosequip(void)【位置】bios.h
【说明】返回BIOS设备的标记。bioskey 【功能】键盘接口。
【原型】bioskey(int cmd)【位置】bios.h
【说明】cmd的取值及动作如下。Cmd 动作
0 返回缓存中键入的扫描码,并从缓存中删除它。如果缓存为空,则等待下一次键入。1 返回缓存中键入的扫描码,但是不从缓存中删除它。如果缓存为空,则返回0。2 返回BIOS切换状态的标志。biosmemory 【功能】返回内存大小。
【原型】int biosmemory(void)【位置】bios.h
【说明】返回内存大小,以1KB为单位。biosprint 【功能】直接使用BIOS实现打印机I/O。
【原型】int biosprint(int cmd,int abyte,int port)【位置】bios.h
【说明】如果cmd为0,说明字节已经打印。如果cmd为1,说明打印机端口已经初始化。如果cmd为2,说明当前打印机状态可读。
对应所有cmd数值都返回当前打印机状态。biostime 【功能】BIOS定时器服务程序。
【原型】long biostime(int cmd,long newtime)【位置】bios.h
【说明】如果cmd为0,则读取BIOS定时器,如果cmd为1则设置BIOS定时器。时间从午夜开始计算,以时钟滴答为单位,每秒18.2的滴答。
CONIO.H cgets 【功能】从控制台读取字符串。【原型】char *cgets(char *str)【位置】conio.h
Turbo C函数
【说明】str[0]必须包含读入字符串的最大长度,str[1]则相应地设置为实际读入字符的个数。字符串从str[2]开始,函数返回&str[2]。【参见】cputs,gets,fgets clreol 【功能】清除文本模式的行尾。【原型】void clreol(void)【位置】conio.h
【参见】clrscr,delline,window clrscr 【功能】清除文本模式的窗口。【原型】void clrscr(void)【位置】conio.h
【参见】clreol,delline,window cprintf 【功能】在屏幕上的文本窗口中格式化输出 【原型】int cprintf(const char *format,…)【位置】conio.h
【说明】返回输出的字节个数。【参见】printf cputs 【功能】在屏幕上的文本窗口中书写字符串。【原型】int cputs(const char *str)【位置】conio.h
【说明】返回打印的最后一个字符。【参见】cgets,puts,fputs cputs 【功能】在屏幕上的文本窗口中书写字符串。【原型】int cputs(const char *str)【位置】conio.h
【说明】返回打印的最后一个字符串。【参见】cgets,puts,fputs cscanf 【功能】从控制台执行格式化输入。
【原型】int cscanf(char *format [,argument,…])【位置】conio.h
【说明】返回成功处理的输入字段数目。如果函数在文件结尾处读入,则返回值为EOF。【参见】scanf delline 【功能】删除文本窗口中的行。【原型】void delline(void)【位置】conio.h
【参见】clreol,clrscr,windows getch、getche 【功能】getch从控制台得到字符,但是不回显。Getche也从控制台得到字符,但同时回显在屏幕上。
【原型】int getch(void)4
Turbo C函数
int getche(void)【位置】conio.h
【说明】两个函数都返回读取的字符。字符马上就可以使用,无需等到缓存整行之后。类似功能键和方向键这些特殊键都使用两个字符组成的序列表示:一个0字符随后跟一个按键的扫描码。【参见】getpass,cgets,cscanf,kbhit,ungetch,putchar,getc getpass
【功能】读入口令。
【原型】char *getpass(const char *prompt)【位置】conio.h
【说明】返回一个指针,指向这次调用覆盖的一个静态字符串。【参见】getch gettext
【功能】从文本模式的屏幕上将文本拷贝至内存中。
【原型】int gettext(int left,int top,int right,int bottom,void *destin)【位置】conio.h
【说明】坐标值与屏幕相关,左上角为(1,1)。如果成功则返回一个非0值。【参见】puttext,movetext gettextinfo 【功能】得到文本模式的视频信息。
【原型】void gettextinfo(struct text_info *r)【位置】conio.h
【说明】结果以inforec的形式返回。
【参见】texttr,textbackground,textcolor,textmode,wherex,wherey,window gotoxy 【功能】在文本窗口中定位光标。【原型】void gotoxy(int x,int y)【位置】conio.h
【参见】wherex,wherey,window highvideo 【功能】选择高密度的文本字符。【原型】void highvideo(void)【位置】conio.h
【说明】影响随后的文本窗口函数调用,例如putch和cprintf。【参见】lowvideo,normvideo,textcolor,gettextinfo,cputs,putch insline 【功能】在文本窗口的当前光标位置插入空白行。【原型】void insline(void)【位置】conio.h
【说明】当前光标位置的下一行依次向下推,最后一行消失。【参见】clreol,delline,window kbhit 【功能】检查最近的键盘输入。【原型】int kbhit(void)【位置】conio.h
【说明】如果存在键盘输入,则kbhit返回一个非0整数。【参见】getc
Turbo C函数
lowvideo 【功能】 为文本窗口输出选择低密度的字符。【原型】void lowvideo(void)【位置】conio.h
【说明】影响随后的文本窗口函数调用,例如putch和cprintf。【参见】highvideo,normvideo movetext 【功能】将屏幕上一个矩形范围的文本拷贝至另一个矩形中(文本模式)。
【原型】int movetext(int left,int top,int right,int bottom,int destleft,int desttop)【位置】conio.h
【说明】坐标与屏幕左上角(1,1)相对应,如果操作成功则返回非0值。【参见】gettext,puttext normvideo 【功能】选择正确密度的字符。【原型】void normvideo(void)【位置】conio.h
【说明】影响随后的文本窗口函数调用,例如putch和cprintf。【参见】highvideo,lowvideo putch 【功能】在屏幕上的文本窗口中输出字符。【原型】int putch(int ch)【位置】conio.h
【说明】使用当前的颜色和显示属性,返回显示字符ch。【参见】cprintf,cputs,getch.putc.putchar prttext 【功能】将内存中的文本拷贝至屏幕上。
【原型】int puttext(int left,int top,int right,int bottom,void *source)【位置】conio.h
【说明】坐标与屏幕左上角(1,1)相对应,如果成功则返回一个非0值。【参见】gettext,movetext,window textattr 【功能】设置文本窗口函数的文本属性。【原型】void textattr(int newattr)【位置】conio.h
【参见】textclolor,textbackground textbackground 【功能】选择文本模式下的新背景颜色。
【原型】void textbackground(int newcolor)【位置】conio.h
【参见】textcolor,textattr textcolor 【功能】选择文本模式下的新字符颜色。【原型】void textcolor(int newcolor)【位置】conio.h
【参见】textbackground, textattr,highvideo,lowvideo,normvideo ungetch 6
Turbo C函数
【功能】将一个字符退回至键盘。【原型】int ungetch(int ch)【位置】conio.h
【说明】下一次调用getch或者其他控制台输入函数时,将返回ch。如果成功则返回字符ch,返回EOF。
【参见】getch textmode 【功能】更改屏幕模式(文本模式下)。【原型】void textmode(int newmode)【位置】conio.h
【说明】不能用来将图片模式更改为文本模式。【参见】initgraph,gettextinfo wherex 【功能】得到当前文本窗口中光标的水平位置。【原型】int wherex(void)【位置】conio.h
【说明】返回从1到80范围内的一个整数。【参见】wherey,gettextinfo,gotoxy wherey 【功能】得到当前文本窗口中光标的垂直位置。【原型】int wherey(void)【位置】conio.h
【说明】返回一个从1到25范围内的一个整数。【参见】wherex,gettextinfo,gotoxy window 【功能】定义激活的文本模式窗口。
【原型】void window(int left,int top,int right,int bottom)【位置】conio.h
【说明】屏幕左上角的坐标为(1,1)【参见】gettextinfo,textmode
CTYPE.H isascii 【功能】如果c为有效的ASCII字符,则返回真。【原型】isascii(c)【位置】ctype.h isalnum 【功能】如果c为字母或者数字,则返回真。【原型】isalnum(c)【位置】ctype.h isalpha 【功能】如果c为字母,则返回真。【原型】isalpha(c)【位置】ctype.h iscntrl 【功能】如果c为删除字符或者普通的控制字符,则返回真。【原型】iscntrl(c)
Turbo C函数
【位置】ctype.h isdigit 【功能】如果c为数字,则返回真。【原型】isdigit(c)【位置】ctype.h isgraph 【功能】除了不包括空格字符之外,其功能与isprint一致。【原型】isgraph(c)【位置】ctype.h islower 【功能】如果c为小写字母。则返回真。【原型】islower(c)【位置】ctype.h isprint 【功能】如果c为可打印字符,则返回真。【原型】isprint(c)【位置】ctype.h ispuct 【功能】如果c为标点符号字符,则返回真。【原型】ispuct(c)【位置】ctype.h isspace 【功能】如果c为空格、制表符、回车符、换行符、垂直制表符或者换页符时,返回真。【原型】isspace(c)【位置】ctype.h isupper 【功能】如果c为大写字母,则返回真。【原型】isupper(c)【位置】ctype.h isxdigit 【功能】如果c为十六进制数字,则返回真。【原型】isxdigit(c)【位置】ctype.h toascii 【功能】将大于127的c转换到0~127范围,只保留c的低7位。【原型】toascii(c)【位置】ctype.h _tolower 【功能】将[A~Z]范围内的字符c转换为[a~z]范围内的字符。【原型】_tolower(c)【位置】ctype.h _toupper 【功能】将[a~z]范围内的字符c转换为[A~Z]范围内的字符。【原型】_toupper(c)【位置】ctype.h
DIR.H 8
Turbo C函数
chdir 【功能】更改当前目录。
【原型】int chdir(const char *path)【位置】dir.h
【说明】成功实现之后,chdir返回一个0值。否则返回-1,同时设置errno。【参见】mkdir,rmdir findfirst 【功能】搜索磁盘目录。
【原型】int findfirst(const char *filename,struct ffblk *ffblk,int attrib)【位置】dir.h
【说明】文件路径中可以包括通配符?(匹配单个字符)和*(匹配多个字符)。如果成功返回0,没有找到匹配结果或者出错则返回-1,同时设置errno。findnext 【功能】继续执行findfirst搜索。
【原型】int findnext(struct ffblk *ffblk)【位置】dir.h
【说明】文件路径中可以包括通配符?(匹配单个字符)和*(匹配多个字符)。如果成功返回0,没有找到匹配结果或者出错则返回-1,同时设置errno。fnmerge 【功能】使用各个组成部分组建一个路径。
【原型】void fnmerge(char *path,const char *drive,const char *dir,const char *name,const char *ext)【位置】dir.h 【参见】fnsplit fnsplit 【功能】将一个路径分解成多个组成部分。
【原型】int fnsplit(const char *path,char *drive,char *dir,char *name,char *ext)【位置】dir.h
【说明】返回一个整数,由5个标志位组成。【参见】fnmerege getcurdir 【功能】得到指定驱动器的当前目录。
【原型】int getcurdir(int drive,char *directory)【位置】dir.h
【说明】drive为0表示默认驱动器
【参见】chdir,getcwd,getdisk,mkdir,rmdir getcwd 【功能】得到当前工作目录。
【原型】char *getcwd(char *buf,int buflen)【位置】dir.h,dos.h
【说明】返回一个指向buf的指针,出现错误时返回NULL,同时设置errno。【参见】getcurdir,getdisk,mkdir,chdir,rmdir getdisk 【功能】得到当前驱动器。【原型】int getdisk(void)【位置】dir.h
Turbo C函数
【说明】返回当前驱动器号,A驱动器使用0表示 【参见】getcurdir,setdisk,getcwd mkdir 【功能】创建一个目录。
【原型】int mkdir(const char *path)【位置】dir.h
【说明】成功返回0,错误则返回-1,同时设置errno 【参见】chdir,rmdir mktemp 【功能】创建一个唯一的文件名称。【原型】char *mktemp(char *template)【位置】dir.h
【说明】使用唯一的文件名称替换template,并且返回template的地址。Template必须由一个非空字符串和6个X后缀组成,例如MYFILEXXXXXX。rmdir 【功能】删除目录。
【原型】int rmdir(const char *path)【位置】dir.h
【说明】成功返回0,错误返回-1,同时设置errno。【参见】mkdir,chdir searchpath 【功能】在DOS路径中检索一个文件。
【原型】char *searchpath(const char *file)【位置】dir.h
【说明】成功则返回一个指针,指向表示文件完全路径名称的字符串,否则返回NULL。返回的字符串保存在一个静态区域内,每次重新调用都将覆盖这一区域。【参见】exec…,findfirst,open,system setdisk 【功能】设置当前磁盘驱动器。【原型】int setdisk(int driver)【位置】dir.h
【说明】drive数值为0=A,1=B,2=C,依次类推。函数返回所有可用驱动器总数。
DOS.H absread 【功能】读入绝对磁盘扇区。
【原型】int absread(int drive,int 1sect,void *buffer)【位置】dos.h
【说明】driver值为0=A,1=B,2=C,以此类推。Nsect表示读/写的扇区号码。1sect表示开始逻辑扇区(第1个为0)。Buffer表示数据区的地址。成功返回0,错误返回-1并设置errno。abswrite 【功能】写入绝对磁盘扇区。
【原型】int abswrite(int drive,int nsects,int 1sect,void *buffer)【位置】dos.h
【说明】driver值为0=A,1=B,2=C,以此类推。Nsect表示读/写的扇区号码。1sect表示开始逻辑扇区(第1个为0)。Buffer表示数据区的地址。成功返回0,错误返回-1并设置errno。allocmem 10
Turbo C函数
【功能】分配DOS内存片断。
【原型】int allocmem(unsigned size,unsigned *segp)【位置】dos.h
【说明】size表示请求的16位段落的号码,分配区域的段地址保存在*segp中(offset=0)。成功返回-1,否则返回最大可用数据块的大小,并设置_doserrno和errno。【参见】freemem bdos 【功能】MS DOS的系统调用。
【原型】int bdos(int dosfun,unsigned dosdx,unsigned dosal)【位置】dos.h
【说明】bdos的返回值为系统调用设置的AX值。【参见】bdosptr,int86,int86x bdosptr 【功能】MS DOS的系统调用。
【原型】int bdosptr(int dosfun,void *argument,unsigned dosal)【位置】dos.h
【说明】bdosptr的成功返回值为AX值,失败则返回-1,同时设置errno和_doserrno。【参见】bdos,int86,int86x country 【功能】返回与country相关的信息。
【原型】struct country *country(int xcode,struct country *cp)【位置】dos.h
【说明】返回指针参数cp,MS DOS 3.0或以上版本支持。ctrlbrk 【功能】设置控制终端的句柄。
【原型】void ctrlbrk(int(*handler)(void))【位置】dos.h
【说明】句柄函数返回0退出当前程序,否则程序将继续执行。delay 【功能】中断执行一段时间(以毫秒计算)。【原型】void delay(unsigned milliseconds)【位置】dos.h 【参见】sleep disable 【功能】禁止中断。
【原型】void disable(void)【位置】dos.h
【说明】禁止除了NMI之外的所有硬件中断。【参见】enable dosexterr 【功能】得到DOS扩展错误的信息。
【原型】int dosexterr(struct DOSERROR *eblkp)【位置】dos.h
【说明】根据最后一次DOS调用填写eblkp结构。返回exterror结构的值。dostounix 【功能】蒋时间和日期转换成为NUIX格式。
Turbo C函数
【原型】long dostounix(struct date*d,struct time *t)【位置】dos.h
【说明】返回UNIX格式的日期和时间参数(秒数从1970年1月1日(GMT)开始计算)。【参见】unixtodos _emit_ 【功能】直接在代码中插入文字。【原型】void emit(argument,…)【位置】dos.h enable 【功能】允许硬件中断。【原型】void enable(void)【位置】dos.h 【参见】disable FP_OFF 【功能】得到远端偏移地址。
【原型】unsigned FP_OFF(farpointer)【位置】dos.h
【参见】movedata,segread FP_SEG 【功能】得到远端分段地址。
【原型】unsigned FP_SEG(farpointer)【位置】dos.h
【参见】movedata,segread freemem 【功能】释放原先使用allocmem分配的DOS内存块。【原型】int freemem(unsigned segx)【位置】dos.h
【说明】成功返回0,错误返回-1,同时设置errno。【参见】allocmem,free geninterrupt 【功能】生成软件中断。【原型】
【位置】dos.h
【说明】调用之后可能所有寄存器的状态都根据调用的中断而定。注意,中断可能导致C使用的寄存器处于一种不可预见的状态之中。
【参见】int86,int86x,intdos,intdosx,bdos,bdosptr,intr,enable,disable getcbrk 【功能】得到控制中断的设置。【原型】int getcbrk(void)【位置】dos.h
【说明】如果control_break检查被关闭则返回0,如果检查被打开则返回1。【参见】setcbrk,ctrlbrk getcwd 【功能】得到当前工作目录。
【原型】char *getcwd(char *buf,int buflen)【位置】dos.h,dir.h
Turbo C函数
【说明】返回一个指向buf的指针,出现错误时返回NULL,同时设置errno。【参见】getcurdir,getdisk,mkdir,chdir,rmdir getdate 【功能】得到MS DOS日期。
【原型】void getdate(struct date *datep)【位置】dos.h
【参见】setdate,gettime,ctime getdfree 【功能】得到磁盘的剩余空间。
【原型】void getfree(unsigned char drive,struct dfree *dtable)【位置】dos.h
【说明】如果出错,则dtable结构中的df_sclus将设置为-1 【参见】getfat getdta 【功能】得到磁盘转移地址。【原型】char far *getdta(void)【位置】dos.h
【说明】返回一个指针,指向当前的磁盘转移地址。【参见】struct,fcb,setdta getfat 【功能】得到指定驱动器的文件分配表信息。
【原型】void getfat(unsigned char driver,struct fatinfo *dtable)【位置】dos.h
【参见】getdfree,getfatd getfatd 【功能】得到文件分配表信息。
【原型】void getfatd(struct fatinfo *dtable)【位置】dos.h
【参见】getdfree,getfat getftime 【功能】得到文件的日期和时间。
【原型】int getftime(int handle,struct ftime *fftimep)【位置】dos.h
【说明】成功返回0,错误则返回-1,同时设置errno 【参见】setftime,open getpsp 【功能】得到程序分段的前缀。【原型】unsigned getsp(void)【位置】dos.h
【说明】适用于MS DOS 3.0或者更新的版本。【参见】_psp,getenv gettime 【功能】得到系统时间。
【原型】void gettime(struct time *timep)【位置】dos.h
【参见】settime,getdate
Turbo C函数
getvect 【功能】得到中断扇区。
【原型】void interrupt(*getvect(int intr_num))()【位置】dos.h
【说明】返回在intr_num中断扇区中保存的一个4字节树脂。【参见】setvect,disable,enable getverify 【功能】得到校验状态。
【原型】int getverify(void)【位置】dos.h
【说明】如果校验标志关闭则返回0,如果校验标志打开则返回1。【参见】setverify harderr 【功能】建立一个硬盘错误句柄。
【原型】void harderr(int(*(handler)))【位置】dos.h
【说明】当MS DOS出现致命错误(int 0x24)时,掉用句柄指向的函数。【参见】hardresume.hardretn,longjmp hardresume 【功能】硬件错误句柄函数。
【原型】void hardresume(int axret)【位置】dos.h
【说明】harderr建立的错误句并可以将执行控制权返回给通过这个函数发布致命错误的MS DOS程序。Axret中的数值返回给MS DOS(0表示忽略,1表示重试,2表示退出)【参见】hardretn hardretn 【功能】硬件错误句柄函数。
【原型】void hardretn(int retn)【位置】dos.h
【说明】调用该函数之后,harderr建立的错误句柄可以直接返回应用程序。Retn中的数值返回到用户程序中,覆盖生成致命错误的MS DOS函数返回的正常值。【参见】hardresume inp 【功能】从硬件端口读取一个字节。【宏原型】int inp(int portid)【位置】dos.h
【参见】inport,inporth inport 【功能】从硬件端口读取一个词。【原型】int inport(int portid)【位置】dos.h
【参见】inportb,outport inportb 【功能】从硬件端口读取一个字节。
【原型】unsigned char inportb(int portid)【位置】dos.h
Turbo C函数
【参见】inport,outportb int86 【功能】常用的8086软件中断。
【原型】int int86(int intno,union REGS *inregs,union REGS *outregs)【位置】dos.h
【说明】该函数将保存在inregs中的数值装载到CPU寄存器中,发出中断intno,然后在outregs中保存结果CPU寄存器。【参见】int86x,intdos,intr int86x 【功能】常用的8086软件中断接口。【原型】int int86x(int intno,union REGS *inregs,union REGS *outregs,struct SREGS *segregs)【位置】dos.h 【说明】该函数将inregs和segregs中的数值装载到CPU寄存器中,发布中断intno,然后在outregs和segregs中保存最终的CPU寄存器数值。【参见】int86,intdosx,intr intdos 【功能】常用的MS DOS中断接口。
【原型】int intdos(union REGS *inregs,union REGS *outregs)【位置】dos.h
【说明】该函数将inregs中保存的数值装载到CPU寄存器中,发布MS DOS中断(int 33或者0x21),然后在outregs中保存最终的CPU寄存器树脂。【参见】indosx,int86,intr,bdos,bdosptr intdosx 【功能】常用的MS DOS中断接口。
【原型】int intdosx(union REGS *inregs,union REGS *outregs,struct SREGS *segregs)【位置】dos.h
【说明】intdosx将inregs和segregs中的数值装载到CPU寄存器中,发布DOS中断(int 0x21),然后在outregs/segregs中保存最终的CPU寄存器数值。【参见】intdos,int86x,intr,bdos,bdosptr intr 【功能】转换8086软件中断的借口。
【原型】void intr(int intno,struct REGPACK *preg)【位置】dos.h
【说明】该函数将preg中保存的数值装载到CPU寄存器中,发布中断intno,然后在preg中保存结果CPU寄存器的数值。
【参见】int86,int86x,intdos keep 【功能】程序退出运行,但是继续驻留内存。
【原型】void keep(unsigned char status,unsigned size)【位置】dos.h
【说明】该函数没有返回。它只是退到DOS状态,同时在status中保存返回值,但是程序仍然驻留在内存中。程序在中断运行之前被设置成为size大小的段落,剩余的程序内存则返回给DOS。【参见】ABORT,EXIT,EXEC,SPAWN,SYSTEM MK_FP 【功能】创建一个远端指针。
【原型】void far *MK_FP(se,off)
Turbo C函数
【位置】dos.h
【参见】movedata,segread nosound 【功能】关闭PC喇叭。
【原型】void nosound(void)【位置】dos.h
【参见】sound,delay outp 【功能】在硬件端口写一个字节。
【宏原型】int outp(int portid,int byte_value)【位置】dos.h
【参见】outport,outportb outport 【功能】在硬件端口输出一个词。
【原型】void outport(int portid,int value)【位置】dos.h
【参见】inport,outportb outportb 【功能】在硬件端口输出一个字节。
【原型】void outportb(int portid,unsigned char value)【位置】dos.h
【参见】inportb,outport parsfnm 【功能】解析文件名称,然后创建文件控制块(FCB)。
【原型】char *parsfnm(const char *cmdline,struct fcb *fcb,int option)【位置】dos.h
【说明】成功解析一个文件名称之后,parsfnm返回一个指针,指向文件名称末尾的下一个字节。如果在解析文件名称时出现任何错误,则返回0。peek 【功能】返回由segment:offset指定内存位置中的词。【原型】int peek(unsigned segment,unsigned offset)【位置】dos.h
【参见】peekb,poke peekb 【功能】返回由segment:offset指定内存位置中的字节。【原型】char peekb(unsigned segment,unsigned offset)【位置】dos.h
【参见】peek,pokeb poke 【功能】在由segment:offset指定内存位置中保存一个整数值。【原型】void poke(unsigned segment,unsigned offset,int value)【位置】dos.h
【参见】peek,pokeb pokeb 【功能】存值到一个指定存储单元。
【原型】void pokeb(unsigned segment,unsigned offset,int value)
Turbo C函数
【位置】dos.h 【参见】peek,poke randbrd 【功能】读取随即数据块。
【原型】int randbrd(struct fcb *fcb,int rcnt)【位置】dos.h
【说明】根据randbrd操作的结果,将返回如下数值。0 读入所有记录。到达文件结尾,已经读入最后一条记录。2 循环读入记录。到达文件结尾,最后一条记录尚未读入。【参见】randwr randbwr 【功能】使用文件控制块(FCB)随机写入数据块。【原型】int randbwr(struct fcb *fcb,int rcnt)【位置】dos.h
【说明】根据randbwr操作的结果,将返回如下数值。0 写入所有记录。没有足够的空间写入。2 循环写入。【参见】randbrd segread 【功能】读入段寄存器。
【原型】void segread(struct SREGS *segp)【位置】dos.h
【参见】FP_OFF,intdosx,int86x setblock 【功能】改变原先分配的数据块大小。
【原型】int setblock(unsigned segx,unsigned newsize)【位置】dos.h 【说明】对调用allocmem函数分配的数据块使用。成功时返回-1。如果出现错误,则返回可能出现的最大数据块的大小,并且设置_doserrno。【参见】allocmem,freemem setcbrk 【功能】设置控制中断。
【原型】int setcbrk(int cbrkvalue)【位置】dos.h
【说明】如果cbrkvalue等于1,则每次系统调用都需要检查Ctrl-Break。如果等于0,则只在控制台、打印机和通信I/O调用地进行检查。返回值通过cbrkvalue传递。setdate 【功能】设置MS DOS日期。
【原型】void setdate(struct fate *date *datep)【位置】dos.h
【参见】settime,getdate setdta 【功能】设置磁盘转换地址。
Turbo C函数
【原型】coid setdta(char far *dta)【位置】dos.h settime 【功能】设置系统时间。
【原型】void settime(struct time *timep)【位置】dos.h
【参见】getdate,gettime setvect 【功能】设置中断扇区入口。
【原型】void setvect(int intreeuptno,void interrupt(*isr)())【位置】dos.h
【说明】isr指向出现中断号码为interuptno的中断时调用的函数。如果isr为一个C函数,就应当使用interrupt关键字进行定义。【参见】getvect setverify 【功能】设置校验状态。
【原型】void setverify(int value)【位置】dos.h
【说明】如果value等于1,则每次磁盘写操作之后都将进行一次操作以便确保正确结果(0则表示不在随后进行读操作)。【参见】getverify sleep 【功能】程序执行挂起一段时间。
【原型】void sleep(unsigned seconds)【位置】dos.h 【参见】delay sound 【功能】将PC喇叭打开,并且设置到某个频率。【原型】void sound(unsigned frequency)【位置】dos.h
【说明】频率以赫兹为单位(每秒的圈数)。【参见】nosoubd,delay unixtodos 【功能】将UNIX格式的日期和时间转换成DOS格式。
【原型】void unixtodos(long time,struct date *d,struct time *t)【位置】dos.h 【参见】dostounix unlink 【功能】删除一个文件。
【原型】int unlink(const char *filename)【位置】dos.h,io.h,stdio.h
【说明】如果filename指定的文件属性为只读,泽unlink操作失败。首先需要调用chmod函数改变文件属性。成功返回0,错误返回-1。【参见】chmod,remove
FLOAT.H _clear87 18
Turbo C函数
【功能】清除浮点状态。
【原型】unsigned int _clear87(void)【位置】float.h
【说明】返回值的位表示旧的浮点状态。有关状态的详细解释,参见float.h文件中定义的常量。【参见】_fpreset,_status87 _control87 【功能】改变浮点控制词。
【原型】unsigned int _control87(unsigned int new,unsigned int mask)【位置】float.h
【说明】如果mask中的某一位为1,则new中的相应位保持控制词中相同位的新数值。如果mask位0,则说明控制词没有改变。
【参见】_clear87,_fpreset,status87,CWDEFAULT _fpreset 【功能】重新初始化浮点数学包。【原型】void _fpreset(void)【位置】float.h
【说明】该函数必须与exec、spawn、system等函数联合使用,因为子进程可能改变父进程的浮点状态。_status87 【功能】得到浮点状态。
【原型】unsigned int _status87(void)【位置】float.h
【说明】返回值的位说明了浮点状态。【参见】_clear87,_control87,_fpreset
GRAPHICS.H bar 【功能】画出一条栏目。
【原型】void far bar(int left,int top,int right,int bottom)【位置】graphics.hgraphics.h
【参见】bar3d,setfillstyle,rectangle bar3d 【功能】画出一条3-D栏目。
【原型】void far bar3d(int left,int top,int right,int bottom,int depth,int topflag)【位置】graphics.h 【参见】bar circle 【功能】以(x,y)为圆心按照指定的半径画出一个圆。【原型】void far circle(int x,int y,int radius)【位置】graphics.h 【参见】arc cleardevice 【功能】清除图形画面。
【原型】void far cleardevice(void)【位置】graphics.h 【参见】clearviewport clearviewport
Turbo C函数
【功能】清除当前可视区域。【原型】clearviewport(void)【位置】graphics.h
【参见】setviewport,cleardevice closegraph 【功能】关闭图形系统。
【原型】void far closegraph(void)【位置】graphics.h 【参见】initgraph detecgraph 【功能】通过检查硬件确定使用的图形驱动程序和模式。
【原型】void far detectgraph(int far *graphdriver,int far *graphmode)【位置】graphics.h
【参见】initgraph,graphresult drawpoly 【功能】画出一个多边形的轮廓。
【原型】void far drawpoly(int numpoints,int far polypoints[])【位置】graphics.h
【说明】polypoints中包括一共numpoints对数值。其中每一对都给出了多边形中一个顶点的x和y值。
【参见】fillpoly ellipse 【功能】画出一条椭圆形的圆弧。
【原型】void far ellipse(int x,int y,int stangle,int endangle,int xradius,int yradius)【位置】graphics.h
【说明】中心点在(x,y),stangle和endangle表示一角度为单位的起始角和终止角。Xradius和yradius表示水平轴和垂直轴。【参见】arc,circle,fillellipse fillellipose 【功能】画出椭圆形圆弧,并填充。
【原型】void far fillllipse(int x,int y,int xradius,int yradius)【位置】graphics.h
【说明】使用(x,y)作为中心点,然后使用当前的填充模式填充圆弧。Xradius和yradius表示水平轴和垂直轴。
【参见】arc,circle,ellipse,pieslice fillpoly 【功能】画出一个多边形,并填充。
【原型】void far fillpoly(int numpoints,int far polypoints[])【位置】graphics.h 【说明】polypoints中包含有numpoints对数值。其中每一对给出了多边形一个顶点的x值和y值。【参见】drawpoly,fill_patterns,floodfill,graphresult,setfillstyle floodfill 【功能】填充一个有界区域范围。
【原型】void far floodfill(int x,int y,int border)【位置】graphics.h
【参见】drawpoly,fillpoly,fill_patterns,graphresult,setfillstyle
Turbo C函数
getarccoords 【功能】得到最后一次调用arc的坐标值。
【原型】void far getaerccoords(struct arccoordstype far *arccoords)【位置】graphics.h 【参见】arc getaspectratio 【功能】得到当前图形模式的纵横比。
【原型】void far getaspectratio(int far *xasp,int far *yasp)【位置】graphics.h
【说明】are及类似函数使用纵横比令圆圈更加圆,而不会像椭圆。Yasp应当为10000。当象素为
【原型】int far getbkcolor(void)【位置】graphics.h
【参见】setbkcolor,getcolor,getpalette getcolor 【功能】返回当前画笔的颜色。【原型】int far getcolor(void)【位置】graphics.h
【参见】getbkcolor,setcolor,getmaxcolor,getpalette getdefaultpalette 【功能】返回调色板定义结构。
【原型】struct palettetype *far getdefaultpalette(void)【位置】graphics.h
【说明】返回一个指针,指向调用initgraph初始化时,当前驱动程序的默认调色板结构。【参见】getpalette,initgraph getdrivername 【功能】返回一个指针,指向当前图形驱动程序的名称。【原型】char *far getdrivername(void)【位置】graphics.h
【说明】返回的指针指向标识当前驱动器程序的字符串,从而可以探测到硬件适配器。【参见】initgraph getfillpattern 【功能】将用户定义的填充模式复制到内存中。
【原型】void far getfillpattern(char far *pattern)【位置】graphics.h
【参见】getfillsettings,setfillpattern,fill_patterns getfillsettings 【功能】得到当前填充模式及其颜色的有关信息。
【原型】void far getfillsettings(struct fillsettingstype far *fillinfo)【位置】graphics.h
【参见】floodfill, fillpoly, setfillstyple, pieslice, setfillpattern, bar3d, bar, getfillpattern getgraphmode
Turbo C函数
【功能】返回当前图形模式。
【原型】int far getgraphmode(void)【位置】graphics.h
【说明】必须先调用initgraph或者setgraphmode。【参见】setmoderange,restorectrtmode getmage 【功能】将制定区域的位图保存到内存中。
【原型】void far getimage(int left,int top,int right,int bottom,void far *bitmap)【位置】graphics.h
【参见】imagesize,putimage getlinesettings 【功能】得到当前的直线样式、模式和粗细。
【原型】void far getlinesettings(struct linesettingstype far *lineinfo)【位置】graphics.h 【参见】setlinestyle getmaxcolor 【功能】返回最大颜色值。
【原型】int far getmaxcolor(void)【位置】graphics.h
【参见】getbcolor,getpalette,getcolor,setcolor getmaxmode 【功能】返回当前驱动程序的最大图形模式号。【原型】int far getmaxmode(void)【位置】graphics.h
【说明】getmaxmode可以得到当前装载的图形驱动程序的最大模式号。适用于所有驱动程序—包括Borland驱动程序及其他驱动程序。【参见】getmoderange getmaxx 【功能】返回画面坐标的最大x值。【原型】int far getmaxx(void)【位置】graphics.h 【参见】getx getmaxy 【功能】返回画面坐标的最大y值。【原型】int far getmaxy(void)【位置】graphics.h 【参见】getx getmodename 【功能】返回指针,指向图形模式的名称。
【原型】char *far getmodename(int mode_number)【位置】graphics.h
【说明】返回的指针指向mode_number指定模式的名称(字符串)。【参见】getmaxmode,getmoderange getmoderange 【功能】得到指定图形驱动器的模式范围。
【原型】void far getmoderange(int graphdriver,int far *lomode,int far *himode)
Turbo C函数
【位置】graphics.h
【参见】initgraph,getmaxmode,setgraphmode,getgraphmode.getpalette 【功能】得到当前调色板的有关信息。
【原型】void far getpalette(struct palettetype far *palette)【位置】graphics.h
【参见】setpalette,setallpalette,getbkcolor,getdefaultpalette,getcolor getpalettesize 【功能】返回调色板表的大小。
【原型】int far getpalettesize(void)【位置】graphics.h
【说明】getpalettesize返回当前图形驱动程序模式允许的调色板条目的数目。【参见】setpalette,setallpalette getpixel 【功能】得到某个指定向素的颜色。
【原型】unsigned far getpixel(int x,int y)【位置】graphics.h
【参见】putpixel,getimage gettextsettings 【功能】得到当前图形文字字体的有关信息。
【原型】void far gettextsettings(struct textsettingstype far *texttypeinfo)【位置】graphics.h
【参见】outtext, outtextxy, textheight, textwidth, settextjustify, settextsyle, registerbgifont getviewsettings 【功能】得到当前视窗的有关信息。
【原型】void far getviewsettings(struct viewporttype far *viewport)【位置】graphics.h
【参见】setviewport,clearviewport getx 【功能】返回当前位置的x坐标。【原型】int far getx(void)【位置】graphics.h
【说明】返回数值与视窗相关。
【参见】gety,moveto,getviewsettings gety 【功能】返回当前位置的y坐标。【原型】int far gety(void)【位置】graphics.h
【说明】返回数值与视窗相关。
【参见】getx,moveto,getviewsettings graphdefaults 【功能】将所有图形设置重值为默认值。【原型】void far graphdefaults(void)【位置】graphics.h
【参见】initgraph,setgraphmode
Turbo C函数
grapherrormsg 【功能】返回一个指针,指向错误消息字符串。【原型】char *far grapherrormsg(int errorcode)【位置】graphics.h
【说明】返回指针指向的字符串与graphresult返回值相关。【参见】graphresult _graphfreemem 【功能】用户申请重新分配图形内存。
【原型】void far _graphfreemem(void far *ptr,unsigned size)【位置】graphics.h 【说明】图形函数库中的程序调用该函数来释放内存。可以自己使用_graphgetmem和_graphfreemem函数来控制内存分配。【参见】_graphgetmem _gaphetmem 【功能】用户申请重新分配图形内存。
【原型】void far *far _graphgetmem(unsigned size)【位置】graphics.h 【说明】图形函数库中的程序调用该函数来释放内存。可以自己使用_graphgetmem和_graphfreemem函数来控制内存分配。【参见】_graphfreemem graphresult 【功能】返回最后一次失败图形操作的错误代码。【原型】int far graphresult(void)【位置】graphics.h
【说明】返回最后一次报告错误图形的错误代码,并且将错误等级重置为grOK。【参见】grapherrormsg imagesize 【功能】返回存储位图所需的字节数。
【原型】unsigned far imagesize(int left,int top,int right,int bottom)【位置】graphics.h
【说明】如果选定图形所需的大小大于等于64k-1个字节,则返回0xFFFF。【参见】getimage,putimage initgraph 【功能】初始化图形系统。
【原型】void far initgraph(int far *graphdriver, int far *graphmode, char far *pathtodriver)【位置】graphics.h
【参见】getgraphmode , closegraph , detectgraph , _graphgetmem , getdrivername , restorecrtmode,setgraphbufsize,registerbgidriver,graphresult,installuserdriver installuserdriver 【功能】按照设备驱动程序。
【原型】int far installuserdriver(char far *name,int huge(*detect)(void))【位置】graphics.h
【说明】name表示设备驱动程序的文件名称(*.bgi),detect指向initgraph使用autodetect选项调用的函数。
【参见】initgraph,registerbgidriver
Turbo C函数
installuserfont 【功能】装载一个字体文件。
【原型】int far installuserfont(char far *name)【位置】graphics.h
【说明】name表示图形函数还没有识别的字体文件(扩展名为.chr)DOS文件名称。installuserfont返回一个字体ID号。选择新字体时,使用该ID号调用settextstyle。【参见】settextstyle line 【功能】在两个指定点之间画出一条直线。【原型】lint(int x1,int y1,int x2,int y2)【位置】graphics.h
【说明】使用当前颜色、线条样式和线条粗细从(x1,y1)画一条直线到(x2,y2)。【参见】lineto,linerel,setcolor,getlinesettings linerel 【功能】从当前位置(CP)画一条一直长度的直线。【原型】linerel(int dx,int dy)【位置】graphics.h
【说明】使用当前颜色、线条样式和线条粗细。
【参见】line,lineto,setcolor,getcolor,getlinesettings lineto 【功能】从当前位置(CP)到(x,y)之间画一条直线。【原型】void far lineto(int x,int y)【位置】graphics.h
【参见】line,linerel,setcolor,getlinesettings,setwritemode moverel 【功能】从当前位置(CP)移动一段距离。【原型】moverel(int dx,int dy)【位置】graphics.h 【参见】moveto moveto 【功能】从当前位置(CP)移动到(x,y)点。【原型】void far moveto(int x,int y)【位置】graphics.h 【参见】moverel outtext 【功能】在视窗中(图形模式)显示一个字符串。【原型】void far outtext(char far *textstring)【位置】graphics.h
【参见】gettextsettings,texthright,textwidth,outtextxy outtextxy 【功能】在指定位置(图形模式)发送一个字符串。
【原型】void far outtextxy(int x,int y,char far *textstring)【位置】graphics.h
【参见】gettextsettings,textherght,textwidth,outtext pieslice 【功能】画出扇形区并加以填充。
Turbo C函数
【原型】void far pieslice(int x,int y,int stangle,int endangle,int radius)【位置】graphics.h
【参见】setfillstyle,sector,fill_patterns,fillellipse,graphresult putimage 【功能】在屏幕上输出一副位图。
【原型】void far putimage(int left,int top,void far *bitmap,int top)【位置】graphics.h 【说明】bitmap指向一副位图,该位图通常由getimage函数创建。Op的数值说明如何在(left,top)点将图像与区域中的当前内容结合起来。【参见】getimage putpixel 【功能】在指定点上画一个像素。
【原型】void far putpixel(int x,int y,int pixelcolor)【位置】graphics.h
【参见】getpixel,putimage rectangle 【功能】画出一个矩形(图形模式)。
【原型】void far rectangle(int left,int top,int right,int bottom)【位置】graphics.h
【说明】使用当前线条样式、线条粗细和颜色。【参见】bar,setlinestyle,setcolor registerbgidriver 【功能】注册链入的图形驱动程序。
【原型】int registerbgidriver(void(*driver)(void))【位置】graphics.h
【说明】通知图形系统链接时设备驱动程序指向的参数和驱动程序。【参见】initgraph,registerbgifont,installuserdriver registerbgifont 【功能】注册链入的字体代码。
【原型】int registerbgifont(void(*font)(void))【位置】graphics.h
【说明】通知图形系统连接时指向的字体。【参见】initgraph,registerbgidriver restorecrtmode 【功能】将屏幕模式恢复到前一次initgraph的设置。【原型】void far restorecrtmode(void)【位置】graphics.h
【参见】initgraph,setgraphmode sector 【功能】画出椭圆形的扇形区并加以填充。
【原型】void far sector(int x,int y,int stangle,int endangle,int xradius,int yradius)【位置】graphics.h
【说明】x和y定义出中心点,stangle和endangle则定义起始和终止角。Xradius和yradius表示水平和垂直半径。
【参见】pieslice,setfillstyle setactivepage 26
Turbo C函数
【功能】为图形输出设置活动页面。
【原型】void far setactivepage(int page)【位置】graphics.h 【说明】后续的图形输出就指向该显示页面。该页面可能不是实际显示的可视页面。【参见】setvisualpage setallpalette 【功能】将所有调色板的颜色改为指定颜色。
【原型】void far setallpalette(struct palettetype far *palette)【位置】graphics.h
【参见】setpalette,getpalettesize,getpalette,setcolor,setbkcolor,graphresult setaspectratio 【功能】设置图形模式的纵横比。【原型】void far setaspectratio 【位置】graphics.h
【说明】are及类似函数使用纵横比令圆圈更加圆,而不会像椭圆。yasp应当为10000。当象素为
【参见】setpalette,setcolor,getbkcolor setcolor 【功能】设置当前画笔颜色。
【原型】void far setcolor(int color)【位置】graphics.h
【参见】getcolor,setbkcolor,setpalette,graphresult setfillpattern 【功能】选择一个用户自定义的填充模式。
【原型】void far setfillpattern(char far *upattern,int color)【位置】graphics.h
【说明】upattern指向一个8字节的区域,其中定义了一个8*8位的模式。【参见】fill_patterns,getfillpattern,getfillsettings,setfillstyle setfillstyle 【功能】设置填充模式和颜色。
【原型】void far setfillstype(int pattern,int color)【位置】dos.h
【参见】get,fillstype setgraphbufsize 【功能】改变内部图形缓冲区的大小。
【原型】unsigned far setgraphbufsize(unsigned bufsize)【位置】graphics.h
【说明】必须在调用initgraph之前调用该函数。【参见】initgraph,_graphgetmem setgraphmode 【功能】系统设置为图形模式,同时清屏。
Turbo C函数
【原型】void far setgraphmode(int mode)【位置】graphics.h
【参见】initgraph,getgraphmode,restorecrtmode,graphresult setlinestyle 【功能】设置当前的线条样式、宽度或者模式。
【原型】void far setlinestyle(int linestyle,unsigned upattern,int thickness)【位置】graphics.h 【说明】可以设置使用line,lineto,tectangle,drawpoly,aec,circle,ellipse,pieslice等函数画的所有线条样式。
【参见】getlinesettings,graphresult setpalette 【功能】改变一种调色板颜色。
【原型】void far setpalette(int colornum,int color)【位置】graphics.h
【参见】getpalette, graphresult, setallpalette, getpalettesize, setcolor, setrgbcolor, setbkcolor setrgbcolor 【功能】为VGA和IBM-8514驱动程序设置调色板条目。
【原型】void far setrgbcolor(int colornum,int red,int green,int blue)【位置】graphics.h
【说明】colornum表示需要设置的调色板条目,red、green和blue用来定义颜色。【参见】setpalette,setrgbpalette setrgbpalette 【功能】为IBM-8514图形卡定义颜色
【原型】void far setrgbpalette(int colornum,int red,int green,int blue)【位置】graphics.h
【说明】colornum表示需要载入的调色板条目,从0~255之间的数字,red、green和blue负责定义颜色。这些数值仅仅使用低位字节,而且只有最重要的6位载入调色板。【参见】setrgbcolor,setpalette settextjustify 【功能】设置图形模式下的文本对齐方式。
【原型】void far settextjustify(int horiz,int vert)【位置】graphics.h
【说明】该函数影响outtext等函数输出的文本,是文本在水平和垂直方向对齐。settextstyle 【功能】设置当前文本属性。
【原型】void far settextstyle(int font,int direction,int charsize)【位置】graphics.h
【参见】settextjustify,installuserfont,gettextsettings,graphresult setusercharsize 【功能】用户为渐入字符自定义的字符放大因子。
【原型】void far setuserchasize(int multix,int divx,int multy,int divy)【位置】graphics.h
【参见】gettextsettings,graphresult setviewport 【功能】设置图形输出的当前视口。
Turbo C函数
【原型】void far setviewport(int left,int top,int right,int bottom,int clip)【位置】graphics.h
【参见】getviewsettings,graphresult setvisualpage 【功能】设置可视图形页码。
【原型】void far setvisualpage(int page)【位置】graphics.h
【说明】有些显示适配器存在多个内存页面,可视页面是真正在屏幕上显示的页面。图形输出函数将输出写入由setactivepage定义的活动页面中。【参见】setactivepage,graphresult setwritemode 【功能】设置图形画线模式。
【原型】void far setwritemode(int mode)【位置】graphics.h
【说明】如果mode为0,则线条覆盖屏幕上当前的内容。如果mode为1,那么线条向素和已经在屏幕上的象素之间执行一个异域操作(XOR)。【参见】lingto textheight 【功能】以象素位单位,返回一个字符串的高度。【原型】int far textheight(char far *textstring)【位置】graphics.h
【说明】textwidth与图形函数一起使用,例如outtext 【参见】gettextsettings,textwidth,outtext textwidth 【功能】以象素位单位,返回一个字符串的宽度。【原型】int far textwidth(char far *textstring)【位置】graphics.h
【说明】textwidth与图形函数一起使用,例如outtext 【参见】gettextsettings,textheight,outtext
IO.H access 【功能】 确定文件是否可以访问。
【原型】int access(const char *filename,int amode)【位置】io.h
【说明】amode=0检查文件是否存在 amode=2检查文件是否有写权限
如果允许执行请求的访问,则返回0;否则返回数值-1,并且设置errno _chmod 【功能】改变访问模式。
【原型】int _chmod(const char *filename,int func[,int attrib])【位置】io.h
【说明】如果func等于0,则_chmod返回文件属性;如果func等于1,则设置属性。成功完成之后,_chmod返回文件属性;否则返回数值-1,并设置errno 【参见】chmod chomd 【功能】改变访问模式。
Turbo C函数
【原型】int chmod(const char *filename,int amode)【位置】io.h
【说明】成功改变文件访问模式之后,chmode返回0;否则chmode返回数值-1 【参见】_chmod chsize 【功能】改变文件大小。
【原型】int chsize(int handle,long size)【位置】io.h
【说明】成功则chsize返回0,失败则返回-1,同时设置errno 【参见】cheat fopen _close 【功能】关闭文件句柄。
【原型】int _close(int handle)【位置】io.h
【说明】成功完成之后,close返回0;否则返回-1,同时设置errno 【参见】close close 【功能】关闭文件句柄。
【原型】int close(int handle)【位置】io.h
【说明】成功完成之后,close返回0;否则返回-1,同时设置errno 【参见】_close _creat 【功能】创建一个新文件,或者覆盖一个旧文件。【原型】int _creat(const char *path,int attrib)【位置】io.h
【说明】creat按照_fmode规定的模式打开文件。_creat则总是按照二进制模式打开文件。成功完成之后,返回新文件句柄;否则返回-1,同时设置errno 【参见】creat creat 【功能】创建一个新文件,或者覆盖一个旧文件。【原型】int creat(const char *path,int attrib)【位置】io.h
【说明】creat按照_fmode规定的模式打开文件。_creat则总是按照二进制模式打开文件。成功完成之后,返回新文件句柄;否则返回-1,同时设置errno 【参见】_creat creatnew 【功能】创建一个新文件。
【原型】int creatnew(const char *path,int attrib)【位置】io.h
【说明】creatnew与_creat的功能基本一致,但是当文件已经存在时,creatnew将返回一个错误。该函数使用于MS DOS 3.0或者更新的版本 creattemp 【功能】在文件名指定的目录中创建一个文件。
【原型】int creattemp(const char *path,int attrib)【位置】io.h
Turbo C函数
【说明】该函数与_creat类似,但是文件名称为路径名称,必须以结束。文件名称中应当包括完整的文件名。该函数使用于MS DOS 3.0或者更新的版本 【参见】creat,_creat dup 【功能】复制一个文件句柄。【原型】int dup(int handle)【位置】io.h
【说明】成功完成之后,dup返回一个新文件的句柄;否则dup返回-1,同时设置errno 【参见】dup2 dup2 【功能】复制一个文件句柄oldhandle,新文件句柄为newhandle。【原型】int dup2(int oldhandle,int newhandle)【位置】io.h
【说明】成功返回0,错误返回-1 【参见】dup eof 【功能】检查文件结尾标志。【原型】int eof(int handle)【位置】io.h
【说明】该函数的返回值及其含义如下: 返回值 含义 1 文件结束 0 文件没有结束-1 出错,设置errno
【参见】ferror,perror,EOF filelength 【功能】得到文件大小的字节数。
【原型】long filelength(int handle)【位置】io.h
【说明】出现错误时返回-1,同时设置errno 【参见】open,lseek gettime 【功能】得到文件的日期和时间。
【原型】int gettime(int handle,struct ftime *fftimep)【位置】io.h
【说明】成功返回0,错误则返回-1,同时设置errno 【参见】setftime,open loctl 【功能】控制I/O设备。
【原型】int ioctl(int handle,int func[,void *argdx,int argcx])【位置】io.h
【说明】func为0或者1时,返回值表示设备信息(IOCTL调用DX)。Func数值从2到5时,返回值为实际传递的字节数。Func数值为6或者7时,返回值为设备状态。
在任何情况下如果出现错误,则返回数值-1,同时设置errno。isatty
Turbo C函数
【功能】检查设备类型。
【原型】int isatty(int handle)【位置】io.h
【说明】如果为字符设备,则isatty返回一个非0整数。lock 【功能】设置文件共享锁定,控制并发的文件访问。
【原型】int lock(int handle,long offset,long length)【位置】io.h
【说明】防止另一个程序读写访问从offset地址开始length个字节长的区域。调用成功返回0,调用失败返回-1。【参见】open,unlock lseek 【功能】移动读/写文件指针。
【原型】long lseek(int handle,long offset,int fromwhere)【位置】io.h
【说明】返回从文件起始位置开始新的文件位置,以字节为单位。错误返回01L,同时设置errno。【参见】fopen,fseek,ftell,gets,setbuf,ungetc _open 【功能】打开文件进行读写。
【原型】int _open(const char *filename,int oflags)【位置】io.h
【说明】成功完成之后,_open返回一个文件句柄,否则返回-1。【参见】open open 【功能】打开一个文件进行读写。
【原型】int open(const char *pathname,int access[,unsigned mode])【位置】io.h
【说明】成功完成之后,open返回一个文件句柄,否则返回-1,同时设置errno。【参见】close,creat,_creat,dup,fopen,lseek,_open,read,sopen,write _read 【功能】从文件中读取。
【原型】int _read(int handle,void *buf,unsigned len)【位置】io.h
【说明】返回读入的字节数,遇到文件结尾返回0,出现错误时返回-1,同时设置errno。【参见】read,_open,_write read 【功能】从文件中读取。
【原型】int read(int handle,void *buf,unsigned len)【位置】io.h
【说明】成功完成之后,返回一个整数说明缓存区中放置的字节数,如果文件在文本模式下打开,read不会计算返回读取字节数中的carriage或者Ctrl+Z字符。出现错误时返回-1,同时设置errno。【参见】_read,open,write setftime 【功能】获得文件的日期和时间。
【原型】int settime(int handle,struct ftime *ftimep)【位置】io.h
Turbo C函数
【说明】成功返回0,否则返回-1。【参见】gettime setmode 【功能】设置一个打开文件的模式。
【原型】int setmode(int handle,int amode)【位置】io.h
【说明】成功返回0,否则返回-1。【参见】open,creat sopen 【宏原型】sopen(path,access,shflag,mode)【位置】io.h
【说明】在共享模式下打开文件。可以于旧版本的Turbo C和其他编译程序兼容。【参见】open tell 【功能】得到文件指针的当前位置。【原型】long tell(int handle)【位置】io.h
【说明】返回当前文件指针的位置,出错则返回-1。【参见】fseek unlink 【功能】删除一个文件。
【原型】int unlink(const char *filename)【位置】io.h
【说明】如果filename指定的文件属性为只读,则unlink操作失败。首先需要调用chmod函数改变文件属性。
成功返回0,错误返回-1。【参见】chmod,remove unlock 【功能】释放文件共享的锁定,控制并发访问。
【原型】int unlock(int handle,long offset,long length)【位置】io.h
【说明】成功返回0,错误返回-1。【参见】lock _write 【功能】写入一个文件。
【原型】int _weite(int handle,void *buf,unsigned nbyte)【位置】io.h
【说明】返回写入的字节数目,出现错误则返回-1。【参见】write write 【功能】写入一个文件。
【原型】int weite(int handle,void *buf,unsigned nbyte)【位置】io.h
【说明】返回写入的字节数目,出现错误则返回-1。【参见】creat,open,read,_write,lseek
MATH.H
Turbo C函数
abs 【功能】得到一个整数的绝对值,abs(x)中的x表示一个int值。【原型】int abs(int x)【位置】math.h,stdlib.h acos 【功能】反余弦函数。
【原型】double acos(double x)【位置】math.h,stdlib.h 【说明】返回值从0到π。【参见】trig,hyperb asin 【功能】反正弦函数。
【原型】double asin(double x)【位置】math.h
【说明】返回值范围从-π/2到π/2 【参见】trig,hyperb stan 【功能】反正切函数。
【原型】double atan(double x)【位置】math.h
【说明】返回值范围从-π/2到π/2 【参见】trig,hyperb atan2 【功能】y/x的反正弦函数。
【原型】double atan2(double y,double x)【位置】math.h
【说明】返回值范围从-π到π 【参见】trig,hyperb atof 【功能】将一个字符串转换成浮点数。【原型】double atof(const char *s)【位置】math.h
【说明】返回s经过转换之后的值,如果s不能转换则返回0。【参见】atoi,atol,ecvt,sscanf,strtod cabs 【功能】得到一个复数的绝对值。
【原型】double cabs(struct complex znum)【位置】math.h
【说明】以双精度返回znum的绝对值。【参见】abs,fabs,labs ceil 【功能】向上取整函数。
【原型】double ceil(double x)【位置】math.h
【说明】返回一个大于等于x的最小整数。【参见】floor 34
Turbo C函数
cos 【功能】余弦函数。
【原型】double cos(double x)【位置】math.h
【说明】x表示弧度,返回值范围从-1到1。【参见】trig,hyperb cosh 【功能】双曲余弦函数。
【原型】double cosh(double x)【位置】math.h
【参见】hyperb,trig exp 【功能】计算e的x次方。【原型】double exp(double x)【位置】math.h
【参见】frexp,ldexp,log,pow fabs 【功能】得到一个浮点数的绝对值。【原型】double fabs(double x)【位置】math.h
【参见】abs,cabs,labs floor 【功能】向下取整函数。
【原型】double floor(double x)【位置】math.h
【说明】返回小于或等于x的最大整数。【参见】ceil fmod 【功能】计算x/y的余数,也就是x对y求模。【原型】double fmod(double x,double y)【位置】math.h 【参见】modf frexp 【功能】将一个双精度数分解成为尾数和指数。
【原型】double frexp(double value,int *exponent)【位置】math.h
【说明】计算出x(x<1)和n,并且value=x*(2**n)。返回尾数x,并且令*exponent指向n。【参见】exp hypot 【功能】计算直角三角形的斜边。
【原型】double hypot(double x,double y)【位置】math.h labs 【功能】长整数的绝对值。【原型】long labs(long x)【位置】math.h,stdlib.h
Turbo C函数
【参见】abs,cabs ldexp 【功能】计算value乘以2为底的exp次幂得到的数值。【原型】double ldexp(double calue,int exp)【位置】math.h
【说明】返回值x=value*pow(2,exp)【参见】exp,frexp log 【功能】对数函数ln(x)
【原型】double log(double x)【位置】math.h 【参见】exp log10 【功能】对数函数log(10x)
【原型】double log10(double x)【位置】math.h 【参见】exp matherr 【功能】用户可修改的数学错误处理程序。【原型】int matherr(struct exception *e)【位置】math.h
【说明】可以运用自己的matherr函数控制由math函数库探测器的错误句柄。
Matherr应当返回一个非0值来说明可以解决问题,否则返回0。也可以更改返回值e,通过初始化调用方的接口返回。modf 【功能】将数字分离成为整数部分和分数部分。【原型】double modf(double x,double *ipart)【位置】math.h
【说明】将参数值分解成两部分:整数部分和分数部分。将整数部分保存在*ipart中,返回分数部分。poly 【功能】根据参数生成一个多项式。
【原型】double poly(double x,int degree,double coeffs[])【位置】math.h
【说明】在x中返回一个多项式的数值,次数为n,系数为coeffs[0],…coeffs[n]。【参见】 pow 【功能】幂函数,x的y次幂。
【原型】double pow(double x,double y)【位置】math.h pow10 【功能】幂函数,10的p次幂。【原型】double pow10(int p)【位置】math.h sin 【功能】正弦函数。
Turbo C函数
【原型】double sin(double x)【位置】math.hmath.h
【说明】x表示弧度,返回值范围为-1到1。【参见】trig sinh 【功能】双曲正弦函数。
【原型】double sinh(double x)【位置】math.h 【参见】hyperb,trig sqrt 【功能】计算平方根。
【原型】double sqrt(double x)【位置】math.h
【说明】返回x的平方根。tan 【功能】正切函数。
【原型】double tan(double x)【位置】math.h
【说明】x表示弧度,返回x的正切值。【参见】trig,hyperb tanh 【功能】双曲正切函数。
【原型】double tanh(double x)【位置】math.h
【说明】返回x的双曲正切值。【参见】typerb,trig
MEM.H memccpy 【功能】从scr位置拷贝n个字节到dest位置。
【原型】*memccpy(void *dest,const void *src,int c,size_t n)【位置】mem.h,string.h
【说明】该函数拷贝一个与c匹配的字节之后将停止操作,返回一个指针,指向dest位置上c之后的字节;否则将返回NULL。memchr 【功能】在数组s的前n个字节中查找字符c。
【原型】void *memchr(const void *s,int c,size_t n)【位置】mem.h,string.h
【说明】返回一个指针,指向s中出现的第一个c。如果在数组s中没有出现c,则返回NULL。memcmp 【功能】比较两个长度均为n的字符串s1和s2。
【原型】int memcmp(const void *s1,const void *s2,size_t n)【位置】mem.h,string.h
【说明】如果s1小于s2,返回一个小于0的数值,如果s1等于s2则返回一个0值,如果s1大于s2则返回一个大于0的数值。memcpy 【功能】从src位置拷贝n个字节到dest位置。
Turbo C函数
【原型】*memcpy(void *dest,const void *src,size_t n)【位置】mem.h,string.h 【说明】返回dest。memicmp 【功能】比较s1和s2的前n个字节,忽略大小写差异。
【原型】int memicmp(const void *s1,const void *s2,size_t n)【位置】mem.h,string.h
【说明】如果s1小于s2,返回一个小于0的数值,如果s1等于s2则返回一个0值,如果s1大于s2则返回一个大于0的数值。memmove 【功能】从src拷贝n个字节到dest。
【原型】*memmove(void *dest,const void *src,size_t n)【位置】mem.h,string.h 【说明】返回s。memset 【功能】将s中的n个字节设置为c。
【原型】void *memset(void *s,int c,size_t n)【位置】mem.h,string.h 【说明】返回s。movedata 【功能】拷贝字节。
【原型】void movedata(unsigned srcset,unsigned crcoff,unsigned destseg,unsigned destoff,size_t n)
【位置】mem.h,string.h
【说明】从sreseg:srcoff拷贝n个字节到destseg:destseg:destoff。【参见】FP_OFF,memcpy,segread movmem 【功能】从src移动一定长度的字节到dest。
【原型】void movmem(void *src,void *dest,unsigned length)【位置】mem.h vsetmem 【功能】将某个内存范围设置为value。
【原型】void setmem(void *dest,int len,char value)【位置】mem.h,string.h 【参见】memset,strest
PROCESS.H abort 【功能】异常终止某个进程。【原型】void abort(void)【位置】stdlib.h 【参见】atexit,assert,exit exec 【功能】载入并运行另外一个程序。
【原型】int execl(char *path,char *arg0,…,NULL)
int execle(char *path,char *arg0,…,NULL,char **envp)
int execlp(char *path,char *arg0,…)
Turbo C函数
int execlep(char *path,char *arg0,…,NULL,char **envp)
int execv(char *path,char *argv[])
int execve(char *path,char *argv[],char **envp)
int execvp(char *path,char *argv[])
int execvp(char *path,char *argv[],char **envp)【位置】process.h
【说明】如果成功则exec函数不返回任何值。如果出现错误则exec函数返回-1,并且设置errno 【参见】spawn,searchpath,system exit 【功能】终止程序
【原型】void exit(int status)【位置】stdlib.h,process.h
【说明】终止程序之前,清空输出缓存,关闭文件,并且退出调用的函数 【参见】abort,atexit,_exit spawn 【功能】spawn函数允许程序运行其他文件,并且在文件运行结束之后返回控制权。成功执行之后,返回子进程的退出状态(0 表示正常终止)。如果某次子调用使用非0参数退出,则退出状态设置为一个非0值。
如果进程没有成功执行,则spawn函数将返回-1。
在使用如下这些spawn函数之前,首先需要了解将会出现多少个不同的参数。【原型】int spawnl(int mode,char *path,char *arg0,…,NULL)
int spawnle(int mode,char *path,char *arg0,…,NULL ,char **env)
int spawnlp(int mode,char *path,char *arg0,…,NULL)
int spawnlpe(int mode,char *path,char *arg0,…,NULL ,char **env)
int spawnv(int mode,char *path,char *arg[])
int spawnve(int mode,char *path,char *arg[],char **env)
int spawnvp(int mode,char *path,char *arg[])
int spawnvpe(int mode,char *path,char *arg[],char **env)【位置】process.h
【说明】每个spawn函数的结尾字母表明其使用哪一种变形。P 在DOS路径中查找子进程。L 传递固定长度的参数列表。V 传递可改变长度的参数列表。
E 传递一个env指针,允许改变子进程的环境。【参见】abort,atexit,exit,exec.system system
【功能】执行一个MS DOS 命令。
【原型】int system(const char *command)【位置】process.h,stdlib.h 【说明】command可以执行一条内部DOS命令,例如DIR、一个.COM或者.EXE程序文件,或者一个.BAT批处理文件。成功返回0,失败返回-1 【参见】searchpath
SETJMP.H longjmp 【功能】执行非本地的跳转。
【原型】void longjmp(jmp_buf jmpb,int retval)
Turbo C函数
【位置】setjmp.h
【说明】将控制权传递给调用setjmp(初始化jmpb)的语句。该点将继续向下执行,假设setjmp返回在retval中定义的数值。longjmp不能返回数值0,如果在retval中返回0,则longjmp将返回1
【参见】ctrlbrk,signal setjmp
【功能】设置非本地跳转。
【原型】int setjmp(jmp_buf jmpb)【位置】setjmp.h
【说明】保存类似寄存器数值的相关信息,以便于longjmp函数可以将控制权返回给调用setjmp之后的语句。首次调用时返回0 【参见】longjmp
SIGNAL.H raise 【功能】向执行程序发送一个信号。【原型】int raise(int sig)【位置】signal.h 【说明】程序可以使用raise给自己发送信号,执行由该信号类型设置的句并(或者默认句柄)。Sig的信号类型在signal.h中定义。【参见】signal signal 【功能】设置某个信号的句柄。
【原型】typedef void(*sigfun)(int subcode)int signal(int sig,sigfun fname)【位置】signal.h
【说明】当产生sig类型的信号时,调用fname指向的函数。信号类型在signal.h中定义。当出现例外条件,或者调用raise时才会产生信号。【参见】raise
STDIO.H clearerr 【功能】重设错误标识。
【原型】void clearerr(FILE *fp)【位置】stdio.h
【说明】重设流fp中的错误标识和文件结尾标识。【参见】eof,ferror,feof,perror fclose 【功能】关闭流。
【原型】int fclose(FILE *fp)【位置】stdio.h
【说明】成功返回0,如果出现任何错误则返回EOF。【参见】fflush,fcloseall,fopen,flushall,close fcloseall 【功能】关闭所有打开的流。【原型】int fcloseall(void)【位置】stdio.h
【说明】返回关闭的总数目,如果出现任何错误则返回EOF。
Turbo C函数
【参见】fclose,flushall fdopen 【功能】将某个流和某个文件句柄相关联。
【原型】FILE *fdopen(int handle,char *type)【位置】stdio.h
【说明】返回一个指针,指向最近打开的流,如果出现任何错误则返回NULL。【参见】fopen,open feof(f)【功能】如果流f出现错误则返回非0值。【原型】int feof(FILE *stream)【位置】stdio.h
【参见】clearerr,eof ferror(f)【功能】如果流f出现错误则返回非0值。【原型】int ferror(FILE *stream)【位置】stdio.h
【参见】clearerr,fopen,eof fflush 【功能】清空某个流。
【原型】int fflush(FILE *fp)【位置】stdio.h
【说明】如果出现任何错误则返回EOF。【参见】flushall,fclose fgetc 【功能】从流中得到字符。【原型】int fgetc(FILE *fp)【位置】stdio.h
【说明】该函数是宏getc的函数版本。【参见】fgetchar,fputc fgetchar 【功能】从stdin中得到一个字符。【原型】int fgetchar(void)【位置】stdio.h
【说明】函数是宏getchar的函数版本。fgetpos 【功能】得到文件指针的当前位置。
【原型】int fgetpos(FILE *fp,fpos_t *pos)【位置】stdio.h
【说明】*pos中保存的位置可以传递给fsetpos,从而设置文件指针。成功返回0,否则返回一个非0值。
【参见】fseek,fsetpos,ftell,tell fgets 【功能】从流中得到一个字符串。
【原型】char *fgets(char *s,int n,FILE *fp)【位置】stdio.h
【说明】成功则返回目的字符串s,错误或者遇到文件结尾则返回NULL。
Turbo C函数
【参见】fputs,gets fileno(f)【功能】返回与流f相关联的文件句柄。【宏原型】int fileno(FILE *stream)【位置】stdio.h flushall 【功能】清空所有打开的流。【原型】flushall(void)【位置】stdio.h
【说明】清空输入流的缓存区和输出流文件的输出缓存。返回一个整数,表示打开的输入输出流的数目。
【参见】fflush,fclose,fcloseall fopen 【功能】打开一个流。
【原型】FILE *fopen(const char *filename,const char *mode)【位置】stdio.h
【说明】如果成功则返回一个指针,指向最近打开的流,否则返回NULL。【参见】fclose,creat,open,dup,ferror,_fmode,rewind,setbuf,setmode fprintf 【功能】向流发送格式化输出。
【原型】int fprintf(FILE *fp,const char *format,…)【位置】stdio.h
【说明】使用格式说明符与printf相同,但是frintf向指定流fp发送输出,fprintf返回输出字节数。出现错误则返回EOF。【参见】putc,fscanf fputc 【功能】向某个流输出一个字符。【原型】int fputc(int c,FILE *fp)【位置】stdio.h
【说明】该函数是宏getc的函数版本。fputchar 【功能】向stdot输出一个字符。【原型】int fputchar(int c)【位置】stdio.h
【说明】函数是宏getchar的函数版本。fputs 【功能】向某个流输出一个字符。
【原型】int fputs(const char *s,FILE *fp)【位置】stdio.h
【说明】成功完成之后,返回最近写入的字符,否则返回EOF。【参见】fgets,puts fread 【功能】从某个流读入数据。
【原型】size_t fread(void *ptr,size_t n,FILE *fp)【位置】stdio.h
【说明】每次读入n个条目的字节大小。返回实际读入的条目数(而不是字节数)。
Turbo C函数
【参见】fopen,fwrite freopen 【功能】将一个新文件和某个打开的流相关联。
【原型】FILE *freopen(const char *filename,const char *mode,FILE *stream)【位置】stdio.h
【说明】首先关闭流。然后打开使用路径命名的文件,并且将其与流相关联。成功则返回流,失败返回NULL。【参见】fopen fscanf 【功能】从某个流执行格式化输入。
【原型】int fscanf(FILE *fp,const char *format,…)【位置】stdio.h
【说明】返回成功扫描、转换并且保存的输入字段数目,返回值中不包括没有保存的扫描字段。【参见】getc,fprintf,scanf fseek 【功能】定位某个流的文件指针。
【原型】int fseek(FILE *fp,long offset,int whence)【位置】stdio.h
【说明】offset表示与whence指定位置相对应的新位置。成功返回0,时白则返回非0值。【参见】ftell,fopen,lseek,rewind fsetpos 【功能】定位某个流的文件指针。
【原型】int fsetpos(FILE *fp,const fpos_t *pos)【位置】stdio.h
【说明】pos指向的新位置是通过上一次调用fgetpos得到的数值。成功返回0,时白返回一个非0值。
【参见】feek,fgetpos,ftell ftell 【功能】返回当前文件指针。【原型】long ftell(FILE *fp)【位置】stdio.h
【说明】成功则返回当前的文件指针位置,出现错误则返回-1L。【参见】tell,fseek,fgetpos,fsetpos fwrite 【功能】写入某个流。
【原型】size_t fwrite(const void *ptr,xiae_t n,FILE *fp)【位置】stdio.h
【说明】每次写入n个条目大小的字节,返回实际写入的条目数(而不是字节数)。【参见】fopen,fread getc 【功能】从某个流中得到一个字符。【原型】int get(FILE *fp)【位置】stdio.h
【说明】返回读入的字符。如果遇到文件尾或者出现错误,则返回EOF。【参见】fgets,fscanf,fopen,getch,getw,fread,putc,vfscanf,getchar getchar
Turbo C函数
【功能】从stdin得到字符。【原型】int getchar(void)【位置】stdio.h
【说明】成功则getchar将读入的字符转换为不加符号的int并返回。如果遇到文件结尾或者出现错误,则返回EOF。
【参见】getc,fgetchar,ungetc,scanf,putchar,getch,vscanf,getc gets 【功能】从stdin得到一个字符串。【原型】*getc(char *string)【位置】stdio.h
【说明】从stdin收集输入内容,知道发现换行符(n)为止。n不放在string中。返回一个指针,指向参数string
【参见】ferror,fopen,fread,getc,putc,scanf getw 【功能】从流中得到整数。【原型】int getw(FILE *fp)【位置】stdio.h
【说明】返回输入流中的下一个整数,如果遇到文件结尾或者出现错误则返回EOF。使用feof或者ferror校验是否遇到文件结尾或者出现错误。【参见】putw perror 【功能】系统错误消息。
【原型】void perror(const char *s)【位置】stdio.h
【说明】向stderr打印一条错误消息。首先打印参数字符串,然后打印一个冒号,然后是与当前errno数值相对应的错误消息,最后打印换行符。【参见】strerror printf 【功能】向stdout发送格式化输出。
【原型】int printf(const char *format,…)【位置】stdio.h
【说明】按照format的要求格式化数目不定的参数,然后将输出结果发送到stdout。该函数返回输出字节数,如果出现错误则返回EOF。
【参见】ecvt,puts,fprintf,scanf,putc,vptintf putc 【功能】向某个流输出一个字符。【原型】int putc(int ch,FILE *fp)【位置】stdio.h
【说明】成功则putc返回字符ch,错误则返回EOF。
【参见】fputs,fputc,fwrite,fputchar,putchar,putw,frintf,vfprintf,getc,putch putchar 【功能】向stdout输出字符。【原型】int putchar(int ch)【位置】stdio.h
【说明】成功则返回字符ch,错误则返回EOF。
【参见】puts,putw,fputchar,putc,printf,vprintf,getchar,putch 44
Turbo C函数
puts 【功能】向stdout输出一个字符串(并且添加一个换行符)。【原型】int puts(const char *s)【位置】stdio.h
【说明】成功完成之后,puts返回写入的最后一个字符;否则返回EOF。【参见】putchar,gets,fputs,cputs putw 【功能】向某个流输出一个整数。【原型】int putw(int w,FILE *fp)【位置】stdio.h
【说明】返回整数w。【参见】printf,getw remove(filename)【功能】删除一个文件,该宏翻译了对unlink的调用。【原型】int remove(filename)【位置】stdio.h 【参见】unlink rename 【功能】重命名一个文件。
【原型】int rename(const char *oldname,const char *newname)【位置】stdio.h
【说明】成功重命名文件之后,rename返回0。出现错误则返回-1,并且设置errno。rewind 【功能】重新将文件指针定位在流的开始位置。【原型】void rewind(FILE *fp)【位置】stdio.h
【参见】fseek,fopen scanf 【功能】执行从stdin的格式化输入。
【原型】int scanf(congst char *format,…)【位置】stdio.h
【说明】返回成功处理的输入字段数目。要求按照format的要求处理输入,并且将结果放在参数指向的内存位置中。
【参见】atof,getc,vfscanf,cscanf,printf,vscanf,fscanf,sscanf,vsscanf setbuf 【功能】为某个流分配缓存。
【原型】void setbuf(FILE *fp,char *buf)【位置】stdio.h
【说明】如果buf为NULL,则无法缓存I/O,否则就可以缓存。缓存区的大小为BUFSIZ字节长。【参见】fopen,setvbuf setvbuf 【功能】为某个流分配缓存。
【原型】setvbuf(FILE *fp,char *buf,int type,size_t size)【位置】stdio.h
【说明】size表示以字节为单位的缓存区大小。使用setvbuf可以为流分配一个较大的缓存区。成功返回0,否则返回一个非0值。
Turbo C函数
【参见】fopen,setbuf sprintf 【功能】向某个字符串发送格式化输出。
【原型】int sprinf(char *buffer,const char *format,…)【位置】stdio.h
【说明】返回输出的字节数。出现错误时,返回EOF。【参见】printf,fprintf sscanf 【功能】从某个字符串执行格式化输入。
【原型】int sscnaf(const char *buffer,const char *format,…)【位置】stdio.h 【说明】返回成功扫描、转换并保存的输入字段数目。如果sscanf试图读入的位置超过缓存区范围,则返回值为EOF。
【参见】scanf,fscanf _strerror 【功能】构件一条自定义的错误消息字符串。【原型】*_strerror(const char *s)【位置】stdio.h
【说明】错误消息由s、一个冒号、一个空格、最近生成的系统错误消息及一个换行符构成。S应当小于等于94个字符。返回一个指针,指向错误消息字符串。【参见】strerror strerror 【功能】返回指向错误消息字符串的指针。【原型】char *strerror(int errnum)【位置】stdio.h
【说明】返回一个指针,指向与errnum相关联的错误消息。【参见】_streeeoe,perror tmpfile 【功能】以二进制模式打开一个scratch文件。【原型】FILE *tmpfile(void)【位置】stdio.h
【说明】返回一个指针,指向临时文件创建的流。如果无法创建文件,则tmpfile返回NULL。【参见】fopen,tmpnam tmpnam 【功能】创建一个为一个文件名称。【原型】char *tmpnam(char *sptr)【位置】stdio.h
【说明】如果sptr为NULL,则tmpnam返回一个指针,指向一个内部的静态对象。否则tmpnam返回sptr。
【参见】tmpfile ungetc 【功能】将一个字符退回输入流。【原型】int ungetc(int c,FILE *fp)【位置】stdio.h
【说明】下一次对流fp调用getc(或者其他的流输入函数)时将返回c。如果执行成功,则ungetc返回退回的字符。如果操作失败则返回EOF。
Turbo C函数
【参见】getc unlink 【功能】删除一个文件。
【原型】int unlink(const char *filename)【位置】stdio.h,dos.h,io.h
【说明】如果filename指定的文件属性为只读,则unlink操作失败。首先需要调用chomd函数改变文件属性。
成功返回0,错误返回-1。【参见】chmod,remove vfprintf 【功能】使用参数列表向某个流发送格式化输出。
【原型】int vfprintf(FILE *fp,const char *format,va_list arglist)【位置】stdio.h
【说明】返回输出的字节数,如果出现错误则返回EOF。【参见】printf vfscanf 【功能】用参数列表向某个流发送格式化输入。
【原型】int vfscanf(FILE *fp,const char *format,va_list arglist)【位置】stdio.h
【说明】返回成功扫描、转换并保存的输入字段数。【参见】scanf vprintf 【功能】用参数列表从stdin执行格式化输出。
【原型】int vprintf(const char *format,va_list,arglist)【位置】stdio.h
【说明】返回输出的字节数,如果出现错误则返回EOF。【参见】printf vscanf 【功能】使用参数列表从stdin执行格式化输入。
【原型】int vscanf(const char *format,va_list arglist)【位置】stdio.h
【说明】返回成功扫描、转换并保存的输入字段数,遇到文件结尾则返回EOF。【参见】scanf vsprintf 【功能】使用参数列表向一个字符串发送格式化输入。
【原型】vsprintf(char *buffer,const char *format,va_list arglist)【位置】stdio.h
【说明】返回输出的字结束。如果出现错误则返回EOF。【参见】printf vsscanf 【功能】使用参数列表从一个字符串执行格式化输入。
【原型】int vsscanf(const char *buffer,const char *format,va_list arglist)【位置】stdio.h
【说明】返回成功扫描、转换并保存的输入字段数,如果遇到文件结尾则返回EOF。【参见】scanf,sscanf,vfscanf
STDLIB.H
Turbo C函数
abort 【功能】异常终止某个进程。【原型】void abort(void)【位置】stdlib.h,process.h 【参见】atexit,assert,exit abs 【功能】得到一个整数的绝对值,abs(x)中的x表示一个int值。【原型】int abs(int x)【位置】math.h,stdlib.h atexit 【功能】寄存器终止函数。
【原型】int atexit(atexit_t func)【位置】stdlib.h
【说明】成功返回0,失败返回非0值。【参见】exit,abort atof 【功能】将一个字符串转换成符点数。【原型】double atof(const char *s)【位置】math.h,stdlib.h
【说明】返回s经过转换之后的值,如果s不能转换则返回0。【参见】atoi,atol,ecvt,fcvt,sscanf,strtod atoi 【功能】将一个字符串转换为一个短整数。【原型】int atoi(const char 8s)【位置】stdlib.h
【说明】返回输入字符串转换后的值。如果字符串无法转换,则返回值为0。【参见】atof,atol,ecvt,sscanf,strtod atol 【功能】将一个字符串转换为一个长整数。【原型】int atol(const char *s)【位置】stdlib
【说明】返回输入字符串转换后的值。如果字符串无法转换,则返回值为0。【参见】atof,atoi,ecvt,fcvt,sscanf,strtod bsearch 【功能】两分法查找。
【原型】*bsearch(const void key,const void base,size_t width,int(fcmp)(const void,const void*))
【位置】stdlib.h 【说明】返回表中的一个符合查找关键字的条目的值。如果没有找到匹配条目,则返回0。在bsearch中,如果*elem1小于*elem2则*fcmp的返回值小于0,如果*elem1等于*elem2则返回值等于0,如果*elem1大于*elem2则返回值大于0。表必须按照升序排列。【参见】lsearch,qsort calloc 【功能】分配主存。
【原型】void *calloc(size_t nelem,size_t elsize)【位置】stdlib.h,alloc.h
Turbo C函数
【说明】为nelem数据项的每elsize个字节分别分配空间,同时在空间中保存0值。返回一个指向新分配块的指针,如果没有足够的空间则返回NULL。【参见】malloc div 【功能】两个整数相除。
【原型】div_t div(int number,int denom)【位置】stdlib.h
【说明】每个函数都返回一个结构,其中的元素由quot(商)和rem(余数)组成。Div的元素为整型。ecvt 【功能】将一个符点数转换为字符串。
【原型】char *ecvt(double value,int ndig,int *dec,int *sign)【位置】stdlib.h exit 【功能】终止程序。
【原型】void exit(int status)【位置】stdlib.h,process.h
【说明】终止程序之前,清空输出缓存,关闭文件,并且退出调用的函数。【参见】abort,atext,_exit fcvt 【功能】将一个符点数转换为字符串。
【原型】char *fcvt(double value,int ndig,int *dec,int *sign)【位置】stdlib.h free 【功能】释放通过malloc或者calloc分配的数据块。【原型】void free(void *block)【位置】stdlib.h,alloc.h
【参见】malloc,calloc,freemem gcvt 【功能】将一个符点数转换为字符串。
【原型】char *gcvt(double value,int ndig,char *buf)【位置】stdlib.h 【说明】返回buf 【参见】ecvt,fcvt gerenv 【功能】从环境变量中得到字符串。
【原型】char *getenv(const char *name)【位置】stdlib.h
【说明】成功返回一个指针,指向与name相关的数值;如果name环境中没有定义,则返回NULL。【参见】putenv,envirir itoa 【功能】将一个整数转换为字符串。
【原型】char *itoa(int value,char *string,int radix)【位置】stdlib.h
【说明】返回一个指针,指向目的字符串。【参见】ltoa labs
Turbo C函数
【功能】求长整数的绝对值。【原型】long labs(long x)【位置】math.h,stdlib.h 【参见】abs,cabs ldiv 【功能】两个长整数相除。
【原型】ldiv_t ldiv(long lnumber,long ldenom)【位置】stdlib.h
【说明】每个函数都返回一个结构,其中的元素由quot(商)和rem(余数)组成。Ldiv的元素为长整型。lfind 【功能】执行线性查找。
【原型】void *lfind(const void *key,const void *base,size_t *pnelem,size_t width, int(*fcmp)(const void*,const void*))【位置】stdlib.h
【说明】该函数使用一个用户自定义的程序(fcmp),在顺序记录的数组中查找key值。
数组中一共有pnelem个记录,每个的宽度为width字节,并且从base指向的内存位置开始。返回表中与查找关键字匹配的第1个条目的地址。如果没有找到匹配条目,则lsearch将其添加到列表结尾。如果*elem1等于*elem2则*fcmp程序必须返回0,否则返回非0。【参见】basearch,qsort _lrotl 【功能】将一个长整数向右循环。
【原型】_lrotl(unsigned long val,int count)【位置】stdlib.h
【说明】函数返回val循环count位后的数值。【参见】_rotl _lrotr 【功能】将一个长整数向左循环。
【原型】_lrotr(unsigned long val,int count)【位置】stdlib.h
【说明】函数返回val循环count位后的数值。【参见】_rolt lsearch 【功能】执行线性查找。
【原型】void *lsearch(const void *key,void *base,size_t *pnelem,size_t width,int(*fcmp)(const void*,const void*))【位置】stdlib.h
【说明】该函数使用一个用户自定义的程序(fcmp),在顺序记录的数组中查找key值。数组中一共有pnelem个记录,每个的宽度为width字节,并且从base指向的内存位置开始。
返回表中与查找关键字匹配的第1个条目的地址。如果没有找到匹配条目,则lsearch将其添加到列表结尾。如果*elem1等于*elem2则*fcmp程序必须返回0,否则返回非0。【参见】bsearch,qsort ltoa 【功能】将一个长整数转换成一个字符串。
C语言函数说明与返回值 第3篇
关键词:C语言;函数说明;返回值
函数的一般形式是:type-specifier function_name(parameter list)parameter declarations{body of the function}类型说明符定义了函数中return语句返回值的类型,该返回值可以是任何有效类型。如果没有类型说明符出现,函数返回一个整型值。参数表是一个用逗号分隔的变量表,当函数被调用时这些变量接收调用参数的值。一个函数可以没有参数,这时函数表是空的。但即使没有参数,括号仍然是必须要有的。参数说明段定义了其中参数的类型。当一个函数没有明确说明类型时,C语言的编译程序自动将整型(int)作为这个函数的缺省类型,缺省类型适用于很大一部分函数。当有必要返回其它类型数据时,需要分两步处理:首先,必须给函数以明确的类型说明符;其次,函数类型的说明必须处于对它的首次调用之前。只有这样,C编译程序才能为返回非整型的值的函数生成正确代码。
一、函数的类型说明可将函数说明为返回任何一种合法的C语言数据类型
类型说明符告诉编译程序它返回什么类型的数据。这个信息对于程序能否正确运行关系极大,因为不同的数据有不同的长度和内部表示。返回非整型数据的函数被使用之前,必须把它的类型向程序的其余部分说明。若不这样做,C语言的编译程序就认为函数是返回整型数据的函数,调用点又在函数类型说明之前,编译程序就会对调用生成错误代码。为了防止上述问题的出现,必须使用一个特别的说明语句,通知编译程序这个函数返回什么值。下例示出了这种方法。
第一个函数的类型说明sum()函数返回浮点类型的数据。这个说明使编译程序能够对sum()的调用产生正确代码。函数类型说明语句的一般形式是:type_specifier function_name(;)即使函数使用形参,也不要将其写入说明句。若未使用类型说明语句,函数返回的数据类型可能与调用者所要求的不一致,其結果是难以预料的。如果两者同处于一个文件中,编译程序可以发现该错误并停止编译。如果不在同一个文件中,编译程序无法发现这种错误。类型检查仅在编译中进行,链接和运行时均不检查。因此,必须十分细心以确保绝不发生上述错误。当被说明为整型的函数返回字符时,这个字符值被转换为整数。因为C语言以不加说明的方式进行字符型与整型之间的数据转换,因而多数情况下,返回字符值的函数并不是说明为返回字符值,而是由函数的这种字符型向整型的缺省类型转换隐含实现的。
二、返回语句
返回语句return有两个重要用途。第一,它使得内含它的那个函数立即退出,也就是使程序返回到调用语句处继续进行。第二,它可以用来回送一个数值。本章将说明这两个用途。
(一)从函数返回函数可以用两种方法停止运行并返回到调用程序
第一种是在执行完函数的最后一个语句之后,从概念上讲,是遇到了函数的结束符“}”(当然这个花括号实际上并不会出现在目标码中,但我们可以这样理解)。例如,下面的函数在屏幕上显示一个字符串。
一旦字串显示完毕,函数就没事可做了,这时它返回到被调用处。在实际情况中,没有多少函数是以这种缺省方式终止运行的。因为有时必须送回一个值,大多数函数用return语句终止运行,有时在函数中设立了多个终止点以简化函数、提高效率。切记,一个函数可以有多个返回语句。如下所示,函数在s1、s2相等时返回1,不相等时返回-1。
(二)返回值所有的函数
除了空值类型外,都返回一个数值。该数值由返回语句确定。无返回语句时,返回值是0。这就意味着,只要函数没有被说明为空值,它就可以用在任何有效的C语言表达式中作为操作数。这样下面的表达式都是合法的C语言表达式。x=power(y);if(max(x,y)>100)printf(“greater;”)for(ch=getchar();isdigit(ch);)...;可是,函数不能作为赋值对象,下列语句是错误的:swap(x,y)=100;C编译程序将认为这个语句是错误的,而且对含有这种错误语句的程序不予编译。所有非空值的函数都会返回一个值。我们编写的程序中大部分函数属于三种类型。第一种类型是简单计算型-函数设计成对变量进行运算,并且返回计算值。计算型函数实际上是一个“纯”函数,例如sqr()和sin()。第二类函数处理信息,并且返回一个值,仅以此表示处理的成功或失败。例如write(),用于向磁盘文件写信息。如果写操作成功了,write()返回写入的字节数,当函数返回-1时,标志写操作失败。最后一类函数没有明确的返回值。实际上这类函数是严格的过程型函数,不产生值。如果读者用的是符合ANSI建议标准的C编译程序,那么所有这一类函数应当被说明为空值类型。奇怪的是,那些并不产生令人感兴趣的结果的函数却无论如何也要返回某些东西。例如printf( )返回被写字符的个数。然而,很难找出一个真正检查这个返回值的程序。因此,虽然除了空值函数以外的所有函数都返回一个值,我们却不必非得去使用这个返回值。有关函数返回值的一个常见问题是:既然这个值是被返回的,我是不是必须把它赋给某个变量?回答是:不必。如果没有用它赋值,那它就被丢弃了。请看下面的程序,它使用了mul( )函数。mul( )函数定义为:int mul(int x, int y){......}
浅议C语言中函数递归调用的教学 第4篇
关键词:函数,递归调用,教学
在C语言的教学中, 函数的递归调用是教学的重点与难点。初学者对于递归调用, 往往容易陷入一个误区, 他们脑子里总是在想递归是如何实现的, 函数是如何被调用的, 又由于其调用过程太复杂而理不清头绪, 其实这给第一次接触递归调用带来了不必要的麻烦。笔者根据多年的教学经验, 整理出几个有关的知识点, 只要明白这些问题, 函数递归调用的教学与学习将迎刃而解。
一、递归条件
采用递归方法来解决问题, 必须符合以下三个条件:
1、能把要需要解决的问题转化为一个新问题, 新问题的解决方法与原来的解决方法相同, 只是所处理的对象有规律地递增或递减。
说明:解决问题的方法相同, 调用函数的参数每次不同 (有规律的递增或递减) , 如果没有规律也就不能适用递归调用。
2、用这个转化过程使问题能得到解决。
3、必定要有一个明确的结束递归的条件。
说明:一定要能够在适当的地方结束递归调用。不然可能导致系统崩溃。
二、递归函数的执行过程
递归的函数过程———执行到函数体中间再回归到自身开头的位置, 再进行。可以借助栈来解释其执行过程, 下面用求阶乘的例子来说明:
假设这里执行Factorial (4) , 那么程序会按照下面方式来执行:
1、执行Factorial (4) 判断n>1执行Factorial (3) , 并且将Fac-torial (4) 函数相关信息存入一个栈.
2、执行Factorial (3) 判断n>1执行Factorial (2) , 并且将Fac-torial (3) 函数相关信息存入一个栈.
3、执行Factorial (2) 判断n>1执行Factorial (1) , 并且将Fac-torial (2) 函数相关信息存入一个栈.
4、执行Factorial (1) 判断n==1执行返回1;
5、将Factorial (2) 函数从栈中取出, 执行2*1, 并且返回2.
6、将Factorial (3) 函数从栈中取出, 执行2*3, 并且返回6.
7、将Factorial (4) 函数从栈中取出, 执行6*4, 并且返回24.
如下图所示:
三、递归函数的参数
当函数自己调用自己时, 系统自动把函数中当前的变量和形参暂时保留起来, 在新一轮的调用过程中, 系统为新调用的函数所用到的变量和形参开辟另外的存储单元 (内存空间) 。每次调用函数所使用的变量在不同的内存空间。即系统每次调用该函数使用的函数参数不同, 且保存在不同的存储空间。如上例, 第一次调用时函数参数为4, 以后依次减1。
四、递归转非递归
任何“递归函数”都可以通过程序员自己控制系统转为“非递归程序”实现。一般采用循环方法实现:循环方法是所有递归到非递归的转换中最理想的方法, 可以将开销减少到最小。
不过分析起来很复杂, 对于简单的递归可以用这样的方法来处理.
例如:求Fibonaccio数列问题
首先用递归形式表示如下:
转为非递归函数分析如下:
这里回到Fibonaccio数列定义上面来分析, 这里将第n项的值的数学公式分析为n=1或者n=2时值为1, 当n>2时第n项则为第n-1和n-2的数据之和。
这样就可以很容易得到另外一个定义:
求Fibonaccio数列第n项的值则表示执行n-2次循环计算一个增量f, 初始i=3和结果f=0;每次f值为前两项数值的和。
因为函数递归时需要不断的在内存中保存/恢复现场, 这将大大增加系统的开销, 所以在选择递归结构进行程序设计时, 要考虑到“可理解性和效率”之间的关系。
只要讲清楚以上四个知识点, 函数的递归调用教学就不再困难, 学生学习也容易理解了, 而且扩展了学生的学习思路, 增加了学生学习C语言的兴趣, 可以达到较好的教学效果。
参考文献
[1]《C程序设计》 (第二版) 谭浩强主编清华大学出版社。
学通C语言:函数型指针 第5篇
int func(const int a, const int b);
那么,此时声明的函数变量add的地址即为这个函数的地址,同时,add的值保存为这个函数的地址,这个特性与数组相似:数组变量与数组变量的地址均为数组的起始地址。而在这个函数声明中,函数类型为int (const int a, const int b)。使用该函数类型来定义一个函数型指针,其方式如下:
int (* fp)(const int a, const int b); /* 其中,参数列表的参数名a和b可省 */
上述语句将变量func定义为指向类型为int (const int a, const int b)的指针操作符和变量名两侧的小括号不可省,否则其含义大不相同。例如:
int * fp(const int a, const int b);
此时,指针操作符与数据类型int结合为int型指针类型,该语句只是声明了一个fp函数,而非定义一个函数指针。为该函数型指针赋值的方式如下:
fp = func;
被赋值的函数变量的类型必须与fp的类型完全一致,包括其返回类型和每一个形参的类型。否则程序将报错。
注意:函数型指针变量赋值时,左值与右值的类型必须完全一致。
使用函数型指针变量调用函数的方法与使用函数变量类似,得到函数地址后再带上参数列表即可。可以使用下面两种方式来调用函数:
fp(5, 6);
或
(*fp)(5, 6);
由于fp被赋值为函数变量func的地址,而func的值又等于其地址,所以*fp可以得到func函数的地址。因此,在调用方式上,可以粗略地将两者视为一致(实际上其后台的处理略有不同)。范例14-7演示了如何使用函数型指针来调用函数。
【范例14-7】使用函数型指针来调用函数,实现方法如示例代码14-7所示。
示例代码14-7
01 #include
02
03 int add(const int a, const int b) { /* 定义add函数 */
04 return a + b;
05 }
06
07 int main(void) {
08 int (*fp) (const int a, const int b); /* 定义函数指针 */
09
10 fp = add; /* 将其赋值为add */
11 printf(“3 + 4 = %d”, fp(3, 4)); /* 使用fp计算+ 4的值 */
12 printf(“3 + 4 = %d”, (*fp)(3, 4)); /* 使用*fp计算+ 4的值 */
13
14 printf(“%p”, add); /* 输出add的值 */
15 printf(“%p”, &add); /* 输出add的地址 */
16 printf(“%p”, fp); /* 输出fp的值 */
17 printf(“%p”, *fp); /* 输出fp指向的值 */
18
19 return 0;
20 }
【运行结果】程序运行后,
【代码解析】本程序定义了一个函数指针,并将其赋值为相应类型的函数变量add。
第11~12行分别使用fp和*fp的方式调用函数,从图14-12的第1~2行中可以看到它们的调用结果是一样的。
第14~17行输出了add的值和地址、fp的值和指向的值,从图14-12的第3~6行中可以看到它们的调用结果都是一样的。
C语言教学中存在问题 第6篇
C语言课程的地位
C语言是最重要和最流行的编程语言之一,无论在中国还是在世界各国,“C语言程序设计”始终是高等院校的一门最基本的计算机类基础课程。虽然在过去的十余年中,许多人从C转而使用更强大的C++语言,但C仍然有其自身的优势,而且它还是通往C++的必由之路。
作为面向过程的程序设计语言的代表,C语言是一门非常好的教学语言。通过学习C语言,学生可以掌握自顶向下、逐步细化的结构化编程方式,以及模块化的设计,这一点是至关重要的。可以毫不夸张地说,学不好C语言课程,也就难以学习理解后续的“面向对象程序设计”、“数据结构”等一系列计算机类相关课程的内容。因此,理工科相关专业学生必须掌握使用C语言进行程序设计的基本知识和技能,为进一步学习与应用计算机打下坚实的基础。
教学中的存在问题及探讨
在C语言教学过程中,学生普遍认为C语言概念复杂、语法细节繁琐,解题常常没有思路,一上机写程序就出错,出错了也不知问题所在。结合近几年的教学经验,笔者归纳出当前C语言教学中存在如下几个方面的问题。
课程设置缺乏科学性。C语言课程主要包括顺序、选择、循环结构程序设计,数组、指针、结构体等数据类型,函数的调用,以及文件操作等内容。总的来说,内容相对繁多,细节较为繁琐。且对于初学者来说,数组、指针类型的使用等内容概念复杂(尤其是指针),理解比较困难。笔者认为,合理的课时安排应为64学时。在实际情况中,考虑到C语言课程作为计算机类课程的主要先修课程,往往设置在本科一年级。而同时进行的还有数学、英语等重要的基础课程,也需要占据大量的课时。所以,对于本科一年级学生的教学计划和课时安排往往是非常紧凑的,部分高校对于C语言课程的设置仅为48学时。由于理论学时和上机学时不充足,教学效果自然也就难以得到保障。
如何在学时不足的情况下达到教学目的,这就要求教师改进教学方法,运用现代化的教学手段。注重自身业务素质的提高,切实提高教学效率和教学质量。教师应充分备课并明确教学重点及教学难点,在课堂上主要介绍编程思路和怎样用c语言去实现算法,不要孤立地逐一介绍语法的细节,对于一些非教学重点内容(诸如运算符的优先级等知识点),应引导学生自学完成。因此,有必要对授课计划精心组织,本着强化算法、弱化语言的原则,即把解题思路、方法、步骤当做授课的重点,培养学生分析与解决实际问题的能力。
学生的算法设计能力薄弱。编写一个C程序,首先需要设计算法,然后再考虑适合的数据结构,并用C语言将算法实现。程序的灵魂是算法,而算法的设计是灵活且富有技巧的,需要学生主动思考,这对于初学C语言的学生来说极具挑战。
教学过程中,应改变传统灌输式教学模式,转而采用问题启发式教学,活跃学生思维,引导学生积极思考,而不是被动地接受和理解课本中的算法步骤。应遵循以下四个步骤来解决问题:一是分析问题,明确要做什么;二是给出求解问题的算法流程图;三是根据流程图编写程序代码,四是运行程序,输出最终结果。值得注意的是,流程图对于算法的分析与表示至关重要,教学中必须要求学生看得懂流程图、会画流程图,并且根据流程图能够顺畅地写出程序代码。对于递推、递归、穷举等基本方法,及常用的查找、排序等算法,应让学生有所了解并适当记忆。
学生的上机编程水平亟待提高。学生的上机编程能力普遍不能令人满意,遇到编写程序(尤其是规模稍大一些的程序),往往无从下手。一些学生学习完C语言课程,仍然停留在只会照抄或记忆课本中程序的水平,抑或自己写的寥寥几行代码,根本不考虑编程规范,编译报错看不懂英文提示信息,运行出错也不懂得如何打断点调试程序。这样的情形是非常常见的。
教师在给学生讲解示例程序时,应重点指出关键之处,以及容易出错的地方,要求学生通过自己上机实践来理解程序设计方法。对于常见的编译时错误,可以做一次归纳讲解,但应注意培养学生根据错误提示信息独立分析错误的能力;对于运行时错误,教师应演示并详细讲如何打断点、跳断点、单步执行等常用的调试步骤,必须要求学生掌握程序的调试方法。殊不知,编程水平就是在不断的调试程序、修改错误的过程中潜移默化地不断提高。
此外,笔者由于在从教前具有多年的软件开发从业经验,深知养成良好的编程习惯的重要性。平时应多提醒学生注意变量命名、程序缩进与对齐、添加必要的注释等问题,对于学生今后从事软件开发行业是必须的准备工作。
应该说,提高上机能力也终究还是一个孰能生巧的过程,大量的编程实践是根本。应强调学生多写程序(争取每天编程一小时),并鼓励学生自己写程序,从最简单的程序开始,从而循序渐进,积小胜为大胜。遇到复杂问题应逐步细化,采用模块化设计方法,通过编写函数来解决问题。
C语言函数教学 第7篇
1 C 语言中函数参数相关概念
C语言中,在编程定义函数时,紧跟函数名后面的括号里面的变量名是形式函数 ;主调函数调用一个函数时,紧跟函数名后面的括号里面的参数是实际参数。C语言中,函数进行调用时,主调函数和北调函数之间的数据的传递是通过参数传递实现的。也就是说,形式函数在函数的定义中出现,而实际参数主调函数的函数调用中出现,主调函数通过函数调用,使实际参数中的数据被传递到被调函数的形式参数,这样就完成了函数间的数据传递。
2 简析形式函数和实际参数之特点
1)C语言中,形式参数在函数定义中被调用时,才占用内存单元,一旦调用结束,将立刻释放内存,不占用任何存储资源。因而,只有存在于函数内部,形式参数才是有效的,反之,则无任何实际意义。此外,函数调用结束,返回主调函数后,不可再利用这个形式参数变量。
2) 一般而言,C语言中,实际参数可以是常量,可以是变量,可以是表达式,也可以是函数等,可见其并不是一个指定的量,但是,无论实际参数是哪种形式的量,在函数调用时,实际参数都一定要有确定的值,这样才能够将这些值传递给形式参数。
3)C语言中,有一点一定要注意,那就是,实际参数和形式参数无论在数量上、类型上还是顺序上都必须是严格一致的,不然就会导致类型不匹配的错误的出现,从而使参数传递失败。
4)C语言中,一定要知道,实际参数和形式参数变量之间的数据传递是单向的,并不可逆转,即,数据只可由实际参数传递给形式函数,却不能由形式参数传回给实际参数。
3 C 语言中几种函数参数传递形式
3.1 函数参数——变量
C语言中,当使用变量作为函数参数,数据的传递就一定是单向性,不可逆转的,形式参数的变化不可以返还给实际参数,这种函数参数的传递方式是“值传送”方式。以下以一例样例作为说明,分析当函数参数为变量时,发生在实际参数和形式参数之间的参数传递情形。
在以上例子中,实际参数把值传递给形式参数,形式参数值产生交换后的值不可交还给主调函数,所以,主调函数中的数值没变。
3.2 函数参数——指针
C语言中,当指针作为函数参数时,实质上指针是由实际参数传递给形式参数的,传递的是地址,此时,形式参数和实际参数均指向同一个内存单元,形式参数发生了变化,同样地,实际参数也随着发生了变化,这样的函数参数之间的数据传递,可以被认为是一种“双向”的传递。下面仍然以一例样例作为说明,分析当函数参数为指针时,发生在实际参数和形式参数之间的参数传递情形。
3.3 函数参数——数组
前面提到,C语言中,是实际函数可以是多种形式的量,因而数组元素也可作为函数参数出现,用法和变量是同样的。数组名可同时作为实际参数和形式参数,传递的是整个数组。
3.3.1 数组元素作为实际参数出现
数组元素作为实际参数出现,也是一种“值传送”方式。下面以一实例说明 :
3.3.2 数组名作为函数参数出现
运用数组名作为函数参数,这时,实际参数和形式参数都运用数组名,同时需要分别定义主调函数和北调函数中的数组。同时需注意,实际参数数组和形式参数数组声明的类型必须是一样的,反之,就会有错误出现。下面,以一实例作为说明 :
4 总结
以上为笔者基于C语言教学中函数参数传递问题的分析,旨在梳理出教学重难点,帮助学生更好地掌握知识,运用知识。文中诸多不足,还需努力在实践中不断修正,欢迎批评指正。
摘要:C语言中的函数参数传递问题是教学的重难点,本文首先介绍了C语言函数参数相关概念及其特点,并配以实例,对函数参数的传递形式进行了分析。
C语言函数教学 第8篇
a和b是在main函数中定义的变量, x和y是函数max中的形式参数。通过函数调用, 使两个函数中的数据发生联系, 见下图:
{教师提问: (1) 什么是形式参数? (2) 什么是实在参数?学生思考, 并总结回答}
一、形式参数和实在参数
{教师在学生回答的基础上进行总结:}
1.形式参数:是出现在函数定义时函数名 (参数名) 的参数名。比如上例中的x, y.
说明: (1) 未出现函数调用时他们并不占内存中的存储单元。
(2) 只有在发生函数调用时, 函数max中的形参才被分配内存单元。
(3) 在函数调用结束后, 形参所占的内存单元也被释放。
(4) 在被定义的函数中必须指定形参的类型
2.实在参数:调用函数时传递给函数的常量、变量和表达式。
例如:max (3, a+b) ;
注意:实参与形参的类型应相同或者赋值兼容。字符型与整形可以互相通用。
二、值传递
值传递:c语言中, 实参向形参的数据传递是“值传递”, 即单向传递, 只由实参传递给形参, 而不能有形参传递给实参。
说明:在内存中, 形参和实参占用不同的存储单元, 形参值的变化不会影响实在参数的值。
例7.12阅读程序, 写出结果
(提问:让学生找出实在参数和形式参数, 上机调试程序运行结果, 教师总结)
分析:1.在本例题中语句“test (x+3) ”中的x+3为实参, a为形式参数, 它们之间的参数传递采用的是值传递。
2.值传递的特点是形式参数和实在参数占用不同的存储单元, 形式参数值的变化不会影响实在参数的值。
二、地址传递 (教师讲解, 多媒体展示)
地址传递:调用函数传递参数时, 实参是数组名, 此时形参应当用数组名或用指针变量。
说明: (1) 把实参数组的首元素地址传递给形参数组, 两个数组共占同一段内存单元。
(2) 形参数组中各元素的值发生变化会使实参数组元素的值发生变化。
在整个的教学函数中通过任务驱动教学法和分组教学法相结合。通过任务驱动使学生在教师的指导下根据已有的知识经验, 解决问题, 完成任务;在完成任务的函数中学会学习。通过分组使学生人人参与, 鼓励提出不同的见解, 是教学方式变成更为生动、活泼的全员探究合作教学。通过最后评价, 培养学生的集体荣誉感。教师是整个教学活动的调节与组织者, 加强课堂或阶段小结以及知识点的交流或回顾, 使得学习能力差的同学或操作有疏漏的同学能通过教师的总结和回顾, 跟上教学进度, 全面掌握知识点, 达到教学目标, 促进同步发展。
C语言函数教学 第9篇
关键词:C语言,有效教学,递归函数
一、有效教学的解读
有效教学(Effective teaching)是20世纪上半叶由西方学者首先提出的,用科学方法来研究教学问题的思想,它的核心思想就是教学的效益。所谓“有效”就是教师在一段时间的教学后,学生所获得的具体进步或发展。教学有没有效益,并不是指教师有没有完成教学内容,而是指学生有没有学到什么或学生学得好不好。这种教学思想让我们体会到:第一,“学生学得如何?”是有效教学的核心思想,充分体现生本思想,是我们教学的目的和意义。第二,“如何才能学得更好?”面对中职学生逻辑思维薄弱,学习习惯不是很好的学习群体,我们需恰当选择教学方法对症下药。可以多途径地准备资料,激发兴趣,尝试将抽象概念形象化,有助于形象思维较好的中职学生理解。
二、有效教学的实施
“教无定法,贵在得法”,有效教学是目的但教法不唯一,本文以“递归函数”为例,谈谈我的有效教学实践。递归函数是函数里的典型算法,为了深刻理解算法特点采用如下教法。
1.情境法———故事引趣,生动形象。PPT展示童年耳熟能详的童年故事《从前有座山》导入本课,分析故事寻找特点。改编故事,老和尚每讲一次故事小和尚的年纪小一岁,创设递归关系,本案例从故事导入再到改编故事,从熟悉的故事中体会到嵌套特点,从改编故事中寻找到算法关键点,为接下来的算法讲解奠定基础。
2.问答法———巧设问题,层层引导。教师是主导学生是主体,我们使用“产婆术”式的问答法,帮助学生理清思路抓住关键点,培养逻辑思维能力。
PPT展示《从前有座山》:这是什么故事?这个故事有何特点?体会递归的特点;故事什么时候结束?寻找故事特点,发现存在的问题。
改编故事:如果老和尚讲一次故事小和尚年纪小一岁,改编后小和尚的年纪有何变化?何时能结束故事?寻找终止条件;如果没到终止故事如何变化?寻找递归公式;哪种语句可以实现判断?寻找实现算法语句选择结构。
在设计系列问题时问答法的使用必须要结合学生的认知规律和学生已有的知识结构,学生才能结合自身的储备知识快速寻找到答案构建新知。
3.演示法———抽象问题形象化。中职生的思维特点是形象思维优于抽象思维,借用PPT分步展示程序执行过程,让学生直观地体会算法特点。以n!为例,下图就是分步过程,从而体会递归函数分递推和回归为两步,先是层层展开,再是层层收回,构成了递归函数的执行过程,这个过程就是函数嵌套调用。将静态问题动态化,让连续问题分步化,符合中职学生的认知特点。
4.比较法——对比论证,突出异同。心理学认为比较是认识事物、分析事物的思维过程,将不同的知识点放在一起,通过纵横、正反等对比寻找事物相似或不同之处,便于记忆和理解。为了说明递归中语句先后顺序对程序执行结果的影响,我设计了两个递归函数,让学生从动态执行中体会不同从而感悟递归。(如下图)
总之,在有效教学实践的路上,我们且行且思,努力将社会中心的“用”,学科中心的“序”和儿童中心的“趣”结合起来,创造一种教师教得开心,学生学得轻松的良好教学氛围。“教无定法,贵在得法”,只要能达到教学的有效性,我们都可以去尝试去创新。
参考文献
[1]王传安.C语言有效教学方法探讨[J].信息技术与课程整合,2008.
C语言的函数递归探析 第10篇
所谓函数递归, 是指在一个函数中有直接或间接调用函数本身。函数直接递归指函数直接在本函数中调用自身。函数间接递归指本函数调用其它函数, 其它函数又调用本函数。直接递归和间接递归图解如图1所示。
如图1所示, 递归调用可以说是一种函数循环, 程序中循环必须有中止条件, 否则就会陷入死循环。所以, 递归调用必须有中止条件, 只有递归条件满足时才调用自身, 否则 (即满足中止条件) , 函数就不再递归调用。C语言中函数递归有独特的作用。很多时候, 巧用函数递归可以解决许多看似复杂难解的问题。
2 函数递归特征
那么什么时候函数可以用递归方法呢?递归函数有何特征?本文总结了3条规则:①函数中所需要计算的数值可以通过调用自身得到, 所以递归函数必须有返回值;②函数参数值往往是有规律地递增或递减;③必须有中止条件, 一般以限定函数参数值或递归函数返回值为中止条件。
让我们先分析一下简单的递归函数:求n!
n!的数学表达式为:n!=n* (n-1) * (n-2) **2*1
当n=1时, 值为1
当n>1时, n!=n* (n-1) !
这个数学表达式能够满足3条规则, 求n!的函数值为n乘以 (n-1) !的函数值, 函数参数只要递减1设置即可, 另外设置中止返回值为1, 即最后一个函数的值为1 (因为1!=1) 。
该递归函数如下:
这个问题很简单明了, 不再作深入分析。再看另外一题:求∑n!
此题的数学表达式为1!+2!++ (n-1) !+n!
上题已经得知n!可以通过递归函数得解。而这个函数看上去也有相似规律可循。设求此题的函数为f1 (n) ;则当
显然f1 (n) 需要得到的数值包含f1 (n-1) , 且函数参为规律的递减, 函数中止条件设返回值为1。满足了3个规则, 可以用递归解决。
本函数为双层递归调用函数。通过以上例子的分析, 不难看出函数递归的优点:逻辑性强, 结构层次清晰, 可以用数学归纳法得出正确结论。
3 函数递归应用
我们在学习数据结构时, 发现递归调用经常出现在树和图的生成 (也可以说是一种排序问题) 和遍历 (特殊的查找问题) 中, 特别是在数据排序和数据查找时被频繁地使用, 充分体现了函数递归的优势和作用。
如在数据结构课程遍历二叉树和线索二叉树时, 给出的先序遍历递归函数:
在这个函数中, 对先序遍历法的顺序和结构一目了然, 同样在中序和后序遍历时, 也完全可以如法炮制应用函数递归。当然递归函数也有自身缺点, 突出缺陷是在调用自身函数时不停开辟存储空间, 在占用存储空间的同时又耗费时间, 简而言之, 大量占用资源, 运行速度相对缓慢。在小程序中使用并不会突显其缺点, 在大程序中, 要谨慎使用, 如果使用递归请考虑开辟外存空间来降低内存消耗, 同时又降低对运行速度的影响。这一部分, 由于笔者的知识结构和篇幅原因不再深入探讨。
参考文献
[1]严蔚敏, 吴伟民.数据结构 (C语言版) [M].北京:清华大学出版社, 2007.
C语言教学方法创新研究 第11篇
关键词:C语言 教学方法 创新
中图分类号:G710 文献标识码:A 文章编号:1674-098X(2014)08(b)-0134-01
C语言课程是高校计算机和核心课程之一,从这门课程的实际内容上看,学生只有在上机操作中才能真正掌握所学理论知识,只有通过长时间的上机操作,学生才会学会一些编制程序和调试程序的基本技巧,也只有通过实践操作才能让学生发现自己哪部分知识比较欠缺,进而进行有针对性的学习和实践。然而,在大多数高校内,一些老师还是应用理论讲授为主的传统教学方法,这种方法已经不太适应时代发展的需求,因此,高校要与时俱进地实施教学方法改革,培养学生的操作能力。
1 C语言课程的重要性
C语言是计算机专业学生进行深入学习计算机知识的基础课程,只有系统掌握了这门课程的基础知识,在后续学习时才会得心应手。
1.1 C语言课程是学习程序设计的入门课程
计算机专业最主要的目的就是教学学生进行程序设计,程序设计领域中应用的最广泛的语言就是C语言。这种语言满足高级程序设计语言的需要,还具备对计算机的底层硬件进行方便、直接地控制的优点,是程序员深入系统底层进行编程的入门课程。
1.2 C语言是学习其他编程语言的基础
C语言具备了功能强大、效率高、简洁灵活和可移植性强的特点,编程人员在从事软件开发工作时最喜欢使用这种语言,在学校中学生系统地学习完这种语言,就可以掌握编程的基本思想,为学习其他编程语言奠定基础。
1.3 C语言是学生深入学习计算机知识的基础
在语法表述上,C语言具有简洁精妙的优势,注定了这门课程很方便进行描述算法,比如计算机专业另外一门核心课程《数据结构》,在其算法上,绝大多数都是采用C语言或C++语言来描述的,可见,加强对C语言的学习,是计算机专业的学生进行深入学习计算机知识的基础。
2 目前C语言课程的通行授课方式
一些高校的计算机授课教师仍然按照传统的教学方式来从事这种教学,严重影响了教学效果,也影响了学生的学习兴趣。
2.1 授课方式上,一些老师还采用理论讲授为主
在一些高校内,讲授这门课程的计算机老师,喜欢采用传统灌输式的教学模式,教学重点不是培养学生的动手能力,而是讲授程序设计语言的基本语法, 要求学生通过课堂学习来掌握一些理论知识,当然,这种教学方式有一定的优点,可以保证所讲授知识的系统性与完整性,但更大的缺点是轻视了对程序设计能力与思维的培养,因而造成学生学习的积极性不高,没有起到预期的教学效果。在学习内容上,一些老师很少讲授比较流行的程序开发语言如ava和C#,这就与学生的学习需求差别较大,导致学生对学习该门课程没有明确的学习目的与兴趣。
2.2 在实验操作方式上,实验的内容比较陈旧
C语言程序设计的实践性很强,这门课程教学效果的实现,离不开学生长时间进行独立的实践操作,科学、系统的实验内容是必不可缺的。然而,现实教学中,一些老师忽视教学实践环节,有的学校是教学老师和实验老师各自独立,导致了实验课环节效果较差,甚至使教学内容和实验内容相脱节相分离,根本起不到巩固所学的理论知识的效果。具体实验环节中,老师布置的任务相对简单,导致了学生在上机操作过程中,参照教科书的案例就可以完成实验任务,这种实验课是有名无实,导致了学生缺乏独立编写程序的有效训练。
2.3 考试方式上,仍然重视卷面成绩
当前高校对课程结课考核中,最常用的方法还是按照书面考试的成绩来决定,而没有充分考虑各门课程的实际情况,C语言也不例外,老师只能按照学校的要求,出一张书面书卷来让学生答题,根据成绩是否及格来判定学生能否过关,这种应试教育阶段的考试方式,对C语言进行考核时,存在大量的弊端,导致了对在对这门实用编程语言的考试时,动手能力考的少,理论知识考得多,而且理论知识中的测试内容过多拘泥于繁琐语法细节,这种陈旧的考试方式使得学生不得不通过做题、背题等方法来应对试卷,动手能力的高低、好坏程度几乎没法衡量。
3 C语言教学方式的创新途径
社会上对毕业生动手能力的要求也越来越高,如不加强对计算机专业学生动手能力的培养,势必影响这类学生的顺利就业。因此,教育部门和相关高校对C语言课程传统授课方式进行改革、创新教学方式已经势在必行。
3.1 加大授课方式的创新力度
高等院校应根据计算机专业课程的实际需要,建设一些多媒体教室,把多媒体网络机房设为主要学习场所,不再单纯依赖课堂教学,改变理论学习和上机实践相脱节的教学模式,在学生实践操作时教师再进行适当的理论指导,弱化教师教学的主体性地位,把课堂的主动性交给学生,使得学生能及时上机,及时验证,及时理解本节所学的基本理论和基本方法。在时间分配上,应适当增加操作时间,压缩授课时间,保证每个学期学生有2/3的时间学习掌握基础知识,另外1/3的时间完成一个实用性的C语言程序,在学生的实践操作中锻炼应用所学知识来解决现实问题的能力,进而培养学生动手能力。
3.2 鼓励改革结课的考核方式
目前,一些高校对C语言课程的结课考核方式,应采用传统的笔试考试方式,这张方式存在很大弊端,一张试卷并不能完全反应出学生的真实水平。因此,高校应把考核的主动权交给老师,鼓励老师应用综合、系统的考核方式。有些院校尝试运用了平时考核、期末理论考试、上机考试、课程设计、项目考察多种手段相结合考核方式,在实践中这种方式效果还不错,挺受学生的欢迎,教育部门可以适当推广这种考核方式,使这种方式更加完善,更能全面反映出学生的真实能力。
3.3 加大教材的改革力度
目前一些高校内计算机专业采用的主流教材都是传统的编排模式,先是入门总体介绍,然后是基础语法知识、程序结构、数据类型、文件的读写,这种教材过于强调各个知识点和语法细节,对程序的重要性表述的不到位,使得学生在学完了 C 语言后,却不能完整地解决一个具体编程问题。因此,高校应加大教材的改革力度,组织一些经验丰富的教师组成教材编制小组,编制出一本以程序设计为主线、兼顾基本理论基础的阐述、结合实际教学和学科竞赛的实际情况、能充分激发学生的学习兴趣的教材。
总之,改革目前C语言课程进行教学方法,不是一件简单的事情,需要教育部门、高等院校、各授课和实验教师、学生的共同努力,只要方法得当,各个部门和教师勇于创新,新式C语言的教学方式肯定会得以广泛运用。
参考文献
[1]何元惠,高占国,杨静.C程序设计语言教学方法探讨[J].中国科技信息,2007(3).
C语言函数教学 第12篇
在C语言的开发学习中,经常要进行内存分配,动态内存分配技术可以保证在程序运行过程中按照实际需要申请适量的内存,使用结束后释放。C语言跟内存申请相关的函数主要有alloca、calloc、malloc、free、realloc、sbrk等。在实际学习中主要通过调用库函数malloc()和free()来进行内存的分配和释放。
2 函数的基本用法
2.1 分配内存函数malloc
调用形式:(类型说明符*)malloc(size);
功能:在内存的动态存储区中分配一块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。
“类型说明符”表示把该区域用于何种数据类型。
(类型说明符*)表示把返回值强制转换为该类型指针。
“size”是一个无符号数。
例如:
表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针,把该指针赋予指针变量pc。
2.2 释放内存空间函数free
调用形式:free(void*ptr);
功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。
2.3 举例
分配一块区域,输入一个学生数据。
本例中,定义了结构stu,定义了stu类型指针变量ps。然后分配一块stu内存区,并把首地址赋予ps,使ps指向该区域。再以ps为指向结构的指针变量对各成员赋值,并用printf输出各成员值。最后用free函数释放ps指向的内存空间。整个程序包含了申请内存空间、使用内存空间、释放内存空间三个步骤,实现存储空间的动态分配。
3 malloc()和free()的存储机制
3.1 堆
堆是共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是用完了要还给操作系统,否则就会内存泄漏。
3.2 栈
栈是线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立。每个函数都有自己的栈,栈被用来在函数之间传递参数。操作系统在切换线程的时候会自动地切换栈,就是切换SS/ESP寄存器。
3.3 malloc()分配内存
malloc()从堆里面获得空间,也就是说函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。
3.4 free()释放内存
free()释放的是指针指向的内存。指针是一个变量,只有程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还存在,只不过现在指针指向的内容是无用的,未定义的。因此,释放内存后把指针指向NULL,防止指针在后面不小心又被引用。
4 结语
malloc与free是C语言的标准库函数,当使用malloc()申请了内存空间后,必须检查是否分配成功,而且malloc()和free()必须是配对使用。当不需要再使用申请的内存时,必须使用free()释放,释放后应该把指向这块内存的指针指向NULL,以免分配的空间占着不用,造成内存泄露。
参考文献
[1]徐翔.C++程序设计教学探讨[J].硅谷,2009,(02):155-156.
[2]戴春燕,徐智文.对C++中malloc/free和new/delete的探讨[J].包钢科技,2009,(01):59-60,66
[3]安晶,谢莹.C++教学探讨[J].黑龙江科技信息,2009,(03):183,99.
C语言函数教学
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


