授课内容 第8章(3) 通过指针引用字符串 教学目的 掌握字符指针作为函数参数;理解使用字符指针变量和字符数组的异同 和要求 重点 难点 重点:字符指针作为函数参数;理解使用字符指针变量和字符数组的异同 难点:字符指针作为函数参数;理解使用字符指针变量和字符数组的异同 讲授 一、字符串的引用方式 1、可通过字符数组名和下标引用字符串中的一个字符。 2、也可以通过数组名和格式声明%s输出该字符串 例8.16 定义一个字符数组,在其中存放字符串“I love China!”,输出该字符串和第8个字符。 C语言中只有字符变量,没有字符串变量。 例8.18 将字符串a复制为字符串b,然后输出字符串b。 例8.19 例8.18改用指针变量来处理 二、字符指针作为函数参数 例8.20 用函数调用实现字符串的复制 (1)用字符数组名作为函数的参数 (2)用字符指针变量作为函数的参数 其实编译系统把字符数组名按指针变量处理的,只是表示形式不同。 三、使用字符指针变量和字符数组的比较 1、字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址。 2、赋值方式。可以对字符指针变量赋值,但不能对数组名赋值 3、初始化含义 4、存储单元内容 5、指针变量的值是可以改变的,而数组名代表一个固定的值 6、字符数组中各元素的值是可以改变的。 7、引用数组元素 四、随堂练习 写一函数,实现两个字符串的比较。int strcmp(char *p1,char*p2) 五、上机演示及学实践操作 在讲课的同时切换到编译器界面调试代码 教 学 安 排 课后自我 总结分析 备注 《C语言程序设计》教案
第39-40 课时
授课内容 第8章(4) 动态内存管理与指向它的指针变量 教学目的 掌握用函数指针变量调用函数;掌握用指向函数的指针作函数参数 和要求 重点 难点 重点:用函数指针变量调用函数;用指向函数的指针作函数参数 难点:用函数指针变量调用函数;用指向函数的指针作函数参数 讲授 一、指向函数的指针 编译系统为函数代码分配一段存储空间,这段存储空间的起始地址,称为这个函数的指针 二、用函数指针变量调用函数 例8.22 求两个整数的最大值 讲解通过函数名调用函数与通过指针变量访问它所指向的函数的异同。 三、怎样定义和使用指向函数的指针变量 类型名 (*指针变量名)(函数参数表列) 例8.23 讲解 四、用指向函数的指针作函数参数 指向函数指针变量的一个重要用途是把函数的地址作为参数传递到其它函数。 例8.24 讲解 五、返回指针值的函数 一个函数可以返回一个整型值、字符值、实型值等,也可以返回指针型的数据,即地址。 定义返回指针值函数的一般形式为: 类型名 *函数名(参数表列) 例8.25 讲解 六、指针数组和多重指针 1、什么是指针数组 2、指向指针数据的指针 例8.28 讲解 3、指针数组作主函数的形参 七、上机演示及学实践操作 在讲课的同时切换到编译器界面调试代码 教 学 安 排 课后自我 总结分析 备注
《C语言程序设计》教案
第41-42 课时
授课内容 第8章(5) 动态内存分配 教学目的 掌握指针数组和多重指针;掌握动态内存分配的技巧 和要求 重点 难点 重点:指针数组和多重指针;动态内存分配的技巧 难点:指针数组和多重指针;动态内存分配的技巧 讲授 C定义了4个内存区间:代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store)。 一、堆栈和队列 1、堆栈 堆栈是一种特殊的线性表。 (1)栈顶和栈底 2、队列 堆栈也是一种特殊的线性表。 (1)队头与队尾 二、堆与动态内存分配 有些操作对象只在程序运行时才能确定,这样编译时就无法为他们预定存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配,这种方法称为动态内存分配。所有动态内存分配都在堆区中进行。 三、动态内存分配 1、什么是内存的动态分配 2、建立内存分配的动态分配 (1)malloc函数 malloc是一个函数,专门用来从堆上分配内存。使用malloc函数需要几个要求: ①内存分配给谁? ②分配多大内存? ③是否还有足够内存分配? ④内存的将用来存储什么格式的数据,即内存用来做什么? ⑤分配好的内存在哪里? 如果这五点都确定,那内存就能分配。下面先看malloc函数的原型 教 学 安 排 void * malloc(uint size) (2)calloc函数 (3)free函数 (4)realloc函数 四、什么是野指针 1、野鸡指针的形成 2、野指针的危害 五、void指针类型 指向空类型指针,而非指向任意类型的指针 课后自我 总结分析 备注 《C语言程序设计》教案
第43-44 课时
授课内容 第9章(1) 结构体概述及应用 教学目的 结构体类型、变量的定义及初始化;结构体变量的引用; 和要求 结构体数组,结构体指针 重点 难点 结构体类型、变量的定义及初始化;结构体变量的引用; 结构体数组,结构体指针 引言 例子:学生信息管理系统 讲授 一、结构体类型 1、结构体类型和结构体变量 (1) 结构体类型定义的一般形式 例如:定义关于学生信息的结构体类型。 (2) 结构体变量的定义(三种方法) ? 先定义结构体类型,再定义结构体变量(概念、含义相当清晰) ? 定义结构体类型的同时定义结构体变量 ? 直接定义结构体变量(不给出结构体类型名,匿名的结构体类型) 2、结构体变量的引用 (1) 引用结构体变量中的一个成员。结构体变量名.成员名 (2) 成员本身又是结构体类型时的子成员的访问-使用成员运算符逐级访问 (3) 同一种类型的结构体变量之间可以直接赋值 (4) 不允许将一个结构体变量整体输入/输出 1、结构体变量的初始化 二、结构体数组 结构体数组-数组元素的类型为结构体类型的数组 1、 结构体数组的定义 类似结构体变量定义,只是将“变量名”用“数组名[长度]”代替),也有3种方式。 2、结构体数组的初始化 三、结构体指针变量 1、结构体指针变量 (1) 结构体指针变量的定义 (2) 通过结构体指针变量访问结构体变量的成员: (*结构体指针变量名).成员名 结构体指针变量名->成员名 2、结构体变量、结构体指针变量作函数参数 教 学 安 排 课后自我 总结分析 备注 《C语言程序设计》教案
第45-46 课时
授课内容 掌握链表的使用; 教学目的 和要求 重点:掌握链表的使用;掌握共同体类型的使用;理解枚举类型的概念 难点:掌握链表的使用;掌握共同体类型的使用;理解枚举类型的概念 讲授 一、链表概述 1、什么是链表 (1)链表中节点的定义 (2)链表的基本操作 2、建立简单的静态链表 二、建立动态链表 1、动态链表 (1)处理动态链表所需要的函数 malloc()、calloc()、free() (2)结点的动态分配 2、输出链表 例9.10 编写一个输出链表的函数print 3、对链表的删除操作 4、对链表的插入操作 二、双向链表 1、双向链表的存储结构 2、建立双向链表 3、双向链表的操作 三、环形链表 1、儿时玩的丢手绢的游戏 环形→约瑟夫问题 2、解决环形情况的问题比较方便 3、构造环形链表 4、环形链表的特点 四、上机演示及实践操作 在讲课的同时切换到编译器界面调试代码 第9章(2) 链表 重点 难点 教 学 安 排 课后自我 总结分析 备注
《C语言程序设计》教案