04《C语言程序设计》教案第二章基本数据类型和表达式

上传人:平*** 文档编号:17394450 上传时间:2017-11-11 格式:DOC 页数:8 大小:90.87KB
返回 下载 相关 举报
04《C语言程序设计》教案第二章基本数据类型和表达式_第1页
第1页 / 共8页
04《C语言程序设计》教案第二章基本数据类型和表达式_第2页
第2页 / 共8页
04《C语言程序设计》教案第二章基本数据类型和表达式_第3页
第3页 / 共8页
04《C语言程序设计》教案第二章基本数据类型和表达式_第4页
第4页 / 共8页
04《C语言程序设计》教案第二章基本数据类型和表达式_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《04《C语言程序设计》教案第二章基本数据类型和表达式》由会员分享,可在线阅读,更多相关《04《C语言程序设计》教案第二章基本数据类型和表达式(8页珍藏版)》请在金锄头文库上搜索。

1、C 语言程序设计课程教案表课时安排 2授课题目第二章 基本数据类型和表达式(3) 授课时间教学目的和要求1掌握:指针运算2了解:位运算符及逗号运算符教学内容1基本内容:(1)指针运算(2)其他运算符及表达式2重点:指针变量的定义与应用、指针运算3难点:指针运算讲课进程和时间分配、地址与指针的概念 (15 分钟)(1)变量的指针与变量的值1)地址:在计算机中,把内存区划分为一个一个的存储单元,每个单元为一个字节(位) ,它们都有一个编号,这个编号就是内存地址板书上面这个图,以便使学生更好地理解内存地址。如有定义:char c=A; int a=3; 则所占内存情况如下:注意:c 和 a 的地址可

2、能相邻,也可能不相邻,是由系统分配的,我们不用关心。【例 2.11】输出变量的值和变量的指针(地址) 。main()int a=10,b=20; char c=X,d=Y;201 202 203主任办公室 书记办公室 秘书办公室 float e=5.6,f=-2.8; printf(“%d,%dn”,a,b);printf(“%c,%cn”,c,d);printf(“%f,%fn”,e,f);printf(“%p,%p,%p,%p,%p,%pn”,a,b,c,d,e,f); 输出结果:12,20通过上述例题,使学生区分变量的值和变量地址(指针)两个专业术语。(2)变量的指针和指针变量C 语言中

3、一个变量所分配的内存空间首字节地址,称为该变量的指针(地址)。一个指针变量的值是存放另一个变量的地址。例如: int a=10,*p;p=&a; 将变量 a 的地址赋给指针变量 p,如图 2-9 所示。2、指针变量的定义与引用 (20 分钟)(1)指针变量的定义指针变量的定义格式:数据类型 *;说明:“*”表示该变量为一个指针变量。为指针变量名,取名规则与一般变量取名规则相同。例 :int *p1; /*定义 p1 为指向整型变量的指针变量*/char *c1; /*定义 c1 为指向字符型变量的指针变量 */ float *f1; /*定义 f1 为指向实型变量的指针变量 */以上定义的 3

4、 个指针变量,其中,p1 可以存放整型变量的地址;c1 存放字符型变量的地址;f1 存放实型变量的地址。(2)与指针有关的两个运算1) & 取地址运算符作用:取变量内存单元的地址。取变量地址的运算符“&”在前面输入语句时已经使用过。如:scanf(“%d”,&a);/*向变量 a 的地址中输入数据 */一个指针变量只能指向其定义中所说明的数据类型。例:int a,*p1;char c,*c1;p1=&a; /*把变量 a 的地址赋给指针变量 p1 */c1=&c; /*把变量 c 的地址赋给指针变量 c1 */以上定义的 p1、c1 两个指针变量,p1 的值是变量 a 的指针;c1 的值是变量

5、 c 的指针。2) * 取内容运算符作用:取指针变量所指变量的值,又称间接访问运算符考虑:存储单元的地址与变量间有什么样的关系?看下面例子:用现实生活中的例子使学生更好地理解上述问题,并找到两者之间联系。主任办公室 书记办公室 教学秘书办公室201 202 203此处房间相当于存储单元、房间号相当于地址、 “主任办公室”等相当于变量名。因此,对存储单元的访问,既可以通过变量名来实现,也可以通过地址来访问。结论:对一个变量的访问(访问是指存、取其值或赋值等操作)有两种方式:直接访问间接访问直接访问:即直接通过变量名所对应的地址访问数据。例:main()int a=5; printf(“a=%dn

6、”,a); 运行结果:a=5通过变量名 a 与地址的对应关系,找到 a 的地址,然后从地址中取出数据 5 输出间接访问:即通过一个指针变量来访问数据。间接访问即先把某一变量的地址保存在一个指针变量中,若对该变量的数据进行操作,先要找到保存该变量地址的指针变量,然后从指针变量中取出保存的地址,再从地址中取出数据进行运算。例:main()int a=10,*p; p=&a; /* 将变量 a 的地址赋给指针变量 p */printf(“a=%dn”,*p);/* *p 是取出 p 所指向的变量 a 的地址 65500 中的值*/运行结果:a=10 (3)指针变量的定义与引用指针变量的初始化的一般格

