admin 管理员组

文章数量: 887019


2024年2月28日发(作者:eclipse运行出来中文乱码)

《C语言程序设计》教案

课程名称

教材

考核方式

C语言程序设计

C语言程序设计(第四版) 作者:谭浩强 清华大学出版社

考试课程。

总成绩:课堂参与占10%;试验报告占20%;期末考试占70%(闭卷考试)。

C语言是近年来国内外得到迅速推广使用的一种计算机语言。C语言程序设计课程是计算机专业和信息管理专业的核心专业基础课,它功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的优点。既适用于应用软件编写,又适用于系统软件的编写。在现代的工业机器人的众多语言中,大多编程风格以C语言非常类似,学生学好C语言,对将来的工作中,从事工业机器人现场编程是非常有帮助的。

课程的性质和任务

《语言程序设计》这门课是我校工业机器人、分布式发电与微电网专业的专业必修课。作为计算机系的数据结构、c++、单片机编程等课程的前导课程,也是一门实践性很强的课程,既要掌握概念,又要动手编程,还要上机调试运行。对工业机器人专业来说是一门必修的课程。

同时,这门课程也是“湖南省非计算机专业学生计算机应用能力水平考试”二级考试的主要语种之一。

课程的教学目标

本课程的教学目标是:通过理论和实践教学,使学生较好地掌握C语言各方面的知识,掌握基本的程序设计过程和技巧,具备初步的高级语言程序设计能力,并能熟练应用VC++6.0集成环境进行C语言的编写、编译与调试,能应用C语言解决一般编程问题的水平。

一、程序设计和C语言

重点:计算机程序、计算机语言、C语言编译软件的安装、最简单的C语言程序

二、算法:程序的灵魂

重点:简单的算法举例、算法的特性、用流程图表示算法。

三、顺序结构程序设计

重点: C语言的数据类型、C语句的种类、赋值语句、数据的输入输出及输入输出中最常用的控制格式。

四、选择结构程序设计

重点:关系运算符与逻辑运算符及其组成的具有逻辑值的表达式、二条分支语句的格式及基本应用、多分支的选择语句。

五、循环结构程序设计

重点:C构成循环的四种方法,尤其是后三种方法、break与continue语句的基本作用。

难点:while语句;do-while语句;for语句;循环的嵌套;break与continue语句。

六、数组

重点:一维数组、二维数组的定义与引用;字符数组的定义与引用、常用字符串处理函数及字符处理函数;数组的应用

难点:二维数组的定义与引用;字符数组;数组的应用

七、函数

重点:函数的定义;函数的参数和函数的值;函数的调用;函数的嵌套调用;函数的递归调用;数组作为函数参数;变量作用域;量存储类别;

难点:函数定义、函数调用、函数声明等基本基本概念;函数的嵌套调用与递归调用; 数组作为函数的参数、变量的存储类别与作用域。

八、指针

重点和难点:指针与地址的基本概念、指针与变量的关系;指针与数组;指针与字符串、指针数组与二级指针;指针的应用

九、建立自己的数据类型

重点和难点:定义和使用结构体变量、用指针处理链表、共用体类型

十、文件

重点:文件的基本知识、fopen、fclose函数打开与关闭文件、顺序读写数据文件、随机读写数据文件

难点:用二进制方式向文件读写一组数据。

十一、常见错误分析

重点和难点:文件的基本概念;文件的打开、关闭、常用读写方法。

十二、数组高级应用

重点:不定长数组与二维数组的应用

难点:不定长数组与二维数组的应用

十三、综合应用

重点:数组、if语句、 循环语句、函数知识的综合应用

难点:二维数组、指针

教材、

参考书

教材:《C程序设计》(第四版) 谭浩强著 清华大学出版社 2010年6月

参考书:《C程序设计语言》Kernighan&Ritchie 机械工业出版社

《C语言程序设计》教案

第 1-2课时

授课内容

第1章 C语言概述

教学目的

了解C历史,名称来源、C特点,掌握C程序基本结构;C语言的版本、C语言的关键字;

和要求

重点

难点

C语言的关键字;

引言

语言:人-人语言交流;聋哑人-手势语;人机-计算机语言

C语言是一种流行的计算机高级语言,C语言适合于编写系统软件,也可以编写应用程序。

讲授

一、语言出现的历史背景

(1)C语言的发展源于人们希望用高级语言编写操作系统。(C-BCPL第二字母)

ALGOL60(高级语言)->CPL(硬件支持)- BCPC->B->C->标准C-> ANSI C -> ISO C

(2) 语言既具有高级语言特性,又具有低级语言特性-中级语言。

二、C语言的特点

