C语言程序设计2第3章-数据类型、运算与表达式.ppt

上传人:枫** 文档编号:571140040 上传时间:2024-08-08 格式:PPT 页数:70 大小:855KB
返回 下载 相关 举报
C语言程序设计2第3章-数据类型、运算与表达式.ppt_第1页
第1页 / 共70页
C语言程序设计2第3章-数据类型、运算与表达式.ppt_第2页
第2页 / 共70页
C语言程序设计2第3章-数据类型、运算与表达式.ppt_第3页
第3页 / 共70页
C语言程序设计2第3章-数据类型、运算与表达式.ppt_第4页
第4页 / 共70页
C语言程序设计2第3章-数据类型、运算与表达式.ppt_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《C语言程序设计2第3章-数据类型、运算与表达式.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计2第3章-数据类型、运算与表达式.ppt(70页珍藏版)》请在金锄头文库上搜索。

1、1第三章第三章 数据类型、运算符和表达式数据类型、运算符和表达式Chapter ThreeVariables,Data Types, and Arithmetic Expressions23.1 C3.1 C语言数据类型语言数据类型单精度型float(single precision)双精度型(double precision)基本类型Basic Type构造类型conformation指针类型(Pointer)空类型(Dummy)数据类型Data Type整型(integer)字符型(character)实型(浮点型)(Real)枚举类型(enumeration) 数组(Array)结构体类

2、型(Structure)共用体类型(Union)3C字符集Letters字母AZUppercase大写字母azLowercase小写字母Digits数字09All Decimal digits数字Special Characters特殊符号_Under score下划线,comma逗号.period小数点,句号;semicolon分号:colon冒号?Question mark问号apostrophe单引号“quotation双引号4C字符集(续)!Exclamation mark感叹号|Vertical bar竖线/slash斜线backslash反斜线tilde波浪线$Dollar sig

3、n美元符号%Percent sign百分号&ersand与caret幂次符号5C字符集(续)*asterisk星号-Minus sign减号+Plus sign加号closing angle bracket(or less than sign)右尖括号(或大于号)(Left parenthesis左圆括号)Right parenthesis右圆括号Left bracket左方括号Right bracket右方括号Left brace左大(花)括号Right brace右大(花)括号#Number sign井号63.2.1常量常量(Constant)1.定义定义:在程序执行期间在程序执行期

4、间,其值不发生变化的量称为常量其值不发生变化的量称为常量2.类型:类型:v直接常量直接常量 (Direct )又称又称字面常量字面常量 。分为。分为整型常量:整型常量:123,-321,0,654321,+78实型常量:实型常量:2.68,3.14,2.718,1.38e12单字符常量:单字符常量:a,C,z字符串常量:字符串常量:”china”,”student”,”class number”3.2 3.2 常量与变量常量与变量(Constant and(Constant and Variable)Variable)73.2 3.2 常量与变量常量与变量(Constant and(Const

5、ant and Variable)Variable)v符号常量符号常量 (Symbol ) 即用一个符号代表一个常量即用一个符号代表一个常量 例如例如: #define PI 3.1415926/预处理命令预处理命令 main( ) float r,l,s; r=2; l=2*PI*r;s=PI*r*r; printf(“l=%d, s=%d”, l,s); 编译器编译后,程序中的有关代码变成了(编译器编译后,程序中的有关代码变成了(.obj文件,不可见)文件,不可见)l=2* 3.1415926*r; s= 3.1415926*r*r;8说明:说明:v符号常量必须符号常量必须先定义先定义后才

6、能用它表示一个数值。后才能用它表示一个数值。v符号常量的值在其作用域内符号常量的值在其作用域内不能改变不能改变,也不能,也不能被再赋值。被再赋值。v符号常量名习惯用符号常量名习惯用大写大写字母表示。字母表示。93.2.2 变量变量1. 定义:定义:程序执行期间值可以改变的量。2.命名规则命名规则: 变量名由标识符表示,只能由字母字母、数字数字和下划线下划线三种字符组成,且第一个字符不得为数字。 例如:下列标识符中,不合法不合法的变量名有: M.D.John , 12%gf , 1add , age& 5thclass, lotus-1-2-3 , cd*ef , float3. 变量要变量要“

7、先定义,后使用先定义,后使用” 定义格式:定义格式:类型说明符类型说明符 标识符标识符1, 1, , ,标识符标识符n n; 例如:int x, y, z; (每个整型变量分配 2字节bytes存储单元)float a,b,c,d;(每个单精度变量分配 4字节存储单元)double u,v,w;(每个双精度变量分配 8字节存储单元)3a10在在C语言中,变量之所以要强制定义,其目的:语言中,变量之所以要强制定义,其目的:1、避免在使用时输错:int student; stadent=30;。2、每一个变量被指定为一确定的类型,在编译时就能为 其分配相应的存储单元。3、指定每一个变量为一确定的类

