《2022年C语言复习日记 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言复习日记 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言复习日记C语言具有下列特点: 2003 年 10 月 15 日C 是中级语言它把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。C 是结构式语言结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、 维护以及调试。 C 语言是以函数形式提供给用户的, 这些函数可方便的调用,并具有多种循环、条件语句控制程序流向, 从而使程序完全结构化。C 语言功能齐全 C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高
2、。另外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大, 可以实现决策目的。C 语言适用范围大 C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS 、UNIX,也适用于多种机型。1.C语言由函数组成函数是C程序的基本单位,必须有且唯一的MAIN函数;拥有大量的函数库2.函数的定义函数类型、函数名、函数参数、函数参数类型等;3.函数体由 包含内的部分,也称为程序块,加入 内可包含多个程序语句,但整体作用相同;4.MAIN是 C语言程序的入口;5.C语言程序的语句以; 结束,一行可由多外语句组成;一个语句也可占用多行;6.C语言的注释:/* *
3、/ ;7.C 语言自身没有单独的输入或输出指令,但库函数提供了多个输入输出函数。如“STDIOH”提供 PRINTF及 SCANF 语句;8.程序的数学表达式:1.程序 = 算法 + 数据结构 + 程序设计方法 + 语言工具和环境9.算法( Algorithm运算法则)是以数据为对象的具体操作过程,是程序的灵魂。一个程序的优劣很大部分决定于程序的算法。算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。一个算法应该具有以下五个重要的特征:有穷性:一
4、个算法必须保证执行有限步之后结束;确切性:算法的每一步骤必须有确切的定义;输入: 一个算法有0 个或多个输入,以刻画运算对象的初始情况,所谓0 个输入是指算法本身定除了初始条件;输出: 一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 1.数据结构( DATA STRUCTU
5、RE)指数据的组织形式,一般以数据类型表现的。基本数据类型有五种:整型 (int)、浮点型 (float)、字符型 (char) 、指针型 (*) 、无值型 (void);另外还有结构 (struct)和联合 (union)。2.程序设计方法主要有三种:顺序、分支、循环3.语言工具和环境即编程的工具及环境,现在一般把它们集成成IDE。说明 : 1.象其它一些语言一样, Turbo C的变量在使用之前必须先定义其数据类型,未经定义的变量不能使用。定义变量类型应在可执行语句前面, main()函数中的第一条语句就是变量定义语句, 它必须放在第一各执行语句clrscr()前面。2.在 Turbo C
6、 中, 大、小写字母是有区别的, 相同字母的大、小写代表不同的变量。3. Turbo C程序的书写格式非常灵活, 没有严格限制。加上不同的修饰符, 整型数有以下几种类型; signed short int 有符号短整型数说明。简写为short 或 int, 字长为 2 字节共 16 位二进制数 , 数的范围是 -3276832767。 可简写为INT signed long int 有符号长整型数说明。简写为long, 字长为 4 字节共32 位二进制数 , 数的范围是 -21474836482147483647 。 可简写为 LONG unsigned short int 无符号短整型数说明
7、。简写为unsigned int, 字长为 2 字节共 16 位二进制数 , 数的范围是065535。unsigned long int 无符号长整型数说明。简写为unsigned long, 字长为 4 字节共 32 位二进制数 , 数的范围是04294967295。实例测试2003 年 10 月 16 日1) 指令由操作数和操作码两部分组成2) COPY B:A.TXT PRN B 盘上的 A.TXT 文件内容在打印机上输出3) COPY X1.TXT+B1.TXT B:Z.TXT将当前盘当前目录下的两个文件X1.TXT和 B1.TXT 连接起来之后存入B盘当前目录下并且命名为Z.TXT
8、4) COPY ABC.TXT+XYZ.TXT 与 TYPE XYZ.TXTABC.TXT 功能相同5) 自增自减符 (+ + 与- -)的应用 : 单目运算符,自右而左运算设有 int x=11; 则表达式 (x+ * 1/3) =3, (+x * 1/3) =4 6) C 语言的运算符大部分都是自左至右运算,但!(取非)、(按位反)、+ +(自增)、- - (自减)、- (负号)、类型、 *(指针)、&(地址与)、sizeof(长度运算符)及赋值运算符均是自右至左运算的。7) C 语言的运算符优先顺序分15 个等级,() (圆括号)、 (下标运算符) 、-(成员指针)、. (结构体成员运算
9、符)均在第一级(最优先级)8) 一个运算式子的最终运算结果的类型由式子内所包含的占有长度最大的变量决定(不有管赋值式右边变量的类型, 如: (float)d=20/3 的结果是6.00而不是 6.67 ) 。9) =(赋值) 左边变量类型与右边式子运算结果类型不一致时要进行类型转换。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 低字长类型转高字长类型时低位字节存入低位字节,高位字节置0;10)强制类型转换运算符格式: ( 类型
10、名 ) 表达式11)实数( real number)又称为浮点数(floating-point number)有两种表示形式:十进制表示式、指数形式12)指数形式的实数表示法一般用到指数字符E(e) ,要求 E后面的指数必须为整数,且E的前面一定要有数字。123E3=123e3 = 123 * 103 13)规范化的指数形式:要求 E前面的数据部分的小数点式边只能有一位非0数字14)int x=1, y=1; 表达式 (!x|y-)=1 15)逻辑运算符:! (非)、& (与)、| (或)结果只能为真或假(1 或 0)16)字位运算符: (取反)、&(与)、| (或)、(异或)字节操作,结果为
11、整数。17)逗号运算符( , )与逗号表达式:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2 的值。18)扩展式逗号表达式:表达式1,表达式 2,表达式 3, ,表达式 n,它的值为表达式n 的值;19)C语言中已定义且未经赋值的变量的值为不定传值;已定义且未经赋值的常量的值默认为0;20)函数的形参与实参:形式参数函数命名及定义时用到的参数;实际参数调用函数时用到的参数;21)字符常量是由一对单引号括起来的单个字符;字符串常量是由一对双引号括起来的字符序列。22)分支选择指令SWITCH (表达式)中的表达式结果只能为整型数据(包括字符型);23)条件运算符(?: )表达式1?
12、表达式2:表达式3 根据表达式1 的值确定条件运算式子的最终取值是第2 式还是第3 式子;若表达式 1=真,求解表达式2 的值,式子值等于表达式2的值;若表达式 1=假,求解表达式3 的值,式子值等于表达式3的值;(注:表达式2 或表达式 3 的值只能两者取一,且必有一式不执行求解)C语言的声明与定义2003 年 10 月 17 日1 数据定义: C语言支持9 种数据类型(指针未算在内)分别是int short long unsigned char float double struct(结构体名 ) ;union (共用体名) () ;(若省略数据类型则按INT 处理,如short= sho
13、rt int) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - 2 定义新数据类型:typedef 已有类型新定义类型;3 数据的存储类型可分四种:auto(自动)处于动态存储区,局部变量的默认存储类别。动态分配变量存储空间;定义时处于不定值状态;每次被调用时值均不一样;static(静态) 处于静态存储区,变量值在整个程序运行期间不释放。变量所在存储空间(地址)不变;定义时赋初值0,且全程序只进行一次赋初值(编译时);局部静态
14、变量的作用域只局于本函数内,不为其它函数调用。register(寄存器) 只有局部分变量或形式参数可能定义为寄存器存储类型,机器会动态分配寄存器;本类型存取速度最快,但个数有限制(不同机型个数不同)。一般由编译系统指定寄存器类型,不用程序员手工设定。exter (外部)即强制式的定义外部变量(全局变量),它的作用域为从定义处起到程序文件末尾(若要扩展变量作用域,也可用外部变量声明在应用前声明)。处于静态存储区,是一个特殊形式的静态变量。(如果未指定,默认数据存储类型为auto )定义形式:存储类别数据类型变量表列4 外部数据的定义吸能用extern或 static,不能用autoregiste
15、r 5 所有变量只能定义它为四种存储类型中的任一种,不可两种或两种以下存储类型用于定义一个变量:register static int a,b,c; /错误6 外部变量声明:main() extern A,B; / 外部变量声明printf(“a=%d, b=%d ”,A,B); int A=10,B=-8; / 定义外部变量; ; ;用 EXTRERN 作外部变量声明时可以扩展外部变量的作用域,且声明时extern的类型名可写可不写,类型及值与定义处相等;外部变量的定义只能为一处,要在其它地方(函数或文件)引用时不可重复定义,但可加上 EXTRERN 作个部变量声明后使用;7 外部 (ext
16、ern)全局变量定义后可以多个文件共用,但静态 (static)全局变量作用域仅限于本文件中。8 变量的定义和声明:变量的定义是指指定变量的数据类型;声明对变量属性的说明,一般有定义性声明和引用性声明,广义来说声明包括定义,但声明并不一定是定义;声明既可指出变量的数据类型,也可只指出变量的存储类型。9 另一方面,在同一作用域内,定义和声明都不可重复。定义可以合在声明内,不可以定义句子后再一次进行声明(EXTERN 除外) ;C语言特色指针 2003 年 10 月 18 日1 一个变量的地址称为该变量的指针,指针是C语言的特色类型;2 指针变量:用于存储另一变量地址的变量;指针与指针变量是不同的
17、:指针变量的值是指针(地址) ,指针变量是一个变量名,指针是一个地址;3 指针变量的一般定义为: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - 类型标识符 * 标识符 ; 其中标识符是指针变量的名字, 标识符前加了* 号, 表示该变量是指针变量, 而最前面的 类型标识符 表示该指针变量所指向的变量的类型。一个指针变量只能指向同一种类型的变量4 指针允许的运算方式有: (1). 比较运算:指针在一定条件下, 可进行比较 , 这里
18、所说的一定条件, 是指两个指针指向同一个对象才有意义, 例如两个指针变量p, q指向同一数组, 则, =, =, =等关系运算符都能正常进行。若p=q 为真 , 则表示 p, q 指向数组的同一元素 ; 若 pq 为真 , 则表示 p 所指向的数组元素在q所指向的数组元素之前( 对于指向数组元素的指针在下面将作详细讨论) 。(2). 加减运算:指针和整数可进行加、减运算。设p 是指向某一数组元素的指针, 开始时指向数组的第0号元素 , 设 n为一整数 , 则 p+n 就表示指向数组的第n号元素 ( 下标为 n的元素 ) 。 不论指针变量指向何种数据类型, 指针和整数进行加、减运算时 , 编译程
19、序总根据所指对象的数据长度对n 放大 , 在一般微机上 ,char放大因子为1, int 、short放大因子为2, long 和 float放大因子为4, double 放大因子为 8。 对于下面述到的结构或联合, 也仍然遵守这一原则。(3). 两指针相减:两个指针变量在一定条件下, 可进行减法运算。设p, q 指向同一数组 , 则 p-q 的绝对值表示p 所指对象与q 所指对象之间的元素个数。其相减的结果遵守对象类型的字节长度进行缩小的规则。5 指针应用典型例子:int a10, *p; (1). p+i 和 a+i 均表示 ai的地址 , 或者讲 , 它们均指向数组第i 号元素 , 即指
20、向 ai。(2). *(p+i)和*(a+i)都表示 p+i 和 a+i 所指对象的内容, 即为 ai。(3). 指向数组元素的指针, 也可以表示成数组的形式, 也就是说 , 它允许指针变量带下标, 如 pi与*(p+i)等价。假若 : p=a+5; 则 p2 就相当于 *(p+2), 由于 p 指向 a5, 所以 p2 就相当于a7 。而 p-3就相当于*(p-3), 它表示 a2 。6 指向一维数组的指针变量:int a10, *p; 数组名是数组的第0 号元素的地址 , 因此下面两个语句是等价的 p=&a0; p=a; 根据地址运算规则, a+1为 a1 的地址 , a+i就为 ai的地
21、址。下面我们用指针给出数组元素的地址和内容的几种表示形式。 (1). p+i和 a+i 均表示 ai的地址 , 或者讲 , 它们均指向数组第i 号元素 , 即指向 ai。 (2). *(p+i)和*(a+i)都表示 p+i 和 a+i 所指对象的内容, 即为 ai。 (3). 指向数组元素的指针, 也可以表示成数组的形式, 也就是说 , 它允许指针变量带下标 , 如 pi与*(p+i)等价。假若 : p=a+5; 则 p2 就相当于 *(p+2), 由于p指向 a5, 所以 p2 就相当于a7 。而 p-3就相当于 *(p-3), 它表示 a2 。7 指向二维数组的指针变量:int a34=0
22、,1,2,3, 4,5,6,7, 8,9,10,11; int (*p)3; /*P内的圆括号必要, 否则定义的不是指向二维数组的指针,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - / 而是指针数组p=a; a0 与*(a+0) 等价 , a1 与*(a+1) 等价 , 因此 ai+j就与 *(a+i)+j等价 , 它表示数组元素aij的地址。因此 , 二维数组元素aij可表示成*(ai+j)或 *(*(a+i)+j), 它
23、们 都 与aij等 价 , 或 者 还 可 写 成(*(a+i)j。a 和*a 的值相同a表示数组第 0 行的地址 , 而*a 即为 a0 是数组名 , 还是地址 , 它就是数组第0 行第 0 列元素的地址。指向二维数组的指针变量p 开始时指向二维数组第0 行, 当进行 p+1 运算时 , 根据地址运算规则, 此时放大因子为4x2=8, 所以此时正好指向二维数组的第 1 行。和二维数组元素地址计算的规则一样, *p+1 指向 a01, *(p+i)+j则指向数组元素aij,aij=*ai+j=*(*(a+i)+j)=pij=*pi+j=*(*(p+i)+j) 指向二维数组的指针必须为一维数据指
24、针变量,且要求指针第一维下标值与对应数组第二维下标值相同。8 指向字符串的指针char s=a string; char *cp; cp=a string; 字符串数组变量名就是特殊指向字符串的指针,同样地, 可以把指向字符串的指针像字任串数组般应用,如*cp 或 cp0 就是字符a, 而 cpi或 *(cp+i)就相当于字符串的第i 号字符字符串数组只可以在定义时整体赋初值,指向字符串的指针则可在任何时候进行赋值操作。9 指针数组int *a10; 定义了一个指针数组, 数组中的每个元素都是指向整型量的指针, 该数组由10 个元素组成 , 即 a0, a1, a2, ., a9, 它们均为指针变量。a 为该指针数组名, 和数组一样 , a是常量 , 不能对它进行增量运算。a 为指针数组元素 a0 的地址 , a+i为 ai的地址 , *a就是 a0, *(a+i)就是 ai。指针数组对处理字符串提供了更大的方便和灵活, 使用二维数组对处理长度不等的正文效率低, 而指针数组由于其中每个元素都为指针变量, 因此通过地址运算来操作正文行是十分方便的。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -