第三章数据类型运算符与表达式_第1页
第三章数据类型运算符与表达式_第2页
第三章数据类型运算符与表达式_第3页
第三章数据类型运算符与表达式_第4页
第三章数据类型运算符与表达式_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

第三章数据类型运算符与表达式第一页,共三十页,2022年,8月28日第3章数据类型、运算符与表达式3.1C的数据类型1.一个C程序包括的内容程序=算法+数据结构+程序设计方法+语言工具和环境2.C的数据类型数据类型基本类型构造类型指针类型()空类型(void)字符型(char)数值类型枚举类型(enum)数组类型([])结构体类型(struct)共用体类型(union)整型(short,int,long,unsigbed)实型单精度型(float)双精度型(double)第二页,共三十页,2022年,8月28日3.2常量与变量1.常量和符号常量常量:在程序运行过程中其值不能被改变的量。例3.1定义符号常量:#definePRICE30#include"stdio.h"voidmain(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}用#

define命令定义PRICE代表常量30,则在整个程序中出现的PRICE都代表30,可以和常量一样进行运算。符号常量:标识符形式的常量(必须在程序中定义)。第三页,共三十页,2022年,8月28日2.变量在程序运行过程中其值可以被改变的量称为变量。变量名由字母、数字和下划线三种字符组成,由字母或下划线开头。如:sum,aver,class,day均为合法变量名;$123,#33,3ds均为非法变量名;而filename、filename1以及filename2表示同一个变量名。sum、Sum与SUM是三个不同的变量名。在C中,习惯用大写字母标识符号常量,用小写字母标识变量。

变量必须先定义后使用。变量一经定义,就确定了类型。注意:在C语言中对所有变量都要作强制定义变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这数据就是变量的值,在程序运行期间,这些值是可以改变的。第四页,共三十页,2022年,8月28日数据类型基本类型构造类型指针类型()空类型(void)字符型(char)数值类型枚举类型(enum)数组类型([])结构体类型(struct)共用体类型(union)整型(short,int,long,unsigbed)实型单精度型(float)双精度型(double)3.3整型数据第五页,共三十页,2022年,8月28日3.3整型数据1.整型常量整型常量即整常数。整常数有三种表示形式:十进制数如:123,-456八进制数以0开头。如:0123,-011十六进制数以0x开头。如:0x123,-0x122.整型常量的类型其值在-32768~+32767时为int型,占用2Bytes。其值在-2147483648~+214748647时为longint型,占用4Bytes。常量中无unsigned型。但非负值的整型常量可以赋值给unsigned型整型变量,只要不产生溢出。在整型常量后面跟一个字母l

或L,则认为是longint型常量。第六页,共三十页,2022年,8月28日3.整型变量1)整型变量的分类基本型以int表示。-32768~32767(-215~215-1)短整型以shortint或short表示,取值范围同int型。长整型以longint或long表示。-2147483648~2147483647(-231~231-1)无符号型用全部二进制位(bit)存放数据,不能存放负数。

unsignedint与unsignedshort:0~65535(0~216-1)

unsignedlong:0~4294967295(0~232-1)2)整型变量的定义inta,b;unsignedshortc,d;longe,f;第七页,共三十页,2022年,8月28日第八页,共三十页,2022年,8月28日第九页,共三十页,2022年,8月28日3.4实型数据1.实型常量十进制数形式:0.123、.123(小数必须有小数点)。指数形式:123e3或123E3都代表123103(E之前必须有数字,E之后指数必须为整数)。2.实型变量单精度float:占用4Bytes,7位有效数字,10–38~1038。双精度double:占用8Bytes,15/16位有效数字,10–308~10308。如:floatx,y;/只能接收7位有效数字/doublez;longdoublet;Long