8、型,在编译时据此检查 该变量所进行的运算是否合法。 例如:如果有double x,y ; int z; 对于运算: z=x*y;在编译时系统就会提示该运算类型不匹配:warning C4244: = : conversion from double to int, possible loss of data11l选变量名时,要做到“见名知意” 例如:name student_num max class suml大小写字母是两种不同的字符,C变量名习惯用小写小写字母表示。l变量名的长度因系统而异。当用TC编译系统时,不要超过8个字符,而用Visual C+编译系统时,几乎无限制。请请 注注 意意

9、123.33.3整型数据整型数据3.3.1整型常量的表示法整型常量的表示法十进制整数十进制整数 :由数字(0-9)和正负号表示 例如:123、-456、0 等八进制整数八进制整数:以0开头 例如:037,0,0435,0551,0123 即(123)8 =(83)10(123) 8=182+2 81+3 80 =(83)10十六进制整数十六进制整数:以0x或0X开头 例如: 0X2,0x9F,0Xbcd,0X 0x123 即 (123)16 =(291)10 -0x12 即 (-12)16 =( -18 )10133.3.2 整型变量整型变量1.整型数据在内存中的存放形式(补码表示法:便于加整

10、型数据在内存中的存放形式(补码表示法:便于加减运算)减运算)int i;i=10; 10=(1010)2 余数首位0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 00 0 0 0 0 0 0 0 0 0 0 0 1 0 1 01 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 010的原码取反再加1,得-10的补码10的表示法的表示法,正数的补码等于它的原码正数的补码等于它的原码-10的的表示表示2102522102012102212314计算计算10-10:10-10=10+(-10)0 0 0 0 0 0

