C语言程序设计教案 第三章数据类型运算符与表达式.docx
- 文档编号:6846674
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:19
- 大小:32.50KB
C语言程序设计教案 第三章数据类型运算符与表达式.docx
《C语言程序设计教案 第三章数据类型运算符与表达式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教案 第三章数据类型运算符与表达式.docx(19页珍藏版)》请在冰豆网上搜索。
C语言程序设计教案第三章数据类型运算符与表达式
第三章数据类型运算符与表达式
课题:
第三章数据类型、运算符与表达式
教学目的:
1、掌握C的数据类型
2、掌握整型、实型、字符型数据的常量及变量
教学重点:
教学难点:
基本数类型的常量和变量
不同类型的数据在内存中的存储形式
步骤一复习引导
上次课我们已经知道了程序的一个方面算法,现在来学习另一方面数据结构。
步骤二讲授新课
C语言提供的数据结构是以数据类型形式出现的;
数据在内存中存放的情况有数据类型决定;
数据的操作要依靠运算符实现,而数据和运算符共同组成了表达式。
C的基本数据类型
C语言的数据类型丰富,但在学习第11章之前,我们只遇到C的四种基本数据类型:
整型、字符型、单精度实型、双精度实型
常量与变量
●常量:
其值不能被改变的量。
两种:
一般常量和符号常量
1.直接常量(字面常量):
整型常量:
如12、0、-3等
实型常量:
如4.5、-1.234等
字符常量:
如‘a’、‘1’等,用单引号表示,占一个字节;
字符串常量:
如“a”、“abc”、“1”,用双引号表示。
2.符号常量:
符号常量即是用一个标识符来代替一个常量;符号常借助于预处理命令define来实现;
define命令格式是:
#define标识符字符串
如:
#definePI3.1415926535
#defineSTRING“ABCD”
①习惯上,符号常量用大写字母表示;
②定义符号常量时,不能以“;”结束;
③一个#define占一行,且要从第一列开始书写;
④一个源程序文件中可含有若干个define命令,不同的define命令中指定的“标识符”不能相同;
●变量:
在程序运行过程中,其值会发生变化。
1、每个变量必须有一个名字,变量名是标识符。
2、标识符是用来标识数据对象,是一个数据对象的名字。
3、命名规则:
以字母或下划线开始,后跟字符、数字或下划线。
例:
x1,_average,lotus_1_2_3,#abc,1fs,M.D.Jhon
1、变量名不能是关键字(即保留字,是C编译程序中保留使用的标识符。
如:
auto、break、char、do、else、if、int等)
2、怎样定义变量?
inti,z,h;
charc,ch=‘c’;
floata=3.14,b=2.71,x,y;
注意:
变量要先定义后使用!
例:
main()
{inta,b,c,sum;
a=3;b=-4;c=9;
sum=a+b+c;
printf(“\nsum=%d”,sum);
a=16;b=56;c=-98;
sum=a+b+c;
printf(“\nsum=%d”,sum);
}
一、整型数据
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()
{inta,b,c,d;
unsignedu;
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。
即“溢出”。
5)整型常量的类型
①一个整数在-32768~32767内,则为int型,可以赋给int型和longint型变量。
②一个整数超过上述范围,在-2147483648~2147483647内,则为longint型,可赋给longint型变量。
③如果shortint和int型数据在内存中占据长度相同,则其范围与int相同。
④常量无unsigned型。
但可将非负且在取值范围内的整数赋给unsigned型变量。
⑤在一个整常量后面加一个字母l或L,则认为是longint型常量。
二、实型数据
1、实型常量的表示方法
(1)、十进制浮点数
如:
0.123,.456,0.0,123.,123.0
整数部分和小数部分都可省,但不能同时省
(2)、指数形式
如:
123e3,123E3代表123×103
指数部分为整常数;
尾数部分可以是整常数,也可以是实常数;
尾数部分和指数部分均不可省。
E10,100.e15.2,.e5均为不合法的浮点数。
2、实型变量
实型数据在内存中的存放形式
一个实型数据一般在内存中占4个字节(32位)。
实型数据是按照指数形式存储的。
实型变量的分类:
单精度float、双精度double、长双精度longdouble
三、字符型数据
1、字符常量
1)括在一对单引号中的一个字符(单引号仅作界限符),‘a’、‘X’为字符常量;
2)一个字符常量占1B,存放的是字符的ASCII码值。
3)转义字符
①以‘\’开头,后跟一个约定的字符或所要表示字符的十六进制(或者八进制)的编码;
②‘\0’表示编码值为0的字符,即NULL,它与数值常数0是等同的;
③书中P48列出了常用的转义字符:
2、字符变量
字符变量用来存放字符常量,只能放一个字符。
例:
charc1=‘a’,c2=‘A’;
一个字符变量在内存中占一个字节。
3、字符数据的存放形式及使用方法
将字符常量放到字符变量中,实际上是将其ASCII代码放到变量所占的存储单元中。
如:
‘a’在内存存放的是二进制数01100001;
‘A’在内存存放的是二进制数01000001。
在0~255之间字符型数据和整型数据可以通用。
即一个字符数据既可以以字符形式输出,也可以以整数形式输出,还可以互相赋值。
例:
main()
{charc1,c2;c1=97;c2=98;
printf(“%c%c”,c1,c2);printf(“%d%d\n”,c1,c2);
c1=c1-32;c2=c2-(‘a’-’A’);printf(“%c%c\n”,c1,c2);}
运行结果:
ab9798
AB
四、字符串常量
1.括在一对双引号中的0个或多个(除\与“”自身之外)C语言字符集中的任何字符及转义字符组成;双引号仅作界限符;
“Clanguageprogramming”、“a\\n”、“#123”、“”等为字符串常量;
“Thedentistsaid:
\’openwide\’”
“Thepathis\\root\\user\\device”
“\077paytoattentionofthis!
”
2.“China”在存储器中实际占用6个字节:
3.“a”与‘a’是不同的(表示形式不同、存储方式不同、后者可像整数那样参加运算,前者不能);
4.但应注意的是,在写字符串常量时没有必要写“China\0”,而只需写“China”;
5.虽然C字符串后末尾的NULL字符属字符串的内容,但是NULL字符并不被显示或输出;
6.C语言的字符串常量是按数组处理的。
7.书写一个很长的字符串常量时,如果在一个书写行内写不下,可跨行书写。
如:
“Astringisasequenceofcharacters\
surroundedbydoublequotes.”
五、变量赋初值
在定义变量时对变量进行赋值称为变量的初始化;
格式:
类型说明符变量1=值1,变量2=值2,……;
如:
inta=3,b=4,c=5;
floatx=3.4,y=0.75;
charch1=‘K’,ch2=‘P’;
注意:
①inta,b,c=5;只对c初始化,值为5;
②对几个变量赋以同一个初值时,inta=b=c=5;是非法的;
inta=5,b=5,c=5;是合法的。
(注:
a=b=c=5;是合法的赋值语句)
说明:
对变量赋初值,仅表示该变量在程序运行过程中执行本函数时的初值。
步骤三课堂小结
1、C的基本数据类型int、float、double、char
2、基本数据类型的常量表示、变量定义,及不同类型的数据在内存中的存储形式
步骤四布置作业
练习P65:
3.2、3.5、3.8
课题:
运算符与表达式
教学目的:
1、掌握C语言中的各种运算符
2、掌握运算符的优先级与结合性
教学重点:
教学难点:
C语言中各种运算符的使用
混合表达式中运算符的运算顺序
步骤一复习引导
用运算符和括号将运算对象(数据)连接起来的、符合C语法规则的句子称为表达式。
步骤二讲授新课
A.优先级是指表达式中包含多个运算符时,先进行优先级高的运算符操作,然后在进行优先级低的运算符操作;
B.当表达式中包含的几个运算符的优先级全相同时,由运算符的结合性来决定他们的运算顺序。
1)从左至右的结合性,*/%
2)从右至左的结合性,如=、?
:
一、赋值运算符和赋值表达式
1、赋值运算符:
=
2、类型转换
规则:
把赋值运算符右边表达式的数据类型转换成左边对象的类型。
(1)实型赋给整型变量时,舍去实数的小数部分。
(2)整型赋给实型变量时,数值不变,以浮点形式存储。
(3)一个较短的有符号的int型数据转换成一个较长的有符号int型数据总是进行符号扩展,以保证数据的正确性;
如:
a、b分别为8位、16位整型数据,则执行b=a后:
a:
11111110(-2)
转换后的结果:
1111111111111110(-2)
(4)一个较长的有符号int型数据转换成一个较短的有符号int型数据时把较长的有符号int型数据的高位部分截去;
如:
设a为8位,b为16位,则执行a=b后,若
b:
0000000000001111
转换后的结果00001111
b:
1111111111110001(-15)
转换后的结果11110001(-15)
b:
1111111100000000(-128)
转换后的结果00000000(0)
3、复合的赋值运算符
在“=”之前加上其他运算符,可构成复合运算符
x+=y等价于x=x+y
a%=b+c/d等价于a=a%(b+c/d)
C中10种复合赋值运算符:
+=、-=、*=、/=、
%=、<<=、>>=、&=、^=、|=
4、赋值表达式:
<变量><赋值运算符><表达式/值>
如:
main()
{inta,b,c,d;
a=(a=100)+(b=30)-b*5;
……
}
嵌套赋值表达式:
e1=e2=…=en,如:
a=b=c=d=100等价于a=(b=(c=(d=100)))
e1,e2,…,en不必具有相同的数据类型
例:
当a=12时,a+=a-=a*a求解结果?
先“a-=a*a”的运算,a=a-a*a=-132;
再进行“a+=-132”的运算,a=a+(-132)=-264。
二、算术运算符和算术表达式
1、基本的算术运算符
*、/、%+、-左结合性
2、算术表达式
1)用算术运算符和括号将运算对象(操作数)连接起来的、符合C语法规则的式子称为算术表达式。
如:
(‘a’-b*c/(d+e)+sin(3.14/2+f))-3.14*g*g
2)*不能省,*、/不能写成另外的符号;
3)数学函数自变量的括号不能省;如:
sin(x);log10(x);log(x);pow(x,y)
4)角度、特殊的符号要转换。
3、6种关系运算符的优先级别不同:
三、逻辑运算符与逻辑表达式
1、逻辑运算符及其优先次序
一元逻辑运算符:
!
(非),右结合
二元逻辑运算符:
&&(与)、||(或),左结合
逻辑运算的真值表(书P89)
2、逻辑表达式
1)用逻辑运算符将关系表达式、算术表达式、赋值表达式等连接起来的式子称为逻辑表达式;
2)逻辑表达式的值为真或假(1或0);
如:
digit=c>=’0’&&c<=‘9’
c!
=‘\n’||!
a&&(b=3)
3)判断一个量是否为真假时,0为假,非0即真;
如:
a=4;则!
a为0,a=4,b=5时,a&&b为1;
4)一个逻辑表达式往往是复杂的,此时应严格区分运算符的优先次序及运算对象;如:
5>3&&2||8<4-!
0设有:
inta=1,b=2,c=3,d=4,m=1,n=1;
则执行(m=a>b)&&(n=c>d)后,m、n分别是多少?
答案是:
m=0,n=1
5)利用逻辑表达式还能表示更为复杂的条件。
如:
(year%4==0&&year%100!
=0)||year%400==0
!
((year%4==0&&year%100!
=0)||year%400==0)
(year%4!
=0)||(year%100==0&&year%400!
=0)
四、自增与自减运算符
++、--
基本运算有:
++i、i++、--i、i--
说明:
1)++和--只能用于变量,不能用于表达式或常量;如:
2++或(i+j)--是非法的;
2)++、--运算符的结合方向是“右结合”;如:
-i++不等于(-i)++;
3)++、--运算常用于循环控制、数组的下标处理等场合;
4)i+++j应理解为(i++)+j;
5)printf(“%d,%d”,i,i++);最好写成j=i++;printf(“%d,%d”,i,j);
当i的初值为3时,其结果为4,3
五、逗号运算符和逗号表达式
语法:
表达式1,表达式2,……表达式n
语义:
依次求各个表达式的值,最后一个表达式的值作为整个逗号表达式的值;
如:
3+5,6+8的值为14;
a=3*5,a*4的值为60;
逗号表达式常用在for语句中;
逗号表达式的优先级别最低;
C语言中,逗号有两种用途(分隔符,运算符)。
思考:
(a=3*5,a*4),a+5的值是多少?
各类数值型数据间的混合运算
混合算术表达式,如:
10+‘a’+i*f-d/e需自动转换成同一类型再运算;
转换的规则如下:
(书P54)
设有:
inti=2;floatf=3.5;
doubled=16.0;longe=2;
则10+‘a’+i*f-d/e的运算次序为:
(1)进行10+‘a’的运算,转换‘a’为97;
(2)进行i*f的运算,将i和f都转成double型;
(3)整数107与i*f的积相加,先将107转化成双精度数,结果为double型;
(4)将变量e转化成double型,d/e的结果为double型;
(5)将10+‘a’+i*f的结果与d/e的商相减,结果为double型。
以上数据类型转换都是由C编译系统自动隐含完成的,故称自动类型转换
六、强制类型转换运算符
格式:
(类型关键字或类型名)表达式
如:
(int)(x+y)%(int)p(double)a(float)(5%3)
实例:
main()
{floatx;
inti;
x=3.6;
i=(int)x;
printf(“x=%f,i=%d”,x,i);
}
运行的结果是:
x=3.600000,i=3
步骤三课堂小结
1、算术运算符、逻辑运算符的应用,及相关表达式的逻辑值
2、++、--运算
3、各种运算符的优先级
步骤四布置作业
练习:
P663.9、3.10、3.11、3.12
课题:
位运算符与表达式
教学目的:
掌握位运算符及表达式的运算规则
教学重点:
教学难点:
位运算符的运算规则及用途
位运算表达式的含义
步骤一复习引导
上节课我们所讲的运算符是对一个数据整体操作而言的,今天我们所讲的运算符是对一个数的每个二进制位进行操作的,即位运算符。
步骤二讲授新课
一、按位逻辑运算符
1、按位与(&)
用途:
(1)清零
如:
有原数:
x=00101011
取数:
y=11010100
或:
y=00000000
则:
x&y=0
(2)截取(析出)变量指定的二进制位,其余位清零。
如:
设有数a=0010110010101100,占2B,现要取其低字节。
取数y=0000000011111111,则:
a&y=0000000010101100
如:
有数a=01010100,要将左面的第3、4、5、7、8位保留。
可取数b=00111011,则:
c=a&b=00010000
2、按位或(|)
设a=00110000
b=00001111
则a|b=00111111
用途:
将二进制数据的指定位置1,而不管原来的二进制位状态如何。
工作数:
指定位为1,其余位为0
如:
inta=055555,现要将变量对应的存储单元的最高位置1,则取工作数b=0x8000,即:
a:
0101101101101101
b:
1000000000000000
a|b:
1101101101101101
3、按位异或(^)
当且仅当参加运算的两个操作数对应的二进制位的状态不同时才将对应的二进制位置1;
按位异或也称按位加(即对应位相加,进位丢弃);
用途:
⑴使指定的二进制位状态翻转(1变0,0变1)
操作数:
指定翻转的位为1,其余位全为0
如:
a=0x0F0000000000001111
取数:
b=0x180000000000011000
则:
a^b=0000000000010111
⑵与0相^,保留原值
⑶常用按位加实现两个变量内容的互换,而不采用任何中间变量。
方法如下:
a=a^b;b=b^a;a=a^b;
证明:
由第2式b=b^a=b^(a^b)=b^a^b=a^b^b=a^0=a
再由第3式a=a^b=(a^b)^(b^(a^b))=a^b^b^(a^b)=a^0^a^b=a^a^b=0^b=b
4、按位取反(~)
~是一个单目运算符,用来对一个二进制数按位取反;
如:
~025即为~0000000000010101
即1111111111101010
注意:
(1)~025绝非-025
(2)对同一操作数连续两次“按位取反”,其结果必须与原操作数相同;
(3)“按位取反”常与“按位与”、“按位或”或移位操作结合使用,完成特定功能;
如:
对表达式x&~077表示取变量x的低6位以前的部分,并使结果的低6位全为0
5、移位运算(>>、<<)
1)移位运算的一般形式:
m<
2)其中m是被移位的操作数,n是移位的位数,且均为整型表达式,移位运算结果的类型取决于m的类型。
3)执行<<时,操作数左端移出的高位部分丢弃,右端低位补0;
4)执行>>时,操作数右端移出的低位部分丢弃,左端高位部分①无符号数:
一律补0;有符号数:
算术移位时填符号位,逻辑移位时填0。
例1:
intr=’A’,则r=65,作r<<3
解:
(1)r处理成:
0000000001000001
(2)左边移出3个0,右面补3个0得:
0000001000001000
(3)结果为:
(520)10
例2:
intv=-16,即v=1111111111110000,作v>>2
解:
算术移位得:
1111111111111100即:
(-4)10
逻辑移位得:
0011111111111100即:
(16380)10
a)优先级:
算术运算符→<<、>>→关系运算符→&^|→&&||
b)结合性:
<<与>>具有左结合性;
c)左移相当于乘2n,右移相当于除2n;
d)位运算与赋值运算结合可以组成扩展的赋值运算符
如:
&=、|=、>>=、<<=、^=等
a&=b等价于a=a&b
a<<=2等价于a=a<<2
例如:
x>>p+1-n&~(~0< 对于给出的x,从x右端的第p个位置起(假定最右端的位置从0开始计数)返回x的连续n个二进制位,且截出的位段靠右端存放。 假定p=4、n=3,则返回的是x的第2到第4位的内容。 思考: a,b为整型数据,a=0x4139,b=0x3842,编写一段程序,求整型变量x的值,要求x的低字节为a的低字节的值,x的高字节为b的高字节的值。 步骤三课堂小结 4、按位与、按位或按位异或运算规则及用途 5、移位运算符的运算规则 步骤四布置作业 1.设x=11001101,若想通过x&y使x中的低4位不变,高4位清零,则y的二进制数是________ 2.设x=10100011,若要通过x^y使x的高4位取反,低4位不变,则y的二进制数是_______ 3.设有以下语句: charx=3,y=6,z;z=x^y<<2;则z的二进制值是______ 4.下列程序片断的运行结果是______ inta=1,b=2; if(a&b)printf(“***\n”); elseprintf(“$$$\n”); 5.以下叙述中不正确的是_________ A.a&=b等价于a=a&b B.a|=b等价于a=a|b C.a! =b等价于a=a! b D.a^=b等价于a=a^b 6.charx=56;x=x&056;printf(“%d,%o\n”,x,x); 以上程序片断的结果是_______ A.56,70B.0,0C.40,50D.62,76 7.charz=‘A’;intb;b=((241&15)&&(z|’a’));b的值为_____ A.0B.1C.TURED.FALSE 8.intx=1,y=2;x=x^y;y=y^x;x=x^y; 执行以上语句后,x和y的值分别是____ A.x=1,y=2B.x=2,y=2C.x=2,y=1D.x=1,y=1 9.以下不正确
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计教案 第三章数据类型运算符与表达式 语言程序设计 教案 第三 数据类型 运算 表达式