double:占用16Bytes,18/19位有效数字,10–4932~104932。第十页,共三十页,2022年,8月28日3.实型数据的舍入误差因实型变量的存储单元有限,在数据有效位以外的数据将被舍去,从而产生误差。例3.4实型数据的舍入误差Main(){floata,b;a=123456.789e5;b=a+20;printf(“%f”,b);}运行结果:12345678848.000000(a和b相等)注意:应避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。第十一页,共三十页,2022年,8月28日3.5字符型数据1.字符常量字符常量是用单引号括起的1个字符。如:‘a’、‘A’、…。以“\”开头的字符序列在printf函数中控制输出格式。1到2位16进制数所代表的字符。如:‘\41’=‘A’

\xhh1到3位8进制数所代表的字符。如:‘\101’=‘A’\ddd单引号’

\’反斜杠字符\\\走纸换页

\f回车\r退格\b竖向跳格

\v横向跳格(下一个输出区<8列>)\t换行

\n第十二页,共三十页,2022年,8月28日例3.5输出格式控制在打印机上输出:fabcgdehjik在屏幕上输出:fgdehjk2.字符变量字符变量只能存放1个字符main(){printf(“abc\tde\rf\tg\n”);printf(“h\ti\b\bjk”);}charc1,c2;c1=‘a’;c2=‘b’;表示空格符第十三页,共三十页,2022年,8月28日3.字符数据在内存中的存储形式及使用方法在C中,字符型数据与整型数据可以相互赋值和运算。例3.7main(){charc1,c2;c1=‘a’;c2=‘b’;printf(“%c%c\n”,c1,c2);c1=c1–32;c2=c2–32;printf(“%c%c\n”,c1,c2);c1=97;c2=98;printf(“%c%c\n”,c1,c2);c1=c1–32;c2=c2–32;printf(“%c%c\n”,c1,c2);}输出结果:abABabAB第十四页,共三十页,2022年,8月28日4.字符串常量字符串常量是用双引号括起来的字符序列。如:“Howdoyoudo.”,“CHINA”,“a”,“$123.45”注意:

‘a’是字符常量,而“a”是字符串常量。不能将一个字符串赋给一个字符变量。字符串其内部有结束标志‘\0’,且由系统自动加上的。C中没有字符串变量,需要用字符数组存放字符串。第十五页,共三十页,2022年,8月28日3.6变量赋初值C规定,可以在定义变量的同时给变量赋初值。如:inta=3;floatf=3.56;charc=‘a’;inta,b,c=5; /

只给c赋初值

/inta=3,b=3,c=3; /

不能写成inta=b=c=3/3.7各类数值型数据间的混合运算整型、单精度型、双精度型数据可以混合运算。不同类型的数据要先转换成同一类型,然后进行运算。转换规则如图:第十六页,共三十页,2022年,8月28日注:箭头只表示转换方向,并不是依次转换。转换过程是自动完成的。10+‘a’+if-d/e运算过程为:‘a’转换成整数97与10相加,结果为107;i和f转换成double型,运算结果为double型;将107转换成double型与i和f的积相加,结果为double型;将e转换成double型,d/e的结果为double型;10+‘a’+if的结果与d/e的商相减,结果为double型。例:intI;floatf;doubled;longe;第十七页,共三十页,2022年,8月28日3.8

算术运算符和算术表达式1.C运算符简介在C中,除了控制语句和输入输出以外的基本操作都作为运算符处理。C的运算符有如下几类:算术运算符 +、–、、/、%关系运算符 >、<、>=、<=、==、!=

逻辑运算符 &&、||、!位运算符 ~,<<、>>、|、、&赋值运算符 =、+=、-=、=、/=、%=第十八页,共三十页,2022年,8月28日条件运算符 ?:逗号运算符 ,指针运算符 和&求字节数运算符 sizeof强制类型转换运算符 (类型)分量运算符 或->下标运算符 []其它 如函数调用运算符()第十九页,共三十页,2022年,8月28日C中各类运算符的优先级:初等运算符 ()、[]、单目运算符 !、+

+、–

–、+、–、(类型)算术运算符 、/、%,+、–关系运算符 <、>、<=、>=,=

=、!