11、0 0 0 0 0 0 1 0 1 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 00=10-10+152 整型变量的分类整型变量的分类 基本型(16位):以 intint 表示 (-3276832767 ) 短整型(16位):以short intshort int或shortshort表示 1.类型 长整型(32位):以long intlong int或longlong表示 (-2.1E9L2.1E9L) 无符号基本型(unsigned intunsigned int) 无符号型 无符号短整型(unsigned

12、shortunsigned short) 无符号长整型(unsigned longunsigned long)一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。unsigned int b; /* 变量b的数值范围:065535 */整整型变量的字长型变量的字长short型型 2个字节个字节byte(字长(字长16位位bit)int 型型 一般是一般是2个字节个字节long 型型 4个字节(字长个字节(字长32位)位)C要要求求 short型型数数据据长长度度短短于于int型型,int型型短短于于long型。型。(short=int int-int = chard-

13、a = 100-97 = 003 = vfloat+float = double+double =double int/float=float/float=floatfloat a; a=1/3.0=1.0/3.0=0.3333333double c; c=1.0/3.0=0.3333333333333333int b; b=1/3.0=1.0/3.0=0.3333333=0vint/int=intfloat a; a=1/3=0.0;int b; b=1/3=0;Decision loss36例:若有: int i ; float f ; double d ; long e ; 试判断表达式

14、 3 +b +i*f - d/e 的类型 int float float double double例:如果int a=5,b=2;double x;x=a/b;printf(“ x=%f“,x);输出结果是什么?X=2.00000037 C语言使用的基本表达式有:语言使用的基本表达式有: 赋值表达式,如:赋值表达式,如:a=3 算术表达式,如:算术表达式,如:3+4*2 关系表达式,如:关系表达式,如:32, a=b,c!=0 逻辑表达式,如:逻辑表达式,如:35&a=b 条件表达式,如:条件表达式,如:ab?a:b 逗号表达式,如:逗号表达式,如:a=3, b=4, c=5383.83.8

15、算术运算符和算术表达式算术运算符和算术表达式( (Arithmetic Operators and Expressions)Arithmetic Operators and Expressions)1、基本的算术运算符、基本的算术运算符: + - * / %l整型数运算int a=14,b=4;a-b=10a+b=18a*b=56a/b=3(decimal part truncated)a%b=2(reminder of division)-14%3=-239l实型数运算float x,y,z;x=6.0/7.0=0.857143y=1.0/3.0=0.333333z=-2.0/3.0=-0.

16、666667% operator can not be used herel混合运算15/10.0=1.515/10=140说明:()上述运算符均为双目运算符(即有两个操作数two operands)(2)“”运算中,若操作数均为整数,则执行整除运算,舍去小数部分。例如:5/3=1(3)“” 要求两侧均为整数,“”运算不能用于float 和 double型数据例如:2412 2、算术表达式和运算符的优先级与结合性、算术表达式和运算符的优先级与结合性(Priority and CombinationPriority and Combination,附录,附录III III )(1)算术表达式:用

17、算术运算符和括号将操作数连接起来的,符合语法规则的式子。 例如: a + b + a*b/c +2.8(2)优先级:优先级:高于(3)结合性结合性: “自左至右的结合方向” 例如:a - b + c42说明:()表达式应用括号括起例如:(int)(x+y) ;()在强制类型转换时,得到一个所需类型的中间变量,原来变量类型未发生变化。(3)用途:完成某种运算,如(int)5.5%3;在函数调用时使实参与形参一致。3 3、强制类型转换、强制类型转换( (Forced Forced type type transformationtransformation) )形式:(类型名)(表达式)例如:(

18、double) (a+b)43举例作用x=(int) 7.57.5 通过截尾转换为整数a=(int)21.3/(int)4.5转换为21/4 ,结果为5b=(double)sum/n以浮点数(实型数)模式计算除法y=(int)(a+b) 将表达式a+b转换为整数z=(int)a+b将a转换为整数然后与b相加p=cos(double)x)在使用 x之前,将其转换为实型数4444main( ) float x; int i; x=3.6; i=(int)x; printf(“x=%f, i=%d”,x,i);输出结果: x=3.600000, i=3注意:强制类型转换后并不改变原来变量的类型 请看

19、下面程序段:454、自增、自减运算符(、)、自增、自减运算符(、)作用:作用:使变量的值增或减,如:i+, +i等于i=i+1i-, -i等于i=i-1 +i ,-i 先执行i=i+1(i=i-1),再使用i的值 i+ ,i- 先使用i的值,再执行i=i+1(i=i-1)举例:举例: int j,i=3; j=+i; /*j的值为的值为4,i为为4*/ j=i+; /*j的值为的值为3,然后然后i的值变为的值变为4 */ j=-i+; /*j的值的值-3,然后,然后i的值变为的值变为4 */46说明:(1)为单目运算符 (2)+ 、只能用于变量,而不能用于常量或表达式。 例如:,(,(x+y)

20、+x+y)+,+,+a a, b+ , b+ 中合法的为:(3)自增、自减运算符为右结合性(即自右至左)。例如:a+ (a+)错误的结合(-a)+ y*x+ y*(x+)错误的结合 (y*x)+4、自增、自减运算符(、)、自增、自减运算符(、)47练习题练习题1.设a=2, 则执行语句 k=+a+a+ 后的 k值为多少?(k=6, a=4)2.int i=3;a=(i+)+(i+)+(i+) ?3.int i=3; printf(“%d,%d”,i, i+) ? P58最好写成i=3; j=i+;printf(“%d,%d”,i, j) ? 请避免这种写法483.9 3.9 赋值运算符和赋值表

21、达式赋值运算符和赋值表达式Assignment Operator and Expressions1、 赋值运算符(赋值运算符(=)形式:变量名=常量或表达式作用:将右边常量或表达式的值赋给左边的变量例如: b=c+d; 要求要求:如果表达式类型与左边的变量的类型不:如果表达式类型与左边的变量的类型不 匹配,自动进行类型转换。匹配,自动进行类型转换。 492、类型转换的原则、类型转换的原则(1) 将实型数据赋给整型变量时将实型数据赋给整型变量时,舍弃实数的小数部分。舍弃实数的小数部分。如:若如:若a为为int型变量,型变量, 执行执行a=3.56后,则后,则a=3(2) 将整型数据赋给实型数据时

22、将整型数据赋给实型数据时,数值不变数值不变,但以浮点形但以浮点形式存储到变量中。式存储到变量中。 如:若如:若b为为float型变量,执行型变量,执行b=35后,则后,则b为为35.00000 (3) 整型数据赋给字符型变量时整型数据赋给字符型变量时, 只将低只将低8位原封不动地位原封不动地送到字符变量中(即截断)。送到字符变量中(即截断)。0010 00010000 0001 0010 0001如:i=289=256+33c=33 c=!50(4) 字符型数据赋给整型变量时字符型数据赋给整型变量时, 将字符数据将字符数据(8位位)放到整型变量低放到整型变量低8位中。高位中。高8位则需要依据位

23、则需要依据“符符号扩展号扩展”来决定。来决定。例1(无符号字符数据赋给整型变量) unsigned char c; int i; c=254; i=c;1111 1110c= 254i=254 0000 0000 1111 1110例2(Turbo C 系统把字符处理为带符号的) char c; int i; c=254; i=c; /* 变量c 以整数形式输出为-2 */1111 1110c= 254i=-2 1111 1111 1111 111051(5) 将带符号数据赋给长度相同的无符号型变量,将带符号数据赋给长度相同的无符号型变量, 原样照赋。原样照赋。(6)double 赋给赋给 f

24、loat 时,截取前面时,截取前面7位有效数字。位有效数字。52例3:(带符号int型数据赋给long型变量) int a; long b; a=254; b=a;0000 0000 0000 0000 0000 0000 1111 1110a=254 0000 0000 1111 1110b=254 例4:(带符号int型数据赋给long型变量) int a; long b; a=-2; b=a;1111 1111 1111 1111 1000 0000 1111 1110a=-2 1111 1111 1111 1110b=-2 53例5: (无符号int型数据赋给long型变量) unsi

25、gned int a; long b; a=65534; b=a;0000 0000 0000 0000 1111 1111 1111 1110a=65534 1111 1111 1111 1110b=65534 例6: (有符号数据赋给无符号变量) int a; unsigned int b; a=-2; b=a;1111 1111 1111 1110a=-2 1111 1111 1111 1110b=65534 54P66 (3.11) 写出下面赋值的结果。格中写了数值的是要将它赋给其它类型的变量,将所有空格添上赋值后的数值。int 9 9 100 76 53 68 42 -1char c

26、 d L 5 D * X unsigned int 99 100 76 53 68 42 65535float 99.000000 100.000000 76.000000 53.65 68.000000 42.000000 65535.000000long int 99 100 76 53 68 42 6553555v总的结论:低精度的数据赋值给高精度的变量,其精度将保持;高精度的数据赋值给低精度的变量,其精度将降低,有时甚至可能出错。563、复合赋值运算符、复合赋值运算符(Compound assignment operators)复合赋值运算符:在赋值符“=”之前加上其它运算符共有10种

27、复合赋值运算符 += ,-=, ,&, =, |= (位运算)(位运算)例如:a+=3 a=a+3 x*=y+3 x=x*(y+3) x/=y x=x/y57普通赋值运算符简洁赋值运算符a=a+3 a+=3a=a-3 a-=3a=a*(n+1) a*=n+1a=a/(n+1)a/=n+1a=a%ba%=ba=b=c=6a=(b=4)+(c=6)a=(b=4)*(c=6)584、 赋值表达式赋值表达式(Assignment expressions)定义:由赋值运算符将一个变量和一个表达式连接起来的式子式子。形式:变量变量 = 表达式表达式结合方向:由右向左结合方向:由右向左说明:赋值表达式的值为

28、被赋值的变量的值。其中赋值表达式的值为被赋值的变量的值。其中“表达式表达式”又可以是一个赋值表达式。又可以是一个赋值表达式。例如:a=b=c=6 a=(b=4)+(c=6) a=(b=4)*(c=6)x=-b/(2*a)y1=-x+(dt=sqrt(b*b-4*a*c) y2=-x-dt59v练习:写出顺序执行下列表达式运算后的x值: 1. x=a=b=10 2. x=25%(c=3) X=10X=1赋值表达式中可以包含复合赋值运算符 例如:若a=12,计算表达式a+=a=a*a运算后a的值 第一步:aa*a a=a-a*a=12-12*12=-132 第二步:a+=-132 a=a+(-13

29、2)=-264错误理解:a=a+(a=a*a)=a+a-a*a=-120603.10 3.10 逗号运算符和逗号表达式逗号运算符和逗号表达式1.逗号运算符逗号运算符:即“,”优先级优先级:为所有运算符中级别最低的。2.逗号表达式逗号表达式形式:表达式表达式1 1,表达式,表达式2 2,表达式,表达式n n求解过程:顺次求解表达式1,表达式2,最后求解表达式n,逗号表达式的值为表达式表达式n n的值。的值。例如:a=3*5,a*4a=3*5,a*4 a=3*5,a*4,a+5a=3*5,a*4,a+5 x=(a=4%3 , a+1, a*10)a=2,b=3,c=4;60201061例如:v=(

30、x=10,y=5,x+y);The value of v is 15.应用:1)在for循环中:for(n=1,m=10; n=m; n+,m+)2)在while循环中:while(c=getchar(), c!=0)3)数值交换:t=x, x=y, y=t;要牢记v不要使用关键词或者系统库函数的名字作为标识符(变量名或函数名);v不要使用只差一、两个字符的变量名;v每个变量要在程序或函数开始处声明其类型;v在程序中被使用前,所有变量必须赋值;v不要在#define命令的结尾处加“;”;v不要在#和define之间加空格;vC对于数据的溢出不给任何警告或指示,只会给出错误的结果。必须小心定义数

