欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C语言数据类型、运算符与表达式.ppt

    • 资源ID:6503890       资源大小:1,007.50KB        全文页数:144页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言数据类型、运算符与表达式.ppt

    第3章 数据类型、运算符与表达式,第3章 数据类型、运算符与表达式,本章要点C语言的基本数据类型常量和变量运算符以及表达式的含义和求值常用库函数的使用,第3章 数据类型、运算符与表达式,3.1 C语言的数据类型3.2 常量3.3 简单变量3.4 库函数3.5 运算符和表达式,3.1 C语言的数据类型,整型 int 基本类型 浮点型 float、double 字符型 char 枚举类型 enum 数组类型 以 为标志 构造类型 结构体类型 struct 联合类型 union 指针类型 以*为标志 空类型 void,C语言的数据类型,3.1 C语言的数据类型,数据类型的取值范围不同的数据类型在内存中占用不同的存储空间,取值范围也不同。即使是相同类型的数据在不同种类的计算机中所占的存储空间也不完全相同。,3.2 常量,常量的定义常量又称为常数,是指在程序运行中,其值不能被改变的量。常量的类型整型常量浮点型常量字符常量字符串常量符号常量,3.2.1 整型常量,整型常量是由一个或多个数字组成,可以有正、负号,但不能有小数点。三种表示方法:十进制表示:如 123、-456八进制表示:以数字0开头。如 0123、-012十六进制表示:以0X或0 x开头。如 0 x2F、-0 x4A,3.2.1 整型常量,长整型:在数字后加上字母L或l。例如:10L是十进制的长整型常量。无符号数:在数字后加上字母U或u。例如:345U是十进制无符号整型常量。无符号长整型:L和U可以同时使用,顺序任意。例如:78LU表示无符号长整型。,3.2.1 整型常量,整数在机内的存储形式在大多数机器中,整数采用补码的形式来存储。在Turbo C中使用2个字节存储一个整数。例如,10在内存中的存放形式:-10在内存中的存放形式:,3.2.2 浮点型常量,两种表示形式:十进制数形式:由正负号、整数部分、小数点、小数部分组成。如:12.3、.34、12.、0.0指数形式:由正负号、整数部分、小数点、小数部分和字母E或e后面带正负号的整数组成。如:1.23E3 表示 1.23*103注意:(1)字母E或e之前必须有数字;(2)字母E或e之后必须是整数。例如,E5、9.8E2.3 都是不合法的。,3.2.2 浮点型常量,浮点型常量默认的是double型(双精度)。单精度:在实型常量后面加上字母F或f。例如:1.23F、3.5e2F实数在机内的存储形式实数在机内以指数形式存储。大多数C编译系统使用4个字节存储float型(单精度)数据。小数部分和指数部分分别占多少位,ANSI C没有作规定,由具体的C语言编译系统自定。,3.2.3 字符常量,字符常量是由一对单引号括起来的单个字符如:a,0,%字符常量的值是该字符对应的ASCII值,在内存中的存储形式与int型一样。注意:单引号中的字符只能是一个字符。字符0与数字0是不同的。C语言中还允许使用以反斜杠字符“”开头的转义字符表示特殊字符。,3.2.3 字符常量,常用的转义字符0 表示字符串结束(ASCII值:0)n 换行,将光标移到下一行的开头(ASCII值:10)t 水平制表(ASCII值:9)b 左退一格(ASCII值:8)r 回车,将光标移到当前行的开头(ASCII值:13)单引号(ASCII值:39)双引号(ASCII值:34)反斜线(ASCII值:92)ddd13位八进制数所代表的字符xhh12位十六进制所代表的字符,main()printf(abtcdn);printf(12345678012student x42n);,运行结果:ab cd12345678student B,【例3.1】转义字符的使用,3.2.4 字符串常量,字符串常量是由一对双引号括起来的字符序列。如:A、123.45字符串常量在内存中存储时,系统自动加上串尾标记0。若字符序列串长为N,则在内存中占用N+1个内存单元。,3.2.4 字符串常量,注意:A与A是完全不同的。A是字符串常量,占2个字节长度,在内存中的存储形式如下:A是字符常量,占1个字节长度,在内存中的存储形式如下:,A,0,A,3.2.5 符号常量,符号常量:用一个特定的标识符来代替一个常量或字符串。定义形式:#define 标识符 常量或字符串例如:#define PI 3.14159#define NULL 0优点:增强可读性增强程序的通用性和可维护性,3.2.5 符号常量,说明:#define是预编译命令,在编译之前用对应的常量或字符串替换程序中的标识符,然后再编译程序。该定义必须放在程序的开头。每一个符号常量的定义都必须独占一行,因其不是语句,故尾部不用加分号。为了与变量区分,一般符号常量用大写字母表示。,#define PI 3.14159main()float r=2,c,s;c=2*PI*r;s=PI*r*r;printf(c=%f,s=%fn,c,s);,【例3.2】计算圆的周长、面积,说明:当开始编译前,系统先将程序中所有的PI 这个符号替换成 3.14159,然后再进行编译(翻译成二进制)。,#define X 10-7main()int a;a=3*X;printf(a=%dn,a);,【例3.3】阅读程序,判断运行结果。,运行结果:a=23,3.3 简单变量,3.3.1 变量的命名变量的定义变量是指在程序运行过程中其值可以被改变的某个标识符。变量的特征:变量名、变量值、变量类型、变量的存储地址、变量的存储属性。变量名:要求取为合法的标识符。通过变量名,可以得到数据存储在内存中的地址。一般使用小写字母表示变量名。在编译连接时,编译系统会给每个变量分配一个内存单元,变量的值就存储在该内存单元中。,3.3.1 变量的命名,标识符的定义在C语言中,对变量、符号常量、函数、宏、标号、文件名等的命名的有效字符序列称为标识符。标识符的命名规则可以由字母、数字和下划线组成必须由字母或下划线开头严格区分大小写字母不能使用关键字和系统预定义标识符长度不超过8个字符,3.3.2 变量的基本数据类型,变量的数据类型每个变量都必须有一个确切的类型和具体的值。变量的数据类型决定了该变量的取值类型、取值范围、所占的内存空间的大小以及所能参加的运算方式等。无符号类型的数据在机内存储时,最高位不是符号位,而是数据本身的一部分。,3.3.3 变量的类型定义,无论使用哪一种类型的变量,都必须“先定义,后使用”。变量的定义格式:数据类型名 变量名表;例如:int i,j,k;注意:一个变量被定义后,它的值是不确定的。,多个变量之间使用逗号间隔,3.3.4 变量的初始化,变量的初始化,就是在定义变量的同时,给变量赋初值。例如:int a;/*定义变量*/a=10;/*给变量赋值*/等价于:int a=10;/*定义变量并初始化*/,整型变量,整型变量用来存放整型数据。4种类型:基本型:int,2字节短整型:short int 或 short,2字节长整型:long int 或 long,4字节无符号型:在前3种整型类型前加unsigned在存储单元中的全部二进制位都用来存放数据本身,由于其无符号位,故不能存放负数,【例3.4】输出变量的值。,main()int i,j;i=32767;j=32768;printf(i=%d,j=%dn,i,j);,运行结果:i=32767,j=-32768,说明:由于 int 型变量的取值范围为-32768 32767,因此变量 j 的赋值超出了取值范围,结果产生溢出。但系统不会报错,而是给出一个错误的结果。,为得到正确的结果,可将【例3.4】改为:,main()int i;long j;i=32767;j=32768;printf(i=%d,j=%ldn,i,j);,运行结果:i=32767,j=32768,实型变量,实型变量又称为浮点型变量,用来存储带小数点的数。3种类型:单精度型:float,4字节,有效位为67位双精度型:double,8字节,有效位为1516位长双精度型:long double,16字节,有效位为1819位,实型变量,说明:实型常量不存在单精度型和双精度型之分。当为实型变量赋予一个实型常量时,C语言根据实型变量的类型来截取常量中相应的有效数字。,【例3.5】不同类型数据的输出比较。,main()float a;double b;a=123456.111;b=123456.111;printf(a=%fnb=%fn,a,b);,运行结果:a=123456.109375b=123456.111000,说明:a 是 float 型变量,能保证的有效数据为 7 位,后面的数据都是无意义的。而 b 是double 型变量,能接收此处所有的数据。,字符型变量,字符型变量用来存储一个字符,在内存中占一个字节。字符型变量存储的是字符的ASCII码。2种类型:基本型:char无符号字符型:unsigned char,字符型变量,注意:一个字符型变量只能存放一个字符,不能存放一个字符串。字符型数据与整型数据可以通用(前提:整型数据的高位字节是0)。字符型数据也可以进行算术运算。,【例3.6】字符型数据的运算。,main()char c1,c2,c3;int d;c1=A;c2=97;c3=c1+5;d=c2-c1;printf(c1=%d,c2=%c,c3=%c,d=%dn,c1,c2,c3,d);,运行结果:c1=65,c2=a,c3=F,d=32,3.4 库函数,库函数由C语言编译系统提供的函数,称为库函数。每一种C语言编译系统都会提供一个预先编制好的函数库,这些函数可以供程序员直接调用。在ANSI C中规定了许多类型的库函数,其中最常用的有以下几种:数学函数、字符和字符串函数、输入和输出函数、动态内存分配函数。,3.4.1 库函数的使用方式,库函数的使用方式:在使用某个库函数前都应在程序开始处包含相应的头文件。#include 或#include 头文件名在程序中调用库函数。函数名(实参列表);或 变量名=函数名(实参列表);如果是调用无参函数,则没有“实参列表”。,3.4.4 格式化输入输出函数,C语言提供的格式化输入输出函数的原型在头文件stdio.h中声明。在使用时应在程序头部包含stdio.h文件。#include 或#include stdio.h说明:使用格式化输入输出函数时可以省略#include命令。,3.4.4 格式化输入输出函数,格式化输出函数printf格式:printf(输出格式,输出列表);功能:按用户指定的格式,把指定的任意类型的数据显示到屏幕上。说明:输出格式由格式控制符、按原样输出的字符、转义字符三部分组成。输出列表既可以是变量名,也可以是表达式。输出列表中多个输出项之间用逗号(,)间隔。输出列表中给出的各个输出项要求与输出格式中的格式字符在数量和类型上一一对应。,printf函数,格式控制符作用:将要输出的数据转换为指定格式后输出。一般格式:%修饰符格式字符说明:修饰符是可选的;当没有修饰符时,按系统缺省设定显示。,格式控制符,d格式符作用:用来输出十进制带符号整数(正数不输出符号)。%d:按整型数据的实际长度输出。%md:若%md的数据位数小于m,则左端补空格;%-md的数据位小于m,则右端补空格;若数据位数大于m,则按实际位数输出。%0md:若数据位数小于m,则左端补数字“0”;若数据位数大于m,则按实际位数输出。%ld:输出长整型数据。%hd:输出短整型数据。,格式控制符,例如:x=12;y=1234;z=123456;(1)printf(%3d,%3d,x,y);输出:12,1234(2)printf(%03d,%3d,x,y);输出:012,1234(3)printf(%-3d,%3d,x,y);输出:12,1234(4)printf(%ld,z);输出:123456,格式控制符,o格式符作用:以八进制数无符号形式输出整数,即符号位作为数值部分输出。例如:int a=-1;printf(%d,%o,a,a);输出:-1,177777,格式控制符,x格式符作用:以十六进制无符号形式输出整数。例如:int a=-1;printf(%d,%x,a,a);输出:-1,ffff,格式控制符,u格式符作用:以十进制无符号形式输出整数。一个有符号的整型数据可以用%d格式输出,也可以用%u格式输出。例如:int a=-1;printf(%d,%u,a,a);输出:-1,65535,格式控制符,c格式符作用:用于输出一个字符。一个范围在0255的整数,既可以用%d格式输出,也可以用%c格式输出,输出的是该整数或其对应的ASCII码。例如:char c=A;printf(%c,%d,c,c);输出:A,65,格式控制符,s格式符作用:用于输出一个字符串。%s:按字符串的实际长度输出。%ms:如果%ms字符串的实际长度小于m,左端补空格;%-ms字符串的实际长度小于m,则右端补空格;否则,按实际长度输出。%m.ns:若%m.ns取字符串左端n个字符,输出在m列的右端,左端补空格;%-m.ns取字符左端n个字符,输出在m列的左端,右端补空格;若mn,则m自动取n值输出n个字符。,格式控制符,例如:printf(%2s,start);输出:startprintf(%7.2s,start);输出:stprintf(%.3s,start);输出:staprintf(%-5.3s,start);输出:sta,格式控制符,f格式符作用:以小数形式输出实数。%f:整数部分全部输出,并输出6位小数。%m.nf:输出的数据共占m位,其中有n位是小数。若数的总长度m,则左端补空格。%-m.nf:与%m.nf类似,只是数据输出时靠左端,右端补空格。,格式控制符,例如:float f=123.456;printf(%f,%10fn,f,f);printf(%10.2f,%-10.2f,f,f);输出:123.456001,123.456001 123.46,123.46,格式控制符,e格式符作用:以指数形式输出实数。%e:由系统自动指定给出5位小数,小数点前有且仅有1位非零数字;指数部分占4位,其中“e”占1位,“”占1位,指数占2位。%m.ne:m限定了输出宽度,n限定了输出整数与小数的总位数。若数据宽度小于m,则左端补空格。%-m.ne:与%m.ne类似,只是若数据宽度小于m,则右端补空格。,格式控制符,例如:float f=123.456;printf(%e,%10en,f,f);printf(%10.2e,%-10.2e,f,f);输出:1.23456e+02,1.23456e+02 1.2e+02,1.2e+02,格式控制符,g格式符作用:自动选中f格式或e格式输出时占宽度较小的一种,且不输出无意义的零。例如:float f=123.456;printf(%f,%e,%g,f,f,f);输出:123.456001,1.23456e+02,123.456,3.4.4 格式化输入输出函数,格式化输入函数scanf格式:scanf(格式字符,地址列表);功能:按用户指定的格式从键盘上输入数据,并将键盘输入的数据转换为指定格式存放到对应变量的内存地址中。说明:地址列表由变量的地址组成,如果有多个变量,则各变量的地址之间用逗号(,)间隔;地址列表中的地址由地址运算符(&)后跟变量名组成;输入类型与变量类型要一致。,scanf函数,注意事项:在scanf函数“格式字符”部分中的每个格式说明符都必须在“地址列表”中有一个变量与之对应。如果格式说明符之间没有任何字符,在输入数据时,两个数据之间要使用“空格”、“Tab”或“回车”键做间隔。例如:scanf(%d%d,输入:1 2 结果为:x=1,y=2,如果格式说明符之间包含其他字符,则输入数据时,应输入与这些字符相同的字符做间隔。例如:scanf(%d,%d,输入:a b c 结果为:x=a,y=,z=b,输入整数时,可以指定数据的宽度。例如:scanf(%3d,是错误的。,如果在%后有一个“*”字符,表示输入的数据跳过,不赋给任何变量。例如:scanf(%d%*d%d,输入:1 2 3 结果为:x=1,y=3,z未赋值,2被跳过当连续使用多个scanf输入数据时,会发生数据残留问题。解决上述问题的方法有两种:(i)在第2个scanf的格式控制字符串前加一个空格,以吸收上一行输入的回车。(ii)使用fflush(stdin)来清除缓冲区的内容。,char a,b;scanf(%c,char a,b;scanf(%c,例如:,输入:a 输出:97,10,输入:a b 输出:97,98,char a,b;scanf(%c,输入:a b 输出:97,98,3.4.2 常用数学函数,C语言提供的数学函数的原型在头文件math.h中声明。在使用时应在程序头部包含math.h文件。#include 或#include math.h,3.4.2 常用数学函数,三角函数函数原型:double sin(double x);double cos(double x);double tan(double x);功能:函数sin、cos、tan用于计算正弦、余弦和正切值,这三个函数的参数都是代表弧度值的double型数据。,【例3.7】计算正弦、余弦和正切值。,#include#define PI 3.14159265main()double x,y;x=PI/2;y=sin(x);printf(sin(%f)=%fn,x,y);y=cos(x);printf(cos(%f)=%fn,x,y);x=PI/4;y=tan(x);printf(tan(%f)=%fn,x,y);,运行结果:sin(1.570796)=1.000000cos(1.570796)=0.000000tan(0.785398)=1.000000,3.4.2 常用数学函数,绝对值函数函数原型:int abs(int x);double fabs(double x);long labs(long x);功能:函数abs、fabs、labs分别适用于求整数、浮点数和长整型数的绝对值,这三个函数返回参数x的绝对值。例如,abs(-10)等于10,fabs(-5.6)等于5.6,3.4.2 常用数学函数,exp和pow函数函数原型:double exp(double x);double pow(double x,double y);功能:exp函数返回以e为底,参数x为幂的指数值ex;pow函数返回x的y次幂xy。例如exp(2.0)等于7.389056pow(2.0,3.0)等于8.0,3.4.2 常用数学函数,log和log10函数函数原型:double log(double x);double log10(double x);功能:log函数返回以e为底,参数x的自然对数值lnx;log10函数返回以10为底,参数x的对数值lgx。例如log(7.389056)等于2.0log10(100.0)等于2.0,3.4.2 常用数学函数,sqrt函数函数原型:double sqrt(double x);功能:sqrt函数返回参数x的平方根。例如sqrt(4.0)等于2.0,3.4.2 常用数学函数,随机函数随机函数的原型在头文件stdlib.h中定义。函数原型:int rand(void);void srand(unsigned int seed);功能:rand函数返回一个值在0RAND_MAX之间的伪随机整数,ANSI C要求RAND_MAX至少为32767。srand函数用参数seed来设置一个伪随机数序列的开始点,以便调用rand函数时产生一个新的伪随机数序列。,【例3.8】用当前机器时间作随机数种子,产生3个随机整数。,#include#include#include main()srand(unsigned)time(NULL);printf(%6dn,rand();printf(%6dn,rand();printf(%6dn,rand();,3.4.3 字符输入输出函数,C语言提供的字符输入输出函数的原型在头文件stdio.h中声明。在使用时应在程序头部包含stdio.h文件。#include 或#include stdio.h,3.4.3 字符输入输出函数,字符输出函数putchar函数原型:int putchar(int c);功能:putchar函数把一个字符输出到标准输出设备(通常是显示器)上,其中参数c可以是字符变量或常量,也可以是一个代表ASCII码的整数。说明:putchar函数不但可以输出普通字符,还可以输出控制字符,如 putchar(n)可以输出一个换行符。,#include main()char a=B,b=o,c=k;putchar(a);putchar(b);putchar(b);putchar(c);putchar(t);putchar(a);putchar(b);putchar(n);putchar(b);putchar(c);,显示:Book Book,【例3.9】使用putchar()函数输出字符,3.4.3 字符输入输出函数,字符输入函数getchar函数原型:int getchar(void);功能:getchar函数从标准输入设备(通常是键盘)的输入流中获得一个字符。说明:调用getchar函数时不用参数。该函数的输入直到“回车”才结束,回车前的所有输入字符都会逐个显示在屏幕上,但只有第一个字符作为函数的返回值。,#include main()char c;c=getchar();putchar(c);,输入:a显示:a,【例3.10】使用getchar()函数输入一个字符,3.5 运算符和表达式,运算符运算符是用来表示各种运算的符号。表达式表达式是由运算符和操作数组合成的式子,用来描述对哪些数据以什么顺序进行怎样的操作。操作数可以是常量、也可以是变量,还可以是函数。一个表达式的计算将返回一个具有确定类型的值。,3.5.1 C运算符的种类、运算优先级和结合性,运算符的种类按运算符的功能划分包含:算术运算符、关系运算符、逻辑运算符、指针运算符、位运算符、逗号运算符、赋值运算符等按参与运算的操作数的个数划分包含:单目运算符、双目运算符、三目运算符,3.5.1 C运算符的种类、运算优先级和结合性,运算符的优先级运算符的优先级是指同一个表达式中不同运算符进行运算时的先后次序。每一个运算符都有一个指定的优先级别,运算符的优先级别确定了包含多个操作数的表达式如何求值。各类运算符的优先级别(从高到低):初等运算符(、()、-)-单目运算符-算术运算符-关系运算符-逻辑与运算符-逻辑或运算符-赋值运算符-逗号运算符,3.5.1 C运算符的种类、运算优先级和结合性,运算符的结合性运算符的结合性是指当一个操作数两侧的运算符具有相同优先级时,该操作数是先与左边还是先与右边的运算符结合进行运算。运算符的结合性分为两种:左结合性:从左至右的结合方向右结合性:从右至左的结合方向注意:除单目运算符、赋值运算符和条件运算符是右结合性外,其他运算符都是左结合性。,3.5.1 C运算符的种类、运算优先级和结合性,表达式求值顺序不同级运算符按优先级从高到低顺序执行;同级运算符按照运算符的结合性(结合方向)决定运算顺序。,3.5.2 算术运算符与算术表达式,基本算术运算符:+、-、*、/、%注意:两个整数相除,其运算结果为整数(舍去小数部分)。若有一个是实数时,运算结果为double型。例如:5/2=2/*舍去小数部分*/5/2.0=2.5/*运算结果为double型*/取余运算符“%”是数学运算中的求余数运算,其两个操作数都必须是整型数据。例如:5%2=1(-5)%2=-1/*余数的符号与被除数相同*/,【例3.11】两个整数相除。,main()float f;f=3/5;printf(f=%fn,f);,运行结果:f=0.000000,3.5.2 算术运算符与算术表达式,算术运算符的优先级圆括号的优先级最高。算术运算符的优先级与数学基本相同,即先乘除,后加减。取模运算的优先级与乘除相同。单目算术运算符的优先级高于双目算术运算符。算术运算符的结合性二元算术运算符的结合性是从左至右。单目算术运算符“-”(取负)的结合性是从右至左。,3.5.2 算术运算符与算术表达式,算术表达式算术表达式指的是用算术运算符和括号将运算对象如常量、变量和函数等连接起来的式子。算术表达式的结果应该不超过其所能表示的数的范围。书写规则:所有字符必须写在同一水平线上相乘的地方必须写上“*”符号表达式中出现的括号一律用小括号,3.5.2 算术运算符与算术表达式,算术表达式应能正确地表达数学式子。例如,数学式子为相应的C语言表达式应该是什么呢?(3+x)/(2*y),3.5.2 算术运算符与算术表达式,各类型数据的混合运算不同类型的数据之间可以进行混合运算。如:10+a+1.5-8765.1234 b 是合法的混合运算的规则:不同类型的数据先转换成同一类型后,再运算。数据转换的类型:自动类型转换(隐式转换)强制类型转换(显式转换),自动转换(隐式转换),表达式中不同类型的数据由低向高转换。转换规则:数据的优先级取决于该类型数据的宽度,数据宽度大的,级别就高。,高低,两种箭头的含义:向左的横向箭头,表示即使是同一种数据类型进行运算时,也要进行转换,用于提高计算精度。如:a+b,先将a和b分别转换为 int 型,然后再进行运算,运算结果为 int 型。向上的纵向箭头,表示当运算对象类型不同时的转换方向。注意:不要理解为 int 型先转换为 unsigned 型,再转换成 long 型,最后转换成 double 型。,例:6+A+i*f d/e,其中:i intf floatd doublee long,运算时:6+A:先把A转换为int再运算;结果为int i*f:先把i和f分别转换为double再运算;结果为double+:将转换为double再运算;结果为double d/e:先把e转换为double再运算;结果为double-:结果为double,注意:当不同类型的数据混合运算时,系统先看哪个数据的类型最高,然后将其他数据均转换成这个类型,再进行计算。该种转换是系统自动进行的。,强制转换(显式转换),转换格式如下:(强制的类型名)(操作数)作用:把操作数强制转换为指定的类型。例如:(int)(a+b),将a+b的结果强制转换为int型;(float)a/b,将a的结果强制转换成float型后,再进行运算。注意:经强制类型转换后,得到的是一个所需类型的中间变量,原变量的类型并没有发生任何变化。,【例3.12】阅读程序,写出运行结果,main()float x;int i;x=3.6;i=(int)x%2;printf(x=%f,i=%dn,x,i);,运行结果:x=3.600000,i=1,3.5.3 赋值运算符和赋值表达式,所谓赋值是指将一个数据存储到某个变量对应的内存存储单元的过程。赋值运算符有两种类型:基本赋值运算符 复合赋值运算符,基本赋值运算符,赋值运算符:=赋值语句的一般格式:=;作用:将赋值运算符右边表达式的值赋给其左边的变量。例如:a=10;x=a+5;,基本赋值运算符,注意:如果“=”两侧的类型不一致,在赋值时把赋值运算符右边表达式的类型转换成其左边变量的类型。若右边的数据类型的长度大于左边,则要进行截断或舍入操作,可能引起精度降低或得出错误的结果。,【例3.13】阅读程序,分析运行结果,main()int a;long b=65536;a=b;printf(a=%dn,a);,运行结果:a=0,说明:因为a是int型(2字节),而b是long型(4字节),所以“a=b;”赋值语句将b的低16位赋值给a,即a=0。,/*65535=216*/,赋值表达式,赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子就是赋值表达式。一般格式:其中,又可以是一个赋值表达式。例如,a=(b=4)因为赋值运算符的结合方向是“自右向左”,所以括号可以省略,即:a=b=4,b=4;a=b;,赋值表达式,赋值表达式的值任何一个表达式都有一个值,赋值表达式也不例外。被赋值变量的值,就是赋值表达式的值。例如,“a=5”这个赋值表达式,变量a的值“”就是表达式“a5”的值。,练习,1、经过下列运算后a,b,c各获得什么值?a=5+(c=6)c=6,a=11 a=(b=4)+(c=6)b=4,c=6,a=10 a=(b=10)/(c=2)b=10,c=2,a=5,练习,2、求下列变量x,y的值以及表达式的值。x=(y=12)/4 y=12,x=3,表达式的值:3 x=y=12/4 y=3,x=3,表达式的值:3 x=(y=12/4)y=3,x=3,表达式的值:3(x=y)=12/4 不合法。因为赋值运算符左边不是一个变量,而是一个表达式。,复合赋值运算符,复合赋值运算符在“=”之前加上其他运算符,以构成复合赋值运算符。复合赋值运算符多数为双目运算符。10个复合赋值运算符:+=、-=、*=、/=、%=、&=、=、|=、=,算术复合赋值运算符,位复合赋值运算符,复合赋值运算符,例如:x+=10;x*=y+10;注意:复合赋值运算符在书写时,两个运算符之间不能有空格,否则会出现语法错误。优点:简化程序提高编译效率,等价于 x=x+10;,等价于 x=x*(y+10);,复合赋值运算符,赋值表达式也可以包含复合赋值运算符。例如:a+=a-=a*a(设a=10)运算顺序:(1)a-=a*a,即 a=a-(a*a)=10-100=-90(2)a+=a(此时a=-90),即 a=a+(a)=-180,练习,设x为int型变量,初始值为10,则执行语句x+=x=x x;后,x的值为()。A、10 B、20 C、30 D、40,B,赋值表达式与赋值语句,赋值表达式与赋值语句的区别是语句末尾有无分号“;”。当在一个赋值表达式后面加上分号,就构成了赋值语句。例如:y=a=3 a=3;,赋值表达式,赋值语句,3.5.4 增量运算符与增量表达式,类型:+、-这两个运算符都是单目运算符,其功能分别是将变量的值增1 和减 1。+i 和-i 是前缀表示法,i+和 i-是后缀表示法。若直接在+i 和 i+的后面加上分号构成C的执行语句,即+i;和 i+;前缀与后缀并无区别。但是,将它们用在表达式中则前缀与后缀是有区别的。,前缀表示法是先将 i 值增/减 1,再在表达式中使用;而后缀表示法是先在表达式中使用 i 的值,再将 i 值增/减 1。例如:结果:,i=3;j=i+;,i=3;j=+i;,j 的内容为 3i 的内容为 4,j 的内容为 4i 的内容为 4,注意:自增/自减运算符只能用于变量,不能用于常量或表达式。如:7+,(a+b)-都是非法的自增/自减运算符的优先级高于算术运算符,与单目运算符-(取负)、!(逻辑非)的优先级相同,结合方向自右至左。如:-i+等价于-(i+)副作用:printf(%d,%d,i,i+);在不同的编译环境下结果有可能不同。尽量不要在一般的表达式中将自增/自减运算符与其它运算符混合使用。,【例3.14】自增、自减运算符的使用,main()int i=3,j=10,m,n,p,q;m=+i;n=i+;p=-j;q=j-;printf(i=%d,m=%d,n=%dn,i,m,n);printf(j=%d,p=%d,q=%dn,j,p,q);,运行结果:i=5,m=4,n=4j=8,p=9,q=9,【例3.15】阅读程序,写出运行结果,main()int i=3,k=0;k=(+i)+(+i)+(+i);printf(%d,%dn,i,k);i=3,k=0;k=(i+)+(i+)+(i+);printf(%d,%dn,i,k);,运行结果:6,186,9,当遇到运算符由两个运算符组成时,该如何判断该式子的运算次序?如:a+b,应该是(a+)+b 还是 a+(+b)?C语言编译时,是尽可能多地自左而右将若干个字符组成一个运算符来处理。,3.5.5 关系运算符和关系表达式,关系运算符 大于=大于等于 小于=小于等于=等于!=不等于结合方向:自左向右优先级:低于算术运算符,但高于赋值运算符,优先级相同,优先级相同,高,低,3.5.5 关系运算符和关系表达式,关系表达式关系表达式是指用关系运算符将两个表达式连接起来进行关系运算的式子。例如:a+bc-6,(a=3)=b关系表达式的值逻辑值关系成立,即为“逻辑真”,用整数“1”表示关系不成立,即为“逻辑假”,用整数“0”表示例如:353=5,表达式的值为 1,表达式的值为 0,【例3.16】阅读程序,分析运行结果,main()int a=3,b=2,c=1,i,j,k;i=abc;j=(a=b);k=(a=b);printf(%d,%d,%dn,i,j,k);,运行结果:0,2,1,注意:与数学表达式的区别,注意:“=”和“=”的区别,例 5278在C中是允许的,值为,例 int i=1,j=7,a;a=i+(j%4!=0);则a=,例 a0 结果为 A100 结果为,0,2,1,0,3.5.6 逻辑运算符和逻辑表达式,逻辑运算符!逻辑非(单目)&逻辑与(双目)|逻辑或(双目)结合方向:&和|:自左向右!:自右向左,仅对其右边的操作数进行逻辑求反运算。,高,低,3.5.6 逻辑运算符和逻辑表达式,逻辑表达式逻辑表达式是指用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,可以用逻辑表达式表示多个条件的组合。例如:(a+b)&(c=0),3.5.6 逻辑运算符和逻辑表达式,逻辑表达式逻辑运算对象的逻辑值有两种:逻辑假,以“0”表示逻辑真,以“非0”表示逻辑运算的结果仅有两种:逻辑假,以“0”表示逻辑真,以“1”表示,逻辑运算符真值表,例如:已知:a=0;b=4;求以下表达式的值(1)!a(2)!b(3)a&(b-2)(4)(a+2)|(b-4),答案:(1)1(2)0(3)0(4)1,3.5.6 逻辑运算符和逻辑表达式,逻辑运算符的优先级!算术运算符 关系运算符 执行a=-b=a|a+b!=c后,a和b的值是多少?a=(-b)=a)|(a+b)!=c)答案:a=1,b=19,高,低,逻辑“短路”运算,a 执行+x&+x&+x后,x的值是多少?答案:x=0,逻辑“短路”运算,a|b|c只要a为真,则不必判断b和c的值了;只有a为假,才判断b的值;只有a和b都为假,才判断c的值。例如:int x=-1;执行+x|+x|+x后,x的值是多少?答案:x=1,3.5.7 条件运算符和条件表达式,条件运算符是C语言中唯一的一个三目运算符。格式:变量=表达式1?表达式2:表达式3功能:首先判断表达式1的值,如果表达式1的值为“真”,则将表达式2的值赋给变量,否则,将表达式3的值赋给变量。例如:max=(ab)?a:b;当ab时,maxa,否则,maxb,3.5.7 条件运算符和条件表达式,说明:条件表达式可嵌套使用。条件运算符的优先级高于赋值运算符。例如:max=a b?a:bmax=(a b?a:b)条件运算符的优先级低于关系运算符和算术运算符。例如:max=a b?a:b+1 max=(a b?a:(b+1)结合方向:自右向左,3.5.7 条件运算符和条件表达式,【例3.17】已知w=1,x=2,y=3,z=4,求表达式q=w x?w:y x?w:y x?w:(y x?w:3 的值为3,表达式q=3 表示将 3 赋给变量 q,且表达式的值为3。,【例3.18】输入一个字母,判断它是否是大写字母,如果是,将它转换成小写字母,如果不是,则不转换,最后输出。,main()char c;scanf(%c,【例3.19】计算函数:y=,1(x0)0(x=0)-1(x0),main()int x,y;scanf(%d,3.5.8 逗号运算符和逗号表达式,逗号运算符

    注意事项

    本文(C语言数据类型、运算符与表达式.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开