数据类型、运算符号与表达式ppt课件_第1页
数据类型、运算符号与表达式ppt课件_第2页
数据类型、运算符号与表达式ppt课件_第3页
数据类型、运算符号与表达式ppt课件_第4页
数据类型、运算符号与表达式ppt课件_第5页
已阅读5页,还剩111页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第3章章 数据类型、运算符号与表达式数据类型、运算符号与表达式重点n预备知识预备知识: :信息在计算机中的表示信息在计算机中的表示n数据类型和常量、变量数据类型和常量、变量n定义和使用语法)定义和使用语法)n在计算机中的存储方式在计算机中的存储方式C C的低级语言特性)的低级语言特性)n运算符的种类、优先级和结合性运算符的种类、优先级和结合性n表达式的类型和表达式值表达式的类型和表达式值信息在计算机系统中的表示信息在计算机系统中的表示n数 制怎样表示一个数)十进制十进制例:(201910 =(1103+9102+9101+910010二进制 一般形式为: (N2 =(bn-1bn-2b 1b

2、02 = (bn-12n-1bn-22n-2b121b020)10例:(10111012 = (126+025+124+123+122+021+12010 =(64+0+16+8+4+0+110 =(9310数值越大,位数越多,读写不方便,容易出错!八进制 例:(1288=(182+281+88010 =(64+16+810 =(8810十六进制 例:(5D16=(5161+1316010 =(80+1310 =(9310DIY二进制与八进制、十六进制之间的转换 (1010111001012 =(101,011,100,1012=(53458(65748 =(110,101,111,1002=

3、(1101011111002二进制与十六进制之间的转换四位二进制数对应一位十六进制数。(101110101102 =(0101 1101 01102 =(5D616十进制数转换成二进制十进制数转换成二进制例:求21710 =()2 解: 2 217 余1 b0 2 108 余0 b1 2 54 余0 b2 2 27 余1 b3 2 13 余1 b4 2 6 余0 b5 2 3 余1 b6 2 1 余1 b7 0(21710 =(110110012例:求0.312510 =( )2 解: 0.3125 2 = 0.625 整数为0 b- 1 0.625 2 = 1.25 整数为1 b- 2 0.

4、25 2 = 0. 5 整数为0 b- 3 0. 5 2 = 1.0 整数为1 b- 4 说明:有时可能无法得到0的结果,这时应根据转换精度的要求适当取一定位数。小数部分的转换:乘2取整法。(0.312510 =(0.01012几种计数进制数的对照表十进制二进制八进制十六进制00000001000111200102230011334010044501015560110667011177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F二进制数的运算 二进制加法二进制加法二进制减法二进制减法 例例2: 2:

5、 求求10101010B10101010B10101B10101B。 解解: : 被减数被减数 10101010 10101010 减数减数 10101 10101 借位借位 ) 00101010) 00101010 差差 10010101 10010101 则则10101010B10101010B10101B10101B10010101B10010101B。二进制乘法二进制乘法二进制除法二进制除法二进制数的逻辑运算 1.“与运算(AND) “与运算又称逻辑乘,运算符为或。“与运算的规则如下: 000 01100 111 例5: 若二进制数X10101111B,Y01011110B,求 XY。

6、 10101111 01011110 00001110 则XY00001110B。 2. “或运算(OR) “或运算又称逻辑加,运算符为或。“或运算的规则如下: 000 01101 111 例6: 若二进制数X10101111B,Y01011110B,求X Y。 10101111 01011110 11111111 则XY11111111B。 3.“非运算(NOT) “非运算又称逻辑非,如变量A的“非运算记作 。“非运算的规则如下: 例7: 若二进制数A10101111B,求 。 01010000B 由此可见,逻辑“非可使A中各位结果均发生反变化,即0变1,1变0。 A1001AA101011

7、1B 4.“异或运算(XOR) “异或运算的运算符为或,其运算规则如下: 0 00 0 11 01 1 10 例8: 若二进制数X10101111B,Y01011110B,求 X Y。 10101111 01011110 11110001 则X Y11110001B。 数数 值怎样用值怎样用0和和1表示数的值)表示数的值)n余3码带符号数带符号数例如:N11011, N2-1011在计算机中用8位二进制数可分别表示为: D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0符号 数值部分原码、补码与反码原码、补码与反码n补码补码0 03 36 69 95

8、 54 42 21 17 78 810101111刻度盘坏了,只能顺时针拨动指针刻度盘坏了,只能顺时针拨动指针0 03 36 69 95 54 42 21 17 78 810101111能作减法,但结果不能为负数能作减法,但结果不能为负数怎样让加法器的计算结果可以有负数怎样让加法器的计算结果可以有负数0 03 36 69 96 65 54 43 32 21 15 54 42 21 17 78 8101011111 12 23 34 45 50 0问题问题0 01281282552551281281 10 0127127127127129129127127怎样求补码怎样求补码反码反码例子例子X2

9、反10110011BX2补X反110110100B补码的运算规则与溢出判别补码的运算规则与溢出判别,求补运算,就可得到负数的原码结果。例2: 用补码求X+Y 其中 X37 Y51。解: 假设X补00100101, Y补00110011,可得 X+Y补X补+Y补 00100101+0011001101011000由于符号位为0是正数,所以 X+Y原X+Y补01011000 那么 X+Y(01011000)288例3: 用补码求X-Y X37 Y51 。解: 假设-Y补11001101,可得 X-Y补X补+-Y补 00100101+1100110111110010由于符号位为1是负数,所以 X-Y

10、原X-Y补补10001110那么 X-Y-(00001110)2-14溢出的判别溢出的判别当两个正数补码相加时 若数值部分之和大于2n-1,则数值部分必有进位CP1;而符号位却无进位CS0。这时CSCP的状态为“01”,发生正溢出。 当两个负数补码相加时 若数值部分绝对值之和大于2n-1,则数值部分补码之和必小于2n-1,CP0;而符号位肯定有进位CS1,这时CSCP的状态为“10”,发生负溢出。 当不发生溢出时,CS和CP的状态是相同的,即CSCP的状态为“00或“11”。 例 7: 01011001 (+89) 10010010 (-110) 01101100 (+108) 1010010

11、0 (-92)+)011110000 (进位) +)1 00000000 (进位) 011000101 (-59) 1 00110110 (+54) CS0,CP1,正溢出 CS1,CP0,负溢出 例8: 00110010 (+50) 11101100 (-20) 01000110 (+70) 11100010 (-30)+) 000001100 (进位) +)1 11000000 (进位) 0 01111000(+120) 1 11001110(-50) CS0,CP0,无溢出 CS1,CP1,无溢出例9: 01010101 (+85) 10111100 (-68) 11011101 (-3

12、5) 00011101 (+29) +)1 10111010 (进位) +)0 01111000 (进位) 1 00110010(+50) 0 11011001(-39) CS1,CP1,无溢出 CS0,CP0,无溢出 小数的表示小数的表示n NM2E 数符数符, ,表示数的正、负表示数的正、负尾数尾数阶码阶码阶符阶符IEEE754标准标准 说明: 1) 约定小数点左边隐含有一位1,实际上使尾数的有效位数为24位,即尾数为1.M 2) 偏移值 = 2 (尾数位数 - 1) 1。必须从指数中减去偏移值,才能确定有符号指数的实际值。 123.456文字各种形状)文字各种形状)点阵描绘出了汉字字形,

13、汉字的点阵字形在计算机中称为字模。如图1-8表示汉字“中的1616点阵字模。图形信息在数字系统中的表示图形信息在数字系统中的表示 信息在计算机系统中的存储信息在计算机系统中的存储u内存以字节为单元组成u每个字节有一个地址u一个字节一般由8个二进制位组成u每个二进制位的值是0或1012345678910.127012345670 1 1 1 1 1 1 1计算机内存、字节、位和地址计算机内存、字节、位和地址C语言中的数和量语言中的数和量nC的数据是以某种类型的形式出现的n程序中用到的所有数据都必须指定类型nC语言的数据有常量和变量之分n常量和变量都分别属于某一数据类型n数据类型总表数据类型总表C

14、数据类型基本类型构造类型指针类型空类型void定义类型typedef字符类型char枚举类型enum整 型实型单精度型float双精度型double数组结构体struct共用体union短整型短整型short长整型long整型intn基本数据类型基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无signed int16-3276832767signed short int16-3276832767signed long int32-2147483648214748364716unsigned int0655353204294967295unsigned long intunsig

15、ned short int16065535有float323.4e-383.4e38有double641.7e-3081.7e308有char8-128127无unsigned char80255常量 (Constants)n常量常量n程序运行过程中,其值不能被改变的量程序运行过程中,其值不能被改变的量n例如:例如:1212、-6.7-6.7、aan直接常量直接常量n符号常量符号常量 (Symbolic Constants) (Symbolic Constants)n用一个标识符代表的常量用一个标识符代表的常量n相当于把标识符用一个常量简单替换下来相当于把标识符用一个常量简单替换下来n含义清楚

16、,一改全改含义清楚,一改全改n习惯上符号常量名用大写字母习惯上符号常量名用大写字母常量示例#define PRICE 30#define NUM 12void main() . . total = NUM * PRICE; total2 = 84 * PRICE2; printf(total=%d, total); . .不会被替换= total = 12 * 30;常量符号常量u概念:其值可以改变的量概念:其值可以改变的量u变量名与变量值变量名与变量值u变量定义的一般格式:变量定义的一般格式:u 数据类型数据类型 变量变量11,变量,变量2 2,变量,变量n;n;u变量初始化变量初始化 定义

17、时赋初值定义时赋初值 例: int a,b,c; float data;决定分配字节数和数的表示范围合法标识符例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1;u变量的使用:先定义,后使用变量的使用:先定义,后使用例1 int student; stadent=19; 例2 float a,b,c; c=a%b; u变量定义位置:一般放在函数开头变量定义位置:一般放在函数开头main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“da

18、ta=%fn”,data);变量定义可执行语句main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data);变量(语法)编译程序根据变量定义为其分配指定字节的内存单元.硬件地址main() int a=1, b=-5,c; c=a; printf(“%d”,a);0000H0001H2字节abc变量名符号地址).内存随机数000000010000000011111011111111110002H0003H10010001001101011111101111111111变量(实质)标识符 (Identifie

19、r)n标识符标识符n变量名、符号常量名、函数名、类型名变量名、符号常量名、函数名、类型名n标识符命名规范标识符命名规范n由字母、数字、下划线由字母、数字、下划线(Underscore, _)(Underscore, _)组成组成n第一个字符必须为字母或下划线第一个字符必须为字母或下划线nC C语言标识符是大小写敏感的语言标识符是大小写敏感的n不能与不能与C C语言关键字语言关键字(Keywords)(Keywords)反复反复n标识符的名称一般应具有一定的含义标识符的名称一般应具有一定的含义n一般不要使用以下划线开头的标识符一般不要使用以下划线开头的标识符标识符示例n正确的标识符正确的标识符n

20、studentstudent、num1num1、_SUM_SUM、_1_2_3_1_2_3nMyNameMyName、mynamemyname、my_namemy_namen错误的标识符错误的标识符nroom3-1room3-1n包含了其他字符减号)包含了其他字符减号)n2men2menn以数字开头以数字开头nlonglongn与关键字重复与关键字重复nMr.ZhuMr.Zhun包含了其他字符小数点)包含了其他字符小数点)例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _abov

21、e $123M.D.John3days#33char$123ab整型 (Integer)n整型变量整型变量n整型变量的类型整型变量的类型n整型变量的定义整型变量的定义n整型数据在内存中的存放形式整型数据在内存中的存放形式n整型数据的溢出整型数据的溢出n整型常量的表示方法整型常量的表示方法n整型常量的类型整型常量的类型整型变量的分类n按占用存储空间的大小划分表示的数的范围)按占用存储空间的大小划分表示的数的范围)n基本整型基本整型intintn短整型短整型short intshort intn长整型长整型long intlong intn按有无符号划分按有无符号划分n有符号有符号signedsi

22、gnedn无符号无符号unsignedunsignedn上述两种分类方式组合,可得到上述两种分类方式组合,可得到6 6种类型种类型整数的长度n整数的类型与长度整数的类型与长度nshort:占占2字节字节16bit)nlong: 占占4字节字节32bit)nint: 占占2或或4字节字节16或或32bit)n2Bytes = short int long = 4Bytesn若需要精确的长度,可选用若需要精确的长度,可选用short或或longn举例举例nBC3.1:int长度为长度为2Bytesngcc: int长度为长度为4Bytes整型数据的取值范围类类 型型长度长度 (bit)取值范围取值

23、范围signed short int16-215 215-1unsigned short int160 216-1signed int16 or 32-215(31) 215(31)-1unsigned int16 or 320 216(32)-1signed long int32-231 231-1unsigned long int320 232-1整型变量的定义 (Definition)n定义形式定义形式nsigned short int a,i;signed short int a,i;nunsigned short int b=1,j;unsigned short int b=1,j;

24、nsigned intsigned intc;c;nunsigned intunsigned intd;d;nsigned long intsigned long int e;e;nunsigned long intunsigned long int f; f;整型变量的定义与使用举例void main() int a; unsigned b; long c; a = -23; b = 45; c = a + b;程序举例n设计一个程序,计算设计一个程序,计算1 1到到5 5的平方并将其显的平方并将其显示到屏幕上示到屏幕上计算1到5的平方并将其显示到屏幕上main()main() int x1

25、=1, x2=2, x3=3, x4=4, x5=5; int x1=1, x2=2, x3=3, x4=4, x5=5; x1=x1 x1=x1* *x1; x1; x2=x2 x2=x2* *x2; x2; x3=x3 x3=x3* *x3;x3; x4=x4 x4=x4* *x4;x4; x5=x5 x5=x5* *x5;x5; printf(“%d,%d,%d,%d,%d”,x1,x2,x3,x4,x5); printf(“%d,%d,%d,%d,%d”,x1,x2,x3,x4,x5); 问题n设计一程序使用变量的方式计算下来和式:设计一程序使用变量的方式计算下来和式:n n S=12

26、+23 +32+43+52+63 S=12+23 +32+43+52+63整型数据在内存中的存放方式n长度长度 short int long short int longn举例,举例,int i=50; /int i=50; /* *intint类型占类型占2 2字节字节* */ /n符号符号 signed unsigned signed unsigned0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0高地址字节高地址字节低地址字节低地址字节负整数举例n举例举例nint i=-50; /int i=-50; /* *

27、intint类型占类型占2 2字节字节* */ /0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 050的原码的原码-50的补码的补码取反取反加一加一整型数据的溢出 (Overflow)n溢出溢出n数据超出了变量能够存储的范围,造成数数据超出了变量能够存储的范围,造成数据

28、丢失或数值改变等据丢失或数值改变等n举例举例void main() int a = 32767; a=a+1; /*32768?*/0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0+132767的补码-32768的补码有符号数与无符号数n有符号数有符号数n二进制补码表示,首位为符号位二进制补码表示,首位为符号位n指定指定signed或缺省情况,即为有符号数或缺省情况,即为有符号数n无符号数无符

29、号数n没有符号位,只能表示非负数没有符号位,只能表示非负数n无符号数类型必须指定为无符号数类型必须指定为unsignedvoid main() int i; unsigned j; i=-50; j=-50; i=i/2; j=j/2; 若把负数赋值给无符号数,则把该负数的补若把负数赋值给无符号数,则把该负数的补码当作无符号数进行处理码当作无符号数进行处理有符号数与无符号数举例void main() int i; unsigned j; i=-50; j=-50; i=i/2; /*-25*/ j=j/2; /*32743*/1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0-50

30、的补码的补码i,j/ 21 1 1 1 1 1 1 1 1 1 1 0 0 1 1 10 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1i/2-25的补码的补码j/232743的原码的原码整型常量的表示方法n十进制十进制 (Decimal)n例如,例如,123、-456、0n八进制八进制 (Octal)n以以0开头,不得含有开头,不得含有8或或9n例如,例如,0123、-0456n错例,错例,0138、-0912n十六进制十六进制 (Hexadecimal)n以以0 x或或0X开头,用开头,用af或或AF表示表示1015n例如,例如,0 x123、-0X45、0 x3AB、-0 x

31、abc整型常量的类型n常量的类型后缀常量的类型后缀 (Suffix)nl、L表示常量是一个长整型表示常量是一个长整型nu、U表示常量是一个无符号整型数表示常量是一个无符号整型数n两种后缀可以一起使用两种后缀可以一起使用n举例举例n123l长整型常数长整型常数123n456U无符号整型常数无符号整型常数456n789ul 无符号长整型常数无符号长整型常数789n101Lu 无符号长整型常数无符号长整型常数101浮点型 (Floating Point)n浮点型常量的表示方法浮点型常量的表示方法n浮点型变量浮点型变量n浮点型变量的类型浮点型变量的类型n浮点型数据在内存中的存放形式浮点型数据在内存中的

32、存放形式n浮点型数据的舍入误差浮点型数据的舍入误差n浮点型常数的类型浮点型常数的类型浮点型常量的表示方法n十进制小数形式十进制小数形式n由符号、数字和小数点由符号、数字和小数点(必需必需)组成组成n整数和小数部分都可省略,但不能同时省整数和小数部分都可省略,但不能同时省略略n举例,举例,12.3、-.123、123.、0.、.0n指数形式指数形式n由整数由整数(或小数或小数)、e(或或E)、整数顺序组成、整数顺序组成ne或或E之前必须有数字,之后必须是整数之前必须有数字,之后必须是整数n举例,举例,123.4e-5表示表示123.410-5n错例,错例,e1、12e、1.2e3.4、.e5、e

33、规范化指数形式n规范化指数形式规范化指数形式n类似于类似于“科学计数法科学计数法”ne或或E之前的小数中,小数点前面有且仅之前的小数中,小数点前面有且仅有一个非零数字有一个非零数字n举例,举例,123.456n规范化形式,规范化形式,1.23456e2、1.23456E+002n非规范化形式,非规范化形式,123.456、12.3456e1、12345.6e-2、0.123456e3、12345600e-5浮点型变量的类型n分类分类n单精度单精度 floatn双精度双精度 doublen长双精度长双精度 long doublen长度和取值范围长度和取值范围类类 型型长度长度 (bit)有效数字

34、有效数字绝对值范围绝对值范围float326710-371038double64151610-30710308long double128181910-4931104932编程例题n设长方形的高为设长方形的高为 1.51.5,宽为,宽为 2.32.3,编程求,编程求该长方形的周长和面积。该长方形的周长和面积。 浮点型数据在内存中的存放方式n二进制规范化指数形式二进制规范化指数形式n小数部分长度与能表示的精度有关小数部分长度与能表示的精度有关n指数部分长度与能表示的数值范围有关指数部分长度与能表示的数值范围有关1 1 1 1 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1

35、 1 1 0 0 0 0 1 1 0 0指数部分e小数部分f符号sesfv2). 1 () 1(123.456N (10) = 123.456, N (10) = 123.456, 换算成二进制表示:换算成二进制表示: N (2) = 1111011. 01110100101111001 N (2) = 1111011. 01110100101111001 = 1. 11101101110100101111001(.) = 1. 11101101110100101111001(.) * * 26 26 那么那么E 127 = 6; E = 127 + 6 = 133(10) = 1000010

36、1(2) E 127 = 6; E = 127 + 6 = 133(10) = 10000101(2) M = 111 0110 1110 1001 0111 1001 (M = 111 0110 1110 1001 0111 1001 (省略了最高数字位省略了最高数字位1, 1, 共共23bit) 23bit) 组合起来就是:组合起来就是: S E M S E M 0 10000101 111 0110 1110 1001 0111 1001 0 10000101 111 0110 1110 1001 0111 1001 4bit 4bit一间隔:一间隔: 0100 0010 1111 01

37、10 1110 1001 0111 1001 0100 0010 1111 0110 1110 1001 0111 1001 4 2 F 6 E 9 7 9 4 2 F 6 E 9 7 9 浮点型数据的舍入误差n由于浮点型变量能够表示的有效数字有限,由于浮点型变量能够表示的有效数字有限,将有效位以外的数字舍去造成误差将有效位以外的数字舍去造成误差n举例举例float a=123456.789e5, b; /*a=12345678900*/b = a + 20; /*b=12345678920?*/printf(a=%fnb=%fn, a, b);运行结果运行结果 a=12345678848.0

38、00000 b=12345678848.000000浮点型常量的类型n类型后缀类型后缀nf、F表示常量是一个单精度型浮点数表示常量是一个单精度型浮点数nl、L表示常量是一个长双精度型浮点数表示常量是一个长双精度型浮点数n无任何后缀的浮点型常量视作双精度型无任何后缀的浮点型常量视作双精度型n对浮点型变量赋值对浮点型变量赋值n一个浮点型常量可以赋值给任何类型的浮一个浮点型常量可以赋值给任何类型的浮点型变量点型变量n根据变量类型截取常量的相应有效数字根据变量类型截取常量的相应有效数字n注意防止出现溢出注意防止出现溢出字符型 (Character)n字符型常量字符型常量n字符型变量字符型变量n字符型数

39、据在内存中的存放形式字符型数据在内存中的存放形式n字符型数据的使用方法字符型数据的使用方法n字符串常量字符串常量字符型常量n单引号括起来的一个字符单引号括起来的一个字符n普通字符普通字符n举例,举例,a、A、1、?n错例,错例,abc、我我n转义字符转义字符n以以开头开头+一个字母的特殊字符一个字母的特殊字符nddd 1到到3位位8进制数进制数ASCII码代表的字符码代表的字符nxhh 1到到2位位16进制数进制数ASCII码代表的字码代表的字符符n举例,举例,n、t、123、x3A转义字符含义nvradddtbf“xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格

40、换页反斜线双引号2位16进制数代表的字符例例 转义字符举例转义字符举例(ch2_001.c,ch2_004.c) main() printf(101 x42 Cn); printf(I say:How are you?n); printf(C Programn); printf(Turbo C);运行结果:(屏幕显示)A B CIsay:”How are you?”C ProgramTurbo C例例 main() printf(“Yb=n”); 运行结果:屏幕显示:=打印机输出:转义字符举例转义字符举例字符型变量n字符型变量只能存放一个字符字符型变量只能存放一个字符n定义与使用定义与使用vo

41、id main() char c1, c2; /*定义字符型变量定义字符型变量c1和和c2*/ c1 = a; /*c1的值为的值为a*/ c2 = 2; /*c2的值为的值为2*/字符型数据在内存中的存放形式n一个字符型数据占一个字节的空间一个字符型数据占一个字节的空间n字符型数据以其字符型数据以其ASCII码形式存放码形式存放n字符型数据的存放形式与只占一个字节长字符型数据的存放形式与只占一个字节长度的整型数据完全相同度的整型数据完全相同01100001c1=a(ASCII=97)00110010c1=2(ASCII=50)字符型数据的使用方法n可以把字符型数据视作一种长度为可以把字符型数

42、据视作一种长度为1字节字节的整型数据处理的整型数据处理n当使用字符型数据时,与使用这个字符当使用字符型数据时,与使用这个字符的的ASCII码码(一个一个8位整数位整数)是完全一样的是完全一样的n字符型数据的用法与整型数据完全一样,字符型数据的用法与整型数据完全一样,包括运算、赋值、输入、输出等包括运算、赋值、输入、输出等n字符型数据使用过程中,同样需要注意字符型数据使用过程中,同样需要注意溢出、符号等问题溢出、符号等问题n是字符还是整数,只有在输出时才有意是字符还是整数,只有在输出时才有意义义字符型数据使用举例void main() char c; int i, j; c = 97; /*c

43、= a*/ i = c + 2; /*i = 99*/ j = 2; /*j = 50*/ printf(%c, %dn, c, c); /*a, 97*/字符型变量的符号n字符型变量与整型变量一样,也分为有符字符型变量与整型变量一样,也分为有符号数与无符号数号数与无符号数n无符号字符无符号字符nunsigned char c;unsigned char c;n举例,表示一个班级的人数举例,表示一个班级的人数 (256) (256)n赋值和使用中需要注意的问题,与整型变赋值和使用中需要注意的问题,与整型变量相同量相同void main() char c; int i, j; c=0;L: c+

44、; printf(%c, %dn, c, c); if (c255) goto L字符串(String)常量n表示形式表示形式n一对双引号括起来的字符序列一对双引号括起来的字符序列n引号内可以包括引号内可以包括0个、个、1个或多个字符个或多个字符n字符序列中的特殊字符用转义字符表示字符序列中的特殊字符用转义字符表示n举例,举例,abc、a、我我n举例,举例,12.4、$#*!、C:HOMEn字符常量和字符串常量是不同类型的数据字符常量和字符串常量是不同类型的数据n例如,例如,a与与a是不同的是不同的n不能把一个字符串赋值给一个字符型变量不能把一个字符串赋值给一个字符型变量字符串在内存中的存放方

45、式n在内存中每个字符按顺序存放在内存中每个字符按顺序存放n字符串结尾有一个空字符字符串结尾有一个空字符(ASCII=0, 0)作为字符串结束标志作为字符串结束标志n字符串结束标志字符串结束标志0是不能显示的,在是不能显示的,在字符串常量中,也不用显式写出来字符串常量中,也不用显式写出来n举例举例nTESTnnaTEST084698384000a0009700各类数值型数据间的混合运算n整型、字符型、浮点型数据可混合运算整型、字符型、浮点型数据可混合运算n混合运算时,不同类型的数据按照一定的混合运算时,不同类型的数据按照一定的规则先转换为同一类型,然后再运算规则先转换为同一类型,然后再运算dou

46、blefloatlongunsignedintchar,short低高说明:必定转换运算对象类型不同时转换 char ch; int i; float f; double d;intintdoubledoubledoubledoubledoubledouble10+a +i* f - d / l例2 int i; float f; double d; long l;例1例 main() float x; int i; x=1/2*3.6; printf(“x=%f,i=%d”,x,i); 结果:ch/i + f*d - (f+i)intintdoubledoubledoubledoubledo

47、ubledoubledoubleC运算符算术运算符:(+ - * / % + -)关系运算符:( = !=)逻辑运算符:(! & |)位运算符 :( | &)赋值运算符:(= 及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(* &)求字节数 :(sizeof)强制类型转换:(类型)分量运算符:(. -)下标运算符:()其它 :(( ) -)运算符和表达式运算符和表达式C表达式算术表达式关系表达式逻辑表达式 赋值表达式条件表达式逗号表达式 用运算符号将运算对象连接起来形成的式子称为表达式用运算符号将运算对象连接起来形成的式子称为表达式表达式运算符功能要求运算

48、量个数和类型运算符优先级别结合方向学习运算符应注意学习运算符应注意x=y0 xf0y=y%10 x=10+15*2x=10+15-2l基本算术运算符: + - * / %l优先级: - * / % + -l (2) (3) (4)l结合方向:从左向右l说明:l“-”可为单目运算符时,从右向左的结合性l两整数相除,结果为整数l%要求两侧均为整型数据例例 5/2 = -5/2.0 =例例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2算术运算符和表达式算术运算符和表达式2-2.51-110()u作用:使变量值加1或减1u品种:u前置 +i, -i (先执行i+1或i-1,再使用i值

49、)u后置 i+,i- (先使用i值,再执行i+1或i-1)u由 -构成的表达式的值例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b; /k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=4自增、自减运算符自增、自减运算符 + - - + - -说明:说明:1 1)+ - + - 不能用于常量和表达式不能用于常量和表达式, ,如如5+5+,(a+b)+(a+b)+2 2优先级:优先级:- + - - + - * * /

50、% + - / % + - (2) (3) (4) (2) (3) (4)3 3结合方向:结合方向: 自右向左自右向左例例 -i+ -i+ -(i+) -(i+) i=3; printf(“%d”,-i+); /-3 i=3; printf(“%d”,-i+); /-3 例例 j+k; j+k; 例例 -i+ -i+ i=3; printf(“%d”,-i+); i=3; printf(“%d”,-i+); 续续: :自增、自减运算符自增、自减运算符+ -+ -(j+)+k;(j+)+k;一般形式:(类型名)(表达式) 例: (int)(x+y) (int)x+y (double)(3/2)

51、(int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变 例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 结果:x=3.600000,i=3较高类型向较低类型转换时可能发生精度损失问题2.5.2 2.5.2 显式转换强制转换)显式转换强制转换)l简单赋值运算符l符号: =l格式: 变量标识符=表达式l作用:将一个数据常量或表达式赋给一个变量l表达式的值:变量的值n复合赋值运算符复合赋值运算符n品种:品种:+= -= += -= * *= /= %= = /= %= = = = &= =

52、|= &= = |=n含义:含义:a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例例 a=3; a=3; d=func(); d=func(); c=d+2; c=d+2;赋值运算符和表达式赋值运算符和表达式u优先级: 14u结合方向:自右向左u左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等赋值表达式的值与变量值相等,且可嵌套且可嵌套u赋值转换规则赋值转换规则: :使赋值号右边表达式值自动转使赋值号右边表达式值自动转换成其左边变量的类型换成其左边变量的类型例例 3=x-2 3=x-2* *y;y; a+b=3; a+b=3;例例 float f; fl

53、oat f; int i; int i; i=10; i=10; f=i; f=i;那么那么 f=10.0 f=10.0例例 int i; i=2.56; /结果结果i=2;例例: a=b=c=5: a=b=c=5 a=(b=5) a=(b=5) a=5+(c=6) a=5+(c=6) a=(b=4)+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2) a=(b=10)/(c=2)/表达式值为表达式值为5 5,a,b,ca,b,c值为值为5 5/ b=5;a=5/ b=5;a=5/表达式值表达式值1111,c=6,a=11c=6,a=11/表达式值表达式值1010,a=10,

54、b=4,c=6a=10,b=4,c=6/表达式值表达式值5 5,a=5,b=10,c=2a=5,b=10,c=2简单赋值说明简单赋值说明1 1):): 结合方向:自右向左结合方向:自右向左 优先级优先级: 12: 12 左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等赋值表达式的值与变量值相等,且可嵌套且可嵌套赋值转换规则赋值转换规则: :使赋值号右边表达式值自动转换使赋值号右边表达式值自动转换成其左边变量的类型成其左边变量的类型例例: a=5; : a=5; a+=a-=a a+=a-=a* *a a例例: int a=2; : int a=2;

55、 a%=4-1; a%=4-1; a+=a a+=a* *=a-=a=a-=a* *=3; =3; /a=-40 /a=-40 等价于等价于a=a+(a=a-(aa=a+(a=a-(a* *a)a)/a=0 /a=0 等价于等价于a=a+(a=aa=a+(a=a* *(a=a-(a=a(a=a-(a=a* *3)3)复合赋值说明复合赋值说明: :l形式:表达式1,表达式2,表达式nl结合性:从左向右l优先级: 15l逗号表达式的值:等于表达式n的值l用处:常用于循环for语句中例例 a=3*5,a*4 a=3*5,a*4,a+5例例 x=(a=3,6*3) x=a=3,6*a例例 a=1;b=

56、2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c); /a=15,表达式值表达式值60/a=15,表达式值表达式值20/赋值表达式,表达式值赋值表达式,表达式值18,x=18/逗号表达式逗号表达式,表达式值表达式值18,x=3/1,2,3/3,2,3逗号运算符和表达式逗号运算符和表达式例例:/*ch2_6.c*/#include main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn,x);运行结果:运行结果:x=3n以下选项中可作为以下选项中可作为C C语言合

57、法常量的是语言合法常量的是_。n A A)-80. -80. B B) -080 -080 nC C)-8e1.0 -8e1.0 D D) -80.0e -80.0en下列哪些是下列哪些是c c语言提供的合法的数据关键字语言提供的合法的数据关键字n A. Float B. signed C. integer D. Char A. Float B. signed C. integer D. Char n下面标识符中,合法的用户标识符为下面标识符中,合法的用户标识符为nA A变量变量a B. fast+1 c. printf D. 2ab a B. fast+1 c. printf D. 2ab

58、n下列属于整形常量的是下列属于整形常量的是nA A0X12A B0X12A B12x C12x C-12. D-12. D1E21E2n下述四项中,合法的下述四项中,合法的c c语言整型常量是语言整型常量是nA. -087 B. 5L C. (long)123456 D. 1.23e+2A. -087 B. 5L C. (long)123456 D. 1.23e+2n以下不正确的实型常量是()以下不正确的实型常量是()nA. 2. B.123E-2 C.-.543 D.2.1E3.5A. 2. B.123E-2 C.-.543 D.2.1E3.5n下述常量中,哪些是不合法的常量下述常量中,哪些是不合法的常量nA A12 B12 B“ ” C“ ” C D D“483”“483”n以下不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论