c++教案2.docx
《c++教案2.docx》由会员分享,可在线阅读,更多相关《c++教案2.docx(26页珍藏版)》请在冰豆网上搜索。
c++教案2
第二章基本数据类型与表达式
教学目标:
C++数据类型概述、整型数据
重点:
整型数据
难点:
C++数据类型概述
课时:
2课时总第9-10课时
教法:
讲授法
§2.1C++数据类型概述
一、C++固有的数据类型
1、整型类(int,short,long,char,enum,bool)
2、实型类(float,double,longdouble)
3、数组
4、指针类(指针,引用)
5、记录类(struct,union)
二、几点注意
1、基本数据类型:
整型类和实型类。
2、C++程序中的数据主要体现为常量和变量。
3、不同数据类型的数据存储格式不同,所能实施的操作也不相同。
§2.2整型数据
一、各种整型数据的基本情况(见表2-1)
二、整型(int)常量的表示
1、整型常量的表示方法:
☆十进制:
无前缀。
如:
12
☆八进制:
0前缀。
如:
012
☆十六进制:
0x(或0X)前缀。
如:
0x12
☆无符号数:
U(或u)后缀。
如:
12u
2、短整型(short)常量的表示方法:
由于短整型常量在求值过程中会被无条件地转换为整型常量,因此短整型常量是借助于整型常量来表示的。
3、长整型(long)常量的表示方法:
在整型常量表示方法的基础上加L(或l)后缀。
如:
012L
三、整型变量的定义与初始化
1、定义格式:
类型修饰符变量名[=表达式]
【,变量名[=表达式]】;
如:
inta;inta=3;
inta,b,c;inta,b=4,c=5;
注:
inta=3;
2、如果初始化数据的类型与所定义的变量的类型不一致,该数据将被转换为与变量类型相同。
如:
ints=109L;
longy=99;
§2.3字符型数据
作业:
教材习题全部(本节)
教学目标:
字符型数据
重点:
字符型数据
难点:
字符型数据
课时:
2课时总第11-12课时
教法:
讲授法
一、字符型数据的基本情况(见表2-2)
二、字符型常量的表示
1、除’,”,\之外的可显示字符用该字符直接表示,但必须用’’括起来。
如:
’a’
2、单引号内用\后跟一字母表示某些控制字符。
3、单引号内用\后跟一数被无条件地理解为
八进制数,表示该代码所代表的字符。
如:
’\15’代表CR
4、单引号内用\后跟一16进制数(以X或x打
头)表示该代码所代表的字符。
如:
’\X0D’代表CR
5、’(单引号)”(双引号)\(反斜杠)
的表示:
’(单引号):
’\’’
”(双引号):
’\”’
\(反斜杠):
’\\’
6、字符串常量用双引号括起来的字符序列
表示。
如:
”hello”
’\0’:
字符串结束符。
字符串结束符不显式地表示出来,计算字符串长度时也不把它包含在内,但它占一个字节的存储空间。
如:
”hello”长度为5,但是占6个字节的存储空间。
三、字符型变量的定义和初始化
类型修饰符变量名[=表达式]
【,变量名[=表达式]】;如:
charc1,c2,c3;
charc1=’x’,c2=’y’,c3=’z’;
四、字符型与整型的关系
1、在计算机内部,每个字符都与一个整
型的代码相对应。
如:
’A’的代码是65,’a’的代码是97。
2、在表达式求值过程中,所有的字符将
被转换为与其代码等值的整数。
如:
执行cout<<’A’+’B’;结果是131。
3、在输入输出时,C++的输入流和输出流可明确区分这两种数据类型。
如:
cout<<’A’;输出结果为A
cout<<65;输出结果为65
§2.4枚举型数据
教学目标:
枚举型数据
重点:
枚举型数据
难点:
枚举型数据
课时:
2课时总第13-14课时
教法:
讲授法
一、枚举型数据的基本情况(见表2-3)
1、枚举是一种用户自定义的数据类型,
使用前必须先定义。
2、枚举类型的值域由用户定义的一组
符号常量限定。
二、枚举类型的定义和枚举变量的定义
1、枚举类型的定义格式
enum枚举名{符号表};
如:
enumWEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};
2、枚举变量的定义
(1)用已定义的枚举类型名来定义枚举变量。
如:
WEEKDAYw1,w2;
WEEKDAYw1=Wed,w2=Sat;
(2)定义枚举类型的同时定义枚举变量。
如:
enumWEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,
Sat}w1,w2;
三、枚举型与整型的关系
1、枚举中的符号常量与整数有一一对应的关系,即每个符号常量对应一个整数。
(1)枚举中的符号常量依次与0,1,2…对应
如:
enumWEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};
(2)任意规定其对应关系
如:
enumSomeDigits{ONE=1,TWO,FIVE=5,SIX,
SEVEN};
其中符号常量与整数的对应关系为:
ONE=1,TWO=2,FIVE=5,SIX=6,SEVEN=7
注:
可用=为一个符号常量规定任意的对应整数;该整数加1就是下一个符号常量默认的对应整数。
2、在表达式求值过程中,枚举型被无条件转换为相应的整型。
如:
已知今天的值,求明天是星期几。
WEEKDAYnextDayOf(WEEKDAYtoday)
{if(today==Sat)returnSun;
returntoday+1;
}
3、枚举型数据的输入和输出都是借助于
整数来实现的。
如:
SomeDigitsdigit=TWO;
cout<如:
WEEKDAYd;
cin>>d;则要使d的值为Fri,应键入5。
§2.5实型数据
教学目标:
实型数据
重点:
实型数据
难点:
符号常量与常值变量
课时:
2课时总第15-16课时
教法:
讲授法
一、实型数据的基本情况(见表2-4)
二、实型常量的表示
1、双精度(double)常量的表示
(1)常规表示法如:
32.30.323
(2)科学表示法如:
3.23e+13.23e-1
2、单精度(float)常量的表示:
在双精度常量表示的基础上加F(或f)后缀。
如:
32.3F3.23e+1F
3、长双精度(longdouble)常量的表示:
在双精度常量表示的基础上加L(或l)后缀。
如:
32.3L3.23e+1L
三、实型变量的定义和初始化
类型修饰符变量名[=表达式]
【,变量名[=表达式]】;
如:
doublex,y;
doublex=1.23,y=34.2;
§2.6符号常量与常值变量
一、符号常量
1、定义一个符号来代表某个常量。
如:
#definePI3.1416
2、使用符号常量的好处:
☆提高程序的可读性。
☆提高程序的可维护性。
☆提高程序的一致性。
二、常值变量
1、在一般变量的定义前加上保留字const。
如:
constdoublePI=3.1416;
2、常值变量在定义时必须初始化,且在
程序运行中保持初始值不变。
§2.7数值表达式
教学目标:
数值表达式
重点:
数值表达式
难点:
数值表达式
课时:
2课时总第17-18课时
教法:
讲授法
一、无操作符的表达式—简单表达式
1、最简单的表达式:
常量、变量、函数调用
2、每个表达式都有一个值:
☆常量的值:
常量数据本身。
☆变量的值:
存于该变量空间的数据。
☆函数的值:
函数返回的数据。
3、数值表达式:
整型类表达式和实型类表达式
二、算术操作符
+,-,*,/,%,+,-
1、/:
对于整型和实型有不同的意义。
(1)若两个操作数都是整数,则为整除操作(求商,舍余),操作结果为整数。
如:
10/3=3
(2)只要两个操作数中有一个为实数,则操作结果为实数。
如:
10.0/3=3.3333
2、%:
只用于整数的求余操作(求余,舍商)。
如:
10%3=1
3、+,-(取正,取负):
一元操作符,在表达式中可以跟在其他类型的操作符的后面,但不能跟在+(加号),-(减号)
后面。
如:
p*+qi/-3(√)
P++qi--3(×)
注:
两个操作符在一起,最好使用()
如:
p*(+q)i/(-3)
三、位操作符
<<,>>,|,&,∧,~
1、<<和>>(左移和右移)
如:
5<<20000010100010100(20)
操作数位数
如:
5>>10000010100000010
(2)
☆左移一位相当于乘以2。
☆右移一位相当于整除2。
2、|,&,∧
|:
按位或。
(有1则1,全0则0)
&:
按位与。
(有0则0,全1则1)
∧:
按位异或。
(同则0,异则1)
例见2.7-3
3、~:
按位取反。
(0变1,1变0)
如:
~0001100111100110
四、赋值操作符
1、赋值操作符=
2、赋值语句的格式:
变量=表达式;如:
k=7;
3、赋值操作符可连续使用。
如:
执行k=m=7;则k和m的值都为7。
五、复合赋值操作符
+=,-=,*=,/=,%=,<<=,>>=,|=,&=,^=
复合赋值与普通赋值有严格的对应关系。
即:
变量?
=表达式变量=变量?
(表达式)
(其中?
表示某个二元操作符)
如:
k+=3k=k+3
s*=j-7s=s*(j-7)
六、增1减1操作符(++,--)
教学目标:
数值表达式
重点:
数值表达式
难点:
数值表达式
课时:
2课时总第19-20课时
教法:
讲授法
1、++(前增1,如++i)
--(前减1,如--i)
先对变量增1(或减1),然后变量以增1
(或减1)后的值参与表达式的计算。
(先变值,后计算。
)
例1:
m=++k;
例2:
intk,d=5;
k=++d*2;
结果为:
d=6,k=12
2、++(后增1,如i++)
--(后减1,如i--)
变量先以原值参与表达式的计算,然后对
变量增1(或减1)。
(先计算,后变值。
)
例1:
m=k++;
例2:
intk,d=5;
k=d++*2;
结果为:
d=6,k=10
七、sizeof操作符
1、作用:
计算一数据或数据类型所占空间的字节数。
2、格式
例:
doubled=3;
cout<八、操作符的优先级和结合性
1、优先级(见附录A)
当一个表达式中有多个操作符时,优先级高的先执行。
如:
22-2*5;
2、结合性
若表达式中相邻的两个操作符优先级相同,那么先执行哪个操作符,就由
前一个操作符的结合性确定。
如:
k=j+=5;
3、()具有最高的优先级,可强制改变运算顺序。
如:
x+3/y(x+3)/y
4、C++表达式与数学表达式的区别
(1)所有字符写在同一水平线上。
(2)算术运算符与数学中的运算符在写法
上有所区别。
(3)算术运算符不能省略。
3ab
(4)一些运算用函数实现。
pow:
乘方如:
sqrt:
开平方如:
log:
自然对数如:
lnxlog(x)
log10:
常用对数如:
lgxlog10(x)
exp:
以e为底的乘幂如:
exp(2.5)
sin:
正弦如:
sinxsin(x)
cos:
余弦如:
cosxcos(x)
使用这些函数时应注意:
1、参数必须放在()中。
2、在程序开始必须加上语句#include
(5)括号无大、中、小之分,全部用小括
号()来表示,而且可以嵌套。
九、类型的自动转换与强制转换
1、自动转换
当表达式中一个操作符的两个操作数类型不同时,其中一个操作数的类型将自动转换成与另一个操作数的类型相同。
(1)转换的优先顺序(见图2-1)
(2)转换规律
短的向长的靠拢,有符号的向无符号的靠拢;
整型向实型靠拢,低精度的向高精度的靠拢。
例:
4+23L-5.14L+23L-5.127L-5.1
27.0-5.121.9
(3)转换规律不适用的两种操作
☆只针对特定类型的操作。
(两边向操作符靠拢)
☆赋值或复合赋值操作。
(右边向变量靠拢)
例:
intk=3;doubled=2.718;
k+=d;//k=k+d;cout<语句执行后的输出结果为5。
2、强制转换
(1)利用类型修饰符控制类型转换的过程。
(2)格式:
☆(类型修饰符)表达式//继承C语言格式
☆类型修饰符(表达式)//C++特有的格式
如:
float(j)或(float)j、(float)(j)
int(3.14+i)或(int)(3.14+i)
3、只有兼容的数据类型才能相互转换。
作业:
教材习题全部(本节)
教学目标:
逻辑型数据与逻辑表达式
重点:
逻辑型数据与逻辑表达式
难点:
逻辑型数据与逻辑表达式
课时:
2课时总第21-22课时
教法:
讲授法
§2.8逻辑型数据与逻辑表达式
一、逻辑型数据的基本情况(见表2-5)
1、逻辑型是用来判别真、假状态的数据类型。
2、逻辑常量只有两个:
true(真)和false(假)
3、逻辑变量的定义与初始化(格式同整型变量)
如:
boolx;boolx=true;
boolx,y,z;boolx=false,y=true,z=true;
二、逻辑表达式
1、无操作符的逻辑表达式—简单逻辑表达式
(逻辑常量、逻辑变量和逻辑型函数调用)
2、关系操作符和关系表达式
(1)关系操作符(==,!
=,>,<,>=,<=)
用于判断两个操作数是否相等或比较两者的
大小,比较结果为false或true。
如:
-3!
=3(值为true)-3==3(值为false)
(2)关系表达式:
由关系操作符构成的逻辑
表达式。
3、逻辑操作符和逻辑表达式
(1)逻辑操作符(!
||&&)
操作数必须是逻辑型(或可转换为逻辑型)的数据。
!
:
逻辑非(false变true,true变false)
||:
逻辑或(有true则true,全false则false)
&&:
逻辑与(有false则false,全true则true)
(2)逻辑表达式
表达式的值只能是false或true。
三、复合条件
1、&&和||可用于构造复合条件,其左右
两边的操作对象称为子条件。
2、子条件1&&子条件2:
表示两个子条件同时成立时这个复合条件才成立。
称为:
“子条件1且子条件2”。
3、子条件1||子条件2:
表示两个子条件中至少有一个成立时这个复合条件就成立。
称为:
“子条件1或子条件2”。
4、复合条件的典型应用:
判断一个数值是否落入指定的值域范围内。
☆若值域是一个连续区间:
用&&连接。
☆若值域是由相互分离的多个区间组成:
用||连接。
5、特殊情况下,可根据一个子条件的值来
判定复合条件的值。
E1&&E2:
若E1和E2中有一个值为false,
则该复合条件的值为false。
E1||E2:
若E1和E2中有一个值为true,则
该复合条件的值为true。
四、相反条件
1、若一个条件为true,则另一个条件必
为false;若一个条件为false,则另一
个条件必为true。
那么这两个条件互
为相反条件。
如:
x>y和x<=y互为相反条件。
2、构造相反条件的方法
☆使用!
如:
x>y的相反条件为!
(x>y)
☆利用配对关系(==和!
=,>和<=,<和>=)
如:
不用操作符!
,x<=y+3的相反条件
可表示为:
x>y+3
作业:
教材习题全部(本节)
教学目标:
逻辑型数据与逻辑表达式
重点:
逻辑型数据与逻辑表达式
难点:
逻辑型数据与逻辑表达式
课时:
2课时总第23-24课时
教法:
讲授法
五、等价条件
1、若两个逻辑表达式在任何情况下同为false或同为true,则这两个表达式所表达的条件称为等价条件。
如:
x>y和!
(x<=y)为等价条件
2、典型的等价形式
!
!
EE
!
(x==y)x!
=y
!
(x!
=y)x==y
!
(x>y)x<=y
!
(x<=y)x>y
!
(x=y
!
(x>=y)x!
(E1&&E2)!
E1||!
E2
!
(E1||E2)!
E1&&!
E2
E1&&E2E2&&E1
E1||E2E2||E1
3、利用等价条件来求复合条件的相反条件
例1:
不用操作符!
,求x==3||x<-3的相反条件。
解:
!
(x==3||x<-3)!
(x==3)&&!
(x<-3)
x!
=3&&x>=-3
例2:
不用操作符!
,求x>=2&&x<=7的相反条件。
解:
!
(x>=2&&x<=7)!
(x>=2)||!
(x<=7)
x<2||x>7
六、永假条件和永真条件
如:
x<3&&x>15的值永为false,为永假条件。
y>0||y<=0的值永为true,为永真条件。
注:
false是最简单的永假条件,
true是最简单的永真条件。
七、逻辑型数据与其他数据类型的关系
1、逻辑型数据作为数值数据使用时,false转换为0,true转换为1。
2、字符型、枚举型、整型或实型数据值作为逻辑值使用时,一切0值转换成false,一切非0值转换成true。
3、指针值作为逻辑值使用时,空指针值转换成false,非空指针值转换成true。
总结:
0就是false,非0就是true。
说明:
1、数值型数据与逻辑型数据出现在同一表达式中时,逻辑型数据无条件地转换为数值型数据0或1。
例:
boolk=true;
intj=3;
cout<输出结果为:
40
2、在用数值数据对逻辑变量进行初始化
或者赋值时,任何非0值都转换为1。
例:
boolk=9,h;
h=5;
cout<输出结果为:
11
注:
逻辑型数据的输入和输出是借助整数
0和1来实现的。
3、逻辑操作符&&,||,!
与位操作符&,|,~的联系。
x&&ybool(x)&bool(y)
x||ybool(x)|bool(y)
!
x~bool(x)
例:
1&&2bool
(1)&bool
(2)1&1
1
八、逻辑型数据的应用
—条件操作符与条件表达式
1、条件操作符:
?
:
2、格式:
条件?
表达式1:
表达式2
3、条件表达式的值:
若条件成立,条件表达式的值就是表达式1的值,否则就是表达式2的值。
例:
intx,w;
cin>>x;
w=x>100?
0:
x*3;
cout<若输入20,则输出60;若输入120,则输出0;
4、表达式1和表达式2应该是同一数据类型的表达式,若不同则进行类型转换。
5、表达式1和表达式2也可以是条件表达式,
即条件表达式可以嵌套。
例:
x>0?
1:
(x<0?
-1:
0)
则:
x>01
x<=0x<0:
-1
x=0:
0
作业:
教材习题全部(本节)
教学目标:
自定义类型修饰符
重点:
自定义类型修饰符
难点:
自定义类型修饰符
课时:
1课时总第25课时
教法:
讲授法
§2.9自定义类型修饰符
1、用自定义的标识符来代表一个特定的
数据类型。
2、格式:
typedef类型修饰符说明;
例:
typedefintDISTANCE;
DISTANCEi,Beijing_to_Tianjing;
inti,Beijing_to_Tianjing;
3、作用
☆提高程序的可读性。
☆提高程序的可维护性。
☆避免类型使用上的不一致性。
例:
已知程序中用unsignedchar型数据表示年龄,为了增加可读性,决定将之命名为AGE,则完成命名的定义是:
typedefunsignedcharAGE;
作业:
教材习题全部(本节)
教学目标:
表达式的副作用与表达式语句
重点:
表达式的副作用与表达式语句
难点:
表达式的副作用与表达式语句
课时:
2课时总第26-27课时
教法:
讲授法
§2.10表达式的副作用与表达式语句
一、表达式的副作用
1、在表达式的求值过程中不但要提取变
量的值,还可能改变变量的值。
如:
k=m++
2、表达式能产生副作用的原因:
引入了
具有副作用的操作。
☆赋值(=)
☆复合赋值(+=,-=,*=,/=,%=,
<<=,>>=,|=,&=,^=)
☆前增1前减1(++,--)
☆后增1后减1(++,--)
上述操作所作用的对象必须是变量,因此这些操作也称为:
作用于变量的操作。
3、对于“作用于变量的操作”(除后增1和后减1),作为操作结果的表达式的值就是所作用的变量所获得的值。
例:
intk=3;
cout<<(k+=2);
cout<<’’<输出结果为:
55
4、可对同一变量连续施加若干个“作用于变量的操作”。
例:
intk=3;
cout<<++(k+=2);
cout<<’’<输出结果为:
66
注:
(1)“作用于变量的操作”只能施加于变量对象。
如:
(p+3)-=k,++5,100=p都是错误的。
(2)当若干个“作用于变量的操作”施加于一变量时,除了最后一个外,不得有后增1或后减1操作。
如:
k++*=5是错误的.
二、表达式副作用的应用
1、逗号操作符与逗号表达式
(1)逗号操作符:
,
(2)格式:
表达式1,表达式2
(3)逗号表达式的值:
逗号表达式的值
就是表达式2的值。
如:
由x=(i++,j)可知:
x与j同值。
2、表达式语句
(1)表达式作为语句来使用。
(2)构成:
表达式后加分号;。
(3)功能:
表达式作为语句使用时,它的功能通过副作用来体现。
因此把没有副作用的表达式作为语句使用是无意义的。
如:
x+=5;(有意义)k+1;(无意义)
作业:
教材习题全部(本节)