C语言既具有一般高级语言特性,又具有低级语言特性。8个特点。

1、C语言简洁、紧凑。

2、运算符丰富。

3、数据结构类型丰富。

4、具有结构化的控制语句。

5、语法限制不太严格,程序设计自由度大。

6、C语言允许直接访问物理地址,能实现汇编语言的大部分功能,可以直接对硬件进行操作。

7、生成目标代码质量高,程序执行效率高。

8、与汇编语言相比,用C语言写的程序可移植性好。

三、C语言的关键字

附录C(书本378页)

四、C语言的版本和关键字

auto、inline、restrict、_bool、_Complex、_Imaginary是后来扩充的,有些编译器也扩充了关键词。

五、Turbo C编译器的安装与使用

课后自我

总结分析

备注

《C语言程序设计》教案

第 3-4 课时

授课内容

第1章 VC++6.0、VS2015的安装和使用

教学目的

了解C语言常用的编译器;掌握VC++6.0、VS2015的下载与安装;

和要求

掌握VC++6.0、VS2015的使用

重点

难点

重点:VC++6.0、VS2015的使用

难点:VC++6.0、VS2015的使用

讲授

一、C语言常用的编译器

(1)32位的WINDOWS操作系统与64位的WINDOWS操作系统

(2)VC++6.0 (2)VS2015

二、文件夹与压缩包

1、文件夹

2、文件的压缩与解压

3、软件的下载

4、软件安装的一般流程

5、产品id号、序列号与破解补丁

三、VC++6.0、VS2015的下载与安装

7、生成目标代码质量高,程序执行效率高。

8、与汇编语言相比,用C语言写的程序可移植性好。

四、VC++6.0、VS2015的使用

VC++6.0、VS2015的使用

五、c4droid编译器的使用

1、基于安卓手机操作系统的C语言编译器

2、c4droid编译器的安装

3、c4droid编译器的使用

六、上机演示及实践操作

在win7电脑上示范VC++6.0、VS2015的编译器的安装和使用

课后自我

总结分析

同学们对计算机基础知识比较缺乏,安装VC++6.0时,不知道如何解压,也不知道如何下载和计算机操作系统版本匹配的VC++6.0或VS2015

备注

《C语言程序设计》教案

第 5-6 课时

授课内容

第2章 算法的基本概念和简单算法举例

教学目的

了解算法的基本概念、程序设计的一般流程、掌握书写简单的算法流程、了解算法的特性

和要求

重点

难点

掌握书写简单的算法流程。

引言(5分钟)

什么是算法?菜谱、拳谱、歌谱都是广义的算法。以湘潭去北京开会为例解释算法的优劣。

1+2+3+…100的常规算法和高斯的首尾相加快递算法

讲授

一、简单算法举例(37分钟)

(1)求5!(10分钟)

常规求解方式的烦琐引出用循环方式求解的方法。

分析用循环方式求5!的C语言代码

(2)求1×3×4×5×7×9×11(10分钟)

询问同学此题与5!的异同,引每项是2n-1的通项,在上题的基础上改动少量代码可实现本题的C语言编程。

(3)求2000-2500年间的闰年(10分钟)

图示方式给学生解说闰年要满足的条件,引出要做多次判断的较复杂流程

提问:能被4整除,也能被100整除,是不是等同能被400整除这一认识误区

再次提问:2000年是不是闰年,为什么?2060年是不是闰年,为什么?检测学生是否了解闰年判断流程。

(4)素数的求法(7分钟)

根据素数的定义来循环判断是否能被一系列数整除,最后判断是不是素数,请学生尝试写出求解流程。

二、算法的特性(3分钟)

1、有穷性。2、确定性。3、0个或多少输入。4、1个或多个输出。5、有效性。

三、上机演示及实践操作

在讲课的同时切换软件界面调试代码

课后自我

总结分析

备注

通过提问可以了解同学们对知识的掌握程序,互动性的教学设计更有益于教学

《C语言程序设计》教案

第 7-8 课时

授课内容

第2章 算法的表示

教学目的

掌握用流程图表示算法;了解传统流程图的弊端;掌握N-S流程图表示方法。

和要求

重点

难点

重点:掌握用流程图表示算法;掌握N-S流程图表示方法

难点:掌握用流程图表示算法;掌握N-S流程图表示方法

讲授

一、用流程图表示算法(15分钟)

1、介绍流程图的图框及含义

起止框、输入输出框、判断框、处理框、流程线、连接点、注释框

2、示范用流程图表示两个分支的if语句

3、将例2.1的算法用流程图表示并分析

4、将例2.2的算法用流程图表示并分析

5、将例2.3的算法用流程图表示并分析