31、据的类型;62要牢记v小心使用自增和自减运算符,在使用前了解前置(如+i)和后置(如i+)的差别;v在计算顺序混乱的地方,小括号的使用可使它们变清晰;v在赋值以前,表达式的类型被转换成与等号左边的变量类型一致。注意转换时可能的数据损失;v所有的数学函数的参数(自变量)和返回值(计算值)均为double类型(例如y=sin(x)中的x和y);v不要对浮点数变量使用自增和自减运算符。6364第三章 作业(所有程序均需上机调试,正确后方能提交)3_1 判断以下程序段有否错误,写出正确的程序段,并上机调试验证你的程序。(提交修改后的源程序)#include;void main()float x=3.1

32、415;int y ,z,student_num=196;PRINTF(“Hello!n”);printf(“the student_number is:d%n”,num);printf(“the student_number is:%Dn”, student_num);printf(“x=%dn”,x);printf(“y=%fn”,y);z=3/2;printf(“z=%dn”,z);/说明:”%d”是输入、输出整形数据的格式, ”%f”是输入、输出实形数据的格式,”n”是换行的格式653_2 在计算机屏幕上输出一段文字:John said to his brother:(换行) (空两格

33、)”Lets have a rest!”并在此段文字前后各空两行。 (提交源程序)3_3 习题3.9,先写出运行结果,然后编制程序验证之。 (提交源程序)3_4 习题3.10 ,先写出运行结果,然后编制程序验证之。 3_5 习题3.12,先写出运行结果,然后编制程序验证之。 (提交源程序,注意每次计算之前,将a的值复原为12)663_6.判断下列陈述是对还是错?判断下列陈述是对还是错?a)所有运算符具有相同的优先级.b)求模运算符% 只能用于整型数c)运算符= 和 !=具有相同的优先级.d)在 C中,如果一个数据项为零,它就被认为是逻辑假.e)表达式!(xy等效f)一个一元表达式由一个没有运算

