1、2022-12-71 第二章第二章 本章主要内容:数据类型、常量、变量、基本运算、类型转换及运算的优先级与结合性等。2022-12-722022-12-732022-12-742022-12-75 数据类型是数据的基本属性数据类型是数据的基本属性 描述的是数据的存储格式和运算规描述的是数据的存储格式和运算规则则.不同数据类型的数据不同数据类型的数据,在内存中所需在内存中所需的存储空间大小、存储格式均有所的存储空间大小、存储格式均有所不同不同,能支持的运算以及相应的运算能支持的运算以及相应的运算规则也会有所不同规则也会有所不同.2022-12-762022-12-77 数据类型数据类型关键字关键
2、字长度长度位数位数范范 围围字符型字符型 char 1 8 -128127整整 型型 int4 32 -231(231_1)浮点型浮点型 float 4 32 双精度型双精度型 double 8 64+(10 10 )-308308+(10 10 )-38382022-12-78 类型修饰符:类型修饰符:short int short int long int long int unsigned int unsigned charunsigned int unsigned char输出浮点型数有效位为输出浮点型数有效位为 6 67 7位十进制数位位十进制数位输出双精度型数有效位为输出双精度型数
3、有效位为15151616位十进制数位位十进制数位 数据分为常量和变量。数据分为常量和变量。2022-12-792022-12-710程序运行期间,值不能被改变的量称为程序运行期间,值不能被改变的量称为常量常量整型常量浮点型常量字符型常量字符串常量2022-12-711变量变量2022-12-712 在程序中使用一个变量之前,先要对它在程序中使用一个变量之前,先要对它进行定义:为每个变量取一个名称(变进行定义:为每个变量取一个名称(变量名),同时还要规定它的数据类型,量名),同时还要规定它的数据类型,以便编译程序根据不同的数据类型分配以便编译程序根据不同的数据类型分配内存空间。内存空间。2022
4、-12-713标识符是用来标识符是用来为变量、符号为变量、符号常量、函数、常量、函数、数组、类型、数组、类型、文件取名字的文件取名字的有效字符序列有效字符序列即用户为程序即用户为程序中各种对象取中各种对象取的名字的名字。2022-12-714 .关键字预先定义的具有特定含义的标识符。也称为保留字,不能另作他用。如:int char float double unsigned structif do while switch return gotodefine include undefsizeof2022-12-7152022-12-716语言中,变量必须语言中,变量必须“先定义,后使用先定义
5、,后使用”2022-12-7172022-12-7182022-12-7192022-12-7204.以下不能定义为用户标识符的是 。A)scanf B)Void C)_3com D)int答案:D5.以下可作为C语言用户定义标识符的是()组标识符。Avoid define WORD Ba3_b3 _123 IFCFor -abc Case D2a Do sizeof答案:B注意:这些系统库函数名并非注意:这些系统库函数名并非C语言的关键字。语言的关键字。2022-12-7212022-12-7222022-12-723二进制二进制十进制十进制(1 0 1 0.1 1)2=123+022+12
6、1+020+12-1+12-2 =8+0+2+0+0.5+0.25=(1 0.75)10八进制八进制十进制十进制(7 1 0 3)8=783+182+081+380 =(3 6 5 1)10十六进制十六进制十进制十进制(F F)16=15161+15160=(2 5 5)102022-12-7242022-12-7252022-12-7261 1 1 1 0 0 0 1 0 1 0 1 1 0 1 01 7 0 5 3 22022-12-7271 0 1 0 1 1 1 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0A F 0 9 5 22022-12-728长整型:长整型
7、:-56l-56l;3567L3567L;04L04L无符号整型:无符号整型:586u586u;077765U077765U;0 xfffdU0 xfffdU无符号长整型:无符号长整型:0375ul0375ul;0 x45feUL0 x45feUL2022-12-7292022-12-7302022-12-731数据在内存中是以数据在内存中是以“二进制数二进制数”的形式存放的。的形式存放的。数据在内存中是以数据在内存中是以“二进制数的补码二进制数的补码”形式存放的。形式存放的。2022-12-7322022-12-7332022-12-734ANSI C标准定义的整型类型标准定义的整型类型类型
8、类型Bit数数有效表示范围有效表示范围2022-12-7352022-12-7362022-12-737作业1:将下列各数用八进制和十六进制表示:(1)617 (2)111(3)28654 (4)210032022-12-7382022-12-7392022-12-7402022-12-741在计算机中,既有整数部分又有小数部分的数称为在计算机中,既有整数部分又有小数部分的数称为浮点数浮点数2022-12-742浮点型数据在内存中是以浮点型数据在内存中是以“尾数尾数”和和“阶码阶码”的形式存放的。的形式存放的。2022-12-7432022-12-7442022-12-7452022-12-7
9、462022-12-747 注意:表示字符的转义注意:表示字符的转义2022-12-7482022-12-7492022-12-7502022-12-7512022-12-7522022-12-7532022-12-7542022-12-7552022-12-7562022-12-7572022-12-7582022-12-7592022-12-7602022-12-7612022-12-7622022-12-7632022-12-7642022-12-7652022-12-7662022-12-767小 结 习惯上,符号常量用大写字母表示;习惯上,符号常量用大写字母表示;定义符号常量时,不能
10、以定义符号常量时,不能以“;”结束;结束;一个一个#define占一行,且要从第一列开占一行,且要从第一列开始书写;始书写;一个源程序文件中可含有若干个一个源程序文件中可含有若干个define命令,不同的命令,不同的define命令中指定的命令中指定的“标识符标识符”不能相同;不能相同;2022-12-7682022-12-7692022-12-770下列变量定义中合法的是 A)short_a=1-.1e1;B)double b=1+5e2.5;C)long do=0 xfdaL;D)float 2_and=1-e-3;2022-12-771一、已定义一、已定义ch为字符型变量,在下列赋值语句
11、为字符型变量,在下列赋值语句中错误的是:中错误的是:A)ch=;B)ch=62+3;C)ch=NULL;D)ch=xaa;二在以下选项中可做为二在以下选项中可做为C语言合法整数的是:语言合法整数的是:A)10110B B)0386 c)0Xffa D)x2a2三、在以下选项中可做为三、在以下选项中可做为C语言合法常量的是:语言合法常量的是:A)-80 B)-080 C)-8e1.0 D)-80.0e2022-12-7722022-12-7732022-12-774注意:这些系统库函数名并非注意:这些系统库函数名并非C语言的关键字。语言的关键字。2022-12-7752022-12-776202
12、2-12-7772022-12-7782022-12-7792022-12-7802022-12-781见习题P141页712022-12-7822022-12-7832022-12-7842022-12-785printf(格式控制字符串,输出数据列表格式控制字符串,输出数据列表);2022-12-786int num=15;printf(“Twice%d is%d .n”,num,2*num);Twice15 is 30 ._2022-12-7872022-12-788%附加格式字符附加格式字符 格式字符格式字符%-m.nl 格式字符格式字符2022-12-789习题见P137页31、42
13、、58、2022-12-7902022-12-7912022-12-7922022-12-7932022-12-794scanf(格式控制字符串,地址列表格式控制字符串,地址列表);2022-12-7952022-12-796int num1,num2;scanf(“num1=%d,num2=%d”,&num1,&num2);键盘输入键盘输入:num1=15 ,num2=30 2022-12-7972022-12-798相关习题见P137页、1392022-12-7992.7.3使用cin和cout的数据输入输出 C+为了方便使用,除了可以利用printf()和scanf()函数进行输入输出外
14、,还增加了标准输入输出流cin和cout,它们都是在头文件iostream.h中定义的。1.用cout进行数据输出 cout必须和输出运算符一起使用。在这里不是作为位运算的左移运算符,而是起插入的作用,例如:coutHow are you!n;的作用是将字符串How are you!n插入到输出流cout中,也就是输出在标准输出设备上。n控制换行,也可用控制符endl代表回车换行操作,作用与n相同。endl的含义是end of line,表示结束一行。2022-12-7100 可以在一个输出语句中使用多个运算符,将多个输出项插入到输出流cout中,运算符的结合方向是自左至右,因此各输出项按自左
15、至右的顺序插入到输出流中。例如:float i=3.56;int j=20;char k=a;couti=i,j=j,k=,kendl;输出结果为:i=3.56,j=20,k=a 注意:每输出一项要用一个符号。不能写成cout常称为提取运算符,cin要与配合使用。例如:int i;float j;cinij;/*输入一个整数和浮点数。注意不要写成cini,j;*/可以从键盘上输入:45 67.34 (数据间用空格分隔)i和j分别获得值45和67.34。用cin和输入数据同样不需要在本语句中指定数据类型。2022-12-7103应用示例例2_12.cpp:利用cin和cout进行数据的输入输出。
16、#include iostream.hvoid main()coutplease enter your age:age;coutyour age isageendl;运行情况如下:please enter your age:20your age is 202022-12-7104 程序中对变量的定义放在执行语句之后。C语言中是不允许这样的,它要求声明部分必须在执行语句之前。而C+允许对变量的声明放在程序的任何位置(但必须在使用该变量之前)。这是C+对C限制的放宽。C+为流的输入输出提供了格式控制,如:dec(用十进制形式),hex(用十六进制形式),oct(用八进制形式),还可以控制浮点数的输
17、出精度等。在此不详述,需要时可查阅有关书籍。2022-12-71052022-12-71061、表达式、表达式 表达式是用运算符与圆括号将表达式是用运算符与圆括号将操作数连接起来构成的式子。操作数连接起来构成的式子。C语言的操作数包括常量、变量、语言的操作数包括常量、变量、函数值等。函数值等。2022-12-71072、运算符、运算符 按运算符与运算对象的关系可将按运算符与运算对象的关系可将C语语言的运算符分为言的运算符分为 单目运算符单目运算符 双目运算符双目运算符 三目运算符三目运算符2022-12-71082022-12-7109 按运算符在表达式中的作用,按运算符在表达式中的作用,C语
18、语言的运算可以分为言的运算可以分为 算术运算符算术运算符 赋值运算符赋值运算符 关系运算符关系运算符 逻辑运算符逻辑运算符 位运算符位运算符 条件运算符条件运算符 逗号运算符逗号运算符 特殊的运算符特殊的运算符2022-12-7110算术运算关系运算逻辑运算地址运算按位运算2022-12-71112022-12-71122022-12-7113 表达式有多种运算符混合使用时,求解表达式的值,首先要解决各种运算符的运算优先次序问题。即,优先级和结合性。2022-12-71142022-12-7115优先级是指不同级别运算符之间的运算次序,先高后低,优先级共有15级,分级的原则是:1.单目运算符的
19、优先级高于双目运算符,双目运算符优先级高于三目运算符。2.在双目运算符中,算术运算符高于关系运算符,关系运算符高于逻辑运算符.3.在位运算符中,移位运算符高于关系运算符,位逻辑运算符低于关系运算符.4.园括号运算符优先级最高,逗号运算符优先级最低.赋值运算符及复合赋值运算符的优先级仅高于逗号运算符.2022-12-7116 结合性是指在一个表达式中有多个优先级相同的运算符之间的运算次序.右结合性 右左 单目,三目和赋值运算符左结合性 左右 其余运算符2022-12-71172022-12-71182022-12-71192022-12-7120课本P32页、练习课本P2.19 2.20习题集P
20、138页43、69、P144页47、48题P142页第7题,三、12022-12-71212022-12-71222022-12-71232022-12-71242022-12-71252022-12-7126x=-4/(2*2)x=(-4/(2*2)x=-1x=-4/(2*2)2022-12-71272022-12-7128赋值表达式可以嵌套x=(y=(z=100);相当于 x=100;y=100;z=100;例:1、教材P34页:如b的初值为的初值为5 5,求,求表达式 b+=b-=b*b;的值,2、习题集:P136页212022-12-7129自动将右边表达式的数据类型转换成左边变量的类
21、型右边表达式的数据类型转换成左边变量的类型2022-12-71302022-12-7131例:int i=85,j=7,result;float x=2.6;result=i/x+j;结果:结果:392022-12-71322022-12-71332022-12-71342022-12-71352022-12-7136关系运算符的注意事项课本P35页1、“=”与“=”的区别;2、例2.1分析分析;2022-12-7137/*程序2-1.c*/#include void main()int i=60;int j=60;int k=60;i=j=k;printf(i=%d,j=%d,k=%dn,i
22、,j,k);i=(j=k+*2);printf(i=%d,j=%d,k=%dn,i,j,k);i=jk=100;printf(i=%d,j=%d,k=%dn,i,j,k);2022-12-71382022-12-71392022-12-71402022-12-71412022-12-71422022-12-71432022-12-71442022-12-71452022-12-71462022-12-71472022-12-71482022-12-7149 习题集P136页第12、15、322022-12-71502022-12-71512022-12-71522022-12-71532022
23、-12-71542022-12-71552022-12-71562022-12-7157 一、按位逻辑运算符一、按位逻辑运算符 1、按位与(、按位与(&)用途:用途:(1)清零 如:有原数:如:有原数:x=0010 1011 取数:取数:y=1101 0100 或:或:y=0000 0000 则:则:x&y=0 2022-12-7158 (2)截取(析出)变量指定的二进制位,其余位清零。如:设有数a=0010 1100 1010 1100,占2B,要取其低字节。取数y=0000 0000 1111 1111,则:a&y=0000 0000 1010 1100 如:有数a=0101 0100,要
24、将左面的第3、4、5、7、8位保留。可取数b=0011 1011,则:c=a&b=0001 00002022-12-7159 例:short a=12345;问其高位字节,低位字节的值是多少 高位字节 a&0 xff00 值 6144 低位字节 a&0 xff 值572022-12-71602022-12-71612、按位或(、按位或(|)用途:将二进制数据的指定位置1,而不管原来的二进制位状态如何。工作数:指定位为1,其余位为0 a=0011 0000 b=0000 1111 则则a|b=0011 1111 则取工作数b=0 x8000,即:a:0101 1011 0110 1101 b:1
25、000 0000 0000 0000 a|b:1101 1011 0110 1101 如:int a=055555,现要将变量对应的存储单元的最高位置1,问b如何取值。2022-12-7162例:A的ASCII码最高位置1,扩展出的字符是什么?Printf(“%c”,A|0 x80);2022-12-71632022-12-7164 用途:使指定的二进制位状态翻转(使指定的二进制位状态翻转(1变变0,0变变1)操作数:指定翻转的位为操作数:指定翻转的位为1,其余位全,其余位全为为0 如:如:a=0 x0F 0000 0000 0000 1111取数:取数:b=0 x18 0000 0000 0
26、001 1000 则:则:a b=0000 0000 0001 01112022-12-7165 与与0相相,保留原值,保留原值 常用按位加实现两个变量内容的互换,而不采用任何中间变量。方法如下:a=ab;b=ba;a=ab;证明:由第证明:由第2式式b=ba=b(ab)=bab=abb=a0=a 再由第3式 a=ab=(ab)(b(ab)=abb(ab)=a0ab=aab=0b=b2022-12-7166例把 char x=1的偶数位变反奇数位保持 用 10101010 x 0 xaa2022-12-7167例:short a=12345的反码,b=-a,b的补码 a,a+12022-12-
27、7168例:short a=123 乘16 a4高位字节:a8低位字节:a162022-12-7170作业(二)1、设x=11001101,若想通过x&y使x中的低4位不变,高4位清零,则y的二进制数是_ 2、设x=10100011,若要通过xy使x的高4位取反,低4位不变,则y的二进制数是_ 3、设有以下语句:char x=3,y=6,z;z=xy2;则z的二进制值是_ 4、char z=A;int b;b=(241&15)&(z|a);b的值为_A.0B.1C.TURED.FALSE 习题集P137页第33题,41,722022-12-7171 例如:表达式a/b*c%da+!b+c-i=k&ij-1a=b=c=5!a等价表达式(a/b)*c)%d(a+(!b)+(c-)(i)=k)&(i2后,s的值不变2022-12-7197结束页