总结:流程图表示算法比较直观

2、将例2.4多项式求和用流程图表示

(1)、书本求解本题算法的流程图表示

(2)、其它算法的流程图表示

二、三种基本结构和改进的流程图 (15分钟)

1、统流程图的弊端

2、三种基本结构

(1)顺序

(2)选择

(3)循环 分当型和直到型两种

二、用N—S流程图表示算法(15分钟)

1、N-S流程图的符号

2、将例2.1的算法用N-S流程图表示并分析

3、将例2.2的算法用N-S流程图表示并分析

4、将例2.3的算法用N-S流程图表示并分析

三、实践环节

对“分时问候”的算法绘制N-S流程图

课后自我

总结分析

备注

《C语言程序设计》教案

第 9-10课时

授课内容

第3章 最简单的C程序设计——顺序程序设计

教学目的

举例说明顺序程序调序的基本流程、整型数据类型、整型数据的溢出。

和要求

重点

难点

重点:整型数据类型;整型数据的溢出

难点:整型数据类型;整型数据的溢出

讲授

一、顺序程序设计举例 (10分钟)

1、绘制例3.1算法的N-S流程图

2、根据N-S流程图编写代码并调试

二、常量与变量 (15分钟)

1、常量概念。

(1)整型常量、整型常量、字符常量、字符串常量

(2)ASCII字符

(3)转义字符

2、变量概念、变量名

(1)先定义,后使用

(2)变量名与变量值概念的异同

三、数据类型概述 (5分钟)

1、不同类型的数据在内存中占用的存储单位长度是不同的

VC++6.0为字符型数据分配一个字节长度;为int型(基本型)分配4个字节的长度。

2、存储不同数据类型的方法也是不同的。

四、整型数据 (15分钟)

1、整型数据的分类:

(1)基本整型(int 型) (2)短整型(short int); (3)长整型(long int)

2、整型变量的符号属性

(1)有符号型和无符号型 (2)整型数据常见的存储空间和值的范围

3、整型数据的溢出

五、上机演示及实践操作

在讲课的同时切换编译界面调试整型数据溢出

课后自我

总结分析

备注

《C语言程序设计》教案

第11-12 课时

授课内容

第3章 最简单的C程序设计——顺序程序设计

教学目的

举例说明顺序程序调序的基本流程、数据的表现形式及运算、不同数据类型的混合运算。

和要求

重点

难点

整型数据类型long int和short int数据类型、运算符的优级先级、不同数据类型的混合运算

讲授

一、浮点型数据

1、浮点型数据的存储方式

2、浮点型数据的表现形式 浮点数据的指数形式

3、浮点型数据的类型

(1)单精度 (2)双精度 (3)长双精度

二、字符型数据

1、 字符常量表示。直接表示/转义表示(特殊的转义字符,一般字符也可以转义表示)。

特殊转义字符对显示/打印的控制作用

2、 字符变量-1个字节,char关键词。

3、 字符数据的存储-ASCII码/二进制存储-C语言可以将字符看做很短的整数处理。

例2-7A,例2-8A可以看出字符数据的具有整数特性。

三、怎样确定常量的类型

1、从常量的表示形式,如精度

2、只要看到单撇号括起来的单个字符或转义字符即字符常量

四、运算符与表达式

1、基本的算术运算符 2、自增、自减运算符

3、算术表达式和运算符的优先级与结合性

五、数值型数据混合运算

1、自动隐式转换。2、强制类型转换。

六、C语句

1、控制语句 2、函数调用语句 3、表达式语句

4、空语句 5、复合语句

七、上机演示及实践操作

在讲课的同时切换编译界面调试整型数据溢出

课后自我

总结分析

备注

《C语言程序设计》教案

第 13-14 课时

授课内容

第4章(1) 选择结构程序设计

教学目的

理解条件-产生逻辑值的表达式; 熟练绘制选择语句算术的流程图

和要求

掌握关系运算符、关系表达式;逻辑运算符、逻辑表达式

重点

难点

重点:关系运算符、关系表达式;逻辑运算符、关系表达式

难点:熟练绘制选择语句算术的流程图

讲授

一、选择结构的条件判断

1、理解条件-产生逻辑值的表达式

2、选择结构的流程图绘制

3、二元二次方程求根的算法及程序编写

二、关系运算符与关系表达式

“关系运算”(比较运算)即,将两个值进行比较,判断是否符合或满足给定的条件。

1、 关系运算符及其优先次序

a) C语言提供6种关系运算符。表5-1。

b) 关于优先次序:前4种高于后两种;关系低于算术;关系高于赋值

例5-2。

2、 关系表达式

