




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章数据类型、运算符和表达式2第二章
数据类型、运算符和表达式教学目标:了解C语言的数据类型理解常量和变量的概念熟悉C语言中各种运算符和表达式的计算教学重点与难点:熟悉C语言中各种运算符和表达式的计算32.1数据类型数据以一种特定的形式存在,计算机把数据存放在内存中,不同的数据占用不同的内存单元。因此计算机要处理不同种类的数据,即数据类型。C语言中的数据类型如图2.1所示。图2.1C语言的数据类型
42.1数据类型1.基本类型基本类型是C语言中的基础类型,其中包括整型、实型和字符型。2.构造类型构造类型是由多种类型组合而成的新类型,其中每一组成部分称为构造类型的成员。构造类型包括数组类型、结构体类型、共用体类型和枚举类型。3.指针类型指针类型是一种特殊的数据类型,指针的值表示某个内存的地址。
52.1数据类型4.空类型
空类型的关键字是void,可将函数返回值的类型声明为空,代表该函数没有返回值。
不同的数据类型有各自的类型关键字、长度和取值范围,如表2.1所示。62.1数据类型表2.1数据类型描述表数据类型类型关键字字节取值范围整型int4-2147483648~2147483647无符号整型unsigned[int]40~4294967295有符号整型signedint4-2147483648~2147483647短整型short[int]2-32768~32767无符号短整型unsignedshort[int]20~65535有符号短整型signedshort[int]2-32768~32767长整型long[int]4-2147483648~2147483647无符号长整型unsignedlong[int]40~4294967295有符号长整型signedlong[int]4-2147483648~2147483647单精度型float41.2×10-38~3.4×1038双精度型double82.3×10-308~1.7×10308字符型char1-128~127无符号字符型unsignedchar10~255有符号字符型signedchar1-128~12772.2常量常量是指在程序运行过程中其值不能改变的量。反之,在程序运行过程中其值可以变化的量称为变量。根据类型的不同,常量可分为整型常量、实型常量、字符型常量和符号常量。除符号常量外,定义常量其语法的一般格式为:const数据类型常量名=常量值;例如:constfloatPAI=3.1415926;注意:常量必须在定义的同时就完成赋值。82.1.1整型常量整型常量就是整型常数,有三种表示形式:(1)十进制整数:没有前缀,由数字0~9组成,如123,-200。(2)八进制整数:以数字0作为前缀,其余各位由数字0~7组成,如0234、0100、016。(3)十六进制整数:以0X(或0x)为前缀,其余各位由数字0~9、字母a~f或A~F组成,如0x789、0X135、0x1af。2.2.1整型常量92.2.2实型常量2.2.2实型常量实型常量也称为浮点型常量,由整数部分和小数部分组成,实型常量有两种表现形式。(1)小数形式:由符号、整数部分、小数点和小数部分组成。小数点必须有,并且不能省略。如1.2、0.56、-98.75。(2)指数形式:实数有时较大或较小,此时可以采用指数形式来表示。在C语言中,用字母E或e来表示以10为底的幂数。如1.23×102可记为1.23E2,57.896×10-3可记为57.896E-3。102.2.3字符型常量2.2.3字符型常量
字符型常量分为两种,一种是字符常量,另一种是字符串常量。1.字符常量字符常量通常是用单引号括起来的单个字符。字符常量的值就是该字符对应的ASCII码值,可以和数值型数据一起参加算术运算。例如,小写字母'a'对应的ASCII码是97,可以进行简单的计算。除了简单字符常量,还有一种特殊的字符常量,称为转义字符。转义字符以反斜杠“\”开头,后面跟一个或几个字符,表示不能从键盘输入的功能字符或有特殊含义的字符,如‘\n’表示换行,‘\r’表示回车。常用的转义字符如表2.2所示。112.2.3字符型常量转义字符含义\n换行,将当前光标移到下一行行首\t横向跳到下一个制表位置,一个制表区占8列\a报警\r回车\\反斜杠\'单引号\''双引号\?问号\b退格\f换页\ddd1~3位八进制数所代表的字符\xhh1~2位十六进制数所代表的字符表2.2转义字符及其含义122.2.3字符型常量2.字符串常量字符串常量是用双引号括起来的若干字符序列。例如,‘’hello‘’、‘’IamaChinese.‘’等如果字符串中一个字符也没有,称为空串,此时字符串的长度为0,记为''''。C语言规定在存储字符串常量时,系统会自动在字符串的末尾加一个‘\0’作为字符串的结束标志。例如,字符串''IamaChinese.''一共有15个字符,其中空格和“.”也各算一个字符,因此该字符串在内存中占16个字节的存储空间,其存储情况如图2.2所示。I
am
a
Chinese.\0图2.2字符串在内存中的存储132.2.3字符型常量3.字符常量和字符串常量的区别
(1)定界符不同:字符常量使用单引号定界,字符串常量使用双引号定界。
(2)长度不同:字符常量的长度为1,只占一个字节的存储空间;字符串常量的长度可以为0,也可以是某个具体的整数值。
(3)存储方式不同:字符常量中存储的是该字符的ASCII码值;而在字符串常量中不仅存储有效字符,还要存储字符串的结束标志‘\0’。
(4)参加的运算不同:字符串常量不能参加数值运算;而字符常量则可以参与混合运算。142.2.3字符型常量【例2.1】转义字符的应用。程序如下:#include<stdio.h>main(){printf("a□b\tcd□e\n");/*□代表空格*/printf("fg\th□k\rpx\by□z\n");}程序运行结果:a□bcd□epy□zh□k152.2.4符号常量2.2.4符号常量符号常量是使用一个标识符来代替常量,一般用大写字母表示,与小写字母表示的变量名进行区分。符号常量的值在其作用域内不能改变,也不能被重新赋值。符号常量在使用前必须先定义,其语法的一般格式为:#define<符号常量名><常量值>例如:#definePI3.1415926162.2.4符号常量【例2.2】符号常量的使用。计算半径为5的圆的周长。程序如下:#include<stdio.h>#definePI3.1415926/*定义PI符号常量*/main(){floatr,l;r=5.0;l=2*PI*r;/*符号常量PI代替常量3.1415926*/printf("圆的周长:%f\n",l);}程序运行结果:圆的周长:31.415926172.3变量2.3.1变量的声明变量是指在程序运行过程中其值可以改变的量。每个变量都有自己的名称,并且在内存中占用一定的存储空间。声明变量,其语法的一般格式为:数据类型变量名1,变量名2,变量名3,……;例如:inta,b,c;/*定义整型变量a、b、c*/doubles,t;/*定义双精度型变量s、t*/charch;/*定义字符型变量ch*/182.3.2变量的初始化
定义变量的同时,对变量赋初值即称为变量初始化,其语法的一般格式为:数据类型变量名1=初值1,变量名2=初值2,……;例如:inta=1,b=2,c=3;注意:(1)变量的初始化,也可先声明一个变量,然后赋初值。例如:inta;a=10;(2)在定义中不能连续赋值,如inta=b=c=5;是错误的。(3)允许对部分变量赋初值,如intx,y=7;是合法的。192.3.2变量的初始化
【例2.3】变量的初始化。程序如下:#include<stdio.h>main(){charch1='a',ch2='b';intt1=3,t2;t2=ch1+t1;printf("ch1=%c,ch2=%c,t2=%c\n",ch1,ch2,t2);/*以字符形式输出*/printf("ch1=%d,ch2=%d,t2=%d\n",ch1,ch2,t2);/*以数值形式输出*/}程序运行结果:ch1=a,ch2=b,t2=dch1=97,ch2=98,t2=100202.4运算符和表达式C语言中的运算符按照其作用分为算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符、逗号运算符和位运算符;按照操作数的个数可分为单目运算符、双目运算符和三目运算符。表达式是将运算符和操作数结合在一起的符合C语言语法规则的式子。212.4.1运算符的优先级及结合性2.4.1运算符的优先级及结合性在表达式中,按照一定的运算规则计算表达式的值。运算规则与表达式中运算符的优先级及结合性有关。运算符的优先级由高到低排列,1级最高,15级最低,同一方格内的运算符优先级相同,如表2.3所示。计算表达式时,根据运算符的优先级,优先级高的先进行运算。结合性指同一表达式中,运算符优先级相同时所遵循的运算顺序。结合性分为左结合和右结合,左结合即从左向右运算;反之,右结合即从右向左运算。222.4.1运算符的优先级及结合性优先级运算符功能结合性操作数个数1(最高)()[]→.括号下标运算符指向结构体成员运算符结构体成员运算符自左向右
2!~++,---*&sizeof逻辑非运算符按位取反运算符自增、自减运算符负号运算符指针运算符地址运算符字节长度运算符自右向左单目运算符3*,/,%乘、除、求余运算符自左向右双目运算符4+,-加法、减法运算符自左向右双目运算符5<<,>>左移位、右移位运算符自左向右双目运算符6>,>=,<,<=关系运算符自左向右双目运算符7==,!=等于、不等于运算符自左向右双目运算符8&按位与运算符自左向右双目运算符9^按位异或运算符自左向右双目运算符10|按位或运算符自左向右双目运算符11&&逻辑与运算符自左向右双目运算符12||逻辑或运算符自左向右双目运算符13?:条件运算符自右向左三目运算符14=,+=,-=,*=,/=,&=,>>=,<<=,^=,!=赋值运算符自右向左双目运算符15(最低),逗号运算符自左向右
232.4.2算术运算符和算术表达式1.算术运算符算术运算符包括两个单目运算符,即正和负;五个双目运算符,加法(+)、减法(-)、乘法(*)、除法(/)和求余(%),如表2.4所示。运算符功能操作数个数+取正单目运算符-取负单目运算符*乘法双目运算符/除法双目运算符%求余(取模)双目运算符+加法双目运算符-减法双目运算符表2.4算术运算符242.4.2算术运算符和算术表达式2.算术表达式用算术运算符和操作数结合在一起的符合C语言语法规则的式子,称为算术表达式。例如,5*4-2、a+b+c、x*y-6等。算术表达式计算时遵循以下规则:(1) 按照运算符优先级高低次序计算,*、/、%的优先级高于+、-。例如,先乘除后加减。(2) 当算术运算符优先级相同时,结合方向为“从左至右”,即按照从左到右的顺序依次进行运算。252.4.2算术运算符和算术表达式3.自增、自减运算符单目运算符,具有右结合性。(1) 前置运算:++变量、--变量先增减,后运算。即先将变量自身加1(或减1),再参加其他运算。(2) 后置运算:变量++、变量--先运算,后增减。即先参加其他运算,再将变量自身加1(或减1)。例如:如果i=1,则x1=++i;/*先i自身加1变为2,再将2赋值给x1,x1的值为2*/x2=i++;/*先将i的值赋值给x2,x2变为1,然后i自身加1变为2*/262.4.2算术运算符和算术表达式【例2.4】自增自减运算。程序如下:#include<stdio.h>main(){inti=100;printf("%d\n",i);printf("%d\n",++i);printf("%d\n",i--);printf("%d\n",i);}程序运行结果:100101101100注意:(1)自增自减运算只能用于变量,不能用于常量或表达式。(2)尽量避免连续使用同一变量进行自增或自减运算。(3)适当使用圆括号,以免产生二义性。如:i+++j形式可理解为(i++)+j,亦可理解为i+(++j),因此可通过加圆括号,防止歧义。2.4.2算术运算符和算术表达式282.4.3关系运算符和关系表达式1.关系运算符C语言中关系运算符均为双目运算符,包含6种:>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、==(等于)和!=(不等于)。关系运算符优先级由高到低依次是:(>、<、>=、<=、)→(==、!=)。其中,前4个优先级相同,后2个相同,前4个优先级高于后2个。另外,所有关系运算符的优先级低于算术运算符。292.4.3关系运算符和关系表达式2.关系表达式在表达式中使用关系运算符,称为关系表达式。例如:a>b、a+b<=c关系表达式的结果是一个逻辑值,即真或假。在C语言中用整数“1”表示逻辑真,“0”表示逻辑假。例如:1<2为真,结果为1;7>=8为假,结果为0。302.4.4逻辑运算符和逻辑表达式
1.逻辑运算符
逻辑运算符有3个,分别是:
&&:逻辑与,双目运算符,并且的含义。||:逻辑或,双目运算符,或者的含义。!:逻辑非,单目运算符,否定的含义。
逻辑运算符的优先级:逻辑非“!”最高,其次是逻辑与“&&”,逻辑或“||”最低。
与前面介绍的运算符优先级由高到低依次是!(逻辑非)>算术运算符>关系运算符>&&(逻辑与)>||(逻辑或)。312.4.4逻辑运算符和逻辑表达式&&(逻辑与):两个操作数都为真时,结果为真;只要有一个为假,结果为假。(2)||(逻辑或):两个操作数都为假时,结果为假;只要有一个为真,结果为真。(3)!(逻辑非):操作数为真时,结果为假;反之,操作数为假时,结果为真。322.4.4逻辑运算符和逻辑表达式2.逻辑表达式用逻辑运算符将一个或多个操作数连接起来,符合C语言语法规则的式子,称为逻辑表达式。逻辑表达式的结果也是一个逻辑值,即真或假。思考:为了判断字符变量ch的值是字母,表达式应该如何书写?关于逻辑表达式进行运算时的几点说明:(1) 对于逻辑与运算,如果第一个操作数为“假”,其他操作数不用判断,结果为假。(2)对于逻辑或运算,如果第一个操作数为“真”,其他操作数不用判断,结果为真。例如,假设inta=1,b=2,c=3,d=4;计算表达式“(a>b)&&(c<d)”时,因为“a>b”的值为假,对于逻辑与“&&”运算,整个表达式的结果为假,第二个操作数“c<d”根本不必进行计算。332.4.5赋值运算符和赋值表达式1.赋值运算赋值运算符,即“=”,其功能是将赋值号右边表达式的值赋值给左边的变量。其语法的一般格式为:变量=赋值表达式;在C语言中,赋值运算符“=”前面加上一个双目运算符(算术运算符或位运算符)可构成复合赋值运算符。如表2.6所示。
复合赋值运算符语法的一般格式为:变量双目运算符=赋值表达式;等价于:变量=变量双目运算符赋值表达式;342.4.5赋值运算符和赋值表达式复合赋值运算符表达式举例等价于+=x+=yx=x+y-=x-=yx=x-y*=x*=yx=x*y/=x/=yx=x/y%=x%=yx=x%y表2.6复合赋值运算符352.4.5赋值运算符和赋值表达式2.赋值表达式用赋值运算符或复合赋值运算符将一个变量和一个表达式连接起来的式子,称为赋值表达式。其语法的一般格式为:变量
赋值运算符
表达式关于赋值表达式的几点说明:(1) 赋值运算符左边的操作数只能是变量,不能是常量或表达式。(2) 当表达式值的类型与变量类型不一致时,系统自动将表达式的值转换成被赋值变量的数据类型后再赋值给变量。(3) 赋值运算符的优先级在C语言的所有运算符中仅高于逗号运算符,结合性为自右至左。(4) 对于复合赋值运算符时,右边的表达式要作为一个整体与左边的变量进行运算。2.4.6条件运算符和条件表达式36条件运算符“?:”是C语言中唯一的一个三目运算符。由条件运算符和表达式组成的式子称为条件表达式。其语法的一般格式为:表达式1?表达式2:表达式3运算规则:计算“表达式1”的值,如果“表达式1”的值为真(非0),则运算结果等于“表达式2”的值;如果“表达式1”的值为假(0),则运算结果等于“表达式3”的值。注意:表达式1、表达式2和表达式3的类型可以各不相同,但“表达式1”通常为关系表达式或逻辑表达式。【例2.5】假设a=1,b=2.0,则:a==1?a:-a/*结果为1*/(b<0)?(b=-2):(b=5) /*结果为5*/(a>1)?((b==1.0)?3:1):((b>=1)?-1:1)/*结果为-1*/2.4.7
逗号运算符和逗号表达式37逗号运算符“,”可以将多个表达式连接起来构成逗号表达式。其语法的一般格式为:表达式1,表达式2,……表达式n运算规则:从左到右依次计算各表达式的值,整个逗号表达式的值为最后一个表达式n的值。例如:假设a是int型变量,其初值为5,则逗号表达式“a+5,5*4,a+6”的值为11。如果改写成(a=a+5,5*4),a+6),则a的值为多少呢?2.4.8
位运算符38C语言提供了6种位运算符,如表2.7所示。对于位运算,操作数需要先转换为二进制,然后再进行按位运算。位运算符名称举例含义&按位与a&ba和b操作数对应的二进制位做与运算,两者对应位均为1时才为1,否则为0|按位或a|ba和b操作数对应的二进制位做或运算,两者对应位均为0时才为0,否则为1^按位异或a^ba和b操作数对应的二进制位做异或运算,两者对应位相同时为0,不同时为1~按位取反~aa操作数对应的二进制位做按位取反运算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【2025年存储芯片发展趋势:AI驱动市场需求激增 价格上行周期开启】
- 预制梁板施工方案
- 智能交通系统施工方案
- 第08讲 八上古诗词【知识精研】中考语文一轮复习(广东专用)
- 吉林清淤固化施工方案
- 东莞排水带施工方案
- 2025年增城临聘笔试试题及答案
- 2025年往年音乐学考试题及答案
- 2025年排序中考试题语文及答案
- 低碳行动方案设计
- 2025年政府预算支出经济分类科目说明表
- 手术室剖宫产护理教学查房范文
- 【MOOC】机器学习-北京理工大学 中国大学慕课MOOC答案
- 《森林防火安全教育》主题班会 课件
- 《类风湿专病数据集技术规范》 编制说明
- 麻醉机故障应急预案演练
- 2024年同等学力申硕英语考试真题
- 2024-2030年实验室自动进样器行业市场现状供需分析及投资评估规划分析研究报告
- 专题07说明文阅读(中考常考热点题型)20篇(原卷版)-2023-2024学年九年级语文上学期期末(一模)真题分类汇编
- 风险投资中的人工智能应用
- DB5204T 10-2024 农产品地理标志质量要求 紫云花猪
评论
0/150
提交评论