第03章 运算符和表达式_第1页
第03章 运算符和表达式_第2页
第03章 运算符和表达式_第3页
第03章 运算符和表达式_第4页
第03章 运算符和表达式_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

第三章数据类型、运算符与表达式C的数据类型常量与变量整型数据实型数据字符型数据变量赋初值各类数据型数据间的混合运算算术运算符和算术表达式赋值运算符和赋值表达式逗号运算符和逗号表达式关系运算符和关系表达式逻辑运算符和逻辑表达式位运算符和位运算1§3.0预备知识计算机中数的表示及进制转换数码、基与权数码:表示数的符号基:数码的个数权:每一位所具有的值数制:二进制、八进制、十进制、十六进制各种进制之间的转换非十进制(二、八、十六进制)转换成十进制方法:按权相加十进制转换成非十进制(二、八、十六进制)方法:除基反序取余(整数部分)2二进制与八进制之间的转换二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制八进制转换成二进制:用3位二进制数代替每一位八进制数二进制与十六进制之间的转换二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制十六进制转换成二进制:用4位二进制数代替每一位十六进制数3字节和位内存以字节为单元组成每个字节有一个地址一个字节一般由8个二进制位组成每个二进位的值是0或1数值的表示方法——原码、反码和补码原码:最高位为符号位,其余各位为数值本身的绝对值反码:正数:反码与原码相同负数:符号位为1,其余位对原码取反补码:正数:原码、反码、补码相同负数:最高位为1,其余位为原码取反,再对整个数加14原码反码补码数的范围01111111~11111111(-127~+127)01111111~10000000(-127~+127)01111111~10000000(-128~+127)(用一字节表示数)5§3.1C语言的数据类型数据类型基本类型构造类型指针类型空类型void整型实型字符型char单精度型float数组型双精度型double结构体类型struct共用体类型union枚举类型enum有符号无符号基本整型int短整型short长整型long基本整型unsignedint短整型unsignedshort长整型unsignedlong自定义类型typedef数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作6§3.2常量与变量一、标识符1、定义:可用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。2、命名规则:

①由字母、数字、下划线组成

②以字母或下划线打头③区分大小写④命名尽量做到“见名知义”⑤TurboC允许标识符最大长度32个字符,建意不超过8个字符⑥不允许和关键字相同7

二、常量1、常量:在程序运行过程中,值不变的量。2、直接常量:即常数。如35.1、1、2、35、‘a’。可以分为实型、整型、字符型。3、符号常量:在一个程序中指定用一个符号代表一个常量。

如在程序的开头有如下定义:

#definePI3.1415926

则在整个程序中可用“PI”代替3.1415926进行运算8例1:#definePRICE30main(){

intnum,total; num=10; total=num*PRICE;

printf("total=%d",total);}92.3变量概念:其值可以改变的量变量名与变量值、变量地址变量定义的一般格式:

数据类型

变量1[,变量2,…,变量n];<>变量初始化:定义时赋初值例:

inta,b,c;floatdata;决定分配字节数和数的表示范围合法标识符例:

inta=2,b,c=4;floatdata=3.67;charch=‘A’;

intx=1,y=1,z=1;

intx=y=z=1;变量的使用:先定义,后使用变量定义位置:一般放在函数开头main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;

printf(“data=%f\n”,data);}变量定义可执行语句main(){inta,b=2;a=1;

floatdata;data=(a+b)*1.2;

printf(“data=%f\n”,data);}语言程序设计第二章数据描述C12a变量名(符号地址)变量值存储单元(物理地址)Eg:Inta;10

|

&a2500H |——————

2501H |----1250-----a=1250&b2502H |—————— 2503H |---------

2504H |----123.67-----b=123.67 2505H |----------

2506H |——————

变量名、变量值、变量地址间的关系地址、变量名和变量值区别举例如:

shortinta=1250;floatb=123.67;1250a变量名(符号地址)变量值存储单元(物理地址)变量的属性:11

一、整型常量:有三种表示形式1、十进数形式:1、98、3452、八进数形式:以0开头的数字。01、0763、十六进数形式:以0x开头的数字。0x3F、0x765§3.3整型数据12

整数的不同进制数表示及转换。main(){

printf("%d%x%o\n",125,125,125);

printf("%d%x%o\n",045,045,045);

printf("%d%x%o\n",0x32,0x32,0x32);}执行结果:1257d17537254550326213二、整型变量:(有符号和无符号)类型有符号无符号基本型(简称整型)[signed]

intunsignedint

短整型short或shortintunsignedshort

长整型long或longintunsignedlong说明:无符号型加unsigned修饰符表示,只表示正数,无符号位。各类型数据所占宽度和范围见书43页表3.114三、整型变量的定义:1、变量的定义一般在函数的开头部分;2、一条定义语句可定义多个同种类型的变量,各变量之间用逗号分隔。

3、变量类型符与其后所定义变量之间用空格分隔。

如:

inta;unsignedshortb,c;longd;15一、实型常量:实数又称为浮点数,有两种表示形式1、十进制数形式:由数字和小数点组成(必须有小数点)