=逻辑运算符 &&、¦¦条件运算符 ?:赋值运算符 =、+=、–=、=、/=、%=逗号运算符 ,高低第二十页,共三十页,2022年,8月28日2.算术运算符和算术表达式1)基本的算术运算符+、–、、/、%%为求余、模运算(%的两边必须为整型数据)其中:在除法中,整数相除取整,且大多数机器采取“向零取整”方法,即取整后向零靠拢。实数相除为double型。如:5/3=1,-5/3=-1,5/3.0=1.66666666666667。2)算术表达式和运算符的优先级与结合性算术表达式是用算术运算符和括号将运算对象(常量、变量、函数等)连接起来的、符合C语法规则的式子。C的算术运算符的结合性为“自左向右”。第二十一页,共三十页,2022年,8月28日3.强制类型转换当自动类型转换不能达到目的时,可以用强制类型转换。强制类型转换运算符可以将一个变量或一个表达式转换成所需的类型。如:(double)a将a转换成double类型(int)(x+y)将x+y的值转换成int型(float)(5%3)将5%3的值转换成float类型例3.8#include“stdio.h” voidmain() {f

loatx; inti; x=3.6;i

=(int)x;printf(“x=%f,i=%d”,x,i); }运行结果: x=3.600000,i=3第二十二页,共三十页,2022年,8月28日4.自增、自减运算符自增、自减运算符的作用是使变量的值增加1或减少1。++i,-

-

ii的值先增加(减少)1,然后再使用i。i++,i

-

-先使用i的值,然后i再增加(减少)1。注意:++和--只能用于变量,不能用于常量和表达式。++和--的结合方向“自左至右”。如:-i++相当于-(i++)。i+++j按“自左向右”的原则解释为(i++)+j,而不是i+(++j)。printf(“%d,%d”,i,i++),若“自左至右”,则为“3,3”;若“自右至左”,则为“4,3”。TurboC自右至左”原则(包括函数调用时参数表中变量的求值顺序也是如此)。

第二十三页,共三十页,2022年,8月28日例:#include“stdio.h”main(){inti=1;printf(“%d,%d,%d,%d\n”,i,i++,i++,i++);}运行结果:4,3,2,1函数调用时,函数参数的求值顺序

从右至左输出结果怎样?请思考第二十四页,共三十页,2022年,8月28日①若i=3;j=++i;则j的值为4,i的值为4。②若i=3;j=i++;则j是值为3,i的值为4。③若i=3;k=(i++)+(i++)+(i++);④若i=3;k=(++i)+(++i)+(++i);第二十五页,共三十页,2022年,8月28日3.9赋值运算符和赋值表达式

“=”的作用是将一个数据或一个表达式赋给其左边的变量。

若“=”两边的类型不一致,当同为数值型或字符型时,在赋值时要进行类型转换。1)将实型数据赋给整型变量时,舍弃实数的小数部分。2)将整型数据赋给实型变量时,其数值不变,但以浮点数形式存储。3)将字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量占2个字节,因此,将字符数据放到整型变量的低8位中。将字符处理为unsignedchar时,高8位补0。如将变量c(字符‘\376’)赋给整型变量i。将字符处理为带符号的量时,高8位全补1,称为“符号扩展”。c=‘\376’111111100000000011111110i

:111111111111111011111110c=‘\376’i

:1.概述第二十六页,共三十页,2022年,8月28日4)将带符号的int型数据赋给longint型变量时,进行符号扩展。即将数据送到低16位中,高16位补0或补1。5)将unsignedint型数据赋给longint型变量时,不存在符号扩展问题。6)将非unsigned型数据赋给unsigned型变量时,原样照赋。2.复合的赋值运算复合赋值等价于a+=3 a=a+3x=y+8x=x(y+8)不得写成:x=xy+8右边是一个整体。x%=3x=x%3x%=y+3x=x%(y+3)不得写成:x=x%y+3在C中可以使用的复合赋值运算符有:+=、-=、=、/=、%=,<<=、>>=、&=、^=、|=第二十七页,共三十页,2022年,8月28日3.赋值表达式的一般形式<变量><赋值运算符><表达式>其中:<

温馨提示

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

评论

0/150

提交评论