7、式如下:数据类型 *=&变量名;例:int a,*p=&a; 指针变量初始化的过程是:系统按照所定义的类型,在内存中为变量 a 与指针变量 p分配存储空间。同时,将变量 a 的地址送给指针变量 p 中。在上面的定义中,p 指向 a。定义指针变量的目的是,为了通过指针变量去引用(访问)内存单元。当一个指针变量得到一个变量的地址后,就可以用指针对变量进行操作。【例 2.12】用两种方式输出变量的值。main() int a=10,b=20;int *p1=&a;/*指针变量的初始化*/int *p2=&b;printf(“a=%d,b=%dn”,a,b);printf(“*p1=%d,*p2=%d

8、n”*p1,*p2); 运行:a=10,b=20*p1=10,*p2=20分析结果:第一个打印语句 printf(“a=%d,b=%dn”,a,b);是用直接方式输出。第二个printf(“*p1=%d,*p2=%dn”*p1,*p2);是用间接访问方式输出,其执行过程是: a 的地址赋给指针变量 p1,b 的地址赋给指针变量 p2。p1 指向 a,p2 指向 b(如图 2-11 所示)。*p1 和*p2 是分别从其内存单元中取出的值 65500 和 65502。然后,从地址 65500、65502 中分别取出值 10、20 输出。以上表明:当 p1=&a;则 p1 的值是 a 的地址;*p1

9、 是 a 的值,即*p1 与 a 等价。对某一个变量进行运算,可以用两种方法来进行:用变量名; 用指针运算符“*”,取指针变量所指变量的值。【例 2.13】分析程序运行结果。main() int a=10,b=8,c,d,*p1,*p2; p1=&a;p2=&b; c=*p1+*p2; d=*p1-*p2;Printf(“a+b=%dn”,c);Printf(“a-b=%dn”,d); 运行结果:a+b=18a-b=2说明:p1 的值是 a 的地址,*p1 是取 p1 所指变量的值,即 a 的值,所以*p1 与 a 等价。同理,*p2 与 b 等价。所以有:c=*p1+*p2 与 c=a+b

10、等价;c=*p1-*p2 与 c=a-b 等价。 3、指针运算 (20 分钟)指针运算就是地址运算。(1)指针的算术运算1)指针加、减整数的运算设:p 为指针变量,n 为正整数。则表达式 p+n,为 p 的当前值后面第 n 项数据的地址。p+n 与 p 之间有多少个单元,与 p 所指向的数据类型有关。如 int 型变量在内存占 2 个字节,若 p 为指向 int 型变量,p+,指针自动向后移动 2 个字节,p+2 则向后移动 4 个字节。同理,表达式 p-n 为 p 的当前值前移第 n 项数据的地址,-p ,则 p 前移动 2 个字节。因此,p+n 是按数据类型存储单元比例增大,而不是直接加

11、n。所以有:int a,*p1; p1=&a;char c,*pc;pc=&c;float f,*fp;fp=&f;p1+2; /*p1 向后移动 4 个字节*/pc+2; /*pc 向后移动 2 个字节*/pf+2; /*pf 向后移动 8 个字节*/同理:p1-3; /*p1 向前移动 6 个字节*/pc-2; /*pc 向前移动 2 个字节*/pf-2; /*pf 向前移动 8 个字节*/两个指针相加无意义2)指针变量自加自减运算仍设 p 为指向 int 型的指针变量。下面由运算符+、-作用于指针 p,构成 4 个表达式。*p+ 取 p 的当前值,然后 p=p+1,即指针向后移动 2 个

12、字节。*p- 取 p 的当前值,然后 p=p-1, 即指针向前移动 2 个字节。 。*(+p)指针向后移动 2 个字节,然后取 p 的当前值。*(-p)指针向前移动 2 个字节,然后取 p 的当前值。指针向前(-)或向后(+)移动的字节数,与定义的指针类型有关。(2)指针的赋值运算可以把一个变量的地址赋值给一个指针变量,或者将一个有确定指向的指针变量的值,赋给另一个相同类型的指针变量。如:int a,b,*p1,*p2; /* 定义 2 个整型变量及 2 个指向整型变量的指针变量 */p1=&a; /* 变量 a 的地址赋给 p1 */p2=p1; /* p1 的值赋给 p2 ,即 p1,p2

13、 同时指向变量 a */(3)指针的关系运算指向同类型的两个指针 p1 与 p2,如,p1 值所表示的地址码在 p2 值所表示的地址码之前时,表达式 p1) ,由于位操作是按二进制进行运算,所以运算量一般为无符号整型或字符型。操作数可以是常量、变量或表达式 。(1)按位与(&)操作规则:参加运算的两个运算量,如果两个相应的位均为 1,则该位的结果为 1,否则为 0。即:0&0=0 0&1=0 1&0=0 1&1=1 例如:01000001 & 01000010 (按位与& )01000000 (结果)按位与的主要用途为:1)清零。要将一个运算量的每个位清零(屏蔽) ,例如 a 的值为 1101

14、101,b 的值为11110000,a&b 的结果是 11010000,相当于把 a 的低 4 位屏蔽,高 4 位不变。2)取一个数中的某些位。若要把某数的某些二进制位取出来,可以把其它位清零,把需要取出的位作按位与即可。(2)按位或|操作规则:参加运算的两个运算量,其相应的位中只要有一个为 1,则该位的结果为1,否则为 0。即:0|0=00|1=11|0=11|1=1例如:01000001 | 01000010 (按位或| )01000011 (结果)按位或常用来对一个数的某些位置为 1。一个数为 a,要将其低字节全置为 1,即低字节为 11111111,可将该数与 255(十六进制为 FF,二进制为 11111111)按位或即可。 (3) 按位异或()操作规则:参加运算的两个运算量,当相应位相同时,其结果在该位为 0,相应位不同时,其结果在该位为 1,即按位相加,但不进位。即:00=001=110=111=0例如:01000001

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号