![IT认证]计算机等级考试二级C语言指导.ppt_第1页](http://file.renrendoc.com/FileRoot1/2018-12/22/e779f6a6-3174-4a6b-8218-96361b0e126b/e779f6a6-3174-4a6b-8218-96361b0e126b1.gif)
![IT认证]计算机等级考试二级C语言指导.ppt_第2页](http://file.renrendoc.com/FileRoot1/2018-12/22/e779f6a6-3174-4a6b-8218-96361b0e126b/e779f6a6-3174-4a6b-8218-96361b0e126b2.gif)
![IT认证]计算机等级考试二级C语言指导.ppt_第3页](http://file.renrendoc.com/FileRoot1/2018-12/22/e779f6a6-3174-4a6b-8218-96361b0e126b/e779f6a6-3174-4a6b-8218-96361b0e126b3.gif)
![IT认证]计算机等级考试二级C语言指导.ppt_第4页](http://file.renrendoc.com/FileRoot1/2018-12/22/e779f6a6-3174-4a6b-8218-96361b0e126b/e779f6a6-3174-4a6b-8218-96361b0e126b4.gif)
![IT认证]计算机等级考试二级C语言指导.ppt_第5页](http://file.renrendoc.com/FileRoot1/2018-12/22/e779f6a6-3174-4a6b-8218-96361b0e126b/e779f6a6-3174-4a6b-8218-96361b0e126b5.gif)
已阅读5页,还剩71页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机二级考试指导 语言程序设计 主讲人:黄海军 QQ:113958033 电话主 要 内 容,一、试卷分析 二、语言概述 三、数据类型及其运算 四、语句 五、数组 六、函数 七、编译预处理 八、指针 九、结构体与共用体 十、文件 十一、主要算法分析,C语言复习考试的五大要点,了解试卷,胸中有数 深刻理解,强化概念 归纳整理,适当记忆 注重实践,融会贯通 多做练习,查漏补缺,命题基本原则及考核点,语法: 一、源程序结构 二、基本类型数据的表示和引用 系统预定义数据类型 基本类型常量的表示 基本类型变量的声明和直接引用 基本类型变量的间接引用(指针应用) 三、表达式 四、标准输入/输出 五、语句,命题基本原则及考核点,难题: 语法: 单选, 基本概念填空, 阅读程序部分 算法和数据结构的综合应用: 阅读程序 完善程序 上机 填空 改错:语法错,语义错,算法错 编程:主函数,功能函数,命题基本原则及考核点,语法: 六、函数 1. 函数定义 2. 函数声明 3. 函数直接调用、间接调用(指针应用) 4. 递归函数的定义与调用执行流程 5. 标识符作用域规则 七、构造类型数据成员的引用 数组声明和数组元素的直接引用 结构定义、结构变量声明和结构变量成员的直接引用 数组元素、结构变量成员的间接引用(指针应用) 八、文件输入/输出 九、预处理命令,命题基本原则及考核点,一、常用算法 分类(排序)算法 冒泡,选择,插入 检索(查找)算法 (1) 无序数据序列的查找(见遍历算法) (2) 有序数据序列的查找:二分法 遍历算法 (1) 一维数组和二维数组的遍历 (2) 单向链表的遍历 (3) 文件的遍历 其它基本算法 递推法,穷举法,二分法,牛顿法求方程根,梯形法求定积分等.,命题基本原则及考核点,二、典型问题数值问题 素数问题 求因子 3. 整数拆位、反序数、回文数 4. 最大公约数,最小公倍数 5. 求最值、平均值 6. 累加,累乘、阶乘、级数(近似值计算),命题基本原则及考核点,三、典型问题一维数组数据处理 生成(数列) 变换(编码/解码,压缩/还原 ,循环移位等 ) 查找(指定值,最大值,最小值) 排序 插入(一个数) 删除(一个数,重复的多个数) 更新(一个数) 统计 合并(两个数列) 集合运算 模拟高精度算术运算,四、典型问题字符串数据处理 子串查找, 子串统计, 子串删除, 子串替换 , 整型/实型机器数与字符串表示相互转换 字符串变换(编码/解码,压缩/还原),命题基本原则及考核点,命题基本原则及考核点,五、典型问题二维数组数据处理 生成(矩阵) 变换(改变数值,改变数据存储位置) 查找(指定值,最小值,最大值) 排序(按行排序,按列排序) 插入(一个数,一行数,一列数) 删除(一个数,一行数,一列数) 更新(一个数,一行数,一列数) 统计 合并(两个矩阵),命题基本原则及考核点,六、典型问题一维结构数组数据处理 查找 (直接查找,通过指向结构数组的指针数组查找) 排序 (结构数组排序,指向结构数组的指针数组排序) 插入(一条记录) 删除(一条记录) 更新(一条记录) 统计,考试形式,无纸化考试:理论部分40+操作部分60(共4个大题) 理论部分有:全部为单选题 公共基础知识(数据结构与算法35,程序设计基础12分,软件工程基础23,数据库设计基础35分):10道选择题,共10分; c语言程序设计,30道选择题,共30分 操作部分: (程序填空题3*618,程序修改题2*918分,程序设计题24)共60分。 改错题:改错题中所存在的错误主要是语法错误(如数组的声明错误、函数定义错误等)、运行错误(如包含不正确的头文件)、逻辑错误等。 编程题:编程题程序中,通常都涉及一个有一定难度的算法,考生须按题目要求实现 时间:130分钟,满分100分,C语言程序设计,C语言结构:选择题1分,改错题7% 数据类型及运算 :选择题3分,3种题型均有55% 基本语句:选择题1分, 3种题型均有35% 选择结构程序设计:选择题4分, 3种题型均有35% 循环结构程序设计:选择题6分, 3种题型均有40% 数组的定义与引用:选择题2分, 3种题型均有35% 函数:选择题4分, 3种题型均有40% 编译预处理:选择题3分, 带参数的宏定义2% 指针:选择题4分, 3种题型均有35% 结构体与共用体:选择题3分, 3种题型均有7% 位运算:1分 文件:选择题2分, 多以改错和填空题,几率低,二、C语言概述,、 C程序的结构、main函数 一个程序可由多个函数构成,其中必有唯一的一个主函数。它是整个程序的入口,也是整个程序的出口。 、标识符的命名规则 规则:字母或下划线开始的字母、下划线和数字串。 语句中的保留字不能作为标识符。(教材375) 所有的函数名可以作为标识符。 、C程序的上机过程,三、数据类型及其运算,1、常量、变量 常量:固定不变的量。 整型常量: 十进制(29)、八进制(029)和十六进制(0x29) 实型常量: 小数表示(123.456)、指数表示(1.23456e+002) 字符常量: 普通字符(A a 2 + ,)、转义字符(qqq xhh) 符号常量: (一般用大写字符表示) # define PI 3.1415936,三、数据类型及其运算(续一),变量: 整型: 基本整型: 2字节 int ( -32768-+32767 ) 无符号基本整型: 2字节 unsigned int ( 065535 ) 长整型: 4字节 long int 或 long 无符号长整型: 4字节 unsigned long int 或 unsigned long 实型: 单精度: 4字节 float 双精度: 8字节 double 字符型: 有符号字符: 1字节 char ( -128127 ) 无符号字符: 1字节 unsigned char ( 0255 ),三、数据类型及其运算(续二),2、不同类型数据之间的混合运算 表达式值的类型由该式子中最长的数据类型决定。 float 型无条件转换成double型。 char型无条件转换成int型。 * 注意强制类型转换的用法。(类型名) (int)x+y 等价于 (int)x)+y 参与运算的数据类型改变了,x的类型不变。 3、算术运算符和运算表达式 (+ - * / %) / : a / b a,b都是整型 结果是整型 % : a % b a ,b 都必须是整型,三、数据类型及其运算(续三),4、赋值运算符和赋值表达式(右结合性) 号 左边只能出现变量,具有强制类型转换作用 if ( (c=getchar() ) !=n) 复合赋值运算 a*=x+y 等价于 a=a*(x+y) 5、逗号运算符和逗号表达式 加;号构成表达式语句 作为其它语句的一部分或函数的参数时要加括号 6、表达式的类型识别 7、有关运算符 功能: 优先级: 结合性: 表达式的值:,三、数据类型及其运算(续四),8、关系运算符和关系表达式 = (6级) = != (7级) 注意: 等于零和不等于零的表示方式 a !a 两个实数判相等和判不相等的方法 ax & xb 不能写成 axb 形式 a=b 不能写成 a=b 形式 在多分枝if语句中的作用,三、数据类型及其运算(续五),9、逻辑运算符和逻辑表达式 !(2级) &(11级) |(12级) 注意: a & b & c 和 a | b | c 表达式 !优先级比算术运算高 !(a & b & c) 等价于 !a | !b | !c ! ( a | b | c ) 等价于 !a & !b & !c 复杂逻辑表达式 出现在算术表达式中,三、数据类型及其运算(续六),10、自增自减运算符(右结合性) (级) 注意: a+ 和 +a 的区别 对整型、实型和字符型都可进行 在运算符为多个字符时,尽可能多地自左而右组成完整的运算符 tc 对含运算符和等表达式的处理 形如 printf(“ %d %d n”,i,i+);中函数参数求值 出现在其它表达式中注意值的变化,三、数据类型及其运算(续七),11、条件运算符和条件表达式(右结合性) ? : (13级) 注意: 唯一三目运算符 不能和if语句完全等价 右结合性 a b ? x : y ? m : n y应先与后面的运算符结合 12、位运算符 (按位取反 2级) &(按位与 8级) (按位异或 9级) |(按位或 10级) 13、数学算式的C语言表示,三、数据类型及其运算(续八),14、输入输出函数 输入函数: getchar() gets() scanf() 输出函数: putchar() puts() printf() 注意: 1) getchar() 是无参函数,从输入设备读取一个字符,包括不 可显示字符(一般形式 c=getchar())。 2) gets()和puts()函数只有一个参数,且为字符串的首地址。 3) scanf()函数的格式控制符中的普通字符照原样输入。 4) printf()函数中的实参的求值顺序从右向左。,四、语 句,、表达式语句 、函数调用语句 、复合语句 、空语句 、控制语句,四、语 句(选择语句),(一)if 语句一般格式 if (表达式) 语句 或 if (表达式) 语句1 else 语句2 注意: “表达式”应有括号,且可为各种类型的表达式 “语句”如是复合语句应有括号 “语句”还可以是 if 语句 数学分段函数的求值问题 繁琐的二维数组填值问题(结合循环语句,几乎每次都考),四、语 句(选择语句_续),(二)switch 语句一般格式 switch (表达式) case 常量表达式1 : 语句1;break; case 常量表达式2 : 语句2;break; case 常量表达式n : 语句n;break; default : 语句n+1 ; 注意: 执行流程 “语句”可为多个单个语句,此时不必加大括号 default 语句可缺省 switch 语句嵌套使用时,break语句只跳出它所处的哪层switch,整型、字符型或枚举类型,根据需要选择,四、语 句(循环语句_1),(一)当型循环语句一般格式 while (表达式) 语句 注意: “表达式”应有括号 “语句”为复合语句时应加大括号 在语句中应有使“表达式”趋于不成立的语句存在 在复合语句中含有break和continue语句时的情况: while (表达式) break; continue; ,四、语 句(循环语句_2),(二)直到型循环语句一般格式 do 语句 while (表达式); 注意: 无论表达式是否成立,循环体至少执行一遍 “表达式”应有括号,后面的“;”号不能丢 “语句”为复合语句时应加大括号 在语句中应有使“表达式”趋于不成立的语句存在 在复合语句中含有break和continue语句时的情况: do break; continue; while (表达式);,四、语 句(循环语句_3),(二)for 型循环语句一般格式 for (表达式1;表达式2;表达式3) 语句 注意: “语句”为复合语句时应加大括号 在语句中应有使“表达式2”趋于不成立的语句存在 在复合语句中含有break和continue语句时的情况: 繁琐的二维数组填值问题(结合循环语句,几乎每次都考) 三种循环语句相互嵌套使用的情况,五、数 组(一维数组),(一)一维数组 定义: 类型名 数组名常量表达式; 定义并初始化: 类型名 数组名常量表达式表达式列表; 或:类型名 数组名表达式列表; 引用: 只能引用下标变量。 注意: 、不能定义动态数组 如:int n ; int an; 、只能在定义数组的时候初始化,以后不可整体赋值 、除字符数组外,不可整体引用数组 、一般用单循环语句引用数组元素 、内存中连续存储,数组名为其存储的首地址,五、数 组(二维数组),(二)二维数组 定义: 类型名 数组名常量表达式1常量表达式2; 定义并初始化: 类型名 数组名常量表达式 ; 引用: 只能引用下标变量。 注意:、不能定义动态数组 、只能在定义数组的时候初始化,以后不可整体赋值 、不可整体引用数组 、一般用双重循环语句引用数组元素 、按行在内存中连续存储,数组名为行的行地址,ai为第i行第个元素的地址 如: int a33 引用 a05 正确 、与双重循环语句一起应用(二维数组填值问题),五、数 组(字符数组),(三)字符数组(一维、二维) 具有普通一维数组和二维数组的性质。 特点:、可以定义时初始化,也可以后用strcpy()赋值。 、可以引用下标变量,也可整体引用(一维) 、一般用于存放字符串 、字符串的基本概念 )串结束符 )内存单元地址字符串 、字符串操作函数的使用 )串长度(编程实现) )串复制(赋值) )串拼接(编程实现) )串比较(不能用关系运算符) 、字符串的输入和输出 ( char c20 ; ) )gets (c) ; 和 scanf ( “%s” , c ) ; 区别 、二维字符数组的引用有下标引用法和数组名加第一维下标引用法,六、函 数,主要内容 (一)、函数的定义 (二)、函数的参数 (三)、函数的返回值 (四)、函数的调用 (五)、数组作为函数的参数 (六)、局部变量和全局变量 (七)、变量的存储类别,六、函 数(函数的定义),(一)、函数的定义 函数可理解为一个程序段,给予一定的输入就会产生一定的输出。函数的定义就是在使用函数前对函数功能的完整性描述。 一般形式: 函数类型 函数名(参数列表) 函数体 注意:、函数的定义就是函数的说明 、函数由“头部”和“函数体”构成 、函数类型指函数返回值的类型(可以无返回值 void),六、函 数(函数的参数),(二)、函数的参数 参数列表中的参数为形式参数,它们和函数体中定义的变量一起构成该函数的局部变量,形参是接受数据的通道,由于是第一次出现,因此要作类型说明。 注意: 、形参要一一说明 、实参和形参要做到类型、顺序和数量一致 、实参和形参可以同名,但它们都是所处函数内部的局部数据 、实参可以是常量、量变、函数和表达式,形参只能是变量 、在发生函数调用时,实参是将值(或地址)赋给形参的,六、函 数(函数的返回值),(三)、函数的返回值 通过调用函数,从被调函数中得到的值称函数的返回值。 注意: 、调用函数得到返回值有三种途径: )在被调用函数中用return语句可以(且只可)得到一个返回值 )使用全局变量,全局变量对所有函数都有效 )实参和形参采用地址复用的方法(考点) 、被调用函数有时没有返回值,此时定义为 void 型 、被调用函数返回值类型由函数的类型确定 、return 表达式; 、被调用函数返回后,在主调函数中继续执行调用语句的下一个语句,六、函 数(函数的调用),(四)、函数的调用 函数调用是将程序的执行流程转向被调用函数,被调用函数执行完毕后再回到主调用函数继续执行。 注意: 、根据被调用函数的类型函数调用有三种形式: )函数调用作为表达式的一部分(被调用函数有返回值) )函数调用作为其它函数的参数(被调用函数有返回值) )函数调用加“;”号构成函数调用语句(被调用函数无返回值) 、函数调用的形式 )嵌套调用 )递归调用:递归函数的编程特点 递归函数的阅读特点,六、函 数(数组作函数的参数_1),(五)、数组作为函数的参数 由于可以从数组名得到数组在内存储单元存储的起始位置,它是一个地址常量,因此在计论数组作为函数参数时结合指针一并讨论。 ()一维数组(指向变量的指针)作为函数的参数,在实参和形参位置上共有四种情况: (假定 int a 10 ; int *p ; ) 实参(调用点) 形参(定义点) x=max( a,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),()二维数组(指向行的指针)作为函数的参数,在实参和形参位置 上共有四种情况: (假定 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 ) ; 赋值调用关系 int max ( int (*p1)4,int m,int n ),六、函 数(局部和全局变量),(六)、局部变量和全局变量(变量的空间观) 局部变量 、某函数内部定义的变量,只在该函数内部有效 、分程序(复合语句)内部定义的变量,只在分程序中有效 、形参属于局部变量 全局变量 、函数外部定义的变量,作用范围从定义点开始到程序最后 定义点之前的函数可用extern进行申明来扩展其作用范围 、在全局变量的作用范围内如遇同名的宏定义,则在宏定义 之后,同名应该用宏名置换(2004年秋选择题26题),六、函 数(变量的存储类别),(七)、变量的存储类别(变量的时间观) 存储方法分两大类: 、静态存储区: 全局变量(程序开始执行赋值)、局部静态变量(编译时赋初值,只赋一次) 、动态存储区: 局部变量(含形参、函数内定义的变量和分程序中定义的变量) 具体分四种: 、自动变量 auto 动态局部变量 、static 申明的变量 静态局部变量 、register 变量 动态局部变量 、extern 申明变量 扩展全局变量作用范围,七、编译预处理,处理工作在编译前完成。 (一)、宏定义 用宏体置换程序中的宏名。不要将宏体化简后代入,有嵌套定义的宏名需逐层代入。 (二)、文件包含 和 “”的搜索包含文件区别:在库函数头文件所在的目录中寻找(标准方式)、“”先在用户的当前目录中寻找,找不至再按标准方式寻找。 文件包含不但可以包含函数的头文件,也可包含*.文件。 (三)、条件编译,八、指 针(基本概念),(一)、地址和指针 变量 i 地址变量 i_point (存储其它变量地址的变量) 指针变量作为函数的参数,八、指 针(数组和指针),(二)、数组的指针和指向数组的指针变量 由于数组连续存放的特性,当指针指向数组(即数组元素)时,通过指针指向的连续变化来指向数组中不同的元素以获取对数组元素的操作。 例:int a5,*p ; p= *p a3 *p的计算结果找到了整型数组成员a3 *&a3 a3 对a3的地址作间接存取运算,结果为变量a3 &*p &a3 对*p的计算结果进行取址运算得到a3的地址,八、指 针(数组和指针_续),数组名作函数参数 实参(调用点) 形参(定义点) x=max( a,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 ) 指向多维数组的指针 实参(调用点) 形参(定义点) 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 ) ; 赋值调用关系 int max ( int (*p1)4,int m,int n ),八、指 针(表达式类型的判断),如何判断一个是数组元素、数组元素的地址? 一、一维数组 int aN; 、a是该数组在内存中的起始地址。 、取地址运算 、间接访问运算 * 、下标运算 二、二维数组 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,八、指 针(字符串的指针),字符串概念 、以内存某一起始字节开始到0字符结束的若干字节。 、字符0的ASCII码值为。 、字符串所占内存空间为串长加。 、从语言角度对字符串的理解:从内存某一起始字节开始,向地址值增大的方向以字节为单位连续寻找,如ASCII码不等于,则其所代表的字符为字符串中有效字符,如ASCII码等于,则字符串结束。 、内存单元某一字节的地址。 、可用一维字符数组存放。 、可用指向字符变量的指针存放。 、看见常量字符串应将其理解为第一个字符的地址。,八、指 针(字符串的指针_续),例:main() printf(“%s,%u,%cn”,”We”,”love”,*”figs”); 运行结果:We,417,f 说明: “love”为指针,以%u格式输出“love”的值, 即输出该字符串的首地址。 *“figs”为该字符串的第一个字符。 例:main() if(“abc”=“abc”) printf(“Same!n”); else printf(“Not same!n”); 运行结果:Not same! 说明:比较两个字符串的起始地址,它们不可能相同。,八、指 针(指针数组),(3)使用指针数组处理二维数组 例:int a34,*p3,i ; (*p3是指针数组) for(i=0;i3;i+) pi=ai;,说明:p 数组的三个元素 分别是指向整型变量的指 针(元素指针), 指针数 组名p 的增值为一维数组 长度。,通过指针p引用数组元素的方式: pij *(pi+j) *(*(p+i)+j) (*(p+i)j,注意:a为二维字符数组的情况,为地址的地址,即指针的指针,八、指 针(指针的指针),指针的指针(二级间址访问) 指向指针数据的指针变量又称为指针的指针,或 指针链。其定义的一般格式: 类型说明符 *指针变量名 例:static char *name=“book”,”print”,”gread”; char *p ; 定义指针的指针p p=name ; p指向指针数组name 则: *p 即 name0 *(p+1) 即 name1 *(p+i) 即 namei,八、指 针(指针的指针_续),例: main() char *p ; static char *d=“up”,”down”,”left”,”right”; int i ; p=d ; for(i=0;i4;i+) printf(“%sn”,*p+); ,八、指 针(返回指针值的函数),返回指针值的函数(指针函数) 一个函数的返回值为某种数据类型的地址值,即指针类型数据,称该函数为指针型函数。 说明返回指针型函数的格式: 类型说明符 *函数名(参数表); 例:int *a(x , y);,八、指 针(返回指针值的函数_续),void main() static float score4= ; float *search(); /*search()返回指向实型数据的指针*/ float *p; int i,m ; /* p为指向实型数据的指针*/ scanf(“%d”, ,pointer+n为第n行的首地址, 行指针。*(pointer+n)将指 针从行控制转化为列控制, 等价于pointern,元素指针。,八、指 针(函数的指针),指针与函数 (一)函数指针的定义和说明 、函数名表示函数代码存储区的首地址,又称函数的入口地址。 、定义指针变量,使之指向函数入口地址,该指针称为函数指针。 、函数指针定义格式: 类型说明符 (*函数指针名)( ); 例: int (*p)(); 定义函数指针p指向返回值为整型数据的函数 int max(); 已定义一个函数max p=max ; 将函数max的入口地址赋予指针变量p, p和max都指向函数的入口地址,八、指 针(函数的指针_续),几点说明: (1) 函数指针指向程序代码区,一般数据变量指针指向数据区。 (2) (*p)(),注意运算符()优先级高于*,*p两侧括号不能省。*p()表示返回指针值的函数。 (3) 函数指针不能进行+、-、+、-等运算。 (4) 函数可以通过函数名调用,也可通过函数指针调用。 如果函数指针p指向函数f1,则对函数f1的调用方式是: (*p)(实参表);,八、指 针(函数的指针_续),(二)函数指针的使用 用函数指针调用函数。 函数指针作为函数参数,实现两个或多个函数之间的调用控制。 使用函数指针使C 语言具有类似汇编语言的某些功能。,八、指 针(函数的指针_续),void main() int max(),(*p)(); int a,b,c; p=max; scanf(“%d,%d”, ,八、指 针(函数的指针_续),/*函数max(),min(),add()定义略*/ main() int max(),min(),add(); int a,b ; printf(“Enter a and b:”); scanf(“%d%d”, ,三次调用传递了三个 不同的函数入口地址,利用函数指针调用不同 的函数,增加了函数调 用的灵活性,九、结构体与共用体,结构体 一、结构体变量的定义,struct 结构体名 类型标识符 成员名1 类型标识符 成员名2 . 类型标识符 成员名n ; 只定义了结构体类型,struct 结构体名 类型标识符 成员名1 类型标识符 成员名2 . 类型标识符 成员名n a , b , c3; 定义了结构体类型和变量,struct 类型标识符 成员名1 类型标识符 成员名2 . 类型标识符 成员名n a , b , c3; 只定义了结构体变量,typedef struct DATE a , b , c3; 定义,为结构体变量 类型标识符 成员名1 类型标识符 成员名2 注意:考试中多采用此种形式 . 类型标识符 成员名n (可嵌套定义) DATE; 定义DATE为结构体类型,九、结构体与共用体,二、结构体变量的引用 只可引用最低级成员 struct data int month; int day; int year; ; struct int num; char name20; char sex; int age; struct data birthday; char addr30; stud;, 串首地址 0 正确引用 stud.birthday.day stud.birthday.year,注意: 、运算符“.”为左结合性,第一级 、成员类型决定引用类型 、引用结构体成员可像普通变量一样 赋值、输入、输出、运算,九、结构体与共用体,三、指向结构体类型数据的指针,# include “string.h“ main() struct student long int num; char name20; char sex; float score; ; struct student stu_1; struct student *p; p=,定义结构体变量 stu_1,定义结构体类型指针,P指向stu_1首地址,九、结构体与共用体,有了指向结构体变量的指针,对结构体变量中成员引用的三种方法: 1、结构体变量名.成员名 2、(*p).成员名 3、 p - 成员名,“*”号运算低于“.”运算,P-n+ +p-n (+p)-n,九、结构体与共用体,四、用指针处理链表 、有关函数 malloc(size); malloc(sizeof(数据类型) calloc(n,size); calloc(n,sizeof(数据类型) free(p); 、链表结点的数据结构: struct student int num; float score; struct student *next; /*特殊成员 链接需要*/ ;,结点自身需要,九、结构体与共用体,、链表的操作 链表创建 结点插入 结点删除 链表输出 注意: 得到链表只要得到链首指针。 调用函数对已知链表实施操作只要传递链首指针 被调用函数都是返回指针值的函数,九、结构体与共用体,共用体 一、共用体变量的定义,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个字节内存空间,九、结构体与共用体,二、共用体变量的引用 只可引用最低级成员 共用体变量名.成员名 不能引用共用体变量,只能引用其成员。 出现在结构体的定义中。,#include “stdio.h“ struct 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、枚举元素是用户自定义的常量,不可赋值。 2、C语言按定义顺序使枚举元素的值为 0,1,2 定义时可改变枚举元素的值,后继元素在其基础上顺序加1 enum week sun=1,mon=7,tue wed fri sat day ; 3、枚举元素可进行比较,按定义时的顺序值来比较。 if ( day = = mon ). 4、枚举变量可赋值,但要注意类型。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业互联网平台5G模组市场应用适配性趋势研究报告
- 2025年工业互联网平台数据备份与恢复策略与云服务的融合报告
- 2025版市政基础设施土石方开挖施工管理合同范本
- 2025年城市景观策划咨询服务合同
- 2025版智能电网建设运营合作合同模板
- 2025年度教育课程定制合同买卖合同书
- 2025第7章生物质能工程项目合同管理方案
- 2025年度电竞主题咖啡馆经营转让及赛事举办权合作协议
- 2025版煤炭资源探矿权承包开发合同
- 2025年度残障人士就业促进专项用工附加协议书模板
- 2025届黄冈教育共同体高三4月联合考试语文试卷含答案
- 离婚车辆转让协议书
- 电影投资意向协议书
- 2025-2030妇幼保健产业规划专项研究报告
- 《慢性肾病治疗策略》课件
- 2025年江西省安福县事业单位公开招聘辅警36名笔试题带答案
- 统编版(2025年春季)七年级下册《道德与法治》期末复习知识点提纲填空练习版(含答案)
- 2025-2030中国宠物可穿戴设备行业市场发展趋势与前景展望战略研究报告
- 2025至2030中国瑶族药浴行业前景调研与投资价值评估研究报告
- 中国超级电容器隔膜纸行业市场竞争态势及发展趋向研判报告
- 施工现场临时用电方案-顶管-
评论
0/150
提交评论