《程序设计基础》
教案
中职数学基础模块教案 下载北师大版¥1.2次方程的根与系数的关系的教案关于坚持的教案初中数学教案下载电子教案下载
第一章 程序设计和C语言
课 题
C语言概述
教案号
1
教 学
目 的
1、了解C语言出现的历史背景
2、掌握C语言程序的结构、书写格式和上机步骤
教 材
分 析
教学重点
C语言程序的结构
教学难点
上机步骤
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一 新课引入
从计算机应用基础中学过的计算机语言及语言处理系统引出C语言。
二 讲授新课
一、 C语言出现的背景
二、 C语言的特点
1. 语言简洁、紧凑,使用方便、灵活;
2. 运算符丰富
3. 数据类型多(整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类等)
4. 具有结构化的控制语句
5. 语法不太严格,自由度大
6. 既是高级语言,又具有低级语言的功能
7. 成目标代码质量高,程序执行效率
8. 可移植性好
三、C语言程序构成(采用程序实例加以说明,并提倡良好的程序设计书写风格)
1. C语言是由函数构成的,至少有一个main()函数;
2. 每个函数由函数首部和函数体组成;函数体由说明语句、执行语句组成;
3. 每个C程序从main()函数开始执行,并在main()中结束;
4. 每个语句和数据定义的最后必须加分号;
5. C程序无输入、输出语句:输入功能由scanf()函数完成;输出功能由printf()函数完成;
6. 可加注释/*……*/
四、上机步骤(上机环境:Turbo C 2.0)
1. 进入环境 2. 编辑源程序 3. 保存源程序 4. 编译源程序
5. 执行程序,查看结果 6. 6. 退出C环境
三 课堂小结
1、 C语言的构成要素,main函数在程序中的作用
2、 上机操作的过程
备注
安排上机实验,熟悉TC环境及简单的C语言程序构成
页码
1
第二章 算法——程序的灵魂
课 题
算法
教案号
2
教 学
目 的
1、了解算法的概念
2、掌握结构化程序的三种基本结构,及算法的表示方法
教 材
分 析
教学重点
算法的表示方法
教学难点
结构化程序的三种基本结构
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一 复习引导
从C程序的构成到C程序的设计过程
二 讲授新课
一个程序包括以下两方面
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
:
1. 对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构;
2. 对操作的描述。即算法,为解决一个问题而采取的方法和步骤。
著名计算机科学家Wirth提出一个公式:数据结构+算法=程序
一、简单的算法举例
例1:设有两个杯子A和B,分别盛放酒和醋,要求将它们互换。
S1:C ← A S2:A ← B S3:B ← C
例2:求1~100的和
S1:sum←0,t←1; S2:sum←sum+t
S3:t←t+1 S4:若t <= 100,则转到S2,否则转到S5;
S5:输出sum,结束。
二、二、 算法的特征
1、有穷性; 2、确定性; 3、 有零个或多个输入;
4、 有一个或多个输出; 5、 有效性;
三、算法的表示
1、 用自然语言表示算法–通俗易懂,但有“歧义”。
2、 用传统流程图表示算法–直观、易懂。
程序的三种基本结构:顺序结构、选择结构、循环结构
备注
页码
2
第2章 算法——程序的灵魂
课 题
算法
教案号
2
教 学
目 的
1、了解算法的概念
2、掌握结构化程序的三种基本结构,及算法的表示方法
教 材
分 析
教学重点
算法的表示方法
教学难点
结构化程序的三种基本结构
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
3、N-S流程图表示算法
3、 用伪代码表示算法
4、 用计算机语言表示算法(即实现算法)
四、结构化程序设计方法
结构化程序设计方法强调:
程序设计风格和程序结构的规范化,提倡清晰的结构:
①自顶向下 ②逐步细化
③模块化设计
④结构化编码
三、课堂小结
1、 程序的三种基本结构:顺序、选择、循环
2、 5种描述算法的方法,关键是N-S图
3、 灵活运用三种基本结构,学会结构化的程序设计方法
四、布置作业
用N-S图表示求解以下问题的算法:
1、求10!
2、将100~200之间的素数打印出来
3、求两个数m ,n的最大公约数
备注
安排上机实验
页码
3
第3章 最简单的C程序设计---顺序程序设计
课 题
数据类型
教案号
3
教 学
目 的
1、掌握C的数据类型
2、掌握整型、实型、字符型数据的常量及变量
教 材
分 析
教学重点
各种基本数据类型的常量和变量
教学难点
不同类型的数据在内存中的物理存储形式
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一 复习引导
上次课我们已经学习了程序的一个方面算法,现在来学习另一方面数据结构。
二 讲授新课
C有四种基本数据类型,分别是整型、字符型、实型、枚举型
一、常量与变量
1、 常量:在程序运行过程中,其值不能被改变的量。
两种形式:一般常量和符号常量
1. 直接常量(字面常量):
整型常量:如12、0、-3等
实型常量:如4.5、-1.234等
字符常量:如‘a’、‘1’等,用单引号表示;
字符串常量:如“a”、“abc”、“1”,用双引号表示。
2. 符号常量:
符号常量即是用一个标识符来代替一个常量;符号常借助于预处理命令#define来实现;
定义形式:#define 标识符 字符串
如:#define PI 3.1415926535
说明:
① 习惯上,符号常量用大写字母表示;
② 定义符号常量时,不能以“;”结束;
③ 一个#define占一行,且要从第一列开始书写;
④ 一个源程序文件中可含有若干个define命令,不同的define命令中指定的“标识符”不能相同;
2、变量:在程序运行过程中,其值会发生变化。
1.每个变量必须有一个名字,变量名是标识符。
2.标识符是用来标识数据对象,是一个数据对象的名字。
3.命名规则:以字母或下划线开始,后跟字符、数字或下划线。
例:x1,_average,lotus_1_2_3,#abc,1fs,M.D.Jhon
4.变量名不能是关键字(即保留字,是C编译程序中保留使用的标识符。 如:auto、break、char、do、else、if、int等)
5.变量必须先定义再使用
备注
页码
4
第3章 最简单的C程序设计---顺序程序设计
课 题
数据类型
教案号
3
教 学
目 的
1、掌握C的数据类型
2、掌握整型、实型、字符型数据的常量及变量
教 材
分 析
教学重点
各种基本数据类型的常量和变量
教学难点
不同类型的数据在内存中的物理存储形式
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
二、整型数据
1、整型常量的表示方法
1) 十进制 如:123,-456,0
2) 八进制数 如:0123,-011 (以0开头的数)
3) 十六进制数 如:0x123,-0x12,0xABC (以0x开头的)
2、整型变量
1) 整型数据在内存中以二进制形式存放,每一个整型变量在内存中占2个字节。
例:定义整型变量i=10 和j= -10的存放形式。
2) 整型变量的分类:基本型int、短整型short、长整型long、无符号型unsigned
3) 整型变量的定义
对变量的定义,一般放在函数体开头部分的声明部分(也可放在函数中某一分程序内)
例:#include
main( )
{ int a, b, c, d; unsigned u;
a=12; b=-24; u=10;
c=a+u; d=b+u;
printf(“a+u=%d, b+u=%d\n”,c,d); }
4) 整型数据的溢出
一个int 型变量的最大允许值为32767,如果再加1,其结果不是32768,而是-32768。即“溢出”。
三、实型数据
1、实型常量的表示方法
(1) 十进制浮点数
如:0.123,.456,0.0,123.,123.0
整数部分和小数部分都可省,但不能同时省
(2) 指数形式
如:123e3,123E3代表123×103
指数部分为整常数; 尾数部分可以是整常数,也可以是实常数;尾数部分和指数部分均不可省。E10, 100.e15.2, .e5均为不合法的浮点数。
备注
页码
5
第三章 最简单的C程序设计---顺序程序设计
课 题
数据类型
教案号
3
教 学
目 的
1、掌握C的数据类型
2、掌握整型、实型、字符型数据的常量及变量
教 材
分 析
教学重点
各种基本数据类型的常量和变量
教学难点
不同类型的数据在内存中的物理存储形式
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
2、实型变量
(1)实型数据在内存中的存放形式
一个实型数据一般在内存中占4个字节(32位)。实型数据是按照指数形式存储的。
(2)实型变量的分类:单精度float、双精度double、长双精度long double
四、字符型数据
1、字符常量
1) 括在一对单引号中的一个字符(单引号仅作界限符),如:‘a’ 、‘X’
2 ) 一个字符常量占1个字节,存放的是字符的ASCII码值。
3) 转义字符:
以‘ \ ’开头,后跟一个约定的字符或所要表示字符的十六进制(或者八进制)的编码;
2、字符变量: 字符变量用来存放字符常量,只能放一个字符。例:char c1=‘a’, c2=‘A’; 一个字符变量在内存中占一个字节。
五、字符串常量
1. 括在一对双引号中的0个或多个字符组成的序列;双引号仅作界限符;如:
“C language programming”、“a\\n”、“#123”、“ ”等为字符串常量;
2.字符串常量的实际存储:在存储完字符串中的有效字符后还应存储字符串结束标志‘\0’。
六、变量赋初值
在定义变量时对变量进行赋值称为变量的初始化;
格式:类型说明符 变量1=值1,变量2=值2,……;
如: int a=3, b=4, c=5;
float x=3.4, y=0.75;
char ch1=‘K’, ch2=‘P’;
三 课堂小结
1、C的基本数据类型int、float、double、char
2、 基本数据类型的常量表示、变量定义,及不同类型的数据在内存中的存储形式
四、布置作业
练习P82:课后习题
备注
页码
6
第三章 最简单的C程序设计---顺序程序设计
课 题
运算符与表达式
教案号
4
教 学
目 的
1、掌握C语言中的各种运算符
2、掌握运算符的优先级与结合性
教 材
分 析
教学重点
C语言中各种运算符的使用
教学难点
混合表达式中运算符的运算顺序
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一、讲授新课
用运算符和括号将运算对象(数据)连接起来的、符合C语法规则的句子称为表达式。
优先级是指表达式中包含多个运算符时,先进行优先级高的运算符操作,然后在进行优先级低的运算符操作;
当表达式中包含的几个运算符的优先级全相同时,由运算符的结合性来决定他们的运算顺序。1) 从左至右 2) 从右至左
一、算术运算符与算术表达式
1、基本的算术运算符: + – * / %
优先级: * / % 高于 + –
结合性:左结合性
2、算术表达式:用算术运算符和括号将运算对象(操作数)连接起来的、符合C语法规则的式子称为算术表达式。
3、强制类型转换运算符:(类型名)(表达式)
4、自增、自减运算符:+ + – –
作用是使变量的值增一或减一。
二、赋值运算符与赋值表达式
1、 简单的赋值运算符:= 除逗号表达式外,优先级最低
2、 复合赋值运算符: += *= %=等
3、 赋值表达式: <变量><赋值运算符>< 表达式/值>
4、 嵌套的赋值表达式
三、逗号运算符与逗号表达式
1、 逗号运算符: , 所有运算符中优先级最低
2、 逗号表达式: 表达式1,表达式2,……,表达式n
求解过程:先求表达式1,再求表达式2,依次求下去,直到求出表达式n,整个逗号表达式的值就是表达式n的值
四、各类数值型数据间的混合运算(P54)
二、 课堂小结
1、 ++、--运算
2、 各种运算符的优先级 3、表达式值的求解
三、 布置作业
练习:P83 习题
备注
安排上机实验
页码
7
第三章 最简单的C程序设计---顺序程序设计
课 题
顺序程序设计
教案号
5
教 学
目 的
1、了解C语句的概念及种类、掌握C语言常用的输入/出方式
2、学会简单的顺序程序设计
教 材
分 析
教学重点
C语言常用的输入/出方式
教学难点
格式输入输出
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一、复习引导
上一章介绍的常量、变量、运算符、表达式等都是构成程序的基本成分。本章将介绍为编写简单程序所必需的一些内容。
二、讲授新课
一、C语句概述
1、C语句分类:
①控制语句:二个分支语句(if-else、switch),三个循环语句(for、while、do-while),四个转移语句(continue、break、goto、return)
②函数调用语句 如:printf(“Hello, world!”);
③表达式语句 如: x+y; i++; a=2; a=3*5, 40 ;
④空语句 ;
⑤复合语句 { 语句序列 }
二、赋值语句:赋值语句是由赋值表达式加上一个分号构成,如:b=3;
三、 数据输入输出的概念及在C语言中的实现
1、 所谓输入输出是以计算机主机为主体而言的。
2、 C语言本身不提供输入输出语句,输入输出操作是通过函数调用实现的。
3、 要使用C语言库函数,应用“#include”将有关头文件包括到用户源程序中。
四、字符数据的输入输出
1、字符输出函数——putchar
语法:putchar(c)
语义:(向stdout终端)输出一个字符;
2、字符输入函数——getchar
语法:getchar ( ),是一个无参函数;
语义:(从stdin终端上) 输入一个字符,函数的值就是从输入设备得到的字符。
五、格式输入输出
1、格式输出函数——printf
语法:printf (“格式控制”, 输出表列);
格式控制:是用双引号括起来的字符串,包含两种信息:⑴ 普通字符和转义字符(这类字符总是原样输出)⑵格式说明:由%和格式控制符组成。如:%d, %f等;(P77)如:printf(“a=%d, b=%d”,a,b); 若a、b的值分别为2和3,则输出结果为: a=2, b=3
备注
页码
8
第三章 最简单的C程序设计---顺序程序设计
课 题
顺序程序设计
教案号
5
教 学
目 的
1、了解C语句的概念及种类、掌握C语言常用的输入/出方式
2、学会简单的顺序程序设计
教 材
分 析
教学重点
C语言常用的输入/出方式
教学难点
格式输入输出
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
2、格式输入函数 scanf
语法:scanf(“格式控制”,地址表列);
格式控制:包含三类符号
⑴ 空白字符:(空格、Tab或\t、\n),输入时不必一一对应;
⑵ 普通字符:(非格式转换说明符、非空白符、非%),输入时必须一一对应;
⑶ 格式转换说明符:
注意:scanf函数规定,组成输入项表的输入对象须是地址量;如:
scanf(“%d,%d,%d”,&a,&b,&c);
scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);
①第一个输入语句,正确的输入数据流为:123,456,789,处理的结果为:
123→a,456→b,789→c
②同理对第二个输入语句,正确的输入数据流应是:a=123,b=456,c=789 该输入数据流中除123,456,789被赋给相应变量外,其余都被丢弃
六、顺序结构程序设计举例
例1:输入三角形的三边长,求三角形面积。
分析:三边为a,b,c,面积area2=s(s-a)(s-b)(s-c),其中s=(a+b+c)/2
程序:
#include
main()
{ float a,b,c,s,area;
sacnf(%f,%f,%f”,&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n”,a,b,c,s);
printf(“area=%7.2f\n”,area);
}
备注
上机实验,学习简单的C程序设计。
页码
9
第四章 选择结构程序设计
课 题
选择结构程序设计
教案号
6
教 学
目 的
1、掌握实现选择结构的两种语句、两个运算符
2、学会编写选择结构的程序
教 材
分 析
教学重点
关系运算符、if-else语句
教学难点
嵌套if-else语句中的if与else匹配问题
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一、复习引导
上一次课已经介绍了程序基本结构之一,但在大多数情况下都要用到选择结构。
二、讲授新课
一、关系运算符与关系表达式
1、关系运算符:< <= > >= = = ! =
优先级:< <= > >= 高于 = = !=
关系运算符低于算术运算符,高于赋值运算符
2、关系表达式:用关系运算符将两个表达式连接起来的式子。
关系表达式求值:关系成立,值为1;关系不成立,值为0
二、双分支选择语句
1、if语句的三种形式
语法1:if (表达式)语句;
语法2:if (表达式) 语句1;else 语句2;
语法3:if (表达式1) 语句1;
else if (表达式2) 语句2;
else if (表达式3) 语句3;
……
else 语句n+1;
说明:
1. if 关键字后均为表达式(逻辑表达式、关系表达式、赋值表达式、变量等);
如:if (a=5) 语句; if (b) 语句;
2. 条件表达式必须用括号括起来,在语句后必须加分号;
3. 满足条件需执行一组语句时,该组语句必须用{ }括起来;
4. if 语句嵌套时,else 总是与它最靠近的未配对的if 匹配;
5.因为if 语句执行时总是简单地测试其中作为条件的“表达式”的值是0还是非0,便可利用这种特性来简化程序设计。如对于:
if (expression!=0) 完全可用 if (expression) 来代替;
同理: if(!exp)语句;等价于:if(exp= =0) 语句;
三、课堂小结
1、关系运算符与关系表达式
2、if-else语句的应用。
备注
页码
10
第四章 选择结构程序设计
课 题
选择结构程序设计
教案号
7
教 学
目 的
1、掌握实现选择结构的两种语句、两个运算符
2、学会编写选择结构的程序
教 材
分 析
教学重点
switch语句、条件运算符
教学难点
嵌套if-else语句中的if与else匹配问题
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一、教授新课
一、三目条件运算符及其表达式
1、条件运算符:?:
2、格式:e1?e2:e3
3、语义:判e1的值,为1时计算e2,否则计算e3;
如:max=(a>b)?a:b 等价于 if (a>b) max=a;
else max=b;
4、说明:
1) 条件运算符的结合方向自右至左
如:a>b?a:c>d?c:d 等价于 a>b?a:(c>d?c:d)
若int a=1,b=2,c=3,d=4;则表达式的值为________
2) 条件运算符的优先级仅高于逗号运算符与赋值运算符;
3) 只有当if语句的真假均只执行一个赋值语句且给同一变量赋值时,才能用条件表达式取代;如:if (a>b) max=a; else max=b;
二、switch 语句
语法1: switch (表达式)
{ case C1:语句序列1;
case C2:语句序列2;
……
case Cn:语句序列n;
default:语句序列n+1;
}
语法2:switch (表达式)
{ case C1:语句序列1;break;
case C2:语句序列2;break;
……
case Cn:语句序列n;break;
default: 语句序列n+1;break;
}
说明:(1)switch后面的()内的表达式,ANSI标准允许他为任何类型
(2) case后的常量表达式一般不可以为实型数据。
(3) 当表达式的值与某个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有case中的常量表达式的值都与表达式的值不相等,执行default后面语句。
备注
页码
11
第四章 选择结构程序设计
课 题
选择结构程序设计
教案号
7
教 学
目 的
1、掌握实现选择结构的两种语句、两个运算符
2、学会编写选择结构的程序
教 材
分 析
教学重点
switch语句、条件运算符
教学难点
嵌套if-else语句中的if与else匹配问题
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
(5) 每个case后面的常量表达式的值必须互不相同。
(6) 各个case与default出现次序不影响结果。
(7) break的使用(P99)
(8) 多个case可以共用一组语句
三、选择结构程序举例
例:求ax2+bx+c=0方程的根。
分析:
(1)a=0,不是二次方程。
(2)b2-4ac=0,有两个相等的实根。
(3)b2-4ac>0,有两个不等的实根。
(4)b2-4ac<0,有两个共轭的复根。
N-S图:P102
二、课堂小结
1、 switch语句
2、 在编写程序过程中,注意分支的作用范围,及复合语句的运用。
三、布置作业
1、上机作业(P112):6、8
2、书面作业(P111)3、7
备注
上机实验,学习选择结构的程序设计
页码
12
第五章 循环结构程序设计
课 题
循环结构程序设计
教案号
8
教 学
目 的
1、掌握三种循环语句的语法结构
2、灵活运用循环语句
教 材
分 析
教学重点
三种循环语句while、do-while、for
教学难点
三种循环语句的区别
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一、引入新课
问题1:假如全班41人,欲从键盘上输入每人的数学成绩,然后计算出平均成绩;
问题2: 编程计算n!。
重复执行一组语句是程序设计要求的基本功能之一。在C语言中可以用以下语句来实现循环:(1)if 和 goto (2)while (3)do-while (4)for
二、讲授新课
一、goto语句及用goto构成循环
语法:goto label;
其中:label是语句标号,它命名的规则同变量名;
语义:使程序无条件地转向标号为label的语句去执行;
二、while语句
语法:while (exp)
循环体语句;
语义:当exp为真时,执行循环体;为假时,执行循环语句的后续语句;
如:用while语句构成循环,求sum=1+2+…+100
程序如下:main()
{ int i=1, sum=0;
while (i<=100)
{ sum+=i;
i++; }
printf(“%d”,sum);
}
说明:1) 循环体可以用复合语句;
2) 在while语句前应有为测试表达式(exp)中的循环控制变量赋初值的语句,以确保循环的正常开始;
3)循环体内应有改变循环控制变量的语句,以确保循环进行有限次后正常结束; 如:i=1;while (i<=100)
sum=sum+1; (死循环)
4) while 循环的特点是先判断后执行,故循环有可能一次都不被执行;
如: i=3;
while (i<3)
printf(“i=%d\n”,i);
备注
页码
13
第五章 循环结构程序设计
课 题
循环结构程序设计
教案号
8
教 学
目 的
1、掌握三种循环语句的语法结构
2、灵活运用循环语句
教 材
分 析
教学重点
三种循环语句while、do-while、for
教学难点
三种循环语句的区别
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
三、do-while语句
语法:do
循环体语句;
while (exp);
语义:当exp为真时,执行循环体;为假时,执行循环语句的后续语句;
如:用do-while语句构成循环,求 sum=1+2+…+100
程序如下:main()
{ int i=1,sum=0;
do
{ sum+=i;
i++; }
while (i<=100);
printf(“%d”,sum);
}
说明:
1) 循环体可以用复合语句;
2) 循环控制变量在执行do前必须赋初值;循环体内应有改变循环控制变量的语句;
3) do-while 循环的特点是先执行后判断,故循环至少被执行一次;
如:i=3;
do
{ sum+= i;
i++;
} while (i>10);
三、课堂小结
1、 while、do-whilr语句的语法结构
2、 whie与do-while区别
3、 注意循环控制的范围
备注
页码
14
第五章 循环结构程序设计
课 题
循环结构程序设计
教案号
9
教 学
目 的
1、掌握三种循环语句的语法结构
2、灵活运用循环语句
教 材
分 析
教学重点
三种循环语句while、do-while、for
教学难点
三种循环语句的区别
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一、复习引导
从while和do-while语句中引入新的循环语句:for 语句
二、讲授新课
一、for 语句
语法:for(表达式1;表达式2;表达式3)
循环体语句;
语义:
1、先求表达式1;
2、求解表达式2,若其值为真,则执行第三步;若为假,则结束循环;
3、执行循环体中的语句;
4、求解表达式3;
5、转回第二步继续执行
如:
for( i=1; i<=100; i++) sum=sum+i;可看成:
for(循环变量赋初值;循环条件;循环变量增值)语句;
说明:
(1)显然for循环更简洁,更灵活;
(2)循环体可以是复合语句;
(3)for语句中的三个表达式均可以是逗号表达式,故可同时对多个变量赋初值及修改。如:for(i=0, j=1; j
main( )
{ int s=1; float n=1.0, t=1, pi=0;
while((fabs(t))>1e-6)
{ pi=pi+t; n+=2;
s=-s; t=s/n;
}
pi=pi*4;
printf(“pi=%10.6f\n”,pi);
}
三、课堂小结
1、 for语句的语法结构,特别是for语句中三个表达式的作用
2、 注意循环控制的范围
四、布置作业
上机练习:(P141)12、16
书面练习:(P140)3、5
备注
上机实验,学习循环结构程序设计
页码
16
第六章 利用数组处理批量数据
课 题
数组
教案号
10
教 学
目 的
1、掌握一维数组的定义和引用
2、掌握二维数组的定义和引用
教 材
分 析
教学重点
一维、二维数组的定义、引用、初始化
教学难点
数组的存储形式,数组的首地址
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一、 引入新课
数组是有序数据的集合,数组中每一个元素都属于同一个数据类型。
二、讲授新课
一、一维数组的定义和引用
定义数组,就是要:
(1)规定数组的名称,其取名规则与变量名相同;
(2)规定数组的类型,包括其数据类型和存储类型;
(3)规定数组的大小,即数组的维数及包含的数组元素的个数。数组元素就是包含在数组中的变量。
1、一维数组的定义:
类型说明符 数组名[常量表达式] 例如:int data[10], number[5];
2、一维数组元素的引用
数组名[下标] 例如:a[0]=a[5]+a[7]-a[2*3]
3、 一维数组在内存中占一段连续的存储空间,其首地址:a或&a[0]
4、 一维数组的初始化
1. 在定义数组时对数组元素赋以初值;int a[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
2. 可以只给一部分元素赋值; int a[10]={0, 1, 2, 3, 4};
3. 如果想使一个数组中全部元素值为0,可简便实现;
int a[10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
其实,对static数组不赋初值,系统会对所有数组元素自动赋以0值,即上句等价于: static int a[10];
4. C允许通过所赋初值的个数来隐含定义一维数组的大小;int a[]={0,1,2,3,4,5,0}; 相当于 int a[7]={0,1,2,3,4,5,0};
二、二维数组的定义和引用
1、二维数组的定义
类型说明符 数组名[常量表达式1][常量表达式2];
如:int number[5][4];
数组的存储结构:以行为主序的连续空间
2、二维数组的引用: 二维数组元素的表示形式为:数组名[下标][下标]
备注
页码
17
第六章 利用数组处理批量数据
课 题
数组
教案号
10
教 学
目 的
1、掌握一维数组的定义和引用
2、掌握二维数组的定义和引用
教 材
分 析
教学重点
一维、二维数组的定义、引用、初始化
教学难点
数组的存储形式,数组的首地址
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
3、二维数组的初始化
1. 分行给二维数组赋初值:如
static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2. 可以将所有数据写在一个花括号内,按数组排列的顺序对元素赋初值;如: static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
3. 如果花括号内的初值个数少于每行中的数组元素个数,则每行中后面的元素自动赋初值0;也允许代表给每行元素赋初值的花括号的数目少于数组的行数,这时,后面各行的元素也自动赋0值。
4.C语言规定,可以用初始化的方法来隐含定义二维数组第一维的大小,即可以省略数组定义中第一个方括号中的表达式,但不能省略第二个方括号中的表达式。如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 等价于
static int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
在定义时也可以只对部分元素赋初值而省略第一维长度,但应分行赋初值。如: static int a[ ][4]={{0,0,3},{0},{0,10}};
4、二维数组的输入与输出
用二重循环,以a[m][n]为例 for(i=0;ib?a:b;
return(c);
}
main()
{ int a=8; /*a局部变量*/
printf(“%d”,max(a,b));}
二、变量的存储类别
从变量值存在的(生存期)时间来分,可以分为:动态存储方式与静态存储方式
静态存储方式:指在程序运行期间分配固定的存储空间的方式。
动态存储方式:在程序运行期间根据需要进行动态的分配存储空间的方式。
1、auto变量
调用函数时系统自动分配存储空间,在函数调用结束时自动释放这些存储空间,称这类局部变量为自动变量。
自动变量用关键字auto作存储类别的声明。它也可省。
备注
页码
27
第七章 用函数实现模块化程序设计
课 题
全局与局部变量、动态与静态变量
教案号
16
教 学
目 的
1、掌握局部变量和全局变量的作用范围
2、掌握变量的存储类别,了解内部函数和外部函数
教 材
分 析
教学重点
局部变量和全局变量、变量的存储类别
教学难点
变量的作用域和生存期
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
2、用static声明局部变量
函数中变量的值在函数调用结束后不消失而保留原值,在下次该函数调用时,该变量已有值,即为上一次函数调用结束时的值。该局部变量为静态局部变量。
说明:
1、静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期都不释放。自动变量属于动态存储类别,占动态存储区空间,函数调用结束后即释放。
2、对静态局部变量在编译时赋初值,程序运行时,它已有初值,以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值。
3、对静态局部变量来说,如不赋初值,编译时自动赋初值0或空字符。
对自动变量来说,如不赋初值,它的值是一个不确定的值。
4、虽然静态局部变量在函数调用结束后仍然存在,但其他函数不能引用。
3、register变量
将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。这种变量称为寄存器变量。
4、用extern声明外部变量
1、在一个文件内声明外部变量
2、在多文件的程序中声明外部变量
5、用static声明外部变量
在定义外部变量时,加一个static声明,可以使此变量只能用于本文件中。
注:对外部变量加或不加static声明,都是静态存储,只是作用范围不同,都是在编译时分配内存的。
三、内部函数和外部函数
1、内部函数
一个函数只能被本文件中其他函数所调用。
即:static 类型标识符 函数名(形参表)
如:static int fun( int a,int b)
备注
页码
28
第七章 用函数实现模块化程序设计
课 题
全局与局部变量、动态与静态变量
教案号
16
教 学
目 的
1、掌握局部变量和全局变量的作用范围
2、掌握变量的存储类别,了解内部函数和外部函数
教 材
分 析
教学重点
局部变量和全局变量、变量的存储类别
教学难点
变量的作用域和生存期
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
2、外部函数
一个函数可供其他文件调用,称为外部函数
定义时声明或调用时声明,即:
extern int fun(int a, int b ) 定义时
或 extern fun(int a, int b ) 调用时
在定义时,也可省写extern ,即为外部函数
三、课堂小结
1、 局部变量和全局变量的作用域
2、 变量的存储类别有动态存储方式和静态存储方式
3、 关键字有auto、static、register、extern
四、布置作业
书面作业:(P219)17
备注
页码
29
第八章 善于利用指针
课 题
变量的指针与指针变量
教案号
17
教 学
目 的
1、了解指针与地址的概念
2、掌握指针变量的定义、引用及指针变量作为参数
教 材
分 析
教学重点
指针变量的定义、引用及指针变量作为参数
教学难点
指针变量作为参数
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一、讲授新课
一、地址与指针的概念
二、变量的指针与指针变量
变量的指针就是变量的地址。
指针变量是一种特殊类型的变量,它是用于专门存放地址的。
1、 指针变量的定义
定义形式:基类型 *指针变量名;
注意:
a) 指针变量前的“*”,表示改变量的类型为指针型变量,“*”后的才是指针变量名。
b) 在定义指针变量时必须指定基类型
2、 指针变量的引用
指针变量只能存放地址,不要将一个整型量(或其他任何非地址类型的数据)赋值给一个指针变量。
(1) 两个相关运算符:
1 &:取地址运算符。可以获取某个变量的地址
2 *: 指针运算符,获取某个指针变量所值向的变量的值
3 关于&和*运算符的说明:
假设已执行 pointer_1=&a;
1、&*pointer_1含义是什么?
&*pointer_1与&a相同,即变量a的地址。
2、*&a的含义是什么?
先进行&a运算,得a的地址,再进行*运算。
*&a、*pointer_1及变量a等价。
3、(*pointer_1) + + 相当于a + +。
它与*pointer_1 + + 不同。
4、*pointer_1 + + 等价于*(pointer_1 + +),即先进行*运算,得到a的值,然后使pointer_1的值改变,这样pointer_1不再指向a了。
3、 指针变量作为函数参数
函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。
例10.3对输入的两个整数按大小顺序输出。
先考察如下程序,看是否能得到预期的结果
备注
页码
30
第八章 善于利用指针
课 题
变量的指针与指针变量
教案号
17
教 学
目 的
1、了解指针与地址的概念
2、掌握指针变量的定义、引用及指针变量作为参数
教 材
分 析
教学重点
指针变量的定义、引用及指针变量作为参数
教学难点
指针变量作为参数
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
swap(int p1, int p2)
{ int temp;
temp = p1; p1 = p2; p2 =temp; }
main()
{ int a, b;
scanf(“%d, %d”, &a, &b);
if(a1)
{ ++argv;
printf(“%s”, *argv);
-- argc; }}
若将该程序编译、连接、装配成echo.exe,则在命令行上输入:
echo hello, world!
则通过虚实结合后得:argc=3,argv[0]指向echo,argv[1]指向hello,argv[2]指向world!
结果为:hello, world!
备注
页码
40
第八章 善于利用指针
课 题
指针数组作main函数的形参、掌握指针的应用
教案号
21
教 学
目 的
1、了解指针数组作main函数的形参
2、掌握指针的应用
教 材
分 析
教学重点
掌握指针的应用
教学难点
指针的应用
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
二、有关指针的数据类型和指针运算的小结
1、有关指针的数据类型的小结
见书中的表
2、指针运算小结
(1)指针变量加(减)一个整数 例:p++、p--、p+i、p-=i等
(2)指针变量赋值
将一个变量地址赋给一个指针变量。p=&a; p1=p2;
(3)指针变量可以有空值,即该指针变量不指向任何变量。如 : p=NULL;
(4)两个指向同一数组元素的指针变量可以相减
(5)两个指向同一数组的指针变量可作关系运算
三、习题举例:
习题10.5 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
程序:
main()
{ int i, k, m, n, num[50], *p;
printf(“Input number of person:n=”);
scanf(“%d”,&n); p=num;
for( i=0; i成员名,其中“->”称为指向运算符。
注意分析以下几种运算:(p是指向结构体变量的指针变量,n式结构体变量的成员名)
p->n 得到p指向的结构体变量的成员n的值
p->n++ 得到p指向的结构体变量的成员n的值,用完该值后再将它加1
++ p->n 得到p指向的结构体变量的成员n的值加1,然后再使用它。
三、指向结构体数组的指针
例如:指向结构体数组的指针的应用。
struct student{ int num; char name[20]; char sex;
int age;};
struct student stu[3]={{10101,”Li Lin”,’M’,18},\
{10102,”Zhang Fun”,’M’,19},\
{10104,”Wang Min”,’F’,20}};
备注
页码
44
第九章 用户自己建立数据类型
课 题
结构体数组、结构体类型数据与指针
教案号
23
教 学
目 的
1、结构体数组的应用
2、指向结构体类型数据的指针的应用
教 材
分 析
教学重点
指向结构体类型数据的指针
教学难点
指向结构体类型数据的指针
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
main( )
{ struct student *p;
for(p=stu; pnum,p->name, p->sex,p->age);
}
对“->”、“.”、“[ ]”、“()”的进一步说明
(1) 上述运算符具有相同的运算优先级和结合性;
(2) ++p->num的执行效果等价于: ++(p->num);
(3) (+ +p)->num的执行效果是:先执行p=p+1, 然后再执行p->num(注意p的值已经改变);
(4)(p+ +)->num的执行效果是:先存取p->num,然后再执行p=p+1;
(5) p+ +->num的执行效果同( p + +)->num;
与定义指向普通数组的指针一样,C语言允许定义指向结构数组的指针。如果p是指向结构数组的指针,那么p将指向该结构数组的起始地址(第0个元素的地址)、p+1将指向这个结构数组的第一个元素的地址、p+2将指向该结构数组的第三个元素的地址、…,依此类推。下例展示了本节所讨论的两种指针在程序中的实际应用。
例如:
int x[3]={4, 5, 6};
struct ss{int *y; char c;
}stu[3]={{&x[0],’1’},{&x[1],’2’},{&x[2],’3’}};
sturct ss *p=stu;
(6) *p->y即*(p->y),意味着p->y获得的一个地址量,故*(p->y)实际上是获取p->y内容的内容;
(7) *p->y+ +应理解为:先存取p->y的内容,再使p->y的内容增1;
(8) (*p->y)+ +是先取出p->y,再将取出的内容加1;
(9) *p+ +->y是取出p->y内容的内容,再使p加1。
四、用结构体变量和指向结构指针作函数参数
1、用结构体变量的成员作参数
2、用结构体变量作实参
备注
页码
45
第九章 用户自己建立数据类型
课 题
结构体数组、结构体类型数据与指针
教案号
23
教 学
目 的
1、结构体数组的应用
2、指向结构体类型数据的指针的应用
教 材
分 析
教学重点
指向结构体类型数据的指针
教学难点
指向结构体类型数据的指针
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
说明:用结构体变量作实参时,采取的是“值传递”的方式,将结构体变量所占的内存单元的内容全部顺序传递给形参。形参也必须是同类型的结构体变量。在函数调用期间形参也要占用内存单元。这种传递方式在空间和时间上开销较大,如果结构体的规模很大时,开销也是可观的。此外,由于采用值传递方式,如果在执行被调用函数期间改变了形参(也是结构体变量)的值,该值不能返回主调函数,这往往造成使用上的不便,因此一般较少使用这种方法。
3、用指向结构体变量(或数组)的指针作实参
三、课堂小结
本课主要学习了结构变量与指针的应用,利用指针引用结构成员。
四、布置作业
(P330)3、4
备注
页码
46
第九章 用户自己建立数据类型
课 题
用指针处理链表
教案号
24
教 学
目 的
领会存储动态分配和释放,领会链表的基本概念。
教 材
分 析
教学重点
存储动态分配和释放,链表的概念
教学难点
存储动态分配和释放,链表的概念
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一、讲授新课
一、链表概述
在讨论结构变量定义时曾指出,组成结构的成员项可以是任何数据类型。一个结构中的成员项可以是另一个结构类型的变量,或指向另一个结构类型的结构指针,甚至还可以是指向本结构类型的一个结构指针。如果一个结构中的一个成员是另一个结构变量,这样的结构称之为嵌套结构;如果一个结构的成员项是指向本结构类型的结构指针,这样的结构称之为“自引用结构”。
1. 若一结构的成员项是指向本结构类型的结构指针,这样的结构称之为“自引用结构”。例如:
struct node {
int data;
struct node *next;
};
便是一个典型的自引用结构。该结构的结构名为node,它由两个成员项组成:一个是int变量data,另一个是结构指针且是一个指向node类型对象的指针。
2. 下图是node的直观表示:
这是一种单向链表数据结构,链中的元素(也称“结点”)个数可以有任意多个(动态地进行存储分配的一种结构)。
二、链表结构可用于实现动态存储分配
1.动态数据结构与结构数组的区别
动态数据结构相当于结构数组,但比结构数组优越
(1)结构数组中的元素必须连续存放,而链表不必;
(2)数组中的元素个数确定,而链表中的元素个数没有限制,在实际使用中如果元素个数不确定,特别是需要动态增加元素的情况,使用链表更合适;
备注
页码
47
第九章 用户自己建立数据类型
课 题
用指针处理链表
教案号
24
教 学
目 的
领会存储动态分配和释放,领会链表的基本概念。
教 材
分 析
教学重点
存储动态分配和释放,链表的概念
教学难点
存储动态分配和释放,链表的概念
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
(3)C编译程序必须给数组分配存放其全部元素的存储空间,而对链表不必也不可能预先分配全部存储空间,因为C编译程序元法确定链表中的元素的个数。
2.用自引用结构实现链表结构需要解决三个问题
(1)必须指出链表第一个结点的位置,否则无法存取该链表中的结点
实现方法:定义一个指向该结构对象的指针,或定义一个该结构类型的变量,使其指向链表的第一个结点即可。如:
struct node *head;
(2)在建立一链表时,如何获得下一个新的结点的存放空间。
实现方法:用C编译系统提供的库函数malloc(size)动态分配存储空间得到。
除此之外,还可用calloc函数。如:
struct node *p1, *p2;
…
p2=(struct node *) malloc(size(struct node));
或: p2=(struct node *) calloc(1, size(struct node));
if (p2= =NULL) exit(0);
p1->next=p2; /*此处设p1指向新结点的上一结点*/
另外:free函数可用于释放内存区。
如:free(p); 表示释放由p指向的内存区,使这部分内存区能被其他变量使用。
(3)要明确指出链表的链尾。
实现方法:通常把最后结点中的成员项next置为空指针NULL即可。
三、简单链表
例:建立一个如下图所示的简单链表,并输出各结点中的数据。
备注
页码
48
第九章 用户自己建立数据类型
课 题
用指针处理链表
教案号
24
教 学
目 的
领会存储动态分配和释放,领会链表的基本概念。
教 材
分 析
教学重点
存储动态分配和释放,链表的概念
教学难点
存储动态分配和释放,链表的概念
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
#define NULL 0
struct strudent
{ long num;
float score;
struct student *next;
};
main( )
{ struct student a,b,c, *head, *p;
head=&a;
a.num=99101; a.score=89.5; a.next=&b;
b.num=99103; b.score=90; b.next=&c;
c.num=99107; c.score=85; c.next=NULL;
p=head;
do{ printf(“%ld%5.1f\n”, p->num, p->score);
p=p->next;
} while(p!=NULL); }
四、链表的建立
五、链表的输出
例11.9 编写一个输出链表的函数print。
void print( struct student *head )
{ struct student *p;
printf(“\nNow, These %d records are :\n”,n);
p = head;
if ( head!=NULL)
do
{ printf(“%ld %5.1f\n”,p->num,p->score);
p=p->next;
} while (p!=NULL);
备注
上机练习
页码
49
第九章 用户自己建立数据类型
课 题
用指针处理链表
教案号
24
教 学
目 的
领会存储动态分配和释放,领会链表的基本概念。
教 材
分 析
教学重点
存储动态分配和释放,链表的概念
教学难点
存储动态分配和释放,链表的概念
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
六、链表的删除操作
七、链表的插入操作
例11.11 写一个函数insert插入一结点。
分析:插入点可能有以下三种情况:在链表中间、表头、表尾。
struct student *insert(struct student *head, struct student *stud )
{ struct student *p0, *p1, *p2;
p1=head; p0=stud;
if(head= =NULL) {head=p0; p0->next=NULL;}
else { while((p0->num>p1->num)&&(p1->next !=NULL))
{ p2=p1; p1=p1->next;}
if(p0->num<=p1->num)
if(head= =p1) {head=p0; p0->next=p1; }
else { p2->next=p0; p0->next=p1; }
else {p1->next=p0; p0->next=NULL;}
}
return(head);}
三 课堂小结
本课主要学习了结构变量与指针的应用,利用指针引用结构成员;并介绍了链表的概念,作为链表结点的结构类型,及存储动态分配与释放的使用,静态链表的建立及其他操作,同学们在对链表操作时,应分析可能的情况,并画出链表的示意图。本章我们只学习了单向链表,在后续课程中还将学习其他类型的链表。。
四 布置作业
(P330) 9
备注
上机练习
页码
50
第九章 用户自己建立数据类型
课 题
共用体、枚举类型和typedef
教案号
25
教 学
目 的
1、掌握共用体类型的说明、共用体变量的定义、成员的引用
2、领会枚举类型变量的定义,了解typedef的作用
教 材
分 析
教学重点
掌握共用体类型的说明、共用体变量的定义、成员的引用
教学难点
共用体变量的赋值及所占存储空间、成员的引用
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一 复习引导
结构体变量所获得的存储空间是各成员项所占空间之和。
二 讲授新课
一、共用体(联合)
联合(共同体)也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型,因为有时我们需要使几种不同类型的变量放到同一内存单元中。允许利用同一存储区域来存储、处理不同类型的数据。使几个不同的变量共占同一段内存的结构,称为“联合”(共同体)类型的结构。
1、共用体的概念
使几个不同类型的变量共占同一段内存的结构。
共用体类型的定义形式:
union 共用体名
{ 数据类型1 变量名1;
数据类型2 变量名2;
… …
数据类型n 变量名n;
};
例如:
union data
{ int i;
char ch;
float f;
}a,b;
其中,变量a,b的成员i,ch,f共用一段空间。变量a,b的空间分别为4字节。
2、共用体变量的引用
共用体变量名.成员名
如: a.i 或 a.f
3、共用体变量的特点
(1) 同一内存段瞬时只能存放成员表中的一种,此时其他成员不起作用;
(2) 共用体变量的地址及各成员的地址相同;
即 &a、&a.i、&a.ch、&a.f 均是同一地址。
备注
页码
51
第九章 用户自己建立数据类型
课 题
共用体、枚举类型和typedef
教案号
25
教 学
目 的
1、掌握共用体类型的说明、共用体变量的定义、成员的引用
2、领会枚举类型变量的定义,了解typedef的作用
教 材
分 析
教学重点
掌握共用体类型的说明、共用体变量的定义、成员的引用
教学难点
共用体变量的赋值及所占存储空间、成员的引用
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
(3)不能用共用体变量名进行赋值、初始化等操作;如:
union { int i; char ch; float f; }a={1,’a’,1.5}; ×
(4)共用体与结构体可以嵌套使用。
(5)不能用共用体变量作为函数参数,也不能使函数带回共用体变量,但可用指向共用体变量的指针作函数的参数。
二、枚举类型
1、枚举类型的概念
列举出所有可能的取值的一种数据结构。
2、枚举类型的定义
enum 枚举名
{ 枚举值表 };
例:enum weekday{sun, mon, tue, wed, thu, fri, sat};
enum weekday week_end, workday;
或 enum weekday{sun,mon,tue,wed,thu,fri,sat}workday;
或 enum {sun,mon,tue,wed,thu,fri,sat}week_end;
3、枚举类型变量的赋值和使用
1. 枚举值是常量,不是变量;sun=5; mon=2; sun=mon; ×
2. 枚举类型是有序数据类型,枚举元素是有值的;
例:main( )
{ enum weekday {sun, mon, tue, wed, thu, fri, sat }a,b,c;
a=sun; b=mon; c=tue;
printf(“%d,%d,%d”,a,b,c);
}
运行结果为:0,1,2
可改变枚举元素的值。
enum weekday{sun=7, mon=1,tue,wed,thu,fri,sat} day;
备注
页码
52
第九章 用户自己建立数据类型
课 题
共用体、枚举类型和typedef
教案号
25
教 学
目 的
1、掌握共用体类型的说明、共用体变量的定义、成员的引用
2、领会枚举类型变量的定义,了解typedef的作用
教 材
分 析
教学重点
掌握共用体类型的说明、共用体变量的定义、成员的引用
教学难点
共用体变量的赋值及所占存储空间、成员的引用
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
3. 枚举元素可比较;例:默认时,mon>sun
4 . 只能将枚举值赋予枚举变量;
例:a=sun; b=mon; 是正确的 而 a=0; b=1; 是错误的
但 b=(enum weekday)1; 是正确的
5. 枚举元素不是字符串常量,使用时不要加引号。
6. 由于C编译程序将枚举量作为整型数来处理,所以可使用常数的地方,都可以使用枚举常量。
三、 用typedef定义类型
C语言不仅提供了丰富的数据类型,而且还允许用户自己定义类型说明符,即允许用户为数据类型取别名。类型定义符typedef可用来完成此项功能。
typedef 可完成为类型取别名.
typedef 的一般形式:
typedef 旧类型名 新类型名;
如:typedef float real;
real a, f ;
再如:typedef char *pointer ;
pointer p, string =“example”;
但我们必须明白:首先,定义的新名只是原名的一个别名,并不是建立一个新的数据类型;其次,新名和原名同时存在并有效,即原名并不失去效用,在程序中仍可使用;最后,用新名和原名定义的对象具有相同的性质和效果。
三 课堂小结
本课主要学习了共用体、枚举类型及用typedef定义类型。在使用共用体变量时,要和结构体变量做好区分。
四 布置作业
做《C语言习题集》同步练习第9章习题
备注
页码
53
第十章 对文件的输入输出
课 题
文件
教案号
26
教 学
目 的
1、掌握标准设备输入/输出函数的使用
2、掌握缓冲文件系统的使用
教 材
分 析
教学重点
标准设备输入/输出函数(部分)的使用,文件的使用
教学难点
文件的使用
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一、讲授新课
C语言把文件看成是一个字符(字节)的序列。按数据的组织形式,分为ASCII文件和二进制文件。前者每一个字节存放一个ASCII字符,后者把内存中的数据按其在内存中的存储形式输出到磁盘上存放。前者占空间多,需要转换,后者节省空间和转换时间,但一个字节不对应一个字符,不能直接输出字符形式。
C语言中可利用高级I/O库函数来存取文件,存取文件的过程与其他语言中的处理过程类似。通常按如下顺序进行:
…
打开文件
…
读写文件(若干次)
…
关闭文件
这个处理顺序表明:一个文件被存取之前首先要打开它,只有文件被打开后才能进行读/写操作,文件读/写完毕后必须关闭。
一、文件的打开
在操作系统中,每一个文件都有一个名字以供识别,如存储在磁盘上的C源程序文件file1.c,file2.c等。文件名是文件的外部名,通过它可以找到文件的实际存储设备、位置、大小、特性等诸如此类的相关信息。这些信息只能由操作系统的文件管理系统掌握与管理,因此要存取文件必须通过操作系统的文件系统。这意味着一个C语言程序没有直接通过文件的外部名存取一个外部文件的能力,程序中要存取文件必须与文件系统取得联系,把要存取文件的有关信息和要求,诸如文件的名字、读文件还是写文件、以何种方式读/写等告诉文件系统,由文件系统在设备中建立、寻找、定位文件,分配存取文件的缓冲区,做好存取文件要求的一切准备工作。
上述存取文件的有关信息和要求都由程序通过I/O库函数fopen告诉操作系统。
fopen函数的一般调用形式是:
FILE *fp;
fp=fopen(文件名,存取方式);
备注
页码
54
第十章 对文件的输入输出
课 题
文件
教案号
26
教 学
目 的
1、掌握标准设备输入/输出函数的使用
2、掌握缓冲文件系统的使用
教 材
分 析
教学重点
标准设备输入/输出函数(部分)的使用,文件的使用
教学难点
文件的使用
课时安排
2
教学方法
讲授与演示法相结合
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
二、文件的关闭
在使用完一个文件后应该关闭它,以防止它再被误用。“关闭”就是使文件指针变量不指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对其相连的文件进行读写操作,除非再次打开,使该指针变量重新指向该文件。用fclose函数关闭文件。
fclose函数调用的一般形式为:
fclose (文件指针);
例如: fclose(fp);
三、文件的读写
1. 读/写字符函数(fputc函数和fgetc函数)或(putc函数和getc函数)
fputc函数──把一个字符写到磁盘文件上去。
一般形式为: fputc(ch,fp);
fgetc函数──从指定文件读入一个字符。该文件必须是以读或读写方式打开的。调用形式为:ch=fgetc(fp);
二 课堂小结
本课讲解文件指针的说明,并用指针指向文件。利用fopen()和fclose()函数打开、关闭文件,注意:需要用文件时,要打开;不用后,立刻关闭。另外,还学习了两个读写文件的函数fgetc()、fputc(),用于读写字符。
三 布置作业
(P354)第3题
备注
页码
55
B�
�
A�
�
A�
�
B�
�
P�
�
A�
�
P�
�
A�
�
P�
�
A�
�
P�
�
A
B�
�
P�
�
T�
�
F�
�
A�
�
B�
�
A�
�
当P成立�
�
A�
�
当P成立