关系表达式的值是逻辑值,即“真”“假”。C语言没有逻辑型数据,1-“真”,0-“假”。

例5-3。

三、逻辑运算符和逻辑表达式

“关系运算”(比较运算)即,两个逻辑值的运算。

1、 逻辑运算符。(1)&& 逻辑与,(2)|| 逻辑或,(3)! 逻辑非

2、 逻辑运算符的优先顺序:

3、 逻辑表达式

四、条件运算符与条件表达式

1、单目运算符、双目运算符、三目运算符的概念

2、C语言唯一的三目运算符构成的条件表达式

课后自我

总结分析

备注

《C语言程序设计》教案

第15-16 课时

授课内容

第4章(2) 选择结构程序设计

教学目的

选择结构的嵌套;switch语句实现多分支选择结构

和要求

重点

难点

重点:选择结构的嵌套;switch语句实现多分支选择结构

难点:选择结构的嵌套;switch语句实现多分支选择结构

讲授

一、if语句的嵌套

1、在if语句中又包含一个或多个if语句称为if语句的嵌套。

2、如果if与else的数目不一致,为了体现程序设计者的思想,可加花括号来确定配对的关系。

3、利用代码缩进增强代码的可读性,养成良好的编程风格

4、例4.5阶跃函数用if语句的嵌套实现

(1)绘制流程图 (2)将流程图编写成程序

二、用switch语句实现多分支选择结构

如果条件分支较多,利用if语句显得程序冗长,且可读性降低。因此,C语言设计了switch语句。

1、switch语句的一般形式

2、例4.6 输出考试成绩的ABCD段等级

(1)绘制流程图 (2)将流程图编写成程序

3、例4.7 用switch语句处理菜单命令

三、选择结构程序设计综合举例

例4.8 判断某一年是否是闰年

例4.9 求二元二次方程的实根

四、上机演示及实践操作

在讲课的同时切换软件界面调试代码

课后自我

总结分析

备注

《C语言程序设计》教案

第 17-18 课时

授课内容

第5章(1) 循环结构程序设计

教学目的

掌握while当型循环、do while直到型循环、for循环

和要求

while当型循环、do while直到型循环、for循环的形式、执行过程、使用注意问重点

难点

引言

重复执行就是循环。重复工作是计算机特别擅长工作之一。

重复执行不是简单地重复,每次重复,操作的数据(状态、条件)都可能发生变化。

重复的动作是受控制的,C语言提供三种循环控制语句,构成了三种基本的循环结构。

讲授

一、while语句(当型循环)

1、while语句的一般形式是:

2、执行过程是:(流程图、N-S图)

3、使用while注意的问题。

例5-1:利用while语句,编写程序计算1+2+3+…+100。

二、do-while语句(直到型循环)

1、do-while语句的一般形式

2、do-while执行过程(流程图)

3、do-while说明:

例5-4:利用do-while语句计算机1+1/2+1/4+…+1/50。

三、for语句(当型循环)

1、 for语句的一般形式(给出while循环的对应结构)

2、 for循环执行过程(流程图)

例5-6:写一个程序,计算半径为0.5,1.5,2.5,3.5,4.5,5.5mm时圆的半径。

例5-7:求正整数n的阶乘n!,其中n由用户输入。

3、 for语句最容易理解、最常用的形式

4、 for语句说明(6点)。C语言的for语句功能强大,使用灵活。

四、上机演示及实践操作

在讲课的同时切换软件界面调试代码

课后自我

总结分析

备注

《C语言程序设计》教案

第19-20 课时

授课内容

第5章(2) 循环结构程序设计

教学目的

掌握条件运算符、条件表达式

和要求

掌握switch-case语句

重点

难点

switch-case语句

引言

a) 复习关系运算、逻辑运算、if语句

b) 引入简单的条件运算符及表达式、以及开关语句

讲授

一、条件运算符、条件表达式

在if语句中,在表达式为“真”和“假”时,都只执行一个赋值语句给同一个变量赋值时,可以使用简单的条件运算符来处理。

例如:if(a>b)max=a;else max=b; <=> max=a>b?a:b;

(1) 条件表达式的一般形式:表达式1?表达式2:表达式3

(2) 条件表达式说明(5点)

例5-4.

二、switch-case语句(多分支选择语句/开关语句)

3、 switch一般形式

4、 switch语句说明。(1)-(7)

三、分支程序例子

例5.5 写程序,判断某一年是否是闰年。

例5.6 求一元二次方程ax2+bx+c=0的根。

例5.7 运输公司对用户计算运费。

六、应用举例

例6-14:从键盘输入一个大于2的整数n,判断是不是素数。

例6-15:求100-200之间的所有素数。

例6-16:输出下三角99乘法表