34、符的操作数组成.g)结合性被用来决定具有几个表达式的运算哪个优先执行.h)表达式语句用句点“.”结尾结尾i)对于混合表达式运算,隐式类型转换是自动进行的j)强制类型转换可以用于改变表达式k)小括号可以用于改变表达式以下为自我测试题,做完之后自己对答案以下为自我测试题,做完之后自己对答案673_7.下列哪些表达式是有效的下列哪些表达式是有效的? 如果有效,给出如果有效,给出表达式的值表达式的值; 否则说明原因否则说明原因.a) 25/3%2b)+9/4+5c)7.5%3d)14%3+7%2e) -14%3 f)15.25+-5.0 g)(5/3)*3+5%3h)21%(int)4.5683_8.

35、 假设有假设有:int a=10,b=20,c;判断下列表达式是对还是错判断下列表达式是对还是错.a) 语句a=+10,是有效的;b) 表达式a+4/6*6/2 的值为11;c)表达式b+3/2*2/3的值为20;d) 语句a+=b; 将30赋给a,将20赋给b;e)语句+a+; 运算的结果为a=12;f)语句a/=b; 将值0.5赋给a ;3_9. 找出下列运算式中不必要的小括号,给出其精炼的表找出下列运算式中不必要的小括号,给出其精炼的表达式达式a)(x-(y/5)+z)%8)+25b) (x-y)*p)+qc) (m*n)+(-x/y)d) x/(3*y)69答案3_1 ErrorCor

36、rectSentence1:;(no semicolon sign)Sentence4:PRINTFprintfSentence5:d%dSentence6:%D%dSentence7:实型数用整型格式输出,错误Sentence8:整型数用实型格式输出,错误Sentence9 :两个整数相除得到整数,小数部分被截尾Sentence10 :实数的小数部分被截尾,精度降低3_6.a) Falseb) Truec) Trued) Truee) Truef) Falseg) Trueh) Falsei) Truej) Truek) True703_7.a) 0b)7c) 无效, 实数不能用%运算d)3e) -2f)无效, -5.0 应该有小括号g)5h)13_8.a) True b) Falsec) Trued) Falsee) True f) False3_9.a) (x-y/5+z)%8+25b) (x-y)*p+qc) m*n-x/yd) x/(3*y)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号