《C程序设计》谭浩强第三版知识概括-(1)

上传人:su****e 文档编号:139429170 上传时间:2022-08-22 格式:DOCX 页数:63 大小:696.39KB
收藏 版权申诉 举报 下载
《C程序设计》谭浩强第三版知识概括-(1)_第1页
第1页 / 共63页
《C程序设计》谭浩强第三版知识概括-(1)_第2页
第2页 / 共63页
《C程序设计》谭浩强第三版知识概括-(1)_第3页
第3页 / 共63页
资源描述:

《《C程序设计》谭浩强第三版知识概括-(1)》由会员分享,可在线阅读,更多相关《《C程序设计》谭浩强第三版知识概括-(1)(63页珍藏版)》请在装配图网上搜索。

1、说明: 以下的内容是对C程序设计(第三版 谭浩强著)知识点的概括,主要是提取全书详细的知识点。我所呈现给大家的内容绝大部分是图表的形式,结构清晰、层次分明。一些上机操作易出错的细节也在具体内容中作了强调,其中包含了本人的一些上机实践经验。对于要参加国家二级计算机C语言等级考试的学生特别有帮助。对初学C语言的人可作为工具书来参考。另外我对原书中3到6 章的知识点顺序稍作调整重组。值得注意的是,C程序设计(第三版 谭浩强著)书中对C编译系统并未指定,而以下内容完全是按照Visual C+6.0的编译系统来写的,所以涉及的具体的情况均是按Visual C+6.0的编译系统给出的。这也正是特别适用参加

2、国家二级计算机C语言等级考试学生的一个原因。 我写这个知识总结与大家分享,是想对学C的童鞋有些帮助,当然也是自己学习C的一个总结。当然本人也是刚学习C一学期的新手,出现错误和纰漏在所难免,希望大家谅解。也非常欢迎有兴趣的朋友致邮572009833进行相关的讨论。 竹林幻影 2012-08-25 于沈阳 I 目 录 第一章 C语言的特点1 第二章 算 法2 第三章 数据类型4 第四章 四种基本运算7 第五、六章 程序的三种基本结构10 第七章 数 组18 第八章 函 数22 第九章 预处理命令28 第十章 指 针30 第十一章 结构体与共用体37 第十二章 位运算44 第十三章 文 件47 附录

3、 C 语言的运算符和结合性50 II 第一章 C语言的特点 一种语言之所以能存在和发展,并具有较强的生命力,总是有其独特之处。C 语言的主要特点概括如下: (1) 语言简洁、紧凑,使用方便、灵活。 (2) 运算符丰富。 (3) 数据类型丰富。 (4) 具有结构化的控制语句。用函数作为程序的模块单位,便于实现程序的模块化。 (5) 语法限制不太严格,程序设计自由度大。 (6) C允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。 (7) 生成目标代码率高,程序执行效率高。C语言一般只比汇编程序生成的目标代码率低10%20%。 (8) 用C语言编写的

4、程序移植性好(与汇编语言相比)。 第二章 算 法 目录 内 容 (一) 算法的概念 广义的说,为解决一个问题而采取的方法和步骤,就成为算法。不过这里只限于计算机算法,即计算机能执行的算法。计算计算法可分为两大类:数值运算算法和非数值运算算法。 (二) 算法的特性 1) 2) 3) 4) 有穷性。一个算法包含的操作步骤应有限。 确定性。算法中的每一个步骤应当都是确定的。 有零个或多个输入。 有一个或多个输出。没有输出的算法是没有意义的。 5) 有效性。算法中的每一个步骤都应有效的执行,并得到确定的结果。 (三) 算法的表示 1) 2) 3) 4) 5) 用自然语言表示算法。 用流程图表示算法。

5、3种基本结构和改进的流程图。 I 3种基本机构:顺序结构、选择结构和循环结构。 II 3种结构的共同特点: A. 只有一个入口; B. 只有一个出口; C. 结构内的每一部分都有机会被执行到; D. 结构内不存在“死循环”。 III 用NS流程图表示算法,流程图符号: A B A. 顺序结构 A B p B. 选择结构 成立 不成立 (当)p1(成立) A C. 循环结构 A (直到)p1(成立)用伪代码表示算法: 用介于自然语言和计算机语言之间的文字和符号来描述算法。 用计算机语言表示算法。 (四) 结构程序设计方法 为得到结构化程序的需实施: 1) 自顶向下; 2) 逐步细化; 3) 模块

6、化设计; 4) 结构化编码。 第三章 数据类型 一、概述 (一) 数据类型 C 语言提供以下的数据类型,由这些数据类型可以构造出不同的数据结构。 数据类型 基本类型 指针类型(*) 空类型(void) 字符型(char) 枚举类型(enum) 构造类型 数组类型 结构体类型(struct) 共用体类型(union) 浮点型 单精度型(float) 双精度型(double) 长双精度型(long double) 整型 短整型(short int) 长整型(long int) 基本整型(int) (二) 常量与变量 名称 举例 习惯 声明 使用 常量 a 用#define 声明时标志符大写 #de

7、fine 标识符 字符串 变量 a(int a;) 标识符小写 类型 标识符; 先定义后使用 标识符:只能由字母、数字和下划线组成,且第一个不能为数字。大小写敏感。 合法的用户标识符:不与系统关键字相同的标识符。 二、最常见的三种基本类型 目录 内 容 (一)整型 类 型 位数(字节) 范 围 signed int 32(4) -231(231-1) unsigned int 32(4) 0(232-1) signed short int 16(2) -3276832767-215(215-1) unsigned short int 16(2) 0655350(216-1) long int

8、32(4) -231(231-1) unsigned long int 32(4) 0(232-1) (二)浮点型 两种形式 小数形式 123.0 指数形式 l 123e2和12.3E1都代表123.0(e 前必须有数字,后必须为整数) l 规范化指数形式:e(E)前小数部分中,小数点前有且只有一位非零数字。 l 浮点数用指数形式输出时按规范化指数形式输出。 分 类类 型 位数(字节) 有效数字 float 32(4) 67位 double 64(8) 1516位 long double 64(8) 1819位 由于浮点型在有效数字外的数字据随机性,应当避免将一个很大的数和一个很小的数直接相加

9、或相减,否则就会丢失“小数”。 (三)字符型 1. 字符型常 量u 表示用单撇号括起来的一个字符。如:a、X、 ?、$等。 u 转义字 符形式 含 义 ASCII码 n 换行 10 t Tab键,8个空格 9 b Backspace,退格 8 r Enter,将当前位置移到本行开头 13 f 换页,移到下页开头 12 代表字符“” 92 代表单引号字符 39 ” 代表双引号字符 34 ddd 1到3位八进制所代表的字符 xhh 1到2位十六进制所代表的字符,x不可大写 2. 字符变 量定义形式 char 字符变量名; 说明 I. 字符变量用来存放字符,它只能放一个字符。 II. 它只占一个字节

10、。另外它可以、与整型整数数据之间通用。在一定范围内两种数据可以相互输入输出。而且C语言允许字符数据与整数直接进行算术运算。 3. 字符串变 量u 用一对双撇号括起来的字符序列。注意与字符常量的区别。 u 不能把一个字符串常量赋给一个字符常量。 u C 中没有专门的字符串常量,如果想将一个字符串放在变量中以便保存,必须用字符的数组。 第四章 四种基本运算 一、算术运算 目录 内 容 (一) 算术运算符 运算符 说 明 + 加法或正运算符 - 减法或负运算符 * 乘法运算符 / 除法运算符,如5/3,若两边均为整型则5/3=1 % 模(取余)运算符,%两侧应均为整型数据,如7%4=3 (二) 优先

11、级和结合性 优先级 多个不同的运算符出现时,进行运算的先后顺序叫做运算符的优先级。以上各运算符的优先级可查附录。 结合性 若干个相同的运算符同时出现时,进行运算的顺序叫做运算符的结合性。算术运算符的结合性为“自左向右”。 (三) 强制类型转换 I. 算术表达式中的数据类型不相同时,按其中较高级别的数据类型为准对级别低的一侧数据进行转换,然后再计算,计算结果为表达式结果(只有一级)。如果表达式为多级运算,则每一级运算均按上述过程进行,最终结果为表达式结果。 II. 算术运算要想得到指定的类型的数据结果,常常需要进行类型转换才能达到;另外有些数据只有进行类型转换后才能满足某些运算的要求。例如%两边

12、需为整型数据,(int)5.4%(int)3.1=2 使用的一般形式为: (类型名)(表达式)作用是将表达式结果转换为指定的类型。值得注意的是强制类型转换并不会把变量的类型改变,只是在运算时形成一个中间数据。 III. 一个整形数据后跟一个字母u或U,该数据被认为是unsigned int类型,而后跟l或L,则认为是long int类型。 注: 数据类型高低: 高 低 double char、short float long unsigned int I.红色(横向)箭头表示必定的转换。如两个char型相加也要先转换为int型再相加。 II.蓝色(纵向)箭头表示运算对象不同类型时的转换方向。