七、上机演示及学生操作

在讲课的同时切换软件界面调试代码

课后自我

总结分析

备注

《C语言程序设计》教案

第21-22课时

授课内容

第6章(1) 一维组的应用

教学目的

数组的基本概念;

和要求

一维数组定义、初始化、引用;最大值、冒泡排序、选择排序算法。

重点

难点

重点:一维数组定义、初始化、引用;求最大值、冒泡排序、选择排序算法;矩阵操作

难点:冒泡排序、选择排序算法

引言

基本数据类型-构造类型的数据-数组

数组、数组元素、数组的下标、数组的维数

例如:int a[10]; 一维数组可以看作一个数列,向量。

例如:float b[3][3]; 二维数组可以看作一个矩阵。

讲授

一、定义和引用一维数组

1、一维数组的定义 类型说明 数组名[整型常量表达式]

2、一维数组定义说明 下标从0开始

3、数组元素的引用

例6.1 利用数组输出1-10

(1)循环语句 (2) 数组下标越界

4、一维数组的初始化的几种形式

(1)定义时赋初值 (2)部分赋初值

(3)数组元素全部置0 (4)数组元素如全部赋值可不指定长度

5、给数组元素赋初值和给数组集合赋初值的异同

(1) 给数组元素赋初值 int temp[1]=9;

(2) 给数组集合赋初值 int temp[10]=(1,2,3);

二、一维数组的应用例子

例6-2:用数组来处理斐波那契数列

例6-3:采用“冒泡法”对任意输入的10个整数按由小到大的顺序排序。

例6-4:采用“选择法” 对任意输入的10个整数按由大到小的顺序排序。

三、动态内存分配法实现不定长一维数组

某些情境需要定义一个数组,但数组的长度不定,因为这个长度是根据某些其他条件确定的,这时我们需要定义一个长度不定的数组。如读取不同声音的语音数据序列。

课后自我

总结分析

备注

《C语言程序设计》教案

第23-24 课时

授课内容

第6章(2) 二维数组和多维数组的应用

教学目的

二维数组定义、初始化、引用;多维数组

和要求

重点

难点

重点:二维数组定义、初始化、;双重for循环读取二维数组;二维数组1维和2维的分辨;

难点:双重for循环读取二维数组、二维数组1维和2维的分辨

二、二维数组(注意:类比一维数组)

1、二维数组的应用场景

2、二维数组的定义

3、二维数组元素的内存分布

二、二维数组元素的引用

例6-5:二维数组元素的引用的例子(自学)-构造、打印单位矩阵。

思考:下标是从1开始使用的,哪些元素在此例子中未使用?它们的值是多少?(随机值)

三、二维数组的初始化的几种形式

(1)分行给二维数组赋值

(2)将所有数组写在一个花括号内

(3)对部分元素赋值

(4)对全部元素赋初值,二维数组的1维长度可以省略,2维长度不能省略

四、双重for循环法读取二维数组

比较抽象,图解较直观

五、二维数组应用举例

例6-4:将二维数组的行和列互换,存到另一个数组里。

例6-5:找出矩阵所有元素中的最大值。

例6-附加 分别计算矩阵的两条对角线(主、辅对角线)上的元素之和。

六、多维数组的应用

1、多维数组的定义

2、多维数组元素的引用

3、多维数组的初始化

七、不定长二维数组的实现

某些情境需要定义一个二维数组,但二维数组的长度不定,因为这个长度是根据某些其他条件确定的,这时我们需要定义一个长度不定的二维数组。如读取不同尺寸图像点的像素值。

八、上机演示及学生操作

在讲课的同时切换软件界面调试代码

课后自我

总结分析

备注

《C语言程序设计》教案

第25-26 课时

授课内容

第6章(3) 字符数组

教学目的

字符数组定义、初始化、引用;字符串与字符数组;字符串处理函数;字符数组应用

和要求

重点

难点

重点:字符串与字符数组;字符串处理函数

难点:字符串与字符数组;字符串处理函数

引言

复习数组概念,数组定义、初始化、元素引用方法。引入字符数组(元素为字符)。

讲授

一、字符数组

1、字符数组的定义

2、字符数组的初始化

3、字符数组的引用

4、二维字符数组的应用举例

二、字符和字符串结束标志

1、字符串与字符数组的区别 2、字符串结束标记志

系统对字符串常量也自动加一个'0'作为结束符。例如"C Program”共有9个字符,但在内存中占10个字节,最后一个字节'0'是系统自动加上的。(通过sizeof()函数可验证)

三、字符数组的输入和输出

(1)逐个字符输入输出

(2)将整个字符串输出

(3)利用字符串的结束符批量输出

四、字符串概述

1、字符串的输出

(1)“%s”格式符

(2)print语句的输出项参数用字符数组名,而非数组元素名

2、字符串的引用

五、由字符数组来构造字符串

根据定义,可由字符数组添加一个'0'符形成字符串。

六、二维字符数组

1、二维字符数组的定义

2、二维字符数组的初始化

3、二维字符数组的引用

课后自我

总结分析

备注

《C语言程序设计》教案

第27-28 课时

授课内容

第6章(4) 字符串函数的应用

教学目的

字符数组定义、初始化、引用;字符串与字符数组;字符串处理函数;字符数组应用

和要求

重点

难点

重点:字符串与字符数组;字符串处理函数

难点:字符串与字符数组;字符串处理函数

讲授

一、使用字符串处理函数

1、puts函数

2、gets函数

3、strcat函数:字符串截取函数

4、strcopy和strncopy函数:字符串复制函数

5、strcmp函数:字符串比较函数

6、strlen测试字符串长度函数

7、strlwr函数:转换为小写的函数

8、strupr函数:转换为大写的函数

二、字符数组应用举例

例6.8:由键盘任意输入一个字符串和一个字符,要求从该字符串中删除所指定的字符。

例6.9:由键盘输入三个字符串,找出其中的最大串。(字符串库函数的应用)

三、学会阅读C标准函数手册

附录F C库函数

1、引用预编译头文件 include(包含头文件)

2、学会阅读函数库函数的函数类型和参数

四、字符数组函数的综合练习

1、打印杨辉三角形

2、有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。

23、魔方阵,要求输出1~n

4、找出二维数组的鞍点,即该位置上的元素在该行上最在、在该列上最小,也可能没有鞍点。

5、编一程序,将两个字符串连接起来,不要用strcat函数。

四、上机演示及学实践操作

在讲课的同时切换软件界面调试代码

课后自我

总结分析

备注

《C语言程序设计》教案

第29-30 课时

授课内容

第7章(1) 函数及函数的调用

教学目的

掌握函数定义、调用、声明;函数参数传递方式;了解函数递归调用

和要求

重点

难点

重点: 函数定义、调用、声明; 函数参数传递方式

难点:函数参数传递方式-传址(尚未学习指针,用数组举例)

讲授

一、函数概述

1、C语言的函数。C语言的函数是子程序的总称,包括函数和过程。

C语言函数可以分为库函数、用户自定义函数

2、C语言的程序由函数组成,函数是C语言程序的基本单位,程序的总体功能通过函数的调用来实现。其中,main起点(图)

3、函数的一些概念:主函数、其它函数;主调函数、被调函数;库函数、用户自定义函数;无参函数、有参函数;无返回值函数、有返回值函数

二、函数的一般形式-函数应当先定义,后调用。

函数定义的一般形式及说明 (1)(2)

例7-1:输入三个整数,求三个整数中的最大值,打印。思考问题。

三、函数的参数和返回值

1、 形式参数 2、实际参数 3、参数的传递。

2、 函数返回值。return语句及说明。

四、函数的调用

1、 函数调用的一般形式及说明(单独语句/表达式中、参数相容)

例7-3:以表达式的形式进行函数的调用。(自学)

2、 函数调用时数据的传递-参数传递、函数的返回值、全局变量

例7-4:求学生平均成绩。P110.(注意参数传递的是数组的地址)

3、 函数的声明

例7-5:函数声明例子。P112.

五、函数的嵌套调用和递归调用

函数允许嵌套调用和递归调用。递归调用是嵌套调用的特例。

(1)函数的嵌套调用

例7-6:计算两整数的最小公倍数。P113.

(2)函数的递归调用

例7-7:用递归法求n!(P.114)

课后自我

总结分析

备注

《C语言程序设计》教案

第31-32 课时

授课内容

第7章(2) 函数变量的作用域和生命周期

教学目的

掌握变量作用域、生命期

和要求

掌握插入排序

重点

难点

重点:变量作用域、生命期;插入排序

难点:变量作用域、生命期;插入排序

讲授

六、变量的作用域(有效范围、可见性)

变量的作用域:变量的有效范围或者变量的可见性。变量定义的位置决定了变量的作用域。

变量从作用域(变量的有效范围,可见性)的角度可以分为:局部变量,全局变量。

1、局部变量(函数体内变量、形参变量、复合语句内变量)-互不干预、动态分配

例7-8:各函数局部变量同名的应用示例。P116-117.

2、全局变量(所有函数之外-文件作用域、程序作用域)

全局变量可以和局部变量同名-坐井观天

例7-9:全局变量、局部变量同名的应用示例。P118。

