版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机等级考试二级语言考前辅导主要内容一、试卷分析一、试卷分析二、语言概述二、语言概述三、数据类型及其运算三、数据类型及其运算四、语句四、语句五、数组五、数组六、函数六、函数七、编译预处理七、编译预处理八、指针八、指针九、结构体与共用体九、结构体与共用体十、文件十、文件十一、主要算法分析十一、主要算法分析C语言复习考试的五大要点 了解试卷,胸中有数 深刻理解,强化概念 归纳整理,适当记忆 注重实践,融会贯通 多做练习,查漏补缺 命题基本原则及考核点命题基本原则及考核点语法:一、源程序结构一、源程序结构二、基本类型数据的表示和引用二、基本类型数据的表示和引用1.系统预定义数据类型系统预定义数据类
2、型2.基本类型常量的表示基本类型常量的表示3.基本类型变量的声明和直接引用基本类型变量的声明和直接引用4.基本类型变量的间接引用(指针应用)基本类型变量的间接引用(指针应用) 三、表达式三、表达式四、标准输入四、标准输入/输出输出五、语句五、语句命题基本原则及考核点命题基本原则及考核点 难题难题: : 语法语法: : 单选, 基本概念填空, 阅读程序部分 算法和数据结构的综合应用算法和数据结构的综合应用: : 阅读程序 完善程序 上机上机 填空 改错:语法错,语义错,算法错 编程:主函数,功能函数命题基本原则及考核点命题基本原则及考核点语法:六、函数六、函数1. 函数定义函数定义2. 函数声明
3、函数声明3. 函数直接调用、间接调用(指针应用)函数直接调用、间接调用(指针应用) 4. 递归函数的定义与调用执行流程递归函数的定义与调用执行流程 5. 标识符作用域规则标识符作用域规则 七、构造类型数据成员的引用七、构造类型数据成员的引用1.数组声明和数组元素的直接引用数组声明和数组元素的直接引用2.结构定义、结构变量声明和结构变量成员的直接引用结构定义、结构变量声明和结构变量成员的直接引用3.数组元素、结构变量成员的间接引用(指针应用)数组元素、结构变量成员的间接引用(指针应用) 八、文件输入八、文件输入/输出输出九、预处理命令九、预处理命令命题基本原则及考核点一、常用算法一、常用算法1.
4、分类分类(排序排序)算法算法冒泡冒泡,选择选择,插入插入2.检索检索(查找查找)算法算法(1) 无序数据序列的查找无序数据序列的查找(见遍历算法见遍历算法)(2) 有序数据序列的查找有序数据序列的查找:二分法二分法3.遍历算法遍历算法(1) 一维数组和二维数组的遍历一维数组和二维数组的遍历(2) 单向链表的遍历单向链表的遍历(3) 文件的遍历文件的遍历4.其它基本算法其它基本算法递推法递推法,穷举法穷举法,二分法二分法,牛顿法求方程根牛顿法求方程根,梯形法求定积分等梯形法求定积分等. 命题基本原则及考核点二、典型问题二、典型问题数值问题数值问题1.素数问题素数问题2.求因子求因子3. 整数拆位
5、、反序数、回文数整数拆位、反序数、回文数4. 最大公约数最大公约数,最小公倍数最小公倍数5. 求最值、平均值求最值、平均值6. 累加累加,累乘、阶乘、级数累乘、阶乘、级数(近似值计算近似值计算)命题基本原则及考核点三、典型问题三、典型问题一维数组数据处理一维数组数据处理1.生成(数列)生成(数列)2.变换(编码变换(编码/解码,压缩解码,压缩/还原还原 ,循环移位等 )3.查找(指定值,最大值,最小值)4.排序5.插入(一个数)6.删除(一个数,重复的多个数)7.更新(一个数)更新(一个数)8.统计统计9.合并(两个数列)合并(两个数列)10.集合运算集合运算 11.模拟高精度算术运算模拟高精
6、度算术运算四、典型问题四、典型问题字符串数据处理字符串数据处理1. 子串查找,子串查找,2. 子串统计,子串统计,3. 子串删除,子串删除,4. 子串替换子串替换 ,5. 整型/实型机器数与字符串表示相互转换6. 字符串变换(编码字符串变换(编码/解码,压缩解码,压缩/还原)还原)命题基本原则及考核点命题基本原则及考核点命题基本原则及考核点五、典型问题五、典型问题二维数组数据处理数据处理1.生成(矩阵)生成(矩阵)2.变换(改变数值,改变数据存储位置)变换(改变数值,改变数据存储位置)3.查找(指定值,最小值,最大值)查找(指定值,最小值,最大值)4.排序(按行排序,按列排序)排序(按行排序,
7、按列排序)5.插入(一个数,一行数,一列数)插入(一个数,一行数,一列数)6.删除(一个数,一行数,一列数)删除(一个数,一行数,一列数)7.更新(一个数,一行数,一列数)更新(一个数,一行数,一列数)8.统计统计9.合并(两个矩阵)合并(两个矩阵)命题基本原则及考核点命题基本原则及考核点六、典型问题六、典型问题一维结构数组数据处理数据处理1.查找查找(直接查找,通过指向结构数组的指针数组查找)(直接查找,通过指向结构数组的指针数组查找)2.排序排序(结构数组排序,指向结构数组的指针数组排序)(结构数组排序,指向结构数组的指针数组排序)3.插入(一条记录)插入(一条记录)4.删除(一条记录)删
8、除(一条记录)5.更新(一条记录)更新(一条记录)6.统计统计笔试形式 基础知识基础知识和和c语言程序设计语言程序设计两部分组成两部分组成 基础知识全部为基础知识全部为单选题单选题 c语言程序设计部分分为语言程序设计部分分为单选题单选题和和填空题填空题 答题要求:答题要求: 单选题单选题的答案必须涂划在的答案必须涂划在专用答题卡上专用答题卡上; 填空题填空题的答案必须写在的答案必须写在专用答题纸上专用答题纸上(填空时注意:填空时注意:每个填空要每个填空要按标号顺序填按标号顺序填,一空占一行,不是一题,一空占一行,不是一题一行;因为一行;因为有的题目一题包含多个空有的题目一题包含多个空)。上机考
9、试形式 上机题总分为上机题总分为 填空题填空题 改错题改错题:改错题中所:改错题中所存在的错误存在的错误主要是主要是语法错误语法错误(如数组如数组的声明错误、函数定义错误等的声明错误、函数定义错误等)、运行错误运行错误(如包含不正确如包含不正确的头文件的头文件)、逻辑错误逻辑错误等。等。 编程题:编程题程序中,通常都涉及一个编程题:编程题程序中,通常都涉及一个有一定难度的有一定难度的算法算法,考生须按题目要求实现,考生须按题目要求实现二、C语言概述、 C程序的结构、程序的结构、main函数函数一个程序可由多个函数构成,其中必有唯一的一个主函数。一个程序可由多个函数构成,其中必有唯一的一个主函数
10、。它是整个程序的入口,也是整个程序的出口。它是整个程序的入口,也是整个程序的出口。、标识符的命名规则、标识符的命名规则规则:字母或下划线开始的字母、下划线和数字串。规则:字母或下划线开始的字母、下划线和数字串。语句中的保留字不能作为标识符。(教材语句中的保留字不能作为标识符。(教材375)所有的函数名可以作为标识符。所有的函数名可以作为标识符。、C程序的上机过程程序的上机过程编辑编辑编译编译连接连接运行运行三、数据类型及其运算1、常量、变量、常量、变量 常量:固定不变的量。常量:固定不变的量。 整型常量:整型常量: 十进制(十进制(29)、八进制()、八进制(029)和十六进制()和十六进制(
11、0 x29) 实型常量:实型常量: 小数表示(小数表示(123.456)、指数表示)、指数表示(1.23456e+002) 字符常量:字符常量: 普通字符(普通字符(A a 2 + ,)、转义字符()、转义字符(qqq xhh) 符号常量:(一般用大写字符表示)符号常量:(一般用大写字符表示) # define PI 3.1415936三、数据类型及其运算(续一) 变量:变量: 整型:整型:基本整型:基本整型:2字节字节int ( -32768-+32767 )无符号基本整型:无符号基本整型: 2字节字节unsigned int ( 065535 )长整型:长整型: 4字节字节 long in
12、t 或或long无符号长整型:无符号长整型: 4字节字节 unsigned long int 或或 unsigned long 实型:实型:单精度单精度: 4字节字节float双精度双精度: 8字节字节 double 字符型:字符型:有符号字符有符号字符: 1字节字节char ( -128127 )无符号字符无符号字符: 1字节字节 unsigned char ( 0255 )三、数据类型及其运算(续二)2、不同类型数据之间的混合运算、不同类型数据之间的混合运算 表达式值的类型由该式子中最长的数据类型决定。表达式值的类型由该式子中最长的数据类型决定。 float 型无条件转换成型无条件转换成d
13、ouble型。型。 char型无条件转换成型无条件转换成int型。型。 * 注意强制类型转换的用法。(类型名)注意强制类型转换的用法。(类型名) (int)x+y 等价于(等价于(int)x)+y参与运算的数据类型改变了,参与运算的数据类型改变了,x的类型不变。的类型不变。3、算术运算符和运算表达式(、算术运算符和运算表达式(+ - * / %)/ : a / b a,b都是整型都是整型 结果是整型结果是整型% : a % b a ,b 都必须是整型都必须是整型三、数据类型及其运算(续三)4、赋值运算符和赋值表达式(右结合性)、赋值运算符和赋值表达式(右结合性)号号 左边只能出现变量,具有强制
14、类型转换作用左边只能出现变量,具有强制类型转换作用if ( (c=getchar() ) !=n) 复合赋值运算复合赋值运算a*=x+y 等价于等价于a=a*(x+y)5、逗号运算符和逗号表达式、逗号运算符和逗号表达式 加加;号构成表达式语句号构成表达式语句作为其它语句的一部分或函数的参数时要加括号作为其它语句的一部分或函数的参数时要加括号6、表达式的类型识别、表达式的类型识别7、有关运算符、有关运算符功能:优先级:结合性:表达式的值:功能:优先级:结合性:表达式的值:三、数据类型及其运算(续四)8、关系运算符和关系表达式、关系运算符和关系表达式 = (6级级)= != (7级级)注意:注意:
15、等于零和不等于零的表示方式等于零和不等于零的表示方式a !a两个实数判相等和判不相等的方法两个实数判相等和判不相等的方法ax & xb 不能写成不能写成ax b ? x : y ? m : n y应先与后面的运算符结合应先与后面的运算符结合12、位运算符、位运算符 (按位取反(按位取反2级)级) &(按位与(按位与8级)级) (按位异或(按位异或9级)级) |(按位或(按位或10级)级)13、数学算式的数学算式的C语言表示语言表示三、数据类型及其运算(续八)14、输入输出函数、输入输出函数输入函数:输入函数:getchar() gets() scanf()输出函数:输出函数:
16、putchar() puts() printf()注意:注意:1)getchar() 是无参函数,从输入设备读取一个字符,包括不是无参函数,从输入设备读取一个字符,包括不可显示字符(一般形式可显示字符(一般形式c=getchar())。)。2)gets()和和puts()函数只有一个参数,且为字符串的首地址。函数只有一个参数,且为字符串的首地址。 3)scanf()函数的格式控制符中的普通字符照原样输入。函数的格式控制符中的普通字符照原样输入。4)printf()函数中的实参的求值顺序从右向左。函数中的实参的求值顺序从右向左。四、语句、表达式语句、表达式语句、函数调用语句、函数调用语句、复合语
17、句、复合语句、空语句、空语句、控制语句、控制语句四、语句(选择语句)(一)(一)if 语句一般格式语句一般格式if(表达式)语句(表达式)语句或或if(表达式)语句(表达式)语句1 else语句语句2注意:注意:“表达式表达式”应有括号,且可为各种类型的表达式应有括号,且可为各种类型的表达式“语句语句”如是复合语句应有括号如是复合语句应有括号“语句语句”还可以是还可以是 if 语句语句数学分段函数的求值问题数学分段函数的求值问题繁琐的二维数组填值问题(结合循环语句,几乎每次都考)繁琐的二维数组填值问题(结合循环语句,几乎每次都考)四、语句(选择语句_续)(二)(二)switch 语句一般格式语
18、句一般格式switch(表达式)(表达式) case 常量表达式常量表达式1 : 语句语句1;break; case 常量表达式常量表达式2 : 语句语句2;break; case 常量表达式常量表达式n : 语句语句n;break; default : 语句语句n+1 ; 注意:注意:执行流程执行流程“语句语句”可为多个单个语句,此时不必加大括号可为多个单个语句,此时不必加大括号default 语句可缺省语句可缺省switch 语句嵌套使用时,语句嵌套使用时,break语句只跳出它所处的哪层语句只跳出它所处的哪层switch整型、字符型或枚举类型根据需要选择四、语句(循环语句_1)(一)当型
19、循环语句一般格式(一)当型循环语句一般格式while(表达式)语句(表达式)语句注意:注意:“表达式表达式”应有括号应有括号“语句语句”为复合语句时应加大括号为复合语句时应加大括号在语句中应有使在语句中应有使“表达式表达式”趋于不成立的语句存在趋于不成立的语句存在在复合语句中含有在复合语句中含有break和和continue语句时的情况:语句时的情况:while (表达式)(表达式) break; continue; 四、语句(循环语句_2)(二)直到型循环语句一般格式(二)直到型循环语句一般格式do 语句语句 while (表达式)(表达式);注意注意: 无论表达式是否成立,循环体至少执行一
20、遍无论表达式是否成立,循环体至少执行一遍 “表达式表达式”应有括号,后面的应有括号,后面的“;”号不能丢号不能丢 “语句语句”为复合语句时应加大括号为复合语句时应加大括号 在语句中应有使在语句中应有使“表达式表达式”趋于不成立的语句存在趋于不成立的语句存在 在复合语句中含有在复合语句中含有break和和continue语句时的情况:语句时的情况: do break; continue; while (表达式)(表达式);四、语句(循环语句_3)(二)(二)for 型循环语句一般格式型循环语句一般格式for (表达式(表达式1;表达式;表达式2;表达式;表达式3) 语句语句注意注意: “语句语句
21、”为复合语句时应加大括号为复合语句时应加大括号在语句中应有使在语句中应有使“表达式表达式2”趋于不成立的语句存在趋于不成立的语句存在在复合语句中含有在复合语句中含有break和和continue语句时的情况:语句时的情况:繁琐的二维数组填值问题(结合循环语句,几乎每次都考)繁琐的二维数组填值问题(结合循环语句,几乎每次都考)三种循环语句相互嵌套使用的情况三种循环语句相互嵌套使用的情况五、数组(一维数组)(一)一维数组(一)一维数组定义:定义:类型名数组名类型名数组名常量表达式常量表达式;定义并初始化:定义并初始化:类型名数组名类型名数组名常量表达式常量表达式表达式列表;表达式列表;或:类型名数
22、组名或:类型名数组名表达式列表;表达式列表;引用:引用:只能引用下标变量。只能引用下标变量。注意:注意:、不能定义动态数组如:、不能定义动态数组如:int n ; int an;、只能在定义数组的时候初始化,以后不可整体赋值、只能在定义数组的时候初始化,以后不可整体赋值、除字符数组外,不可整体引用数组、除字符数组外,不可整体引用数组、一般用单循环语句引用数组元素、一般用单循环语句引用数组元素、内存中连续存储,数组名为其存储的首地址、内存中连续存储,数组名为其存储的首地址五、数组(二维数组)(二)二维数组(二)二维数组定义:定义:类型名数组名类型名数组名常量表达式常量表达式1常量表达式常量表达式
23、2;定义并初始化:定义并初始化:类型名数组名类型名数组名常量表达式常量表达式 ;引用:引用:只能引用下标变量。只能引用下标变量。注意:注意:、不能定义动态数组、不能定义动态数组、只能在定义数组的时候初始化,以后不可整体赋值、只能在定义数组的时候初始化,以后不可整体赋值、不可整体引用数组、不可整体引用数组、一般用双重循环语句引用数组元素、一般用双重循环语句引用数组元素、按行在内存中连续存储,数组名为行的行地址,、按行在内存中连续存储,数组名为行的行地址,ai为为第第i行第个元素的地址如:行第个元素的地址如:int a33 引用引用 a05 正确正确、与双重循环语句一起应用(二维数组填值问题)、与
24、双重循环语句一起应用(二维数组填值问题)五、数组(字符数组)(三)字符数组(一维、二维)(三)字符数组(一维、二维)具有普通一维数组和二维数组的性质。具有普通一维数组和二维数组的性质。特点:特点:、可以定义时初始化,也可以后用、可以定义时初始化,也可以后用strcpy()赋值。赋值。 、可以引用下标变量,也可整体引用(一维)、可以引用下标变量,也可整体引用(一维) 、一般用于存放字符串、一般用于存放字符串、字符串的基本概念、字符串的基本概念)串结束符)串结束符 )内存单元地址)内存单元地址字符串字符串、字符串操作函数的使用、字符串操作函数的使用)串长度(编程实现)串长度(编程实现) )串复制(
25、赋值)串复制(赋值)串拼接(编程实现)串拼接(编程实现) )串比较(不能用关系运算符)串比较(不能用关系运算符)、字符串的输入和输出、字符串的输入和输出 ( char c20 ; ))gets (c) ; 和和 scanf ( “%s” , c ) ; 区别区别、二维字符数组的引用有下标引用法和数组名加第一维下标引用法、二维字符数组的引用有下标引用法和数组名加第一维下标引用法六、函数 主要内容主要内容(一一)、函数的定义、函数的定义(二二)、函数的参数、函数的参数(三三)、函数的返回值、函数的返回值(四四)、函数的调用、函数的调用(五五)、数组作为函数的参数、数组作为函数的参数(六六)、局部变
26、量和全局变量、局部变量和全局变量(七七)、变量的存储类别、变量的存储类别六、函数(函数的定义)(一一)、函数的定义、函数的定义函数可理解为一个程序段,给予一定的输入就会产生一定的函数可理解为一个程序段,给予一定的输入就会产生一定的输出。函数的定义就是在使用函数前对函数功能的完整性描述。输出。函数的定义就是在使用函数前对函数功能的完整性描述。一般形式:一般形式:函数类型函数名(参数列表)函数类型函数名(参数列表) 函数体函数体 注意:注意:、函数的定义就是函数的说明、函数的定义就是函数的说明、函数由、函数由“头部头部”和和“函数体函数体”构成构成、函数类型指函数返回值的类型(可以无返回值、函数类
27、型指函数返回值的类型(可以无返回值void)六、函数(函数的参数)(二二)、函数的参数、函数的参数 参数列表中的参数为形式参数,它们和函数体中定义的变量参数列表中的参数为形式参数,它们和函数体中定义的变量一起构成该函数的局部变量,形参是接受数据的通道,由于是第一起构成该函数的局部变量,形参是接受数据的通道,由于是第一次出现,因此要作类型说明。一次出现,因此要作类型说明。注意:注意:、形参要一一说明、形参要一一说明、实参和形参要做到类型、顺序和数量一致、实参和形参要做到类型、顺序和数量一致、实参和形参可以同名,但它们都是所处函数内部的局部数据、实参和形参可以同名,但它们都是所处函数内部的局部数据
28、、实参可以是常量、量变、函数和表达式,形参只能是变量、实参可以是常量、量变、函数和表达式,形参只能是变量、在发生函数调用时,实参是将值(或地址)赋给形参的、在发生函数调用时,实参是将值(或地址)赋给形参的六、函数(函数的返回值)(三三)、函数的返回值、函数的返回值通过调用函数,从被调函数中得到的值称函数的返回值。通过调用函数,从被调函数中得到的值称函数的返回值。注意:注意:、调用函数得到返回值有三种途径:、调用函数得到返回值有三种途径:)在被调用函数中用)在被调用函数中用return语句可以(且只可)得到一个返回值语句可以(且只可)得到一个返回值 )使用全局变量,全局变量对所有函数都有效)使用
29、全局变量,全局变量对所有函数都有效 )实参和形参采用地址复用的方法(考点)实参和形参采用地址复用的方法(考点)、被调用函数有时没有返回值,此时定义为、被调用函数有时没有返回值,此时定义为void型型、被调用函数返回值类型由函数的类型确定、被调用函数返回值类型由函数的类型确定、return表达式;表达式;、被调用函数返回后,在主调函数中继续执行调用语句的下一、被调用函数返回后,在主调函数中继续执行调用语句的下一个语句个语句六、函数(函数的调用)(四四)、函数的调用、函数的调用函数调用是将程序的执行流程转向被调用函数,函数调用是将程序的执行流程转向被调用函数,被调用函数执行完毕后再回到主调用函数继
30、续执行。被调用函数执行完毕后再回到主调用函数继续执行。注意:注意:、根据被调用函数的类型函数调用有三种形式:、根据被调用函数的类型函数调用有三种形式:)函数调用作为表达式的一部分(被调用函数有返回值)函数调用作为表达式的一部分(被调用函数有返回值)函数调用作为其它函数的参数(被调用函数有返回值)函数调用作为其它函数的参数(被调用函数有返回值)函数调用加)函数调用加“;”号构成函数调用语句(被调用函数无号构成函数调用语句(被调用函数无返回值)返回值)、函数调用的形式、函数调用的形式)嵌套调用)嵌套调用)递归调用:递归函数的编程特点)递归调用:递归函数的编程特点递归函数的阅读特点递归函数的阅读特点
31、六、函 数(数组作函数的参数_1)(五五)、数组作为函数的参数、数组作为函数的参数由于可以从数组名得到数组在内存储单元存储的起始位置,由于可以从数组名得到数组在内存储单元存储的起始位置,它是一个地址常量,因此在计论数组作为函数参数时结合指针一它是一个地址常量,因此在计论数组作为函数参数时结合指针一并讨论。并讨论。()一维数组(指向变量的指针)作为函数的参数,在实参和形()一维数组(指向变量的指针)作为函数的参数,在实参和形参位置上共有四种情况参位置上共有四种情况:(假定:(假定int a 10 ; int *p ; )实参(调用点)实参(调用点) 形参(定义点)形参(定义点) x=max( a
32、,10 ) ; 地址复用关系地址复用关系 int max ( int b , int n ) x=max( a,10 ) ; 赋值调用关系赋值调用关系 int max ( int *p , int n ) x=max( p=a , 10 ) ; 地址复用关系地址复用关系 int max ( int b , int n ) x=max( p=a , 10 ) ; 赋值调用关系赋值调用关系 int max ( int *p1,int n ) 六、函 数(数组作函数的参数_2)()二维数组(指向行的指针)作为函数的参数,在实参和形参位置()二维数组(指向行的指针)作为函数的参数,在实参和形参位置 上
33、共有四种情况上共有四种情况:(假定:(假定int a 34 ; int (*p)4 ; ) 实参(调用点)实参(调用点) 形参(定义点)形参(定义点) x=max( a,3,4 ) ; 地址复用关系地址复用关系 int max ( int b4, int m,int n ) x=max( a,3,4 ) ; 赋值调用关系赋值调用关系 int max( int (*p)4 , int m,int n ) x=max( p=a , 3,4 ) ; 地址复用关系地址复用关系 int max ( int b4 , int m,int n ) x=max( p=a , 3,4 ) ; 赋值调用关系赋值调
34、用关系 int max ( int (*p1)4,int m,int n ) 六、函数(局部和全局变量)(六六)、局部变量和全局变量(变量的空间观)、局部变量和全局变量(变量的空间观)局部变量局部变量、某函数内部定义的变量,只在该函数内部有效、某函数内部定义的变量,只在该函数内部有效、分程序(复合语句)内部定义的变量,只在分程序中有效、分程序(复合语句)内部定义的变量,只在分程序中有效、形参属于局部变量、形参属于局部变量全局变量全局变量、函数外部定义的变量,作用范围从定义点开始到程序最后、函数外部定义的变量,作用范围从定义点开始到程序最后定义点之前的函数可用定义点之前的函数可用extern进行
35、申明来扩展其作用范围进行申明来扩展其作用范围、在全局变量的作用范围内如遇同名的宏定义,则在宏定义、在全局变量的作用范围内如遇同名的宏定义,则在宏定义之后,同名应该用宏名置换(之后,同名应该用宏名置换(2004年秋选择题年秋选择题26题)题)六、函数(变量的存储类别)(七七)、变量的存储类别(变量的时间观)、变量的存储类别(变量的时间观) 存储方法分两大类:存储方法分两大类: 、静态存储区:、静态存储区:全局变量全局变量(程序开始执行赋值程序开始执行赋值)、局部静态变量局部静态变量(编译时赋初值,只赋一次编译时赋初值,只赋一次)、动态存储区:、动态存储区:局部变量局部变量(含形参、函数内定义的变
36、量和分程序中定义的变量含形参、函数内定义的变量和分程序中定义的变量)具体分四种:具体分四种:、自动变量、自动变量auto 动态局部变量动态局部变量、static 申明的变量申明的变量 静态局部变量静态局部变量、register 变量变量 动态局部变量动态局部变量、extern 申明变量申明变量 扩展全局变量作用范围扩展全局变量作用范围七、编译预处理处理工作在编译前完成。处理工作在编译前完成。(一一)、宏定义、宏定义用宏体置换程序中的宏名。不要将宏体化简后代入,有嵌套用宏体置换程序中的宏名。不要将宏体化简后代入,有嵌套定义的宏名需逐层代入。定义的宏名需逐层代入。(二二)、文件包含、文件包含 和和
37、“”“”的搜索包含文件区别:的搜索包含文件区别:在库函数头文件所在库函数头文件所在的目录中寻找(标准方式)、在的目录中寻找(标准方式)、“”“”先在用户的当前目录中寻找,先在用户的当前目录中寻找,找不至再按标准方式寻找。找不至再按标准方式寻找。 文件包含不但可以包含函数的头文件,也可包含文件包含不但可以包含函数的头文件,也可包含*.文件。文件。(三三)、条件编译、条件编译八、指针(基本概念)(一一)、地址和指针、地址和指针 变量变量i 地址变量地址变量 i_point (存储其它变量地址的变量存储其它变量地址的变量) 指针变量作为函数的参数指针变量作为函数的参数i_point2000i2000
38、指针变量指针变量i_point 指向变量指向变量 i八、指针(数组和指针)(二二)、数组的指针和指向数组的指针变量、数组的指针和指向数组的指针变量由于数组连续存放的特性,当指针指向数组(即数组元素)时,由于数组连续存放的特性,当指针指向数组(即数组元素)时,通过指针指向的连续变化来指向数组中不同的元素以获取对数组元通过指针指向的连续变化来指向数组中不同的元素以获取对数组元素的操作。素的操作。例:例:int a5,int a5,* *p ; p ; p=&a3;p=&a3; * *p a3p a3 *p的计算结果找到了整型数组成员的计算结果找到了整型数组成员a3 * *&
39、a3 a3 &a3 a3 对对a3a3的地址的地址作间接存取运算,结果为变量作间接存取运算,结果为变量a3a3 & &* *p &a3p &a3对对* *p p的计算结果的计算结果进行取址运算得到进行取址运算得到a3a3的地址的地址a0a1 a2a3a4p八、指针(数组和指针_续)数组名作函数参数数组名作函数参数 实参(调用点)实参(调用点) 形参(定义点)形参(定义点) x=max( a,10 ) ; 地址复用关系地址复用关系 int max ( int b , int n ) x=max( a,10 ) ; 赋值调用关系赋值调用关系 int max
40、( int *p , int n ) x=max( p=a , 10 ) ; 地址复用关系地址复用关系 int max ( int b , int n ) x=max( p=a , 10 ) ; 赋值调用关系赋值调用关系 int max ( int *p1,int n ) 指向多维数组的指针指向多维数组的指针 实参(调用点)实参(调用点) 形参(定义点)形参(定义点) x=max( a,3,4 ) ; 地址复用关系地址复用关系 int max ( int b4, int m,int n ) x=max( a,3,4 ) ; 赋值调用关系赋值调用关系 int max( int (*p)4 , i
41、nt m,int n ) x=max( p=a , 3,4 ) ; 地址复用关系地址复用关系 int max ( int b4 , int m,int n ) x=max( p=a , 3,4 ) ; 赋值调用关系赋值调用关系 int max ( int (*p1)4,int m,int n )八、指针(表达式类型的判断) 如何判断一个是数组元素、数组元素的地址?如何判断一个是数组元素、数组元素的地址?一、一维数组一、一维数组int aN;、a是该数组在内存中的起始地址。是该数组在内存中的起始地址。、取地址运算、取地址运算、间接访问运算、间接访问运算*、下标运算、下标运算二、二维数组二、二维数
42、组int aMN;、a是该数组的行起始地址。是该数组的行起始地址。、*(a+i) 或或 ai 表示第行的第一个元素地址表示第行的第一个元素地址、取地址运算、取地址运算、间接访问运算、间接访问运算*、下标运算、下标运算取地址间接访问元素:元素:ai、*(a+i)、*&ai、*a地址:地址:a、a+i、&ai行地址:行地址:a+i i 行第个元素地址:行第个元素地址:*(a+i)、ai元素:元素:aij、*(*(a+i)+j)、*(ai+j)、(*(a+i)j地址:地址:&aij、*(a+i)+j、ai+j、&(*(a+i)j八、指针(字符串的指针) 字符串概念字符
43、串概念、以内存某一起始字节开始到、以内存某一起始字节开始到0字符结束的若干字节。字符结束的若干字节。、字符、字符0的的ASCII码值为。码值为。、字符串所占内存空间为串长加。、字符串所占内存空间为串长加。、从语言角度对字符串的理解:从内存某一起始字节开始,、从语言角度对字符串的理解:从内存某一起始字节开始,向地址值增大的方向以字节为单位连续寻找,如向地址值增大的方向以字节为单位连续寻找,如ASCII码不等于码不等于,则其所代表的字符为字符串中有效字符,如,则其所代表的字符为字符串中有效字符,如ASCII码等于,码等于,则字符串结束。则字符串结束。、内存单元某一字节的地址。、内存单元某一字节的地
44、址。、可用一维字符数组存放。、可用一维字符数组存放。、可用指向字符变量的指针存放。、可用指向字符变量的指针存放。、看见常量字符串应将其理解为第一个字符的地址。、看见常量字符串应将其理解为第一个字符的地址。八、指针(字符串的指针_续)例:例:main()main() printf( printf(“ “%s,%u,%cn%s,%u,%cn” ”, ,” ”WeWe” ”, ,” ”lovelove” ”, ,* *” ”figsfigs” ”);); 运行结果:运行结果:We,417,f We,417,f 说明说明: “lovelove” ”为指针,以为指针,以%u%u格式输出格式输出“love
45、love” ”的值的值, , 即输出该字符串的首地址。即输出该字符串的首地址。 * *“figsfigs” ”为该字符串的第一个字符。为该字符串的第一个字符。例:例:main()main() if( if(“ “abcabc” ”=“ “abcabc” ”) printf() printf(“ “Same!nSame!n” ”);); else printf( else printf(“ “Not same!nNot same!n” ”); ); 运行结果:运行结果:Not same!Not same! 说明说明:比较两个字符串的起始地址,它们不可能相同。:比较两个字符串的起始地址,它们不可能
46、相同。八、指针(指针数组)(3)(3)使用指针数组处理二维数组使用指针数组处理二维数组 例:例:int a34,int a34,* *p3p3,i ; ,i ; ( (* *p3p3是指针数组是指针数组) ) for(i=0;i3;i+) pi=ai; for(i=0;i3;i+) pi=ai;说明说明:p p 数组的三个元素数组的三个元素分别是指向整型变量的指分别是指向整型变量的指针(元素指针)针(元素指针), , 指针数指针数组名组名p p 的增值为一维数组的增值为一维数组长度长度。a00a10a20p0p1p2pp+1p+2通过指针通过指针p p引用数组元素的方式:引用数组元素的方式:
47、pijpij * *(pi+j)(pi+j) * *( (* *(p+i)+j)(p+i)+j) ( (* *(p+i)j(p+i)j注意:a为二维字符数组的情况为地址的地址,即指针的指针八、指针(指针的指针) 指针的指针(二级间址访问)指针的指针(二级间址访问)指向指针数据的指针变量又称为指针的指针,或指向指针数据的指针变量又称为指针的指针,或指针链。其定义的一般格式:指针链。其定义的一般格式: 类型说明符类型说明符 *指针变量名指针变量名例:例:static char *name=“book”,”print”,”gread”; char *p ; 定义指针的指针定义指针的指针p p=nam
48、e ; p指向指针数组指向指针数组name 则:则: *p 即即 name0 *(p+1) 即即 name1 *(p+i) 即即 nameiname name0 name1 name2b o o k 0p r i n t 0g r e a d 0pname数组数组字符串字符串八、指针(指针的指针_续)例:例:main() char *p ; static char *d=“up”,”down”,”left”,”right”; int i ; p=d ; for(i=0;i4;i+) printf(“%sn”,*p+);八、指针(返回指针值的函数)返回指针值的函数返回指针值的函数( (指针函数指
49、针函数) ) 一个函数的返回值为某种数据类型的地址值,即指针类型数一个函数的返回值为某种数据类型的地址值,即指针类型数据,称该函数为指针型函数。据,称该函数为指针型函数。 说明返回指针型函数的格式:说明返回指针型函数的格式: 类型说明符类型说明符 * *函数名函数名( (参数表参数表) ); 例:例:int *a(x , y);八、指针(返回指针值的函数_续)void main() static float score4= ; float *search(); /*search()返回返回指向实型数据的指针指向实型数据的指针*/ float *p; int i,m ; /* p为指向实型数据的
50、指针为指向实型数据的指针*/ scanf(“%d”,&m); printf(“The scores of No.%d are:n”,m); p=search(score,m); /* score为行指针为行指针 */ for(i=0;iy) z=x; if(xy) z=x; else z=y; else z=y; return(z); return(z); 八、指针(函数的指针_续)/ /* *函数函数max(),min(),add()max(),min(),add()定义略定义略* */ /main()main() int max(),min(),add();int max(),mi
51、n(),add(); int a,b ; int a,b ; printf( printf(“ “Enter a and b:Enter a and b:” ”);); scanf( scanf(“ “%d%d%d%d” ”,&a,&b);,&a,&b); printf( printf(“ “max=max=” ”); process(a,b,); process(a,b,maxmax);); printf( printf(“ “min=min=” ”); process(a,b,); process(a,b,minmin);); printf( printf(
52、“ “sum=sum=” ”); process(a,b,); process(a,b,addadd);); process(int x,int y,int (process(int x,int y,int (* *fun)()fun)() int result; int result; result= result=( (* *fun)(x,y)fun)(x,y); ; printf( printf(“ “%dn%dn” ”,result); ,result); 三次调用传递了三个三次调用传递了三个不同的函数入口地址不同的函数入口地址利用函数指针调用不同利用函数指针调用不同的函数,增加了函数
53、调的函数,增加了函数调用的灵活性用的灵活性九、结构体与共用体结构体结构体一、结构体变量的定义一、结构体变量的定义struct 结构体名结构体名 类型标识符类型标识符 成员名成员名1 类型标识符类型标识符 成员名成员名2 . 类型标识符类型标识符 成员名成员名n ;只定义了结构体类型只定义了结构体类型struct 结构体名结构体名 类型标识符类型标识符 成员名成员名1 类型标识符类型标识符 成员名成员名2 . 类型标识符类型标识符 成员名成员名n a , b , c3;定义了结构体类型和变量定义了结构体类型和变量struct 类型标识符类型标识符 成员名成员名1 类型标识符类型标识符 成员名成员
54、名2 . 类型标识符类型标识符 成员名成员名n a , b , c3;只定义了结构体变量只定义了结构体变量typedef struct DATEa , b , c3; 定义,为结构体变量定义,为结构体变量 类型标识符类型标识符 成员名成员名1 类型标识符类型标识符 成员名成员名2注意:考试中多采用此种形式注意:考试中多采用此种形式 . 类型标识符类型标识符 成员名成员名n(可嵌套定义)(可嵌套定义) DATE;定义定义DATE为结构体类型为结构体类型九、结构体与共用体二、结构体变量的引用二、结构体变量的引用只可引用最低级成员只可引用最低级成员struct data int month; int
55、 day; int year;struct int num; char name20; char sex; int age; struct data birthday; char addr30; stud;串首地址串首地址0 正确引用正确引用stud.birthday.daystud.birthday.year注意:注意:、运算符、运算符“.”为左结合性,第一级为左结合性,第一级、成员类型决定引用类型、成员类型决定引用类型、引用结构体成员可像普通变量一样、引用结构体成员可像普通变量一样赋值、输入、输出、运算赋值、输入、输出、运算九、结构体与共用体三、指向结构
56、体类型数据的指针三、指向结构体类型数据的指针# include string.hmain() struct student long int num; char name20; char sex; float score; ; struct student stu_1; struct student *p; p=&stu_1; stu_1.num=89101; strcpy(stu_1.name,Li Lin); stu_1.sex=M; stu_1.score=89.5;定义结构体变量定义结构体变量 stu_1定义结构体类型指针定义结构体类型指针P指向指向stu_1首地址首地址九、结
57、构体与共用体有了指向结构体变量的指针,对结构体变量中成有了指向结构体变量的指针,对结构体变量中成员引用的三种方法员引用的三种方法:1、结构体变量名、结构体变量名.成员名成员名2、(*p).成员名成员名3、 p - 成员名成员名“*”号运算低于号运算低于“.”运算运算P-n+p-n(+p)-n九、结构体与共用体九、结构体与共用体四、用指针处理链表四、用指针处理链表、有关函数、有关函数malloc(size); malloc(sizeof(数据类型数据类型) calloc(n,size); calloc(n,sizeof(数据类型数据类型) free(p);、链表结点的数据结构:、链表结点的数据结
58、构:struct student int num; float score; struct student *next;/*特殊成员链接需要特殊成员链接需要*/ ;结点自身需要结点自身需要九、结构体与共用体九、结构体与共用体、链表的操作、链表的操作 链表创建链表创建 结点插入结点插入 结点删除结点删除 链表输出链表输出注意:注意: 得到链表只要得到链首指针。得到链表只要得到链首指针。 调用函数对已知链表实施操作只要传递链首指针调用函数对已知链表实施操作只要传递链首指针 被调用函数都是返回指针值的函数被调用函数都是返回指针值的函数九、结构体与共用体九、结构体与共用体共用体共用体一、共用体变量的定
59、义一、共用体变量的定义union data char ch; float f; int i ; ;union data a,b,c;union data char ch; float f; int i ; a,b,c;union char ch; float f; int i ; a,b,c;union data char ch10; float f; int b5 ; a;占10个字节内存空间九、结构体与共用体九、结构体与共用体二、共用体变量的引用二、共用体变量的引用只可引用最低级成员只可引用最低级成员共用体变量名共用体变量名. .成员名成员名不能引用共用体变量,只能引用其成员。不能引用共用
60、体变量,只能引用其成员。出现在结构体的定义中。出现在结构体的定义中。#include stdio.hstruct int num; char name10; char sex; char job; union int class; char position10; category; person2;同一内存段放不同类型成员同一内存段放不同类型成员, ,某一某一时刻只有一个即最后存放的成员起作用。时刻只有一个即最后存放的成员起作用。九、结构体与共用体九、结构体与共用体枚举类型枚举类型一、枚举类型定义和枚举变量一、枚举类型定义和枚举变量: : enum weekday sun,mon,tue,wed,thu,fri,sat day; 变量变量 day 只可取只可取 sun 到到 sat 之间的单个值之间的单个值二、枚举类型的引用说明二、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年阳江市阳东县三年级数学第一学期期末联考试题含解析
- 2025年氧化锆陶瓷粉料项目提案报告模范
- 公司文员的辞职报告模板集合7篇
- 2023三年级语文下册 第一单元 语文园地配套教学实录 新人教版
- 北师大五年级语文下册的教案
- 销售年终工作总结集锦15篇
- 小学美术教案合集九篇
- 江苏地区高一年级信息技术一年教学实录15使用搜索引擎教学实录
- 我的寒假学习计划(15篇)
- 小学教师自我鉴定范文15篇
- 广东省江门市2022-2023学年高一上学期期末调研考试物理试题(一)
- (完整版)成人学士学位英语考试历年真题
- 苏州市苏教版五年级下册数学第三单元第12课《因数和倍数整理练习(第2课时)》课件
- JJF 1806-2020微小孔径测量仪校准规范
- 干部履历表-干部履历表
- GB/T 19929-2014土方机械履带式机器制动系统的性能要求和试验方法
- GB 2714-2015食品安全国家标准酱腌菜
- 年度先进员工选票标准格式
- 业委会年终总结报告
- 广东省深圳市罗湖区五年级上册期末数学试卷(及答案)
- 中国移动集团客户经理的工作总结
评论
0/150
提交评论