13、III.不过箭头的方向并不表示转换是这样一级一级进行的。类型不同时是直接(一步)转换为目标(高级)类型的。 二、赋值运算 目录 内 容 () 一运算符 名 称 符 号 说 明 赋值运算符 = 运算符左侧是变量,右侧是表达式运算结果是将表达式的值赋给左侧变量。当右侧运算结果与左边变量类型不同时要进行类型转换。 复合的赋值运算符 +=,-=,* =,/=,%=, =,&=,=,|= 举例说明使用方法:a+=b相当于a=a+b;b可以是表达式,如x%=y+3与x%=(y+3)等价均可表示为x= x%(y+3)。另外后五个是关于位运算的。 自增、自减运算符 + - +i,-i(在使用i之前,先对i的值

14、加(减)1); i+, i-(在使用i之后,使i的值加(减)1)。自增自减只能针对变量使用。当其用在表达式中时有些问题要注意。 逗号运算符 , 该运算符又被称为“顺序求值运算符”。其一般形式为: 表达式1,表达式2,表达式n 逗号表达式的结果为表达式n的值。逗号运算符的优先级是所有运算符中最低的。 () 二类型转换 左值类型 右值类型 转换方法 整型 实型 舍弃小数部分 实型 整型 数值不变,添加小数位 float double 截取前面7位有效数字,但应注意数值范围 double float 数值不变,有效位扩展到16位 整型 字符型 将字符数据放到整型变量低8位,并进行符号扩展 字符型 整

15、型 只将整型低8位原样送到字符型变量存储位置 long signed int 都是32位,直接原样转送 long unsigned int 都是32位,直接原样转送,可能会出现错误 非unsigned 型整型 unsigned int 长度相同时原样转送;不同时则低位转送,此时要注意数据范围 unsigned 非unsigned 型整型 长度相同时原样转送,不同时则低位转送,但均有可能出错 注 :在表达式或含有表达式的语句(包括函数调用语句)中凡是在使用前要自增自减的均立即执行,但是使用后的自增自减要在整个表达式或语句执行完后再统一执行,执行的个数不变。另外函数调用中是自右至左执行的。 各运算

16、符的优先级和结合性均可以查附录得知。 赋值运算符左侧的标识符称为左值,右侧的表达式成为右值。 三、关系运算 目录 内 容 (一) 关系运算符 序号 运算符 名 称 优先级 结合性 小于 相同(高) 都是自左至右 大于 = 大于等于 = 等于 相同(低) != 不等于 (二) 关系表达式 用关系运算符将表达式连接起来的式子,称为关系表达式。 关系表达式的值是一个逻辑值, 非“真”即“假”。 C逻辑运算中“1”代表“真”;“0”代表“假”。 四、逻辑运算 目 录 内 容 (一)逻辑运算符 序号 运算符 名 称 优先级 结合性 & 逻辑与 三者居中 自左至右 | 逻辑或 三者居底 ! 逻辑非 三者居

17、首 自右至左 (二)逻辑表达式 用逻辑运算符将表达式连接起来的式子,称为逻辑表达式。 逻辑值判断:非0为“真”,0为 “假”。 (三)本章涉及的运算符的优先级排列 !(逻辑非) (高) 算术运算符 关系运算符 &和|(逻辑与和逻辑或) 赋值运算符 (低) 第五、六章 程序的三种基本结构 一、顺序结构 目录内 容 () C一语句概 述分 类 说 明 1) 控制语句 C控制语句只有9种。详见附录。 2) 函数调用语句 由一个函数调用加一个分号构成。 3) 表达式语句 由一个表达式加一个分号构成。 4) 空语句 只有一个分号的语句。 5) 复合语句 用 把一些语句括起来成为复合语句(又称分程序)。

18、() 二基本输入输出函数 分类函数名 使用格式 说 明 字符输入输出函数putchar putchar(字符) 可以向终端输出一个字符(包括转义字符)或整型量。 getchar getchar(字符) 从终端接收一个字符,并可将其赋给一个字符变量或整型变量。 格式输入输出函数printf printf(格式控制,输出表列) I. 格式控制包括格式说明和普通字符 (包括转义字符)两部分。整体是一个字符串形式,要用双引号括起。 II. 输出表列是要输出的数据,可以是表达式、常量或变量,用逗号隔开。 scanf scanf(格式控制,地址表列) I. 格式控制的内容同上,但在输入数据时要严格按格式输

19、入。 II. 地址表列是由若干个地址组成,可以是变量地址,或字符串首地址。 注 : 格式说明内容在输出时将用输出表列的数据按格式替换,在输入时作为读取数据的格式。格式说明的个数一般应与后面输出表列中数据个数或地址表列的个数相等。一个格式说明的构成: % 格式字符 附加格式字符 其中绿色部分不可省,蓝色部分可按需选择或省或留。三者相互无间隔。对格式字符和附加格式字符有以下两表说明: 表1,格式字符 数据类型 格式字符 说 明 整型 d或i 带符号十进制整数(输出正数时不带符号) u 无符号十进制整数 x或X 无符号十六进制整数(输出时不带前导符0x)。输出时小写表af 用小写输出,大写则用大写字

20、母输出;输入时大小写无区别 o 无符号八进制整数(输出时不带前导符0)【地址格式符】 字符型 c 字符形式,只输入或输出一个字符 字符串 s 输入输出字符串。输入时从第一个非空白字符(空格)开始到第一个空白字符结束 浮点型 f 小数形式实数(包括单双精度)。输出时隐含6位小数;输入时也可用指数形式 e或E 输入时与f作用相同,大小写无区别。输出时是按指数形式,大小写区别在于输出结果中e的大小写 g或G 输入时与f作用相同,大小写无区别。输出时选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0,大写时用指数形式输出e大写 表2,附加格式字符 字 符 说 明 l或L 用于长整型整数(在d

21、或i、x或X、u、o前)或long double型数据(在f、 e或E、g或G前) h 用于短整型数据 m(正整数) 数据最小宽度。输出数据域宽大于m时,突破m限制;域宽小于m时,左补空格。输入时按域宽读取数据 n(正整数) 输出时,对实数表小数位数;对字符串表截取的字符个数。对输入无效 - 输出时数字或字符在域内左靠。对输入无效 * 表示本输入项(该格式说明的长度)在读入后不赋给变量 补充: I. 一个格式说明中格式字符只能有一个,而附加格式字符可以多个。 II. 对附加格式字符的使用详细说明(见下页图表): 分类 类型 可用格式 说 明 输出 整型 m,-m 按附加字符说明表格操作即可。

22、mh,-mh ml或mL, -ml或-mL 字符串 m,-m 按附加字符说明表格操作即可。 m.n,-m.n I. mn时,占m列,但只取左n个字符,看有无“-” 选择右补还是左补空格。 II. m=原空格数 IV. 用“%c”输入字符时,空格和转义字符都作为有效字符输入,例如: scanf(“%c%c%c”,&c1,&c2,&c3);若输入a b c 结果:c1=a,c2= ,c3=b。 正确输入abc 在输入数据时,遇到以下情况时认为该数据结束: a, 遇到空格,或按“回车”或“Tab”; b, 按指定宽度结束,如“%3d”,只取3列; c, 遇到非法输入。二、选择结构 目录 内 容 if

23、 语句 u 基本形式 1 if(表达式)语句 说明: I if 后括号中的表达式为真时执行其后的语句,为假则执行else。 II 表达式真假的判断标准为: (a) 非0为真; (b) 0为假。 III else不能单独使用,只能是 if语句的一部分。 2 if(表达式)语句1 else语句2 3 if(表达式1)语句1 else if(表达式2)语句2 else if(表达式3)语句3 else if(表达式n)语句n else 语句n+1 u 嵌套 内嵌if 内嵌if if() if()语句1 else 语句2 else if()语句3 else 语句4 注意:if与 else 的配对关系。

24、 else 总是与上面最近一个未配对的进行配对。 u 条件运算符 形式 表达式1? 表达式2:表达式3 说明 I 执行顺序:先求解表达式1,为真(非0)则求解表达式2,并将表达式2的值作为结果;若为假(0),则求解表达式3,其值作为结果。 II 表达式2、3还可以是赋值表达式或函数表达式。 III 表达式2和表达式3类型不同时,结果的类型要以其中较高的类型为准,对结果进行转换。 switch 语句 一般形式 switch(表达式) case 常量表达式1 :语句1 case 常量表达式2 :语句2 case 常量表达式n :语句n default :语句n+1 说明 I switch后括号中表

25、达式的值可以是整型、字符型、枚举类型数据。 II 当表达式的值与某一个常量表达式的值相等时,执行该case后面的语句;若均未有匹配的,执行default后的语句。 III 执行完一个case后的语句之后,流程自动转向执行自此之下的所有语句。 IV 每一个case后的常量表达式的值须不同,否则出现矛盾。 V 各个case的出现顺序不影响结果(前提在语句1语句n后加了break 语句)。 VI 多个case可以共用一组执行语句。即在需共用的最后一个case后写共用语句,之前case后的语句省略。 三、循环结构 目录 内 容 goto语句 形式 goto 语句标号; 标号:语句; 说明 I goto

26、 语句为无条件转向语句。语句标号的定名规则与变量名相同。goto语句可先前转,也可向后转。 II 结构化程序设计主张限制使用goto语句,但也不是绝对禁止。一般来说,有两个用途: (a) 与 if 构成循环结构(一般为当型结构,可用 while循环替换)。 (b) 从循环体跳到循环体外,但在 C 语句中已有 break和continue语句来跳出本层循环和结束本次循环。只有需从多层循环跳到外层循环时才用到 goto 语句,但这种用法不符合结构化原则,一般不宜采用。 while循环 形式 while(表达式)语句 说明 I 当表达式为真(非0)时,执行语句。 II 循环体包含一个以上的语句要用花

27、括号括起,组成复合语句。否则会出现错误。 III 循环体中应有使循环体趋向于结束的语句。 dowhile循环 形式 do 循环体语句 while(表达式); 说明 先执行一次循环体语句,再判断表达式的真假,当为真时再返回执行循环体语句。 for循环 形式 for(表达式1;表达式2;表达式3)语句 说明 I 执行流程图 假 真 表达式 2求解表达式1 语句 求解表达式3 下一个语句 II 表达式1和表达式3可以省略,但表达式1后面的分号不能省。 III for语句最简单的应用形式也就是最易理解的形式如下: for(循环变量赋初值;循环条件;循环变量增值)语句 IV for语句使用灵活,完全可以

28、代替while语句。 循环的嵌套 一个循环内又可以包含另一个完整的循环,这就是循环嵌套。内嵌的循环还可以在嵌套循环,这就是多层循环。以上所讲的几种循环是可以相互嵌套的。 break语句 形式 break; 说明 它用于while循环、dowhile循环和for循环的循环体中来跳出循环,即提前结束循环。另外在switch语句用来跳出switch 选择。注意用if和goto构成的循环break无法起作用。 continue语句 形式 continue; 说明 它用于while循环、dowhile循环和for循环的循环体中来结束本次循环,即跳过循环体中下面的语句,接着进行下次是否执行循环的判定。同样

29、在用if和goto构成的循环中continue也无法起作用。 第七章 数 组 一、一维数组和二维数组 目录内 容 一维数 组项 目形 式 说 明 定 义类型说明符 数组名常量表达式; (1) 数组名的命名规则遵循标识符命名规则。 (2) 方括号中常量表达式用来表示元素个数,即数组长度。【注意】,下标是从0开始的。 (3) 常量表达式可以包括常量和符号常量,但不能包含变量。C不允许对数组大小进行动态定义。 引 用数组名下标 (1) C规定只能逐个引用数组元素,而不能一次引用整个数组。 (2) 下标可以是整型常量或整型表达式。 初始 化1) 在定义数组时对元素赋初值。将数组元素的初值依次放在一对大

30、括号内。例如:int a10=0,1,2,3,4,5,6,7,8,9; 2) 可以只给一部分元素赋值。例如:int a10=0,1,2,3,4;只给前 5 个赋初值,后5个元素值为0。 3) 如果想使一个数组中全部元素值为0,可以写成: int a10=0,0,0,0,0,0,0,0,0,0; 或int a10=0; 4) 对数组全部元素赋初值时,由于数据个数已经确定,可以不必指定数组长度。例如: int a6=0,1,2,3,4,5;可写成 int a =0,1,2,3,4,5; 二维数 组项 目形 式 说 明 定 义类型说明符 数组名常量表达式 常量表达式; (1) C 语言允许使用多维数

31、组。 (2) 多维数组原元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标变化的最快。 引 用数组名下标 下标; (1) 数组元素可以出现在表达式中,也可以被赋值。 (2) 使用数组元素时应保证下标值在已定义的数组大小范围内。 初始 化1) 分行给二维数组赋初值。例如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; 可以将所有的数据写在一个花括号内,按数组排列顺序对各个元素赋初值。例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12; 2) 可以对部分元素赋初值。例如: int a34=1,5,9; 相当于 1 0 0 0 5 0 0 0

32、 9 0 0 0 也可对各行中的某一元素赋初值。如: int a34=1,0,6,0,0,11;相当于1 0 0 0 0 6 0 0 0 0 11 0 也可以对第三行赋值,而对第二行不赋值。如: int a34=1,9; 3) 如果对全部元素赋初值,则定义数组时对第一维的长度可以不指定,但第二维不能省。例如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; 等价于: int a 4=1,2,3,4,5,6,7,8,9,10,11,12; 另外定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。例如: int a 4=0,0,3,0,10; 其各组元素为:0

33、 0 3 0 0 0 0 0 0 10 0 0 二、字符数组 目录内 容 一、字符数 组项 目形 式 说 明 定 义char 字符数组名数组长度; 字符型和整型可以通用,故也可以定义一个整型数组来存放字符数据。 初始 化1) 逐个初始化。 2) 字符串初始化: char数组名长度=字符串; 或 char数组名 =字符串; 或作char数组名 =字符串; 逐个初始化时与其他类型数组的形式类似。 引 用可以逐个引用元素。 字符串结束标 志u C语言规定字符串结束标志为0。即遇到0时,表示字符串结束,由它前面的字符组成字符串。 u 字符串常量的最后系统会自动加上0。而对字符数组来说,如果它的长度比赋

34、值个数多,则多出的元素全为 0,如果刚好,且没有人为加上0,也是可以的,但用%s格式输出该数组时,可能并不按数组长度或实际字符串长度停止。 字符数组的输入输 出1) 逐个输入输出。用格式符“%c”。 2) 将字符串一次输入或输出。用格式符“%s”。 注意: (1) 输出字符不包括0。 (2) 用格式符“%s”输出遇到0 才结束。 (3) 若要用一个 scanf 函数输入多个字符串,则用空格作各个字符串的分隔符。但要用这种格式输入一个包含空格的字符串是不行的。 (4) 用 scanf 函数且是“%s”格式输入字符串时,字符数组名即表示地址,不能再加取地址符&。 (5) 关于字符串的一次输入输出,

35、由于字符串结束标志符的原因(第(2)条),有些具体细节上机实践更易领会。 二、字符串处理函数 序号 函数名 使用形式 功能介绍 1 puts puts(字符数组) 将一个字符串(以0结束的字符序列)输出到终端。字符串中可以包含转义字符。 gets gets(字符数组) 从终端输入一个字符串到字符数组,并得到一个函数值。该函数值为字符数组的起始地址。 2 strcat strcat(字符数组1,字符数组2) 其作用是将字符串 2 连接到字符串 1 后面,结果放在字符数组1中,字符数组1应足够大。函数的返回值是字符数组 1 的地址。 3 strcpy strcpy(字符数组1,字符串2) 它的作用

36、是将字符串 2 复制到字符数组 1 中去。同样字符数组1应足够大。 strncpy strncpy(字符数组1,字符串2,n) 用字符串2前面n个字符去替换字符数组1的前n个字符。注意替换的字符个数不应多于字符数组 1 原有的个数(不包括0)。 4 strcmp strcmp(字符串1,字符串2) 它的作用是比较字符串 1 和字符串2: A,相等,值为0; B,大于,值为一个正整数; C,小于,值为一个负整数。 5 strlen strlen(字符串) 作用是测算字符串的长度(不含0)。值为测算结果。 6 strlwr strlwr(字符串) 作用是将字符串中的大写字母换成小写字母。 stru

37、pr strupr(字符串) 作用是将字符串中的小写字母换成大写字母。 第八章 函 数 一、函数 目录内 容 . 一函数的概述 1) C程序的执行是从main函数开始的,如是在main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行。 2) 所有函数都是平行的,即在定义函数时是分别进行的,是互相独立的。函数间可以互相调用,但不能调用main函数。main函数是系统调用的。 3) 函数的简单分类 : a) 从用户使用角度: i. 标准函数; ii. 用户自己定义的函数。 b) 从函数的形式来看: i. 无参函数; ii. 有参函数。 二函. 数的定义形式 u

38、 无参函数定义形式 u 有参函数定义形式 u 空函数 类型标识符 函数名() 声明部分语句部分 类型标识符 函数名(形参表列) 声明部分语句部分 类型标识符 函数名() . 三函数的参数和函数的值 u 参数 形参:在定义函数时在函数名后括号中的变量名称为形参。 实参:在调用函数时,函数名后括号中的参数称为实参。 n 说明: (1) 在未出现函数调用时形参不占内存单元。调用时才分配内存单元,且调用结束后,所占的内存单元也随之释放。 (2) 实参可以是常量、变量或表达式,但要求它们有确定的值。 (3) 在被定义的函数中,必须指定形参的类型。 (4) 形参与实参的类型应相同或者赋值兼容。 (5) 在

39、C中,实参和形参的数据传递时“值传递”,单向传递。在内存中形参和实参是不同的内存单元,在执行一个被调用函数时,形参的值发生改变,并不会改变主调函数实参的值。 u 返回 值1) 返回值通过return语句获得:return(返回值);或return 返回值;。一个函数中可以有多个 return 语句,结果以执行到的第一个为准,且执行一个 return 语句后该函数就被调用结束;也可以没有。不需要返回值的函数一般定义为void类型,此时不得出现return语句。 2) 函数的类型应与返回值类型一致,若不一致,则以函数类型为准。 四函. 数的调用 项 目内 容 u 函数的调 用1) 调用形式 函数名

40、(实参表列)当然无参函数没有实参表列。 2) 调用方式 (1) 函数语句 函数调用作为一个语句。 (2) 函数表达式 函数作为一个表达式的一部分。 (3) 函数参数 函数调用作为另一个函数的实参。 3) 函数声明和函数原型 被调函数应具备的条件: (1) 被调函数必须存在(库函数或自定义函数); (2) 若为库函数,必须用#include命令包含所需的文件; (3) 若为自定义函数,有以下情况: i. 函数的定义位置在主调函数之前:可不必声明; ii. 函数定义位置在主调函数之后,则需要声明: a) 在主调函数中声明被调函数; b) 在文件开头声明,则从声明处到文件结尾中间所有函数可调用该函数

41、而不用再声明; c) 若被调用函数类型为整型,C允许调用前不用声明。 函数原型的一般形式有两种: (1) 函数类型 函数名(参数类型1,参数类型n); (2) 函数类型 函数名(参数类型1 参数名1,参数类型 n 参数名); u 嵌套调 用 嵌套定义:在定义一个函数时,其函数体有包含另一个函数的完整定义。 嵌套调用:在调用一个函数的过程中又可以调用另一个函数。 C语言不能嵌套定义函数,但可以嵌套调用函数。 u 递归调 用概 念在调用一函数的过程中又直接或间接地调用该函数本身,称为递归调用。 直接和间接调 用直接 f函数 调用f函数 左边两种调用示意图都是无终止的调用,在程序设计是只能是有限次的

42、、可终止的调用。 间接 f1函数 f2函数 调用f2函数 调用f2函数 . 五数组作函数的参数 u 数组元素作函数参数 作用效果与变量作实参一样,均为“值传递”方式。 u 数组名作函数参数 1) 用数组名作函数参数,应该在主调和被调函数分别定义数组。 2) 形参数组的大小不起作用,所以可以在定义时在数组名后跟一个方括号。 3) 用数组名作函数实参时,不是把数组元素的值传递给形参,而是把实参数组的首地址传递给了形参数组,这样形参数组中元素的值发生变化时,实参的元素值也同时发生了变化。 u 多维数组名作函数参数 可以用多维数组名作为函数的实参和形参,在被调用函数中对形参数组定义时可以指定每一维的大

43、小,也可省略第一维的大小说明,C编译系统不检查第一维的大小。 但是不能把第二维以及其他高维的大小说明省略。另外指定一维而省略第二维也是不对的。不过第二位相同时,形参一维可以与实参不同。 二、作用域和存储类别 目录内 容 一、 作用域 1) 变量的作用 域项目 概 念 说 明 局部变量 在一个函数内定义的变量是内部变量,他只在本函数范围内有效,在此函数以外是不能使用它们的。这称为“局部变量”。 (1) 各个函数内定义的变量只在本函数有效,主函数内的变量也不例外。形参也是局部变量。 (2) 不同函数中可以使用相同的变量名而互不干扰。 (3) 在函数内部,复合语句中定义的变量,只在本复合语句中有效。

44、 全局变量 定义在函数之外的变量成为外部变量,外部变量是全局变量。它的有效范围为从定义变量的位置开始到本源文件结束。 (1) 为了区别全局变量和局部变量,习惯将全局变量名的第一个字母大写。 (2) 不必要时不要使用全局变量: i. 全局变量占内存的时间长; ii. 它使函数的通用性降低了; iii. 多使用会降低程序清晰性。 (3) 同一文件中,若外部变量与局部变量同名,则局部变量作用的范围内,外部变量被“屏蔽”。 2) 函数的使用 域项 目概 念 定义形式 内部函 数若一个函数只能被本文件中其它函数调用,它称为内部函数。 static 类型标识符 函数名(形参表); 外部函 数一个函数可供其

45、他源文件中函数调用,它称为外部函数。 extern 类型标识符 函数名(形参表); 注:a.定义时 extern 表示该函数为外部函数,省略则默认为外部函数; b.在需要用到该函数的文件中,需用 extern对其声明,可省写extern。 二存储类别 目录 内 容 内存中的用户 区内存中共用户使用的存储区分为三部分: 1) 程序区; 2) 静态存储区;全局变量存放在该单元。 3) 动态存储区;该区域主要存放函数形参、自动变量及函数调用时的现场保护和返回地址。 变量存储方式分为静态存储、动态存储这两大类,具体又分为以下4种。 u auto变量 自动存储类别,局部变量中未用static声明的变量都

46、隐含为此类别,即auto可省写。声明形式:auto 类型标识符 变量名;(以下几种声明形式类似)。 u static变量 声明局部变 量作用 使局部变量的值在函数调用结束后不消失而保留原值。下次调用时变量值还在。 说明 (1) 静态局部变量属于静态存储类别,在整个程序运行期间都不释放占用内存。 (2) 对静态局部变量时在编译时赋初值,即只赋初值一次,在程序运行时已有初值。 (3) 静态局部变量和全局变量若未赋初值,则编译时自动赋初值为0(对数值变量)或空字符(对字符变量);而对自动变量不赋初值其值是不确定的。 (4) 虽然静态局部变量在函数调用结束后仍存在,但其它函数还是不能够引用它。 (5)

47、 若非必要尽量不要多用静态局部变量。 适用情况 (1)(2) 需要保留函数上一次调用结束的值。 若初始化后,变量只被引用而不改变其值。 声明外部变 量作用 在程序设计中希望某些外部变量只限于本文件引用,而不能被其他文件引用,这时便可用 static 在外部变量定义时声明为静态外部变量。 这种声明利于在程序设计中由若干人完成各个模块时,各个模块中使用相同的外部变量名而不互相干扰。 说明 外部变量本身就是静态存储变量 ,不要误认为只有加上static 声明才是静态存储变量。 u register变量 作 用如果有一些变量使用特别频繁,则为存取变量的值要花费不少时间。为了提高效率,C允许将局部变量的

48、值放在CPU中的寄存器中,这种变量叫做寄存器变量,用register作声明。 说 明(1) 只有局部自动变量和形参作为寄存器变量。 (2) 计算机中的寄存器数目有限,不能定义任意多个寄存器变量。不同的编译系统对 register 变量的处理方法不同(如有的作自动变量处理)。 (3) 对一个变量只能声明一种存储类别。 (4) 现在的优化编译系统能够识别使用频繁的变量,从而自动地将这些变量放在寄存器中,而不用程序设计者指定。 u extern变量 作 用外部变量的作用域是从变量的定义处到本源程序文件结束。用 extern 声明外部变量可以扩展外部变量的作用域。 适用情 况(1) 若外部变量的定义不

49、是在开头进行的,要想在定以前使用该变量,则可用extern对其声明,使其作用域扩展为从“声明”开始。 (2) 若要从本文件中引用另一个文件中的外部变量,那么用extern 在本文件中对该变量进行声明。 注 :用extern声明外部变量时,类型名可以省写。例如: extern int Num,Add; 可写为:extern Num,Add; 但对于auto、register、static声明变量时,只能在定义变量的基础上加上这些关键字,而不能像extern这样单独使用。 变量的声明和定 义广义的声明:声明包括定义,但并非所有的声明都是定义。 狭义的声明:不需要建立存储空间的声明称为声明。 定义:

50、建立存储空间的声明称为定义。 u 外部变量的定义只能有一次,而声明可以有多次;另外对外部变量的初始化只能在“定义”时进行,而不能在声明时进行。 第九章 预处理命令 一、宏定义 目录 内 容 一、不带参数的宏定义形 式#define 标识符 字符串 说 明1) 2) 3) 4) 5) 6) 宏名一般习惯用大写字母表示,以和变量名区别,但并非规定;使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量;而且可以使用宏定义来提高程序的通用性;宏定义是用宏名代替一个字符串,也就是简单的置换,不做正确性检查;宏定义不是C语句,不必在行末加分号。如果加了分号则连分号一起进行置换; #define

51、 命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束;可以用#undef命令终止宏定义的作用域; 7) 在进行宏定义时,可以引用已定义的宏名,可以层层置换; 8) 对程序中用双撇号括起来的字符串内的字符,即使与宏名相同也不进行置换; 9) 宏定义是专门用于预处理命令的一个专有名词,它与定义变量的含义不同,只作字符替换,不分配内存空间。 二、带参数的宏定义 形 式#define 宏名(参数表) 字符串 说 明1) 2) 对带参数的宏的展开只是将程序语句中宏名后面括号内的实参按#define 命令行中字符串进行对应替换;在宏定义时,在宏名与参数表括号之间不应加空格;否则将空格以后的字符都作为字符串的一部分。 与函数的区别1) 2) 3) 函数调用时,先求出实参表达式的值,然后代入形参。而使用带参数的宏定义只是进行简单的字符替换;函数调用时在程序运行是处理的,为形参分配临时的内存单元。而宏展开则是在编译前进行的,在展开时并不分配内存单元,不进行值的传递处理 ,也没有“返回值”的概念;对函数中的实参和形参都是要定义类型的,二者的类

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!