十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
第六章
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、微信小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了庐阳免费建站欢迎大家使用!
指针变量的本质是用来放地址,而一般的变量是放数值的。
int *p 中 *p和p的差别:
*p可以当做变量来用;*的作用是取后面地址p里面的数值
p是当作地址来使用。
*p++ 和 (*p)++的之间的差别:改错题目中很重要
*p++是 地址会变化。
(*p)++ 是数值会要变化。
三名主义:(考试的重点)
数组名:表示第一个元素的地址。数组名不可以自加,
他是地址常量名。(考了很多次)
函数名:表示该函数的入口地址。
字符串常量名:表示第一个字符的地址。
第七章
1一维数组的重要概念:
对a[10]这个数组的讨论。
1、a表示数组名,是第一个元素的地址,也就是
元素a[10]的地址。
2、a是地址常量,所以只要出现a++,或者
是a=a+2赋值的都是错误的。
3、a是一维数组名,所以它是列指针,也就是
说a+1是跳一列。
对a[3][3]的讨论。
1、a表示数组名,是第一个元素的地址,也就是
元素a[10]的地址。
2、a是地址常量,所以只要出现a++,或者
是a=a+2赋值的都是错误的。
3、a是二维数组名,所以它是行指针,也就
是说a+1是跳一行。
4、a[0]、a[1]、a[2]也都是地址常量,不可以对
它进行赋值操作,同时它们都是列指针,a[0]+1,
a[1]+1,a[2]+1都是跳一列。
5、注意a和a[0] 、a[1]、a[2]是不同的,它们的
基类型是不同的。前者是一行元素,后三者是一列元素。
二维数组做题目的技巧:
如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。
步骤一:把他们写成:
第一列 第二列 第三列
a[0]à 1 2 3 -第一行
a[1]à 4 5 6—第二行
a[2]à 7 8 9-第三行
步骤二:这样作题目间很简单:
*(a[0]+1)我们就知道是第一行的第一个元素往后
面跳一列,那么这里就是a[0][1]元素,所以是1。
*(a[1]+2)我们就知道是第二行的第一个元素往后面
跳二列。那么这里就是a[1][2]元素,所以是6。
一定记住:只要是二维数组的题目,一定是写成如
上的格式,再去做题目,这样会比较简单。
数组的初始化,一维和二维的,一维可以不写,
二维第二个一定要写
int a[]={1,2} 合法。 int a[][4]={2,3,4}合法。
但int a[4][]={2,3,4}非法。
二维数组中的行指针
int a[1][2];
其中a现在就是一个行指针,a+1跳一行数组元素。
搭配(*)p[2]指针
a[0],a[1]现在就是一个列指针。a[0]+1 跳一个数组
元素。搭配*p[2]指针数组使用
还有记住脱衣服法则:
a[2] 变成 *(a+2) a[2][3]变成 *(a+2)[3]再
可以变成 *(*(a+2)+3)
C语言知识要点——转给那些还没把书看完的同志们
来源: 李志远的日志
1.C源程序的框架
尽管各个C源程序的功能千变万化,但框架是不变的,主要有:编译预处理、主函数()、函数n()等,主函数的位置不一定在最前面,可以在程序的中部或后面,主函数的名字固定为main。
2.C语言源程序的书写规则:
(1)C源程序是由一个主函数和若干个其它函数组成的。
(2)函数名后必须有小括号,函数体放在大括号内。
(3)C程序必须用小写字母书写。
(4)每句的末尾加分号。
(5)可以一行多句。
(6)可以一句多行。
(7)可以在程序的任何位置加注释。
3.语句种类
语句是程序的基本成分,程序的执行就是通过一条条语句的执行而得以实现的,根据表现形式及功能的不同,C语言的基本语句可以分为五大类。
(1)流程控制语句
流程控制语句的功能是控制程序的走向,程序的流程有三种基本结构:顺序结构、分支结构和循环结构,任何复杂的程序都可以由这三种基本结构复合而成。其中后两种结构要用特定的流程控制语句实现。
(2)表达式语句
表达式语句的形式是:表达式;,即表达式后跟一分号";",分号是语句结束符,是一个语句必不可少的成分。表达式和表达式语句的区别在于表达式代表的是一个数值,而表达式语句则代表一种动作。最常见的表达式语句是赋值语句。
(3)函数调用语句
函数调用语句实际上也是一种表达式语句,形式为:在一次函数调用的小括号后面加上一个分号。
(4)空语句
空语句的形式就是一个分号,它不代表任何动作,常常作为一个意义转折点使用。
(5)复合语句
复合语句从形式上看是多个语句的组合,但在语法意义上它只相当于一个语句,在任何单一语句存在的地方都可以是复合语句。注意复合语句中最后一个语句末尾的分号不能少。复合语句右大括号后面没有分号。
4.运算符
用来表示数据各种操作的符号称为运算符。运算符实际上代表了一种类型数据的运算规则。不同的运算符具有不同的运算规则,其操作的数据类型必须符合该运算符的要求,运算结果的数据类型也是固定的。
根据参加操作的数据个数多少,可以将C语言的运算符分为单目运算符,双目运算符和三目运算符(三目运算符只有条件运算符一个)。
根据运算对象和运算结果的数据类型可分为算术运算符、关系运算符、逻辑运算符等。
5.表达式
表达式是由常量、变量、函数,通过运算符连接起来而形成的一个算式。一个常量,一个变量或一个函数都可以看成是一个表达式。
表达式的种类有:
算术表达式、关系表达式、逻辑表达式、赋值表达式、字位表达式、强制类型转换表达式、逗号表达式(顺序表达式)、条件表达式、指针表达式。
6.数据的输入/输出
C语言本身没有输人/输出语句,数据的输入/输出是通过调用库函数来实现的。
第二章 数据类型知识点
划分数据类型的意义是编译系统对每个不同类型的数据在内存中分配的字节数不同,不同类型的数据可以按规定参加不同类型的运算。
1.C语言的数据类型
数据类型有:整型、字符型、实型单精度型、双精度型、构造类型数组类型、结构体类型、共用体类型、枚举类型、指针类型、空类型,其中整型、实型、字符型是C语言中的基本类型。
2.各种类型数据的定义方法
定义形式:数据类型 变量名1,变量名2,......变量名n;
3.常量与变量
(1)常量——在程序执行期间其值不变的量。它不能被赋值。
(2)变量——在程序运行期间其值可以改变的量。
4.各种类型数据的混合运算
各类数据运算前会自动转换成同一类型。规律如右图示:从右向左的箭头表示必定的转换,如float型数据运算前化成double型,以提高运算精度,结果也为double型,short或char型数据运算前化成int型,结果也为int型;从下向上的箭头表示转换方向是向级别高的靠拢。
5.强制类型变换
当我们需要对数据进行类型变换,而机器又不能自动完成时,就要用强制类型变换,形式为:(数据类型符)(被转换对象)。
第三章 选择知识点
C语言中实现选择结构的控制语句有两种:条件分支语句if和开关分支语句switch。
1.if语句的三种形式:
(1) if(表达式)语句;
(2) if(表达式)语句1;
else语句2;
(3) if(表达式1)语句1;
else if(表达式2)语句2;
else if(表达式3)语句3;
...
else if(表达式n)语句n;
2.开关分支语句switch
(1)形式
switch(表达式)
{ case e1:语句1;break;
case e2:语句2;break;
case e3:语句3;break;
......
case en:语句n;break;
default :语句n+1;
}
(2)功能
当表达式的值等于e1时,执行语句1;
当表达式的值等于e2时,执行语句2;
......
当表达式的值等于en时,执行语句n;
当表达式的值与常量e1、e2......en谁都不等时,就执行default后的语句
第四章 循环知识点
循环就是在程序执行过程中,反复多次的执行同一段程序。C语言中有三种循环语句。
1.while循环语句
形式为:while(表达式)
{
循环体
};
执行过程是:先计算表达式的值,当表达式的值非0时就执行循环体,之后再判断表达式的值,且重复以上过程;当表达式的值为0时就结束循环。
2.do-- while循环语句
形式为:do
{
循环体
} while(表达式);
执行过程是:先执行循环体一次,再判断表达式的值,当表达式的值非0时就再执行循环体,之后再判断表达式的值,且重复以上过程;当表达式的值为0时就结束循环。
3.for循环语句
形式为:for(表达式1;表达式2;表达式3)
{ 循环体 }
4.三种循环语句的比较
三种循环语句可以完成同一件事,可任选其一。
使用while和do-- while循环时,要提前给循环变量赋初值。而for循环是在表达式1中赋初值的。
while循环和for循环都是先判断条件后执行循环体,有可能一次也不执行循环体,do-- while循环是先执行循环体,后判断条件,即循环体至少也得执行一次。for循环不限于计数循环,其循环条件可以是逻辑表达式和字符表达式等。
5.循环嵌套
三种循环控制语句可以互相嵌套,即在一个循环体内部又可以出现另一循环,这种嵌套在理论上来说可以是无限的。注意必须是一个循环完整的套住另一个循环。
6.break语句
break语句只能出现在三种循环语句和switch多分支语句中,其作用是用来中断这四种语句的执行。当程序执行到break语句时,会跳出break语句所在的循环或switch分支,而直接执行紧跟在它们后面的语句。
7.continue语句
continue语句只能出现在三种循环语句中,当程序执行到continue语句时,其作用是提前结束本次循环,自动跳过循环体中后半部剩余的语句的执行,而直接回到循环条件判断。根据判断的结果决定是否继续执行下次循环。
8. goto 语句
goto语句是一种非结构化语句,其作用是使程序的执行无条件的转移到某一处。使用格式为: goto 标号;利用goto语句与if条件语句配合,也可以实现条件循环。C语句允许在任何语句前添加标号,作为跳转目标,标号的构成是标识符后面加一个":"。
第五章 数组知识点
数组就是同类型的一批数据的集合,用一个变量名存放,区分各元素的办法是用下标。
1.一维数组
类型说明符数组名\[数组长度\];
(1)数组命名要符合标识符的命名规则。
(2)数组名后的括号必须是方括号,不能是圆括号。
(3)数组长度必须是正整数,可以是个表达式,但不能有变量,C语言不支持动态数组。
(4)数组长度表示数组中元素的个数
(5)数组元素的下标从0开始数,所以最大下标是数组的长度减1。
2.多维数组(以二维为例)
类型说明符数组名\[第一维长度\]\[第二维长度\];
(1)数组命名要符合标识符的命名规则。
(2)数组名后的括号必须是两个方括号,定义时不能写成inta\[3,4\];。
(3)数组长度必须是整型常量表达式。
(4)第一维长度表示数组行数,第二维长度表示数组列数。
(5)每个数组元素都有两个下标,第一维表示该元素所在的行,第二维表示该元素所在的列,每一维的下标都从0开始数。
二维数组的初始化:C语言规定只有静态数组和外部数组才允许在定义时赋初值,赋初值形式如下:
static类型说明符数组名\[第一维长度\]\[第二维长度\]={初值表};
二维数组的引用:二维数组不能整体引用,要引用数组的单个元素,形式为:数组名\[下标\]\[下标\]和普通变量的使用无任何区别。
3.字符数组
C语言中没有字符串变量,字符串是靠字符数组实现的,所谓字符数组就是元素的数据类型为字符型的数组。
(1)字符数组的定义形式:char数组名\[数组长度\];
因为C语言中的整型数据和字符型数据是相通的,所以也可以这样定义:int数组名\[数组长度\];
(2)字符数组的初始化:给字符数组的初始化有两种方式,一种是用字符常量,另一种是用字符串。形式如下:
staticchar数组名\[数组长度\]={字符常量表};
staticchar数组名\[数组长度\]={字符串常量};
4.数组与函数
数组经常作为函数的参数,数组做函数的参数有两种形式,一是数组元素做函数的参数,一是数组名做函数的参数,当用数组名做函数的实参时传送的是首地址。
5.常用的字符串处理函数
C语言提供了一些处理字符串的标准函数,用以完成一些常见的操作。对以下几个函数要掌握其功能和调用形式。
(1)gets(字符数组名)此函数功能是从键盘输入一串字符,回车后送到字符数组中,注意定义数组时数组长度要足够大。
(2)puts(字符数组名)此函数功能是将字符数组的内容输出到屏幕上。
(3)strcat(字符数组名1,字符数组名2)此函数功能是将字符数组1中的'\\0'去掉后将字符数组2的内容连接到字符数组1的末尾。
(4)strcpy(字符数组名1,字符数组名2)函数功能是将字符数组2的内容(包括'\\0')拷贝到字符数组1中,字符数组2处也可以是字符串常量。strcpy函数可以实现拷子串。
(5)strcmp(字符数组名1,字符数组名2)函数功能是两个字符串(ASCII码)比大小。
(6)strlen(字符数组名)此函数功能是求字符串的长度,注意不包括'\\0'。
(7)strlwr(字符数组名)此函数功能是将字符串中的所有大写字母都变成小写。
(8)strupr(字符数组名)此函数功能是将字符串中的所有小写字母都变成大写。
第六章 函数知识点
每个C源程序都是由函数组成的,一个主函数和若干个其它函数,C语言程序设计的基础工作就是函数的具体编写,C语言中的函数就相当于其它高级语言中的子程序。
1.函数的概念
函数就是一个数据加工厂,从函数外部接收数据,在函数内部加工处理,然后得到一个结果返回给外部的调用者。所以函数就是对语言功能的扩充,对函数的调用就是对功能的调用。
2.标准函数
各种高级语言都定义了一些标准函数,C语言中的标准函数称为库函数,是将一些基本的、常用的功能编成了函数,供大家使用方便。使用库函数时必须把它的头文件用#i nclude命令包含进来,每个库函数的功能及对应的头文件都会在手册中给出。
3.自定义函数
C 语言也允许用户自己编写函数以实现C库函数中没有提供的功能,称作自定义函数。
4.定义函数
C语言规定每个函数都要独立定义,函数定义不能嵌套。
函数定义的形式:数据类型函数名(形参表)
形参说明语句序列
{ 说明语句序列
可执行语句序列 }
5.函数调用
函数调用的形式是: 函数名(实参表)。当实参表中有多个参数时,要用逗号隔开,若被调函数无参数,调用时小括号也不能省。函数调用过程是:将实参的值传给形参,在函数体内进行加工处理,然后由return语句将函数值返回调用处。
5.全局变量和局部变量
局部变量:在函数内部定义的变量称为局部变量,只在本函数中有效。
全局变量:在函数外部定义的变量称为全局变量,它的作用范围是从定义开始到本文件结束。
6.动态存储与静态存储
内存中的用户数据区分为动态存储区和静态存储区,动态存储区是指程序运行期间给变量临时分配存储单元,变量用完后立即释放单元的区域,动态存储区放的是函数的形参、自动变量、函数调用期间的现场保护数据和返回地址。
静态存储区是指程序运行期间给变量分配固定的存储单元,放的是全局变量和局部静态变量。
一个变量除了它的数据类型以外还有存储类型,定义一个变量时应该说明这两种类型。
第七章 预处理知识点
对高级语言编译连接就是把源程序转换成机器语言,C语言在进行编译之前还要预先处理三件事:宏定义命令、文件包含命令和条件编译命令,统称为预处理命令,其特点是:
1.所有的预处理命令都放在程序的头部,以#开头,且#号后面不留空格。
2.预处理命令不是C的语句,行尾不加分号。
3.预处理命令是在编译预处理阶段完成的,所以它们没有任何计算、操作等执行功能。
4.预处理命令有所变动后,必须对程序重新进行编译和连接。
1.宏定义
宏定义命令的作用是给一些常用的对象重新命名,在程序中可以用宏名来引用这些对象,预处理时宏名会被代表的内容替换,此过程称为宏展开或宏替换。宏定义有两种形式:
2.文件包含
使用文件包含命令可以将另—个C源程序的全部内容包含进来,其形式为:
#i nclude <文件名>或#i nclude "文件名"
通常可以把经常用到的,带公用性的一些函数或符号等集合在...起形成一个源文件,然后用此命令将这个源文件包含进来,这样可以避免在每个新程序中都要重新键入这些内容。
3.条件编译
顾名思义满足条件时进行编译,为了解决程序移植问题,C语言提供了条件编译命令,它能使源程序在不同的编译环境下生成不同的目标代码文件。条件编译命令有3种形式。
第八章 指针知识点
1.什么是指针和指针变量?
指针就是内存地址,因为通过"地址"可以找到变量,所以内存"地址"形象的称为指针。
指针变量就是存地址的变量。在C语言中用一个变量存另一个变量的地址,那么就称这个变量为指针变量,指针变量的值就是地址。通常指针变量被简称为指针。
指针变量是有类型的,即指针值增1表示指向下一个数据,如整型数据在内存中占两个字节,它的指针变量增1是增两个字节。如实型数据在内存中占4个字节,它的指针变量增1是增4个字节。
2.怎样定义指针变量?
定义形式为:数据类型*指针变量名1,*指针变量名2......;
3.指针的有关运算
指针为内存地址是整数,可以进行一些算术运算、关系运算、赋值运算、特殊运算等,但要注意运算代表的实际意义。
4.指向数组的指针变量
(1)指向数组元素的指针变量定义形式为:inta\[10\];
int*p=a;
(2)指向一维数组的指针变量
定义形式为:inta\[3\]\[4\];
int(*p)\[4\];
p=a;
(3)指向字符串的指针变量
定义形式为: char*p="字符序列";
C语言中的字符串是以隐含形式的字符数组存放的,定义了指针变量p并不是将整个字符串都存放在p中了,而p中存放的是字符串的首地址。
5.指向函数的指针变量
一个函数在编译时被分配一个入口地址,这个地址就是函数的指针,可以用一个指针变量指向它。指向函数的指针变量定义形式为:
数据类型(*指针变量名);
6.指针变量做函数的参数
(1)指针作函数的参数可以传送地址,如数组的首地址,函数的入口地址等。
(2)指针作函数的参数也可以用地址方式传送数据。
7.返回值是指针的函数
即函数的返回值是内存的地址,利用这种方法可以将一个以上的数据返回给函数的调用者。定义形式如下:
数据类型*函数名(形参表)
8.指针数组
定义形式为:数据类型*数组名\[数组长度\];
数组中的每个元素都是指针类型的数据,这种数组被称为指针数组。
9.指向指针的指针
定义形式为:数据类型**指针变量名;
指向指针数据的指针变量称为指向指针的指针。
10.main函数的形参
main函数可以带两个形参,如:
main(argc,argv)
intargc;
char *argv\[\];
{
......
}
11.指向结构体的指针变量
结构体变量的指针就是该变量所占据的内存段的首地址。指向结构体的指针变量定义形式为:struct结构体类型名*指针变量名;
12.指向共用体的指针变量
共用体变量的指针就是该变量所占据的内存段的首地址。指向共用体的指针变量定义形式为:union共用体类型名*指针变量名;
替换了的字符时(这里为正中间的字符"4"),原来的字符己不复存在。
第九章 结构体与共用体知识点
结构体类型是C语言的一种构造数据类型,它是多个相关的不同类型数据的集合,相当于其它高级语言中的记录。
1.结构体类型定义
结构体类型的形式为:
struct结构体类型名
{ 数据类型成员名1;
...
数据类型成员名n;
}
2.结构体变量的定义
结构体变量有三种定义形式:
(1)先定义结构体类型,后定义结构体变量。
(2)定义结构体类型的同时定义结构体变量。
(3)不定义结构体类型名,直接定义结构体变量。
3.结构体变量的引用
(1)结构体变量的初始化:许多C版本规定对外部或静态存储类型的结构体变量可以进行初始化,而对局部的结构体变量则不可以,新标准C无此限制,允许在定义时对自动变量初始化。
(2)结构体成员的引用:由于C语言一般不允许对结构体变量的整体引用,所以对结构体的引用只能是对分量的引用,结构体变量中的任一分量可以表示为:结构体变量名·成员名
4.结构体与数组
C语言中数组的成员可以是结构体变量,结构体变量的成员也可以是数组。
结构体数组有三种定义形式:
(1)先定义结构体类型,后定义结构体数组。
(2)定义结构体类型的同时定义结构体数组。
(3)不定义结构体类型名,直接定义结构体变量。
5.结构体与指针
一方面结构体变量中的成员可以是指针变量,另一方面也可以定义指向结构体的指针变量,指向结构体的指针变量的值是某一结构体变量在内存中的首地址。
结构体指针的定义形式:struct结构体类型名*结构体指针变量名。
由结构体指针引用结构体成员的方法
6.用指针处理链表
结构体的成员可以是指针类型,并且这个指针类型就是本结构体类型的,这样可以构造出一种动态数据结构—成为链表。所谓动态数据就是指在编译时不能确定数据量的多少,而是在程序执行时才确定的数据,动态数据可以比较方便的进行数据插人或删除等操作。
7.结构体与函数
结构体变量的成员可以作函数的参数、指向结构体变量的指针也可以作函数的参数。虽然结构体变量名也可以作为函数的参数,将整个结构体变量进行传递,但一般不这样做,因为如果结构体的成员很多,或者有些成员是数组,则程序运行期间,将全部成员一个一个的传递,既浪费时间,又浪费空间,开销太大。
8.结构体与共用体
结构体变量中的成员可以是共用体,共用体变量中的成员可以是结构体。
共用体
为了节省存储空间,C语言允许将几种不同类型的数据存放在同一段内存单元,它们共用一个起始地址,称做共用体。
1.共用体类型定义
union共用体类型名
{ 数据类型成员名1;
...
数据类型成员名n;
}
2.共用体变量定义
(1)先定义类型,后定义变量。
(2)定义类型的同时定义变量。
(3)不定义类型名,直接定义变量。
3.共用体变量的引用
(1)共用体变量不能整体引用,只能引用其成员,形式为:共用体变量名·成员名
(2)共用体变量的成员不能初始化,因为它只能放一个数据。
(3)共用体变量存放的数据是最后放入的数据。
(4)共用体变量的长度是最大的成员的长度。
(5)可以引用共用体变量的地址、各个成员的地址,它们都是同一个地址。
(6)共用体变量不能当函数的参数或函数的返回值,但可以用指向共用体变量的指针作函数的参数。
(7)共用体变量的成员可以是数组,数组的成员也可以是共用体变量。
第十章 位运算知识点
位运算就是按二进制位进行操作的运算,运算的对象只能是整型或字符型,不能是实型。不同长度的变量进行位运算,系统会自动右对齐,而左端的不齐部分,对于无符号数左端补满0,对于有符号数则:正数左端补满0,负数左端补满1。
第十一章 文件知识点
操作系统是以文件为单位对数据进行管理的,任何一种计算机高级语言都要有和磁盘文件打交道的能力,否则该语言的功能充其量是算一算、显示显示而已。在C语言中没有单独的文件操作语句,所有对文件的操作都是通过库函数来完成的,所以本章的重点是学会使用有关文件操作的库函数。
1.文件的基本概念
2.文件类型指针
3.文件的操作
1、顺序、分支、循环等基本语句;
2、char、int、double、float等基本数据类型;
3、带参数宏定义和函数的区别;
4、指针和数组的区别,尤其注意下指针数组和数组指针;
5、函数指针和指针函数;
6、结构体和联合体以及自定义类型typedef的应用;
7、printf、scanf、getchar、putchar、fopen、fclose、fgetc、fputc等基本库函数的应用;
8、malloc、calloc、realloc、free等内存管理函数的应用;
9、函数的声明和定义;
10、注意C语言的基本单位是函数;
还有很多,因为篇幅限制不能一一例举,但上面提到的10点都是很多考试和面试中经常出现的。
有时间可以看看这三本书《C和指针》、《C陷阱和缺陷》、《C专家编程》,C语言的大部分问题都可以在这三本书中找到答案,熟练掌握着三本书的内容再加上一些实际项目将没有人可以轻易用C语言的问题为难你。
c语言知识点有:
1、C语言程序是由多个函数构成的。
2、每个C语言程序中有且只有一个main函数。
3、C语言不使用行号,无程序行的概念。
4、程序中可使用空行和空格。
5、C语言程序格式常用锯齿形书写格式。
6、C语言程序中可加任意多的注释,注释形式/*……*/,并且注释形式不能嵌套,即不能注释里面又有另一个注释。//行注释是C++当中新增加的内容。
7、引用C语言标准库函数,一般要用文件包含预处理命令将其头文件包含进来。
8、用户自定义的函数,必须先定义后使用。
9、变量必须先定义后使用。
10、变量名,函数名必须是合法的标识符,标识符习惯用小写字母,C语言是字母大小写敏感的语言。
11、不能用关键字来命名变量和函数。
12、C语言的语句都是以分号结尾的。
13、计算机中使用的进制数是二进制数,而不是十进制数,因为二进制只有两个数码,运算简单便于硬件实现,同时二进制便于逻辑运算。
将十进制数转换成二进制数应分为整数部分转换和小数部分转换,整数部分转换可采用基数除法来实现,小数部分转换可采用基数乘法来实现。八进制和十六进制也是C语言中经常表示数据的进制,因为它们与二进制之间的转换非常方便,但要注意他们不是计算机中使用的进制。
14、机器数的表示形式有原码、反码和补码几种形式,计算机中通常使用补码的形式来表示一个数,因为补码运算可以连同符号位一起参与运算,这便于运算器的设计与实现。
函数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)功能:把s所指向的字符串转换成long int类型。 s格式为:符号 数字返回值:字符串的转换值。若出错则返回0。头文件:stdlib.h函数6。bcd()把一个数转换成对应的BCD码的函数原形:bcd bcd(int x) bcd bcd(double x) bcd bcd(double x,int decimals)注意:BCD码的精度可达17位。参数decimals是可选的,用来指定转换后小数点后的位数。头文件:bcd.h函数7。bdos()原形∶int bdos(int fnum,unsigned dx,unsigned al) 其中fnum是系统调用号;dx是传给寄存器DX的值;al是传给寄存器AL的值;功能∶DOS系统调用(INT21H)返回值∶AX中的值函数8。biosdisk()调用BIOS磁盘驱动程序函数原形:char biosdisk(int cmd,int drive,int head,int track,int sector,int nsects,void *buffer)功能:使用中断0x13,直接调用BIOS进行磁盘操作参数:(1)cmd: 2-数据以每扇区512字节的格式读入buffer,起始扇区由head、track和sector定,扇区数由nsects定。 3-将buffer中的数据按每扇区512字节写入磁盘。 4-对扇区进行数据校验。 6-格式化一个磁盘并对化扇区设置化标志。 8-返回当前驱动器参数在buffer的前4个字节中。 10-长读,每扇区读入512字节加上额外的4个字节。 11-长写,每扇区写入512字节加上额外的4个字节。 (2)drive:0-第一个软驱;1-第二个软驱;0x80-第一个硬驱 (3)head:磁头 (4)track:磁道 (5)sector:扇区 (6)nsects:扇区数 (7)buffer:数据缓冲区,定义为unsigned char buffer[];返回值:0x00-操作成功 0x01-错误命令 0x03-企图写具有写保护的磁盘 0x07-驱动器参数设置错误 0x10-磁盘读/CRC/ECC错误头文件:bios.h注:对于硬盘主引导记录扇区head=0,track=0,sector=1函数9。biosprint()调用BIOS打印机I/O接口的函数原形:int biosprint(int cmd,int abyte,int port)功能:通过BIOS中断0x17在由参数port指定的打印机上完成各种打印机功能。 port=0(LPT1) =1(LPT2); cmd=0(打印字符abyte) 1(初始化打印机端口) 2(读打印机状态); abyte=0-255;返回值:打印机状态 位0(设备超时);位3(I/O出错);位4(打印机已选择);位5(没纸);位6(打印机确认);位7(不忙)头文件:bios.h函数10。calloc()分配内存函数原形:void *calloc(size_t nitems,size_t size)功能:在堆中分配一块内存,将该内存的内容全部清0。返回值:返回指向新分配内存的指针。空间不够则返回NULL。头文件:stdlib.h、calloc.h函数11。ceil()原形∶double ceil(double num)功能∶求不小于num的最小双精度整数头文件∶math.h函数12。cgets()读字符串函数原形:char *cgets(char *str)功能:从控制台读入一个字符串,并将该字符串(和字符串长度)存入有str所指向的地址中。注意:在调用cgets之前,必须将要读入的字符串最大长度存入str[0]中,返回时str[1]被设置为实际读入的字符数。实际字符串内容从str[2]开始,以空字符(\0)结尾。返回值:指向str[2]的指针。头文件:conio.h函数13。chdir()改变当前目录的函数原形:int chdir(const char *path)功能:把由path指定的目录改为当前目录。path参数中可以指定驱动器号,如"a:\\ddd", 但只是改变该驱动器上的当前目录,对当前活动驱动器上的当前目录无影响。返回值:0(成功);-1(失败)头文件:dir.h函数14。_chmod()改变文件存取权限的函数原形:int _chmod(const char *path,int func[,int attrib])功能:读取(func=0时)或设置(func=1时)DOS文件属性。 attrib=FA_RDONLY 只读 attrib=FA_HIDDEN 隐藏文件 attrib=FA_SYSTEM 系统文件 attrib=FA_LABLE 卷标 attrib=FA_DIREC 目录 attrib=FA_ARCH 档案 返回值:失败时返回-1。成功时返回文件的属性字节,如果 返回值FA_RDONLY 不等于0,则文件是只读文件;......头文件:io.h、dos.h函数15。chmod()改变文件存取权限的函数原形:int chmod(const char *path,int amode)功能:根据amode的值,设置由path所指文件的存取权限。 amode的值 存取权限 S_IWRITE 允许写 S_IREAD 允许读(只读) S_IREAD|S_IWRITE 可读可写 返回值:0(成功);-1(失败)头文件:io.h、sys\stat.h函数16。clock()原形∶long clock(void)功能∶测得从程序开始到调用处处理机所用的时间头文件∶time.h函数17。close()关闭文件函数原形:int close(int handle)功能:关闭由文件句柄所指向的文件,句柄是调用_creat、creat、creatnew、creattemp、dup、dup2、_open或open时得到的。该函数并不在文件末尾写一个Ctrl-Z字符,如果想用该字符结束文件,必须显式地给出该字符。返回值:0(成功);-1(失败)头文件:io.h函数18。closegraph()关闭图形函数原形:void far closegraph(void)功能:释放图形系统分配的所有内存,将屏幕恢复到调用initgraph之前的模式。头文件:graphics.h函数19。cos()原形∶double cos(double arg)功能∶计算arg(弧度)的余弦值头文件∶math.h函数20。ctrlbrk()设置ctrl-break处理程序的函数原形:void ctrlbrk(int(*handle)(void))功能:修改中断向量0x23,使用新的ctrl-break中断处理函数。用法:ctrlbrk(函数名); 先定义函数:int 函数名(void){...}头文件:dos.h函数21。delay()暂停函数原形:void delay(unsigned milliseconds)功能:暂停当前所执行的程序milliseconds毫秒。头文件:dos.h函数22。disable()屏蔽中断的宏原形:void disble(void)功能:屏蔽中断,只允许从外部设备来的不可屏蔽中断(NMI)。头文件:dos.h函数23。enable()开硬件中断的宏原形:void enable(void)功能:开放中断,允许接受任何设备产生的中断。头文件:dos.h函数24。exec()加载并运行其它程序的函数族execl(),execle(),execlp(),execlpe(),execv(),execve(),execvp(),execvpe()原形∶ int execl(char *path,char *arg0,*arg1,...,*argn,NULL)int execle(char *path,char *arg0,*arg1,...,*argn,NULL,char **env)int execlp(char *path,char *arg0,*arg1,...,*argn,NULL)int execlpe(char *path,char *arg0,*arg1,...,*argn,NULL,char **env)int execv(char *path,char *argv[])int execve(char *path,char *argv[],char **env)int execvp(char *path,char *argv[])int execvpe(char *path,char *argv[],char **env) 其中,path是调用的子程序的文件名,在exec后面的后缀具有某种功能: p表示函数能够在由DOS环境变量PATH的目录中搜索子进程文件,如果path中未指明文件所在目录,函数将首先在当前目录中找,然后在DOS环境变量指定的目录中找。 l表示参数指针(arg0,...,argn)按单独参数传送。当预先知道要传送的参数个数时,通常用带后缀l的函数。 v表示参数指针(arg0,...,argn)按指针数组传送。当要传送的参数可变时,使用带后缀v的函数。 e表示参数env可以传送到子进程,该函数可用来修改子进程的环境。若无e后缀,子进程将继承父进程的环境。注意:arg0+...+argn,或arg[0]+...+arg[n]的总长度必需小于128字节。当调用exec函数时,原先已经打开的文件在子进程中仍然是打开的。功能:加载并运行其它程序,调用时必须有足够的内存空间用于加载和执行子程序,子程序将覆盖父程序。头文件:process.h 函数25。farcalloc()从远堆中分配内存的函数原形:void far *farcalloc(unsigned long nunits,unsigned long unitsz)功能:从远堆中为包含nunits个元素的数组分配内存,每一区unitsz字节长。用法:fptr=farcalloc(数目,sizeof(char)); 先定义:char far *fptr;注意:所有可用RAM能被分配;大于64K的块能被分配;用远指针存取该块。微模式不能用。返回值:返回指向新分配块的指针,若内存不够,则返回NULL。头文件:alloc.h函数26。farfree()从远堆中释放一块已分配内存的函数原形:void farfree(void far *block)头文件:alloc.h函数27。farmalloc()从远堆中分配内存的函数原形:void far *farmalloc(unsigned long nbytes)使用方式:fptr=farmalloc(字节数); 先定义char far *fptr;功能:从远堆中分配长nbytes字节的内存。注意:所有可用RAM能被分配;大于64K的块能被分配;用远指针存取该块。微模式不能用。返回值:返回指向新分配内存的指针,若内存不够,则返回NULL。头文件:alloc.h函数28。farrealloc()调整远堆中已分配块的函数原形:void far *farrealloc(void far *oldblock,unsigned long nbytes)返回值:返回调整后的新内存地址。若不能重新分配,则返回NULL。头文件:alloc.h函数29。fclose()关闭一个流函数原形:int fclose(FILE *stream)使用方式:fclose(文件指针名);其中文件指针名=fopen();功能:关闭指定的流,关闭前清除所有与stream相联的缓冲区,释放系统分配的缓冲区,但由setbuf设置的缓冲区不能自动释放。返回值:0(成功);EOF(失败)头文件:stdio.h函数30。fcloseall()关闭打开的流的函数原形:int fcloseall(void)功能:关闭所有打开的流,由stdin、stdout、stdprn、stderr和stdaux设置的流除外。返回值:关闭流的总数。如果发现错误则返回EOF。头文件:stdio.h 函数31。feof()检查文件是否结束的函数原形∶int feof(FILE *fp)返回值∶文件结束返回非0值,否则返回0。头文件∶stdio.h函数32。fgets()从流中读取一字符串的函数原形:char *fgets(char s[],int n,FILE *stream)使用格式:fgets(字符串指针,字符个数,文件指针)功能:从输入流stream中读入字符存到s串中。当读了n-1个字符或遇到换行符时,函数停止读过程。fgets在s串尾保留换行字符。读入的最后一个字符后面加一个空字符。返回值:成功时返回字符串参数s,出错或遇到文件结束时,返回NULL。头文件:stdio.h函数33。findfirst()函数和findnext()函数调用方式:整形数=findfirst(文件名,结构变量名,属性常数组合(如0x26));其中定义struct ffblk 结构变量名;原形:int findfirst(path,buffer,attr)和int findnext(buffer) char *path;//要检索的文件名 struct ffblk { char ff_reserved[21]; char ff_attrib;//被检索的文件属性 unsigned ff_ftime;//最后修改的时间 //(0-4位:秒数/2;5-10位:分数;11-15位:小时数) unsigned ff_fdate;//最后修改的日期 //(0-4位:日;5-8位:月;9-15位:年减1980) long ff_fsize;//文件大小 char ff_name[13];//组名 }*buffer; int attr;//要检索的文件属性功能:检索由path和attr指定的文件,把结果返回到buffer。findfirst返回关于第一个指定文件的信息,findnext继续检索。返回值:0(检索成功),-1(没有找到指定的文件)属性常数: FA_NORMAL(0x00) 含意:Normal file, no attributes FA_RDONLY(0x01) 含意:只读 FA_HIDDEN(0x02) 含意:隐含文件 FA_SYSTEM(0x04) 含意:系统文件 FA_LABEL(0x08) 含意:卷标 FA_DIREC(0x10) 含意:子目录 FA_ARCH(0x20) 含意:修改的文件Archive头文件:dir.h(dos.h)函数34。floodfill()填充区域的函数原形:void far floodfill(int x,int y,int border)功能:在图形设备上用颜色border围起来的区域将用当前填充颜色填充。(x,y)是待填充区域的起点,若起点在封闭区域内,则区域内被填充;若起点在封闭区域外,则区域外被填充。头文件:graphics.h函数35。floor()原形∶double floor(double num)功能∶求不大于num的最大双精度整数头文件∶math.h函数36。fnmerge()建立文件路径函数原形:void fnmerge(char *path,const char *drive,const char *dir, const char *name,const char *ext)功能:合成drive:\dir\name.ext,放在path头文件:dir.h函数37。fnsplit()分解完整的路径名函数原形:int fnsplit(char *path,const char *drive,const char *dir,const char *name,const char *ext)功能:把文件名路径path分成4个部分存放。 其中drive中有冒号;dir中有开始和结尾的反斜杠;ext包括开始圆点返回值:如果有扩展名,则 返回值EXTENSION!=0 如果有文件名,则 返回值FILENAME!=0 如果有目录名,则 返回值DIRECTORY!=0 如果有驱动器号,则返回值DIRVE!=0头文件:dir.h 函数38。fopen()打开一个流函数原形:FILE *fopen(const char *filename,const char *mode)功能:打开用filename指定的文件,并使其与一个流相联。使用方式:文件指针名=fopen("文件名","处理方式") ”处理方式”取: "rt" 打开一个文本文件,只能读。 "wt" 生成一个文本文件,只能写。若文件存在则被重写。 "at" 打开一个文本文件,只能在文件尾部添加。 "rb" 打开一个二进制文件,只能读。 "wb" 生成一个二进制文件,只能写。 "ab" 打开一个二进制文件,只能在文件尾部添加。 "rt+" 打开一个文本文件,可读可写。 "wt+" 生成一个文本文件,可读可写。 "at+" 打开一个文本文件,可读可添加。 "rb+" 打开一个二进制文件,可读可写。 "wb+" 生成一个二进制文件,可读可写。 "ab+" 打开一个二进制文件,可读可添加。返回值:指明流的指针(成功时)或NULL(失败时)注:需先定义 FILE *文件指针名; "文件名"若用 argv[1]代替,则可使用命令行形式指定文件名函数39。FP_OFF()获取远地址偏移量的宏原形:unsigned FP_OFF(void far *p)功能:取得和设置远指针*p的偏移量返回值:偏移量头文件:dos.h 函数40。fprintf()传送输出到一个流中的函数原形:int fprintf(FILE *stream,const char *format[,argument,...])功能:①向文件指针指向的文件输出ASCⅡ代码 ②向显示器输出错误信息 使用形式: ①fprintf(文件指针,"输出格式",输出项系列); ②fprintf(stderr,"错误信息");使用实例:fprintf(stream,"%d %c %f",i,c,f); 其中定义FILE *stream; int i; char c; float f;返回值:成功则返回输出的字节数,错误则返回EOF。头文件:stdio.h函数41。FP_SEG()获取远地址段值的宏原形:unsigned FP_SEG(void far *p)功能:取得和设置远指针*p段地址值返回值:段地址值头文件:dos.hfree()释放已分配内存的函数原形:void free(void *block)功能:释放由calloc、malloc、realloc函数调用所分配的内存。头文件:stdlib.h、alloc.h函数42。fscanf()格式化输入函数原形:int fscanf(FILE *stream,const char *format[,address,...])功能:从一个流中扫描输入字段,一次扫描一个字符,每个输入字段根据format所指格式指示符格式化后,把输入字段存在format后面由地址参数给出的位置上。使用格式:fscanf(文件指针,"输入格式",输入项系列);使用实例:fscanf(fp,"%d",b); 从fp指向的文件中读取十进制整数 (ASCⅡ形式)赋予变量b注:当文件指针是stdin时,与scanf功能完全相同头文件:stdio.h函数43。fseek()移动文件指针函数原形:int fseek(FILE *stream,long offset,int whence)作用:强制一个文件的位置指针指向某个特定的位置(甚至超出文件的尾部)。使用格式:fseek(*文件指针,偏移(长整型),起点) 定义 FILE *文件指针名; "起点"取值: 0或SEEK_SET(表示文件开头) 1或SEEK_CUR(表示当前位置) 2或SEEK_END(表示文件尾端)返回值:0表示成功,非0值表示失败头文件:stdio.h函数44。fwrite()把参数写入流中的函数原形:size_t fwrite(const void *ptr,size_t size,size_t n,FILE *stream)功能:附加n个数据项(每个数据项长度为size个字节)到指定的输出文件后,数据从ptr处开始添加。ptr是指向任意对象的指针。返回值:调用成功时返回实际写的数据项数,出错时返回一短整形数值。头文件:stdio.h例:fwrite(s,sizeof(s),1,stream); 其中s是一结构变量,stream=fopen();函数45。gcvt()把双精度数转化成字符串的函数原形∶char*gcvt(value,ndigit,buf) 其中∶double value是待转化数 int ndigit是转化长度 char *buf保存转化后的地址头文件∶stdlib.h函数46。geninterrupt()执行中断函数原形:void geninterrupt(int n)调用方式:geninterrupt(软中断号)功能:产生一个8086软中断注:需先向寄存器传递入口信息(用伪变量) 例如 伪变量=要赋的值(入口信息); 调用geninterrupt()函数后得接受出口信息 例如 变量名=伪变量伪变量∶Turbo C 允许使用伪变量直接访问相应的8086寄存器。伪变量的类型有两种。 ① unsigned int : _AX、 _BX、 _CX、 _DX、 _CS、 _DS、 _SS、 _ES、_SP、 _BP、 _DI、 _SI ② unsigned char: _AL、 _AH、 _BL、 _BH、 _CL、 _CH、 _DL、 _DH函数47。getc()从流中取字符的宏原形:int getc(FILE *stream)功能:返回输入流stream中一个字符,移动文件指针使之指向下一个字符。使用格式:字符变量=getc(文件指针) (正常情况下读取到代码值,读到文件尾或出错时返回EOF)注:需定义 char 字符变量;FILE *文件指针;头文件:stdio.h函数48。getch()从键盘无回显地读取一字符的函数功能:将键盘上输入的单个字符的值(ASCⅡ 码)立刻赋给字符型变量调用方式:字符形变量=getch()注:需先定义 char 字符形变量;头文件:conio.h函数49。getchar()从stdin流中读取一个字符的函数功能:将键盘上输入的单个字符的值(ASCⅡ 码)回车后赋给字符型变量调用方式:字符型变量=getchar()注:需先定义 char 字符型变量;头文件:stdio.h函数50。getcurdir()读取指定驱动器的当前目录的函数原形:int getcurdir(int drive,char directory) drive=0(缺省);1(A驱动器);... directory用来存放目录名,不包括驱动器名,不以反斜杠开始。返回值:0(调用成功);1(出错)头文件:dir.h函数61。getcwd()读取当前目录的函数原形:char *getcwd(char *buf,int buflen)功能:读取当前目录的完整路径名(包括驱动器名),最长为buflen个字节,存放在buf中。如果buf为NULL,函数将分配一个buflen字节长的缓冲区,以后可将本函数的返回值作为free函数的参数来释放该缓冲区。返回值:若buf非空,调用成功返回buf,出错返回NULL;若buf为NULL,返回指向已经分配的内存缓冲区地址。头文件:dir.h函数62。getdate()读取系统日期函数原形:void getdate(pdate) struct date { int da_year; int da_day; int da_mon; }; struct date *pdate;头文件:dos.h函数63。getdfree()读取磁盘空闲空间的函数原形:void getdfree(drive,dtable) unsigned char drive;驱动器号(0-当前;1-A;2-B;...) struct dfree { unsigned df_avail;//可使用的簇数 unsigned df_total;//每个驱动器的簇数 unsigned df_bsec;//每个扇区的字节数 unsigned df_sclus;//每个簇的扇区数(出错时返回0xffff) }*dtable;功能:把由drive指定的关于驱动器的信息返回到dtable函数64。getdisk()读取当前磁盘驱动器号函数原形:int getdisk(void)功能:取得当前驱动器号(0=A;1=B;....)头文件:dir.h函数65。getenv()读取环境变量的当前值的函数原形:char *getenv(const char *name)用法:s=getenv("环境变量名"); 需先定义char *s;功能:返回一给定的环境变量值,环境变量名可大写或小写。如果指定的变量在环境中未定义,则返回一空串。 头文件:stdlib.h函数66。getimage()将指定区域的位图象存入内存的函数原形:void far getimage(int left,int top,int right,int bottom,void far *bitmap)功能:将图像(矩形区域)从屏幕拷贝到内存,*bitmap指向内存中存放图像的区域。该区域的前两个字节用于存放矩形的高和宽。头文件:graphics.h函数67。getmaxx()返回屏幕上最大的X坐标值的函数原形:int far getmaxx(void)功能:返回当前图形驱动程序和图形模式下最大的X坐标值。头文件:graphics.h函数68。getmaxy()返回屏幕上最大的Y坐标值的函数原形:int far getmaxy(void)功能:返回当前图形驱动程序和图形模式下最大的Y坐标值。头文件:graphics.h函数69。getpixel()读取像素颜色的函数原形:unsigned far getpixel(int x,int y)头文件:graphics.h函数70。getpsp()原形∶unsigned getpsp(void)功能∶使用DOS系统调用0x62,返回程序段前缀(PSP)的段地址头文件∶dos.h函数71。gets()从标准输入流stdio中读取一字符串的函数功能:将键盘上输入的字符串立刻赋予字符串变量并显示出来调用方式:gets(字符串变量名)注:需定义 char *字符串变量名;函数72。gettime()读取系统时间的函数原形:void gettime(ptime) struct time { unsigned char ti_min; unsigned char ti_hour; unsigned char ti_hund;//百分之一秒 unsigned char ti_sec; }; struct time *ptime;函数73。getvect()读取中断向量函数原形:void interrupt(*getvect(int interruptno))功能:读入由interruptno(0-255之间)所指定的中断向量值,并把该中断向量值作为中断函数的远指针返回。返回值:指定中断向量的当前4字节值。头文件:dos.h使用实例:oldfunc=getvect(5); 先定义void interrupt(*oldfunc)(); 用后恢复setvect(5,oldfunc);函数74。getx()返回当前图形方式下位置的X坐标值的函数原形:int far getx(void);头文件:graphics.h函数75。gety()返回当前图形方式下位置的Y坐标值的函数原形:int far gety(void);头文件:graphics.h函数76。imagesize()返回保存图像缓冲区大小的函数原形:unsigned far imagesize(int left,int top,int right,int bottom)功能:确定保存图像所需的存储区大小。返回值:返回存储区的大小(字节),若所需内存大于等于64K-1字节,则返回0xffff(-1)。头文件:graphics.h函数77。initgraph()显示模式控制函数(初始化图形系统函数)功能:把图形适配器设置为一种图形模式,将选择的图形驱动程序(在BGI文件中)装入到内存。调用方式: void far initgraph(int far *driver,int far *mode,char far*path) 其中: *driver可以是数值(0-10),也可是符号值(DETECT、CGA、MCGA、EGA、EGA64、EGAMONO、RESERVED、HERCMONO、ATT400、VGA、 PC3270)。 *mode参数从图形系统为各种常用的图形适配器设置的图形模式中(CGAC0、...、IBM8514HI--见头文件graphics.h)选取。常用的有:VGAMED或1