模块九 位操作训练 电子教案(表格式) C语言程序设计(高教版)

资源下载
  1. 二一教育资源

模块九 位操作训练 电子教案(表格式) C语言程序设计(高教版)

资源简介

第3章 面向对象(上)
模块九 位操作训练
职业本科规划教材
《C语言程序设计》
教学设计
课程名称: C语言程序设计
授课年级: 2022年级
授课学期: 2022学年第一学期
教师姓名: XXX
2021年10月22日
课题名称 模块九 位操作训练 计划学时 4 学时
内容分析 位操作是程序设计中对位模式按位或二进制数的一元和二元操作。C语言中共有6种位运算符。位运算主要用在检测和控制领域的程序设计中。
教学目标及基本要求 (1) 理解位运算的含义及使用;(2) 了解位段的定义、存储及使用。
教学重点 按位与(&)、按位或(|)、按位异或(^)、按位取反(~)及移位(>>、<<)
教学难点 按位异或(^)、按位取反(~)
教学方式 教学采用教师课堂讲授与学生操作练习共同进行的一体化教学方式概念性知识点:提出为什么,将抽象具体化,配合教学PPT、案例辅助讲解。操作性知识点:提需求,并上机演示如何操作,重点内容总结经验及注意事项。学生操作练习:完成教材中的引例、做中学以及练中学案例,有能力的学生还可以完成教师额外布置的拓展练习题目。
教学过程 第一、二、三学时(按位与、按位或、按位异或、按位取反、移位)一、引例任务,提出需求(1)通过引力任务,引出本节所需知识内容。【引例任务】不用第三个变量,完成两个变量值的交换。方案一:传统算法是通过第三个变量完成交换。【程序代码】void swap1(int *a,int *b){ int temp; temp=*a; *a=*b; *b=temp;}方案二:加减运算,把第一个变量当缓冲变量用。【程序代码】void swap2(int *a,int *b){ *a=*a+*b; *b=*a-*b;//b中放原来a中的值 *a=*a-*b;// 用这1条语句a = a + b - (b = a); 代替3条语句}方案三:乘除运算,是把第一个变量当缓冲变量用。【程序代码】void swap3(int *a,int *b){ *a=(*a)*(*b); *b=(*a)/(*b);//b中放原来a中的值 *a=(*a)/(*b);// 用这1条语句a = a + b - (b = a); 代替3条语句}方案四:异或运算。【程序代码】#include "stdio.h"void swap4(int *a,int *b){ *a=*a^*b; *b=*a^*b; *a=*a^*b;}int main(){ int a=123,b=321; swap1(&a,&b);printf("a=%d,b=%d\n",a,b);swap2(&a,&b);printf("a=%d,b=%d\n",a,b); swap3(&a,&b); printf("a=%d,b=%d\n",a,b);swap4(&a,&b);printf("a=%d,b=%d\n",a,b); return 0;}【程序运行】a=321,b=123a=123,b=321a=321,b=123a=123,b=321(2)明确学习方向。【知识点】按位与(&)运算按位或(|)运算按位异或(^)按位取反(~)移位(>>、<<)运算复合赋值位运算【能力点】理解位运算的含义及使用了解位段的定义、存储及使用明确目标,完成任务一般用字节(Byte)作为计算机信息的基本单位,一B由8个二进制位组成,其中最右边的一位称为“最低有效位”LSB,最左边的一位称为“最高有效位”MSB。最低有效位也称第0位,最高有效位也称第7位。通常用1字节、2字节、4字节、8字节表示一个信息。例如,用l字节表示一个英文字符,2字节表示一个汉字字符,4字节表示一个实数等等。1.按位与运算(&)【做中学9-1】〖〗设有X=10,Y=8,Z=X&Y(按位与),求Z的值。【程序代码】#includevoid main(){ int X=10,Y=8; int Z; Z=X&Y; printf(“Z=%d\n”;Z);}1)运算规则只有对应的位都为1时,按位与运算的结果才为1,其他的情况均为0,即:0&0=0 0&1=0 1&0=0 1&1=12)按位与运算的用途(1) 可以对某位进行清0操作方法:将需要清0的对应位与0进行按位与操作即可。(2) 可以提取指定位方法:将需要提取的位与1进行按位与操作即可按位或运算(|)【做中学9-2】假设有X=12,Y=9,Z= X | Y(按位或),则求Z的值。【程序代码】#includevoid main(){ int X=12,Y=9; int Z; Z=X|Y; printf(“Z=%d\n”;Z);}1)运算规则只有对应的位都为0时,按位或运算的结果才为0,其他的情况均为1,即:0|0=0 0|1=1 1|0=1 1|1=12)按位或运算的用途主要是对数据的某些位进行置1操作。方法:将需要置1的位与1进行按位或操作即可。按位异或运算(^)【做中学9-3】设有X=10,Y=8,Z=X^Y(按位异或),求Z的值。【程序代码】#includevoid main(){ int X=10,Y=8; int Z; Z=X^Y; printf(“Z=%d\n”;Z);}1)运算规则参与按位异或运算的两个二进制位如果值相同,则结果为0,如果不同则结果为1.即: 0^0=0 0^1=1 1^0=1 1^1=02)按位异或运算用途(1)与0异或,可以保留原值方法:原数中的1与0进行异或运算得1,0与0异或运算的0。(2)将特定位翻转方法:要翻转的位与1异或运算,其余位与0异或运算。、(3)实现两个变量值的交换【引例任务】的方案四就是利用异或运算完成了两个变量值的交换。按位取反运算(~)【做中学9-4】设有X=10,Z=~X(按位取反),求Z的值。【程序代码】#includevoid main(){ int X=10; int Z; Z=~X; printf(“Z=%d\n”;Z);}1)运算规则对一个二进制数按位取反,即将0变为l,1变为0。2)注意事项(1)单目运算符,具有右结合性;(2)~运算符的优先级别最高。5. 左移运算(<<)语法格式:a<>)语法格式:a>>n其中:a是操作数,可以是一个char或整型的变量或表达式;n是移位次数,必须是正整数。功能是将a中所有的二进制位数向右移动n位。运算规则:在移位过程中,各个二进制位顺序向右移动,移出右端之外的位则被舍弃,左端空出的位补0还是1取决于被移位的数是有符号数还是无符号数,具体为:(1)对于无符号数最高位即左端空出的位一律补0;(2)对于有符号数:正数则最高位补0,如果为负数,左端最高位补0还是补1则取决于所用的C编译系统。如果补0则称为“逻辑右移”,补l则称为“算术右移”。7. 复合赋值位运算位运算符与赋值运算符相结合,就组成复合赋值运算符。【做中学9-5】将变量x的 4-7位看成一个整数值,求这个值的大小。【程序代码】 #include void main(){ int x,y; printf("请输入一个16进制表示的正整数:"); scanf("%x",&x); y=0; y=~y; y<<=4; y=~y;// 低4位全为1,其余位为0 x=x>>4; x&=y; printf("该数的4-7位用十六进制表示是:%x\n",x);}三、归纳总结,布置课后作业 (1)回顾上课前的学习目标,对本节课知识点进行总结。 (2)扫描二维码查看相应资源,完成课后实训题。第四学时(边学边练、实训题)一、上机练习【能力点】理解位运算的作用理解和掌握位运算的应用掌握位段的定义及使用【练中学9-1】将十进制数转换为二进制形式。【程序代码】#include void putbit(int z,int n) { int i; for (i=n-1;i>=0;i--) /*从高位到低位逐位转换成字符0和1并输出到屏幕*/ putchar('0'+(1&z>>i));}void main(){ int x; printf("请输入一个十进制整数。"); scanf("%d",&x); printf("对应的二进制数是:"); putbit(x,sizeof(int)*8); printf("\n");}【练中学9-2】编写一个位运算演示器,该程序能演示计算机中每位二进制位运算的运算过程。。【程序代码】#include "stdio.h"void putbit(int z,int n){ int i; for (i=n-1;i>=0;i--) /*从高位到低位逐位转换成字符0和1并输出到屏幕*/ putchar('0'+(1&z>>i));}void main(){ char f; int a,b; void ys(char,int,int); void fys(int); f='|'; printf("\n用户输入位运算表达式格式如下:"); printf("\n格式1:双目运算符(&,|,^) 整型常量1 整型常量2 "); printf("\n格式2:单目运算符(~) 整型常量"); while(f!='e'){ printf("\n请输入:"); scanf("%c",&f); if (f=='e') break; scanf("%d",&a); if (f!='~') scanf("%d",&b); if (f=='~') fys(a); if (f=='&' || f=='|' || f=='^') ys(f,a,b); }}void ys(char fh,int x,int y){ int z; printf("\n运算前%d:\t",x); putbit(x,sizeof(int)*8); printf(" 对应16进制数%X",x); printf("\n运算前%d:\t",y); putbit(y,sizeof(int)*8); printf(" 对应16进制数%X",y); if (fh=='&') z=x&y; if (fh=='|') z=x|y; if (fh=='^') z=x^y; printf("\n运算后%d%c%d:\t",x,fh,y); putbit(z,sizeof(int)*8); printf(" 对应16进制数%X",z);}void fys(int x){ printf("运算前%d:\t",x); putbit(x,sizeof(int)*8); printf(" 对应16进制数%X",x); printf("\n运算后~%d:\t",x); x=~x; putbit(x,sizeof(int)*8); printf(" 对应16进制数%X",x);}二、归纳总结,完成课后实训题 (1)回顾本节课的学习目标,对知识点进行总结。 (2)完成课后实训作业。
教学后记
2

展开更多......

收起↑

资源预览