如:43.2、89.、.862、指数形式:即科学计数法。如:45e2相当于45×102、34e5相当于34×105。字母e前必须有数字,字母e后必须是整数。“规范化指数形式”:在指数形式中,小数部分中的小数点前有且只有一位非零数字。§3.4实型数据16二、实型变量(分为三种类型)1、单精度型(float):字节数:4,有效位72、双精度型(double):字节数:8,有效位153、长双精度型(longdouble):字节数:8,有效位18

实型常量不分单、双精度。可任意赋值,但有效数位不同。三、实型数据的舍入误差四、存储方式:按指数形式,eg7.45623在内存中的存放形式+(数符).745623+(指数数符)117§3.5字符型数据一、字符型常量:用一对单引号括起来的一个字符。

二、字符常量的分类:1、普通字符:如:‘1’、‘a’、‘A’、‘*’2、转义字符:也称控制字符,如’\n’。说明:.用反斜杠开头后面跟一个字母代表一个控制字符。.反斜杠后面的字符失去原来的含义18字符形式功能\n回车换行符

\t横向跳格:跳到下一个输出区(每一输出区为8个字符位置)\b退格

\r回车不换行(回到本行起始字符位置)\f走纸换页

\\反斜杠字符\\'单引号(撇号)'\ddd1~3位八进制数所代表的字符。如\101表示'A'\xhh1~2位十六进制数所代表的字符。如\x40表示'A'常用转义字符形式及功能见书P4019

3、字符常量定义:用单引号括起来的单个普通字符或转义字符.

字符常量的值:该字符的ASCII码值例:‘A’-------’\101’-------’\x41’--------65<如‘A’——65,‘a’——97,‘0’——48,‘\n’——10如‘a’‘A’‘?’‘\n’‘\101’转义字符:反斜线后面跟一个字符或一个代码值表示例转义字符举例(ch2_001.c,ch2_004.c)

main(){printf("\101\x42C\n");

printf("Isay:\"Howareyou?\"\n");

printf("\\CProgram\\\n");

printf("Turbo\'C\'");}运行结果:(屏幕显示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’例main(){printf(“Y\b=\n”);}运行结果:屏幕显示:=打印机输出:¥字符常量、整型常量可通用;main(){charc1,c2;/*定义两个字符型变量*/c1=‘a’;c2=‘b’;/*赋字符型常量*/c1=c1-32;c2=c2-32;/*分别减去32*/

printf(“%c%d”,c1,c2);/*输出两个字符型数据*/}输出:A66输出:A6620一、赋值:向变量所代表的存储单元传送数据的操作,用“=”表示二、赋值的一般形式:变量=表达式;三、可以先定义变量,后赋值;也可以在定义变量时直接赋值四、对几个变量同时赋值:1、inta,b,c=5;2、inta=3,b=3,c=3;3、inta;a=3;4、inta,b,c;c=5;§3.6变量赋初值2、inta=b=c=3;21§3.7各类型数值数据间的混合运算一、转换原因:不同类型之间进行运算,必须先转换为同一类型二、转换的类型:实型、整型、字符型三、转换规则:见下页22doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换例charch;

inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/l例inti;floatf;doubled;longl;<>23§3.8算术运算符和算术表达式(一)按功能划分:1、算术运算符:+、-、*、/、%2、关系运算符:>、<、==、>=、<=、!=3、逻辑运算符:!、&&、||4、位运算符:<<、>>、~、^、|、&5、赋值运算符:=、+=、-=、*=、/=6、条件运算符:?,:

7、逗号运算符:,8、指针运算符:*、&

9、求字节数运算符:sizeof10、强制类型转换运算符:(类型名)11、分量运算符:·、->

12、下标运算符:[]13、其它:函数运算符一、C运算符分类(见附录D,P378)24(二)按所需操作数个数划分1、单目运算符

2、双目运算符

3、三目运算符学习运算符应注意:运算符功能与运算量关系要求运算量个数要求运算量类型运算符优先级别结合方向(解释见下页)结果的类型25运算符的优先级与结合性C语言规定了运算符的优先级和结合性。结合性:当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。

自左至右的结合方向,称为左结合性。反之,称为右结合性。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。26二、算术运算符和表达式(书P53)1、基本算术运算符:+

-

*/%结合方向:从左向右优先级:-

+(单目)---->*/%----->+-

(2)(3)(4)

说明:“-”和“+”可为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据例5/2=-5/2.0=例5%2=-5%2=1%10=

5%1=5.5%2例5/2=2

-5/2.0=-2.5例5%2=1

-5%2=-11%10=

1

5%1=

05.5%2

()272、强制类型转换(显式转换)一般形式:(类型名)(表达式)例

(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变28例:

main(){floatx;

inti;x=3.6;i=(int)x;

printf(“x=%f,i=%d”,x,i);}运行结果如下:x=3.600000,i=3精度损失问题293、自增、自减运算符++--作用:使变量值加1或减1,常用于循环控制变量加(或减)1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)例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=4303、自增、自减运算符++--作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)说明:++--不能用于常量和表达式,如5++,(a+b)++++--结合方向:自右向左优先级:--++-------->*/%----->+-

(2)(3)(4)例-i++-(i++)i=3;printf(“%d”,-i++);//-3例-i++i=3;printf(“%d”,-i++);31

(1)避免连续使用一变量进行自增或自减运算

如:i=3;k=(i++)+(i++)+(i++)k值等于9。

k=(++i)+(++i)+(++i)k值等于18。

(2)出现多个运算符时,编译器在处理时尽可能多的(从左到右)将若干个字符组合成一个运算符。

如:i+++j;(i++)+ji+(++j)

(3)TurboC中,调用函数时,实际参数的处理顺序是从右到左。

如:i=3;

printf(“%d,%d”,i,i++);输出结果:4,3VC++6.0里结果是:3,3注意:32§3.9赋值运算符和表达式简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量复合赋值运算符种类:+=-=*=/=%=《=》=&=^=|=含义:exp1op=exp2

exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例a=3;d=func();c=d+2;33说明:结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例3=x-2*y;a+b=3;例

floatf;

inti;i=10;f=i;则

f=10.0例inti;i=2.56;//结果i=2;例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)//表达式值为5,a,b,c值为5//b=5;a=5//表达式值11,c=6,a=11//表达式值10,a=10,b=4,c=6//表达式值5,a=5,b=10,c=234说明:结合方向:自右向左优先级:12左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例:a=12;a+=a-=a*a例:inta=2;a%=4-1;a+=a*=a-=a*=3;//a=-264等价于a=a+(a=a-(a*a))//a=0等价于a=a+(a=a*(a=a-(a=a*3)))35左(变量)右(表达式)结果int

float、double舍弃小数(截断)

float、double

int

值不变

int(2字节)

unsignedchar赋给int的低8位,

高8位补0

signedchar赋给int的低8位,高8位补符号charint、short、long取低8位longint

int符号扩展intlongint截断(取低16位)longint

unsignedint

高位补0赋值时的类型转换当赋值运算符两侧的类型不同时,在赋值前要进行类型转换。转换规则如下表:36§3.10逗号运算符和表达式(补充)形式:表达式1,表达式2,……表达式n结合性:从左向右优先级:15逗号表达式的值:等于表达式n的值用途:常用于循环for语句中例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;

printf(“%d,%d,%d”,a,b,c);

printf(“%d,%d,%d”,(a,b,c),b,c);//赋值表达式,表达式值18,x=18//逗号表达式,表达式值18,x=3//1,2,3//3,2,3逗号作为分隔符37逗号运算符和表达式形式:表达式1,表达式2,……表达式n结合性:从左向右优先级:15逗号表达式的值:等于表达式n的值用途:常用于循环for语句中例:#include<stdio.h>main(){intx,y=7;floatz=4;x=(y=y+6,y/z);

printf("x=%d\n",x);}运行结果:x=338§3.11关系运算符和表达式(书P91)关系运算符种类:<<===>=>!=结合方向:自左向右优先级别:<<=>>===!=优先级6(高)优先级7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)关系表达式的值:是逻辑值“真”或“假”,用1和0表示例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c//表达式值1//表达式值1//表达式值0//d=1//f=0低于算术运算符,但高于赋值运算符。39关系运算注意:例若a=0;b=0.5;x=0.3;

则a<=x<=b的值为0例5>2>7>8在C中是允许的,值为0例inti=1,j=7,a;a=i+(j%4!=0);

则a=2例‘a’>0结果为‘A’>100结果为1040ab!a!ba&&ba||b真假真假假假真真§3.12逻辑运算符和表达式(书P92)逻辑运算符种类:!&&||逻辑运算真值表C语言中,运算量:

0表示“假”,非0表示“真”,

运算结果:0表示“假”,1表示“真”,真假假假假假真真假假真真真假真真41例a<=x&&x<=b

a>b&&x>ya==b||x==y!a||a>b优先级:结合方向:!:从右向左&&:从左向右||:从左向右//(a<=x)&&(x<=b)//(a>b)&&(x>y)//(a==b)||(x==y)//(!a)||(a>b)!(2)&&(11)||(12)高低!→算术运算→关系运算→&&→||→赋值运算42例a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&2||8<4-!0‘c’&&‘d’值为1值为0值为1值为1值为1值为1//(5>3)&&2||(8<(4-(!0)))值为1!(2)&&(11)||(12)高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右判断一个年份是否是闰年可用如下逻辑表达式:(year%4==0)&&(year%100!=0)||(year%400==0)43短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符(书P95)<>例a&&b&&c//只在a为真时,才判别b的值;只在a、b都为真时,才判别c的值例a||b||c//只在a为假时,才判别b的值;只在a、b都为假时,才判别c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//结果m=0,n=1!(2)&&(11)||(12)高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右44(补充)位运算符及位运算1.按位与──&

(1)格式:x&y

(2)规则:对应位均为1时才为1,否则为0。例如,3&9=1:0011&1001 0001=(1)10

(3)主要用途:①清零。如5&0=0②取(或保留)一个数的某(些)指定位。构造一个数与之按位与,将要取的位置1,其余位置0。45

特有的位运

温馨提示

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

评论

0/150

提交评论