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

    《c语言程序设计基础》2基本数据类型及运算.ppt

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

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

    《c语言程序设计基础》2基本数据类型及运算.ppt

    第2章 基本数据类型及运算,第2章 基本数据类型及运算,本章内容,2.2 标准输入输出函数,2.3 运算符与表达式,2.4 算术运算符与算术表达式,2.1 数据类型,2.5 自增自减运算符及其表达式,第2章 基本数据类型及运算,2.7 关系运算符和关系表达式,2.8 逻辑运算符和逻辑表达式,2.9 其他类型运算符和表达式,2.6 赋值运算符和赋值表达式,2.11 库函数,2.10 表达式的运算顺序和类型转换,2.1 数据类型,本节内容,2.1.2 常量与变量,2.1.3 整型,2.1.4 实型,2.1.1 标识符,2.1.5 字符型,本章要点,数据的描述规则数据的操作规则,2.1 数据类型,圆的半径为5cm,计算圆的面积并输出,程序中的数据:r、area 5、3.14对数据的运算:*、=,#include void main()float r,area;r=5;area=3.14*r*r;printf(%f n,area);,2.1 数据类型,计算机在操作处理时,要完成以下工作:在内存中要给半径 r 和面积 area 开辟存储空间,存放它们的值。应该留多大的地方来存放其值?数据 5 和 3.14 与 r、area 不同,它们是在编写程序时就给出确定的值,在运算过程中不会改变。这样的数计算机怎么处理?对整数 5 和小数3.14,存放时是否有区别?,涉及数据类型的基本知识,2.1 数据类型,C语言数据类型,数组类型结构体类型共用体类型枚举类型,整型字符型实型(浮点型),基本类型,指针类型,构造类型,空类型,单精度型 双精度型,2.1.1 标识符,C程序是基本字符的序列。基本字符包括:数字(09)大小写字母(az,AZ)标点符号特殊字符:空格、换行、制表符等,起分隔的作用。增删空白一般不影响程序的意义。,2.1.1 标识符,标识符是一个字符序列,用来标识程序中用到的常量、变量、函数、数组、语句标号以及符号常量等的名称。C语言规定标识符应满足以下规则:只能由字母、下划线和数字组成第一个字符不能是数字标识符中的字母区别大小写不能使用C语言的关键字C语言中有3类标识符:关键字,系统预定义的标识符,用户标识符。,2.1.1 标识符,关键字:C语言规定的具有特定意义的字符串,通常也称保留字(小写字母)。标识数据类型(14个):int、long、char、float、double等标识存储类型(5个):auto、static、register等标识流程控制(12个):goto、break、if、else、continue等标识运算符(1个):sizeof,2.1.1 标识符,2.1.1.2 预定义标识符总是以固定的形式用于专门的地方,例如标识库函数名和编译预处理命令。编译预处理命令:define,endef,ifdef,endif,include等。标准库函数:数学函数:sqrt,sin,cos,pow,log,fabs,exp等。输入输出函数:scanf,printf,getchar,gets等。2.1.1.3 用户自定义标识符用户根据自己的需要定义的一类标识符,主要用于标识变量、函数、数组名等。,2.1.2 常量与变量,2.1.2.1 常量常量是指在程序中固定不变的数据量。常量又可分为直接常量和符号常量。直接常量:就是在程序中直接引用的数据:整型常量:1,0,-50,32767。实型常量:3.14,-55.6,1.7e4。字符常量:A,$,s。字符串常量:Good morning,how are you。,2.1.2 常量与变量,符号常量:是用标识符表示一个数据。定义符号常量:#define 标识符 常量#define是一条预处理命令,称为宏定义,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。习惯上符号常量的标识符用大写字母。#define PI3.14159标识符PI代表常量3.14159。程序中,凡是出现标识符PI的地方都用3.14159替换。,例2.1在程序中使用符号常量#define PRICE 30#include void main()int num,total;num=10;total=num*PRICE;printf(total=%dn,total);,符号常量:用一个标识符代表一个常量。符号常量的值在其作用域内不能改变,也不能再被赋值。,运行结果:total=300,说明:程序中用#define命令行定义PRICE代表常量30,此后凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算,说明:如再用赋值语句给PRICE赋值是错的PRICE=40;/*错误,不能给符号常量赋不能对符号常量指定类型int PRICE;/*错误,PRICE不是变量,不能指定类型*/,2.1.2 常量与变量,2.1.2.2 变量变量代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值,在程序运行期间,这些值是可以改变的。变量名实际上是一个以一个名字对应代表一个地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。,2.1.2 常量与变量,2.1.2.2 变量C语言中要求对所有用到的变量作强制定义,也就是“先定义,后使用”。在定义变量时要指定变量名和变量的数据类型,也可以同时为定义的变量赋初值。变量的数据类型决定了编译系统为其分配的空间大小。变量“先定义,后使用”的目的:未定义的,系统不作为变量名(编译时出错);编译时为变量分配相应存储单元;根据变量类型,检查运算是否合法,如整型变量的求余运算 a%b,2.1.2 常量与变量,变量定义必须放在变量使用之前,一般放在函数体的开头部分,之后是程序的执行语句。主函数main()的结构为:main()变量声明语句 执行语句序列,2.1.2 常量与变量,定义变量的语句格式为:类型 变量表;类型可以是int、float、char、void或自定义类型。变量表可以是一个或多个变量名,各变量之间要用逗号分开,声明语句要以分号作为结束。int abc;/声明一个名为abc的整型变量float m,n,p;/声明3个实型变量,名字分别为m、n、p应注意,在初始化中不允许连续赋值,如int a=b=c=5是不合法的。,2.1.3 整型数据,2.1.3.1 整型常量十进制整型常量:十进制整常数没有前缀。八进制整型常量:以数字0作为前缀。所用数码为07。八进制数通常是无符号数。例如:012(十进制为10)、0103(十进制为67)、0177777(十进制为65535)十六进制整型常量:十六进制整型常量以0X或0 x为前缀。所用数码为09,AF或af。例如:0X1B(十进制为27)、0XC2(十进制为194)、0XFFFF(十进制为65535)。,2.1.3 整型数据,长整型数来表示,即在基本整型数后加大写字母“L”或小写字母“l”来表示。例如:72767L(十进制为72767)、0200000L(十进制为65536)、0X21FFFL(十进制为139263)等。长整型数占4个字节(32位)存储空间。整型常量的无符号数的后缀为“U”或“u”。例如:625u,0 x12Du,115Lu 均为无符号数。程序中是根据前缀来区分各种进制数的。整型常量后面加u或U,则认为是unsigned int型,整型常量后面加l或L,则认为是long int型。,2.1.3 整型数据,2.1.3.2 整型变量整型变量用来存放整型常量。整型变量按其取值范围可分为以下几类:基本型类型说明符为int,在内存中占2个字节,其取值为基本整常数。短整型类型说明符为short int或short。所占字节和取值范围均与基本型相同。长整型类型说明符为long int或long,在内存中占4个字节,其取值为长整型数。,2.1.3 整型数据,整型变量还可添加类型说明符unsigned,表示该变量是无符号型变量。无符号型与上述三种类型匹配可构成:无符号基本型 类型说明符为unsigned int或unsigned。无符号短整型 类型说明符为unsigned short无符号长整型 类型说明符为unsigned long,2.1.3 整型数据,例2.2 整型变量的定义与使用#include void main()int a,b,c,d;/*指定、为整型变量*unsigned;*指定为无符号整型变量*12;-24;10;printf(”,”,);,说明:可以看到不同种类的整型数据可以进行算术运算,运行结果:+=22,+=-14,2.1.3 整型数据,2.1.3 整型数据,2.1.3.3 整型数据在内存中的存储方式一个数分为正数和负数,在计算机中为了表示数,可以采用多种方法,一般有原码、反码、补码这三种表示形式,实际上,在计算机中,数值是用补码表示的。原码:将最高位作为符号位(以0代表正,1代表负),其余各位代表数值本身的绝对值,即转换成相应的二进制形式,我们以短整型(int)来举例:+7的原码:0000000000000111-7的原码:,2.1.3 整型数据,反码:一个数如果为正,则它的原码与反码表示方法相同;一个数如果为负,则符号位为1,其余各位是对原码取反。+7的反码:0000000000000111-7的反码:补码:在计算机中,数值是用补码表示的。一个数如果为正,则它的原码、反码、补码相同;一个数如果为负,则符号位为1,其余各位是对原码取反,然后整个数加1。+7的补码:00000000 00000111-7的补码:第一步,7的原码:00000000 00000111第二步,按位取反:11111111 11111000第三步,整个数+1,得-7的补码:11111111 11111001,2.1.3 整型数据,已知一个负数的补码,将其转换为十进制数:步骤如下:(1)先将各位取反;(2)将其转换为十进制数;(3)加上负号,再减去1。例如:,最高位为1,是负数,先对各位取反得0000000000000101,转换为十进制数得5,加上负号得-5,再减1得-6。,2.1.4 实型数据,2.1.4.1 实型常量实数有两种表示形式:小数形式和指数形式。小数形式由数码09和小数点组成。指数形式指数形式也称科学计数法,由十进制小数加阶码标志“e”或“E”以及阶码组成。指数表示的一般形式为:a E n(a为十进制实数,n为十进制整数)表示a10 n。注意:实型常数不分单、双精度,都按双精度double型处理。,2.1.4 实型数据,2.1.4.2 实型变量实型变量同其他类型的变量一样,必须在使用前声明。实型变量分为两类:单精度实型和双精度实型。float为单精度说明符,double为双精度说明符。单精度型占4个字节(32位)内存空间,其数值范围为3.4E-383.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-3081.7E+308,可提供16位有效数字。,2.1.4 实型数据,例2.3 实型变量的定义与使用#includevoid main()float a;double b;a=1.0/3;b=1.0/3;printf(a=%.20fnb=%.20fn,a,b);,2.1.5 字符型数据,字符型 char字符,一般是1个字节长,用来表示256个ASCII字符,或者0255的整数,2.1.5 字符型数据,2.1.5.1 字符常量字符类型常量或变量都占用1个字节。字符型变量用于存放一个ASCII码。C语言是把字符型的数据当成整型数处理的,因此,对于整型数据的所有处理均可用于字符型数据。在C语言中,字符型常量是由一对单引号引起来的单个字符构成。例如:A,5,$等。a的ASCII码为:(十六进制65,十进制97),0 1 1 0 0 0 0 1,2.1.5 字符型数据,字符常量有以下特点:字符常量只能用单引号括起来,不能用双引号或其它括号。字符常量只能是单个字符,不能是字符串。字符常量占用一个字节的存储单元,而实际在存储单元内存放的是该字符的ASCII码值,即一个整型量。因此,字符常量可以参加数值运算。,2.1.5 字符型数据,例2.4 字符型变量的定义与使用#includevoid main()char m=a;printf(%cn,m);,字符常量,转义字符常量单引号括起来的 与可视字符组合,例如:,2.1.5 字符型数据,#includevoid main()printf(1t2t3t4n);,#includevoid main()printf(Yb=n);,2.1.5 字符型数据,#includevoid main()printf(101 x42 Cn);printf(He said:Thank youn);printf(C Programn);printf(Turbo C n);,2.1.5 字符型数据,字符数据在内存中的存储形式及其使用方法一个字符常量存放到一个字符变量中,即将该字符的相应的ASCII代码放到存储单元中。因而字符型数据和整型数据之间可以通用。,注意:一个字符数据既可以以字符形式输出,也可以以整数形式输出。可以对字符数据进行算术运算,此时相当于对它们的码进行算术运算。,2.1.5 字符型数据,2.1.5.2 字符串常量字符串常量是由一对双引号括起的字符序列。例如:ABC、123、a、nt、nGood morning等都是合法的字符串常量。字符串常量和字符常量是不同的量。它们之间主要有以下区别:字符常量由单引号括起来,字符串常量由双引号括起来。字符常量只能是单个字符,字符串常量则可以包含一个或多个字符。,2.1.5 字符型数据,可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在语言中没有相应的字符串变量,但是可以用一个字符数组来存放一个字符串常量。这一内容将在数组一章详细介绍。字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字符数加1。增加的一个字节中用来存放字符串结束标志字符“0”(ASCII码为0)。字符串 C program在内存中的存储形式为:,2.1.5 字符型数据,2.1.5.3 字符型变量同其他类型的变量一样,必须在使用前声明。字符型变量占一个字节,字符型变量的取值是字符常量,即单个字符。类型说明符是char。例如,声明两个字符型变量:char c1,c2;在声明时,也可以直接赋初值:char c1=x,c2=y;char c3=,c4=95;,2.1.5 字符型数据,字符x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量c1,c2赋予x和y值:c1=x,c2=y;实际上是在c1,c2两个单元内存放120和121的二进制代码:c10 1 1 1 1 0 0 0 xc20 1 1 1 1 0 0 1 y所以也可以把它们看成是整型量。语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。,2.1.5 字符型数据,#include void main()int sum=0;sum=sum+a;printf(“sum=%dn,sum);,2.1.5 字符型数据,#includevoid main()char tab;tab=t;printf(1%c2%c3%c4n,tab,tab,tab);,2.1.5 字符型数据,#includevoid main()char c1=A;int y;y=c1+32;printf(c1:%c,%dn,c1,c1);printf(y:%c,%dn,y,y);,2.2 标准输入输出函数,本节内容,2.2.2 格式输出函数printf,2.2.1 格式输入函数scanf,标准输入输出函数,C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数来实现例如:字符输入函数:getchar 字符输出函数:putchar格式输入函数:scanf 格式输出函数:printf字符串输入函数:gets 字符串输出函数:puts,在使用系统库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中。例如:在调用标准输入输出库函数时,文件开头应该有:#include“stdio.h”或:#include,2.2.1 格式输入函数scanf,此处所说的数据输入指的是程序从键盘上输入数据。注意:scanf()函数的声明包含在stdio.h头文件中。因此,要调用这个函数,必须在程序开始处添加#include预处理命令。格式int scanf(“格式化字符串”,地址表);,2.2.1 格式输入函数scanf,参数说明地址表:地址表是一系列要求输入数据的变量地址。对普通变量而言,变量地址就在变量前加“变量n的地址是&n。格式化字符串:格式化字符串包括空白字符、非空白字符和格式说明符3部分。scanf()函数按从左到右的顺序扫描格式化字符串,对其进行处理。,2.2.1 格式输入函数scanf,空白字符包括空格、“t”水平制表符和“n”回车换行符等。空白符将被跳过。非空白字符包括除百分号“%”以外的所有ASCII字符。非空白符必须原样输入。格式说明符用于规定所读入数据的类型,它是由百分号加特定字符组成。常用格式说明符及含义如表:,2.2.1 格式输入函数scanf,2.2.1 格式输入函数scanf,格式说明符按从左到右的顺序与地址表中的各参数相匹配,格式说明符的个数要与参数表中的参数个数相同。,2.2.1 格式输入函数scanf,#includevoid main()int a,b,c,sum;printf(Please input a,b,c:n);scanf(%d,%o,%x,2.2.1 格式输入函数scanf,#includevoid main()float x,y,sum,product;scanf(x=%f y=%f,2.2.1 格式输入函数scanf,#includevoid main()char ch;printf(please input a letter:n);scanf(%c,2.2.2 格式输出函数printf,数据输出是指在屏幕输出(显示)数据。要调用这个函数,必须在程序开头添加#include预处理命令。格式int printf(“格式化字符串”,参量表);用途可将多项字符、数值(整型或实型)和字符串格式化后,输出到标准输出设备上。,2.2.2 格式输出函数printf,参数说明参量表:参量表是任选项(根据程序具体需要,可有可无),是一系列要输出的数据项,它们可以是整型、实型、字符型及字符串常量或变量,也可以是运算表达式。格式化字符串:格式化字符串是右双引号引起来的一个字符串。格式化字符串是由普通字符、转义字符、格式说明符三部分组成。,2.2.2 格式输出函数printf,普通字符:printf()函数将根据普通字符出现的先后次序直接照原样显示输出。转义字符:printf()函数将根据转义字符所具有的含义进行输出处理。格式说明:用来规定各项输出数据的输出类型和输出格式,通常和参量表中的变量或表达式一一对应。,2.2.2 格式输出函数printf,2.2.2 格式输出函数printf,#includevoid main()int i=64;printf(i=%d,i);/以十进制格式输出 printf(i=%o,i);/以八进制格式输出 printf(i=%x,i);/以十六进制格式输出 printf(ni=%d,%o,%xn,i,i,i);/各种格式混合输出,2.2.2 格式输出函数printf,#includevoid main()float x,y;scanf(%f%f,2.2.2 格式输出函数printf,附加字符的使用对于格式说明,%和格式字符之间也可以插入一些附加字符,其一般形式如下:%-+#m.nl格式规定符中括号“”和“”括起来的各项为任选项,它们用来限定输出数据项的格式;而格式规定符用来限定各输出数据类型。,2.2.2 格式输出函数printf,2.2.2 格式输出函数printf,#includevoid main()int x=123;printf(%-10d,x);/“-”指定左对齐,m指定宽度为10 printf(n);printf(%10d,x);/m指定宽度为10,默认右对齐 printf(n);,2.2.2 格式输出函数printf,#includevoid main()float x=123.456;printf(x=%.2fn,x);/n指定小数点后保留2位printf(x=%10.2fn,x);/m指定宽度为10,2.3 运算符与表达式,C语言的语句是由表达式构成的,因此C语言又被称为表达式语言。由于C语言含有相当丰富的运算符,因此构成的表达式也是多种多样,可以表示各种运算功能。C语言的运算符非常丰富,使用方法也比较独特。C语言有40多个运算符 单目运算符:只需要一个运算对象 双目运算符:需要两个运算对象参加 三目运算符:需要三个运算对象参加,2.3 运算符与表达式,2.3 运算符与表达式,表达式是由运算符连接常量、变量、函数所组成的式子。根据运算符的不同可以把表达式分为:算术表达式、赋值表达式、逻辑表达式、关系表达式、条件表达式等。任意一个表达式最终总是可以得到一个确定的值,也就是说C表达式本质就是一个值,因此表达式中如果有变量,则该变量必须是已赋过值的。需注意的是:如果表达式中出现多个运算符,则表达式的求值顺序要按运算符的优先级和结合性的规定进行。,2.4 算术运算符和算术表达式,2.4.2 算术表达式,2.4.3 算术运算符的优先级和结合性,2.4.1 算术运算符,本节内容,2.4.1 算术运算符,“+”(加法运算符)“-”(减法运算符或负值运算符)“*”(乘法运算符)“/”(除法运算符)C语言的除法运算比较特殊,当两个整型数相除时,结果为整型数,其商只取整数部分,小数部分自动舍弃。而有实型数参加的除法运算,结果为double实数,要保留小数部分。,2.4.1 算术运算符,#includevoid main()printf(%d,%dn,30/4,-30/4);printf(%f,%fn,30.0/4,-30.0/4);,2.4.1 算术运算符,“%”(求余运算符或称为模运算符)该运算要求运算符两边的操作数必须为整型或字符型数据,其结果(余数)也是一个整型或字符型数据。求余运算不能用于实型数。求余运算的结果等于两数相除后的余数。通常百分号左边的数比较大,结果自然就是整除后的余数,比如80%7的结果是3;结果的符号与被除数相同。,2.4.2 算术表达式,算术表达式是由算术运算符和圆括号将运算量(常量、变量、函数)连接起来的式子。需注意的是,C表达式中的所有字符都是写在一行上的,不能写成分式和上下标的形式。以下是一些正确的算术表达式:a+b-(b/(2*a)(x+r)*8-(a+b)7 sin(x)+sin(y)3.14*r*r b*b-4*a*c在程序设计中有时需要将一些特殊的数学公式写成算术表达式,需要用到C语言的库函数。y=|x-y|,调用方法为y=abs(x-y)。,算术运算符的优先级和结合性,优先级:存在混合运算的表达式中,必须规定各种运算的先后顺序,才能保证结果的唯一性,这个规定的先后顺序就是运算符的优先级。若一个运算对象两侧的运算符优先级不同,则按规定的优先级进行运算。如:a+b*c结合性:若一个运算对象两侧的运算符优先级相同,则必须规定运算对象先与哪一侧的运算符结合,规定与左侧先结合的称为“左结合性”(自左至右)。如:abc、a+b-c。规定与右侧先结合的称为“右结合性”(自右至左)。如:-i+、!a+。,运算符优先级口诀,算术运算符的优先级和结合性,算术运算符的优先级和结合性。,2.5 自增自减运算符及其表达式,运算符:+-表达式:+E-EE+E-注:E为整型或实型变量。,2.5 自增自减运算符及其表达式,使用说明:自增运算符“+”的作用是对操作数进行增1运算;自减运算符是对操作数进行减1运算。注意,“+”和“-”的运算对象只能是变量(或运算结果是变量的表达式),不能是常量(或运算结果是数值的表达式)。5+、(a+b)+都是不合法的表达式。运算符+或-在操作数前(左)边的表达式称为前缀运算,在操作数后(右)边的运算称为后缀运算。+x;-a;/前缀运算n-;a-;/后缀运算,2.5 自增自减运算符及其表达式,当+和-作为前缀运算符时,被运算的变量(操作数)先自增(减)1,然后该变量的新值再参加表达式中其他运算。,#includevoid main()int i=1,n;n=+i;printf(%d,%dn,i,n);,2.5 自增自减运算符及其表达式,当+和-作为后缀运算时,则先进行其他运算或操作。然后被运算的变量(操作数)再进行自增(减)运算。,#includevoid main()int i=1,n;n=i+;printf(%d,%dn,i,n);,2.5 自增自减运算符及其表达式,自增和自减运算符都具有右结合性,结合方向为从右到左。a+等价于-(a+)如果有多个运算符连续出现时,C系统尽可能多的从左到右将字符组合成一个运算符。i+j 等价于(i+)+j-i+-j 等价于-(i+)+(-j)(略)函数参数的求值顺序:在TC中,先计算最右边的参数值,再依次计算左边的参数值。在Visual C+6.0中,是各项同时取值。,2.5 自增自减运算符及其表达式,#includevoid main()int i=1,j=1;i+;+j;printf(%d,%dn,i,j);,#includevoid main()float i=9,j=3;float m;m=i+/-j;printf(%.2fn,m);,2.5 自增自减运算符及其表达式,有关表达式中的问题说明:如果对于表达式E1+E2,并不是所有的编译系统都先调用E1,然后调用E2。例如,i的初值是5,有以下表达式:(i+)+(i+)+(i+)在Turbo C 2.0下,按照自左而右顺序求解括弧内的运算,求完第1个括弧的值后,实现i的自增,i变为5,再求第2个括弧的值,结果表达式相当于5+6+7,即18。而在Visual C+6.0下把5作为表达式中所有i的值,因此3个i相加,得到的表达式的值是15。在求出整个表达式的值后再实现自加3次,i的值变为8。读者在编程时应尽量避免这种歧义性。,2.5 自增自减运算符及其表达式,#includevoid main()int a=3,m;m=(a+)+(a+);printf(%d,%dn,a,m);,Visual C+6.0将3作为表达式中所有a的值,计算后再实现2次自增。所以m的值是6。,2.6 赋值运算符和赋值表达式,本节内容,2.6.2 赋值运算中的数据转换,2.6.3 复合赋值运算符及表达式,2.6.1 简单赋值运算符和表达式,2.6 赋值运算符和赋值表达式,C语言提供的赋值运算符有如下三类:简单赋值运算符:=复合算术赋值运算符:+=、-=、*=、/=、%=复合位赋值运算符:&=、|=、=、=、=由赋值运算符将一个变量和一个表达式联接构成的式子就是赋值表达式。,2.6.1 简单赋值运算符和表达式,简单赋值运算符的功能是将其右侧表达式的值赋给左侧的变量,赋值表达式的一般形式为:变量名=表达式在赋值表达式中,“=”称为赋值运算符,而不是等号。左操作数必须是变量,不能是常量或表达式。右操作数可以是常量、变量或表达式。赋值表达式的计算过程是:先计算出右操作数的值,然后赋给左边的变量。,2.6.1 简单赋值运算符和表达式,C语言允许在同一个赋值语句中对多个变量进行赋值,赋值运算规则是从右向左。a=b=c=1;表达式x=(a=3)+(b=6)在C语言中也是合法的。它的意义是把3赋给a,6赋给b,再把a,b相加,和赋给x,故x应等于9当左操作数和右操作数类型不同时,在赋值运算之前,要先将右操作数的类型转成与左操作数相同的类型,然后再进行赋值。这种类型的转换是C语言自动完成的。,2.6.2 赋值运算中的数据转换,当赋值运算符两边的运算量类型不同时,系统将自动进行类型转换,即把赋值运算符右侧表达式的类型换成左侧变量的类型。具体规定如下:整型与实型实型数据赋予整型变量时,舍去小数部分,只保留整数部分;整型数据赋予实型变量时,数值不变,但以浮点数据形式存储在变量中,即小数点后加若干个0。,2.6.2 赋值运算中的数据转换,整型与字符型整型数据赋予字符型变量时,只保留其最低8位,高位部分全部舍弃;字符型数据赋予整型变量时,由于字符型数据占用一个字节存储单元,而整型数据为两个字节存储单元,故将字符的ASCII码值放到整型变量的低8位中,高8位另作处理。分两种情况。如果系统将字符处理为无符号的数据类型,则高8位全部补0;如果系统将字符处理为有符号数据类型,若字符最高位为0,则整型变量高8位全部补0;若字符最高位为1,则整型变量高8位全部补1;(叫做:符号扩展),2.6.2 赋值运算中的数据转换,#includevoid main()int a,b=325,c;float x,y=10.25;char c1=323;char c2;a=y;x=b;c=c1;c2=b;printf(%d,%f,%d,%cn,a,x,c,c2);,2.6.2 赋值运算中的数据转换,单、双精度实型C语言中的实型值总是用双精度来表示的,凡是float型数据只要在其尾部加0延长为double 型数据进行计算,然后直接赋值即可;而double型数据转换为float型数据时,需要截尾数,在截断前要先进行四舍五入操作。整型与长整型一个long型数据赋给int型变量时,将其低16位值赋给int型变量,而将高16位截断舍弃;一个int型数据赋给long型变量时,其外部形式不发生变化,但其内部存放形式会有变化,即进行符号扩展,如果原int型数据是正值,那么将int型数据送入long型变量的低16位,高16位全部补0,反之将long型变量的高16位全部补1。(VC中:int型和long型长度相等),2.6.2 赋值运算中的数据转换,无符号整型一个unsigned型数据赋给一个占据同样长度存储单元的整型变量时,将其原样赋予,内部存储方式不发生任何改变,但其外部表现形式是有符号的,因此值可能会有所改变。一个非unsigned型数据赋给一个占据同样长度存储单元的unsigned型变量时,原样赋值,即内部存储形式不会改变,但其外部表现形式总是无符号的,值有时会发生改变。C语言的这种赋值时的类型转换相对灵活一些,对于许多初学者来说会觉得复杂难记,在实际调试程序的过程中经常会出现错误却又找不到问题所在,因此建议读者在编写程序的过程中尽量用强制类型转换,以便增加程序的可读性。,2.6.2 赋值运算中的数据转换,#includevoid main()unsigned x=65535,y;int a=-1,b;b=x;y=a;printf(unsigned)%u-(int)%dn,x,b);printf(int)%d-(unsigned)%un,a,y);,2.6.3 复合赋值运算符及表达式,把一个变量的值先取出来进行运算之后再赋给该变量,类似于表达式i=i+2的运算。这时可以用复合赋值运算符来表示,赋值运算符“=”之前加上其它双目运算符可构成复合赋值运算符。复合赋值表达式的一般形式是:E1 OP=E2该表达式等价于:E1=E1 OP E2。复合算术赋值运算符(+=、-=、*=、/=、%=)和复合位赋值运算符(&=、|=、=、=、=),复合位赋值运算符将在位运算符中介绍。,2.6.3 复合赋值运算符及表达式,关于复合算术赋值运算的几点说明:复合赋值运算符在书写时,两个运算符之间不能有空格;从复合赋值表达式与其等价形式的比较可以看出,复合赋值表达式中的左操作数E1必须是变量,不能是常量或表达式;右操作数E2可以是常量、变量或表达式。例如,下面复合赋值表达式是正确的:x+=2;等价于x=x+2x*=2+y;等价于x=x*(2+y)下列等价于i=i+2表达式是非法的:2+=3;x+1=5;,2.6.3 复合赋值运算符及表达式,复合赋值运算过程是:先计算E2的值,然后E1与E2进行相应的运算,最后结果赋给E1。注意表达式两边的括号,如a*=b+3等价于a=a*(b+3)而不是a=a*b+3。运用复合赋值运算符这种写法,可以使语句更加紧凑,有利于编译处理,能提高编译效率并产生质量较高的目标代码。,2.7 关系运算符和关系表达式,本节内容,2.7.2 关系表达式,2.7.1 关系运算符,2.7.1 关系运算符,在程序中经常需要比较两个数据量的大小关系,以决定程序下一步的工作。比较两个数据量的运算符称为关系运算符。语言提供了以下关系运算符:大于=大于或等于=等于!=不等于,2.7.1 关系运算符,说明:关系运算符都是双目运算符,其结合性均为左结合。在六个关系运算符中,、=的优先级相同,并高于=和!=,=和!=的优先级相同。关系运算符的优先级高于赋值运算符但低于算术运算符。关系运算符“=”和赋值运算符“=”不同。如果关系运算的两个操作数类型不同,则低类型向高类型看齐,统一类型后,再进行关系运算。,2.7.2 关系表达式,用关系运算符将两个运算量连接起来构成的式子就是关系表达式。关系表达式的一般形式如下:E1 OP E2关系表达式的值为逻辑值True和False。在C语言中,关系表达式运算结果为“真”和“假”是通过整型数1和0来表示的。如果关系式成立,则得到一个int类型的1值;否则运算结果得到一个int类型的0值。例如:212、(x=5)(y=2)、BA、33.5,2.7.2 关系表达式,#includevoid main()int a=3,b=2,c;c=2*a=b,a=b,a!=b);printf(c=%dn,c);,2.7.2 关系表达式,#includevoid main()char a=f;int i=1,j=2,k=3;float x=2e+5,y=0.55;printf(%d,%dn,a+6=a+1);printf(%d,%dn,1j5,x-5.25=x+y);printf(%d,%dn,i+j+k=-2*j,k=j=i+5);,2.8 逻辑运算符和逻辑表达式,本节内容,2.8.2 逻辑运算的值,2.8.3 逻辑表达式,2.8.1 逻辑运算符,2.8.1 逻辑运算符,逻辑运算符是指用形式逻辑原则来建立数值间关系的符号。语言中提供了三种逻辑运算符:&逻辑与|逻辑或!逻辑非与运算符&和或运算符|均为双目运算符。具有左结合性。非运算符!为单目运算符,具有右结合性。逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非)&(与)|(或)逻辑运算的优先级低于算术运算符和关系运算符。,2.8.2 逻辑运算的值,逻辑运算的结果同关系运算的结果一样,只有“真”和“假”两种,也是用“1”和“0”来表示。其求值规则如下:a&b a、b 同时为真,则 a&b 为真,否则为假。a|b a、b中只要有一个为真,则a|b为真;只有两个量都为假时,结果才为假。!a a为真,则!a为假;a为假,则!a为真。对于真和假,掌握这样一条原则,非0即为真。,2.8.2 逻辑运算的值,C语言的逻辑运算符及其含义!a 当且仅当a为真时,!a为假a&b 当且仅当 a、b 同真时,a&b为真a|b 当且仅当a、b之一为真时,a|b为真,2.8.2 逻辑运算的值,逻辑运算规则在判断一个逻辑量时,以0为假,非0数值为真在给出逻辑运算值时,以1为真,以0为假,2.8.3 逻辑表达式,由逻辑运算符将一个或多个表达式连接起来的式子称为逻辑表达式。E1 OP E2扩展开来就是3种:与运算:E1&E2或运算:E1|E2非运算:!E其中运算符左右两边的操作数还可以是逻辑表达式,从而组成嵌套的逻辑表达式。例如:(a&b)&c根据逻辑运算符的左结合性,上式也可写为

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开