例7-10:全局变量、局部变量的应用示例。P118。

七、变量的存储类别(生存期、生命期)

变量从空间上分为局部变量、全局变量。

从变量存在的时间的长短(即变量生存期)来划分,变量还可以分为:动态存储变量、静态存储变量。变量的存储方式决定了变量的生存期。

C语言变量的存储方式可以分为:动态存储方式、静态存储方式。

全局变量全部是静态的;局部变量可以是静态,也可以是动态(auto,register)。

例7-11:寄存器局部变量的应用.P120.(完成n+(n-1)+(n-2)+...+1)

例7-12:静态局部变量的应用示例。P121.

八、内部函数和外部函数

默认是外部函数

九、函数应用举例

例7-14:字符串逆序。P124.

例7-15:求矩阵最大元素。P124-125.

例7-16:利用插入法将10个字符从小到大进行排序。P125-126.

课后自我

总结分析

备注

《C语言程序设计》教案

第33-34 课时

授课内容

第8章(1) 指针概述及指针作为函数参数

教学目的

指针的基本概念,变量访问方式;指针变量定义、赋值、引用。

和要求

指针作为函数参数。

重点

难点

重点:指针的基本概念;指针变量定义、赋值、引用;指针作为函数参数

难点:指针的基本概念

讲授-指针基础

一、指针变量的定义(变量先定义后使用)

1、定义格式:

2、说明: (1)指针变量基类型-指针变量指向数据的类型

(2)指针变量存放地址值,本身占用空间2字节

二、指针变量的赋值(使用未赋值指针等同于向一个随机的内存中写入数据)

1、将地址直接赋值给指针变量。例如,float *f=malloc(4);

2、将变量地址赋值给指针变量。例如:float a,*p;p=&a;

三、指针变量的引用

1、&运算符(取地址运算符) 2、*运算符(指针运算符、间接访问运算符)

例9-1,P137.指针变量定义、赋值、引用例子。

四、指针变量作为函数的参数

变量可以作为函数参数,指针变量同样可以作为函数参数。使用指针作为函数参数,可以在函数中对指针所指向变量的值进行处理(修改)。

指针作为函数参数,本质上同样是单向传值,但是由于传递的是地址值,所以可以通过地址值间接修改形参、实参共同指向的变量。

例9-2:输入a,b两个数交换后输出。

在swap函数中使用两个指针作为函数参数,对两个指针所指向变量值进行交换。

结论:

1、要在被调用函数中,修改主调函数的变量值应当:

(1)将主调函数变量的地址传递给被调用函数,就是说函数应当传递的是变量的地址。

(2)被调用函数的形参应当使用指针变量接受主调函数的地址值。

(3)在被调用函数中通过形参指针变量间接访问,修改实参、形参地址所共同指向的变量。本例的操作是交换两个指针变量所指向的变量。

2、函数使用指针作为参数,可以增加主调函数与被调函数之间数据沟通的渠道。

课后自我

总结分析

备注

《C语言程序设计》教案

第35-36 课时

授课内容

第8章(2) 通过指针引用数组

通过指针引用数组元素;数组的指针变量”作为函数参数;通过指针指向多维数组

教学目的

和要求

重点

难点

重点:数组的指针变量”作为函数参数;通过指针指向多维数组

难点:数组的指针变量”作为函数参数;通过指针指向多维数组

讲授

一、数组元素的指针

每个数组元素都在内存中占有存储单元,它们都有相应的地址,所谓数组元素的指针就是数组元素的地址。

二、在引用指针元素时指针的运算

1、在一定条件下允许对指针进行加和减的运算。

2、在指针指向数组元素时,可以对指针进行加和自加,减和自减运算。

三、通过指针引用数组元素

1、下标法

2、指针法

例8.7 通过指针变量输出整型数组a的10个元素。

四、用数组名和“数组的指针变量”作为函数参数

例8.8 将数组a中n个整数按相反顺序存放。

例8.9 将例8.8写成指针变量作实参

例8.10 用指针法对10个整数按从大到小顺序排序

五、通过指针指向多维数组

1、多维数组的地址

2、指向多维数组元素的指针

(1)指向数组元素的指针变量

例8.12 有一个3×4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值。

(2)指向由m个元素组成的一维数组的指针变量

3、用指向数组的指针作函数参数

例8.14 有一个班,3个学生,各学4门课程,计算总平均分数以及第n个学生的成绩。

例8.15 在例8.14的基础上,查找有1 门以上课程不及格的学生,输出他们全部课程的成绩。

课后自我

总结分析

备注

《C语言程序设计》教案

第37-38 课时

授课内容

第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语言程序设计》教案

第47-48 课时

授课内容

第9章(3) 共用体及枚举

掌握链表的使用;掌握共用体类型的使用;理解枚举类型的概念

教学目的

和要求

重点:掌握链表的使用;掌握共同体类型的使用;理解枚举类型的概念

难点:掌握链表的使用;掌握共同体类型的使用;理解枚举类型的概念

讲授

一、共用体

1、什么是共用体类型

有时想用同一段内存单元存放不同类型的变量。这种使几个不同类型的变量共享同一段内存的结构,称为“共用体”类型结构。

2、共用体与结构体的异同

(1)结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

(2)结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。

3、引用共用体变量的方式

4、共用体类型数据的特点

5、国内有些资料把共用体这一概念称之为“联合”

例9.11

二、枚举

1、枚举类型概念

如果一个变量只有几中可能的值,则可以定义为枚举类型。枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。

2、枚举类型的定义和变量的说明

3、枚举类型变量的赋值和使用

例 9.12

4、用typedef声明新类型名

三、上机演示及实践操作

在讲课的同时切换到编译器界面调试代码

重点

难点

课后自我

总结分析

备注

《C语言程序设计》教案

第49-50 课时

授课内容

第10章(1) 文本文件及二进制文件的打开与关闭

教学目的

了解文件存储的物理结构与编码;了解文本文件与二进制文件的异同;

和要求

fopen函数、fclose函数的使用;

重点

难点

重点:文件存储的物理结构与编码,文本文件与二进制文件的异同

难点:文件存储的物理结构与编码,文本文件与二进制文件的异同

引言

数据的永久保存、中间数据、数据的传递(需求)

讲授

一、文件概述

1、文件 (10分钟)

计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的,这两者只是在编码层次上有差异。

2、文件名

3、磁盘文件,设备文件

4、ASCII文件、二进制文件

因为文本文件与二进制文件的区别仅仅是编码上不同,所以他们的优缺点就是编码

的优缺点。一般认为,文本文件编码基于字符定长,译码容易些;二进制文件编码是变长的,所以它灵活,存储利用率要高些,译码难一些(不同的二进制文件格式,有不同的译码方式)。

二、文件缓冲区 (5分钟)

缓冲区就是主内存(一般指基本640K内存)区留出的,用来存放从磁盘里取来的信息的区域。缓冲区除保留磁盘目录和文件表信息外,还保留程序正在使用或存放的部分内容。当计算机用到磁盘数据时,计算机道先判断数据是否在缓冲区中,若在,则计算机直接从缓冲区中取数据,否则再去磁盘中取,这样就可减少驱动器头的启动次数,减少磁盘的磨损,加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。

三、文件类型指针(15分钟)

1、 文件类型(结构体)- FILE类型

2、 文件指针变量(文件指针)

四、文件打开/关闭 (15分钟)

对文件的操作的步骤:先打开,后读写,最后关闭。

1、 文件的打开(fopen函数)。关于打开方式,可以参看p204,表12-1,p205,表12-2。

2、 文件的关闭(fclose函数)

课后自我

总结分析

备注

《C语言程序设计》教案

第51-52 课时

授课内容

第10章(2) 读取文件数据、写入数据至文件

教学目的

掌握文本文件的读文件与写文件;掌握二进制文件的读文件与写文件;

和要求

掌握随机读写数据文件

重点

难点

重点:掌握文本文件的读文件与写文件,掌握二进制文件的读文件与写文件

难点:掌握文本文件的读文件与写文件,掌握二进制文件的读文件与写文件

讲授

一、文件读写

常用的文件读写函数:

1、字符读写函数:fgetc,fputc

2、字符串读写函数:fgets,fputs

3、格式化读写函数:fscanf,fprintf

二、二进制文件的读文件与写文件

1、数据块读写函数:fread,fwrite

例10.4 存入学生数据到二进制文件

(1)构造学生数据的结构体

(2)用FILE文件指针打开文件

(3)用 for循环语句及fwrite函数写入学生数据至二进制文件

(4) )用 for循环语句及fread函数从二进制文件读取学生数据

三、文件定位

1、 文件顺序读写

2、 文件随机读写

3、 文件位置指针

4、 文件位置指针函数

(1) rewind重返文件头函数

(2) fseek位置指针移动函数

(3) ftell获取当前位置指针函数

可以通过文件位置指针函数,实现文件的定位读写。

四、利用ftell和fseek函数获取文件大小

(1)把文件的位置指针移到文件尾

(2)用ftell函数用于得到文件尾位置相对于文件首的偏移字节数。

(3)打印文件的字节数,即文件大小

课后自我

总结分析

备注


本文标签: 函数 指针 数组