数据类型及其运算.ppt_第1页
数据类型及其运算.ppt_第2页
数据类型及其运算.ppt_第3页
数据类型及其运算.ppt_第4页
数据类型及其运算.ppt_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

数据类型及其运算 (1),第4章,2019/7/28,2,第4章 数据描述与基本操作 (1),4.1 C语言数据类型简介 4.2 常量 4.3 变量 4.4 常用运算符和表达式,2019/7/28,3, 字符集:编程可使用的字符,C语言程序的基本标识符,英文字母 a z,A Z; 阿拉伯数字 0 9; 特殊符号 (!%*:;?/以及空格、换行等),2019/7/28,4,例:判断下列标识符号合法性 a, 3s, x, BOOK_1, x3, -3x, s*T, sum5, _x7, bowy-1, M.D.John, #h3, char,,4.1 C语言的基本词法标识符,定义:在程序中使用的变量名、函数名、标号等统称为 标识符。除库函数的函数名由系统定义外,其余的都由用户自己定义。,命名规则:标识符只能是字母(AZ,az)、或字母与数字(09)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。,3s,(3起不合法),-3x,(有-不合法),s*T,(有*不合法),bowy-1,(有-不合法),#h3,(有#不合法),char,(关键字(保留字)不合法),M.D.John,(有. 不合法),2019/7/28,5,在使用标识符时还必须注意以下几点:,(1)Turbo C规定标识符的长度为32。 通常标识符长度不超过8个字符 (2)标识符区别大小写。 SUM和sum是两个不同的标识符。 变量名应尽量使用小写字母。 (3)标识符命名尽量有相应的意义。 以便阅读理解、“顾名思义”。 在C语言中,所有的变量都是先定义后应用,使用没有定义的变量名被认为是“非法”的。,2019/7/28,6,C语言的基本词法关键字,定义:关键字是由语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应该与关键字相同。 分类:语言的关键字分为以下几类:P43 (1)类型说明符 用于定义、说明变量、函数或其它数据结构的类型。如int,double,float,long,short,auto,char等。,2019/7/28,7,C语言的基本词法关键字,(2)语句定义符 用于表示一个语句的功能。如条件语句的语句定义符if else,循环语句的语句定义符do,while,for等。 (3)预处理命令字 用于表示一个预处理命令,使用时前面要加“”。如include,define,ifdef,endif等。 关键字后必须有空格,圆括号,尖括号,双引号等分隔符,否则与其它字符一起组成新的标识符。,2019/7/28,8,4.1 C语言数据类型简介,数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 4. 其上可进行的操作,任何高级语言的程序设计都有共同的基本、派生类型。而随着计算机硬件性能指标的发展数据类型更多、取值更宽,例: int a10; char s390;等,例: int *p; char *p1;等,2019/7/28,9,4.2 常量,常量是指在程序运行过程中其值不能被改变的量。常量的类型,可通过书写形式来判别。 4.2.1 数值常量 4.2.2 字符常量和字符串 4.2.3 标识符命名的常量 4.2.4 换码序列常量(转义字符),2019/7/28,10,4.2.1 数值常量,1、整型常量(简称为整数) 三种形式:十进制整型常量、八进制整型常量(以0开头的07数字串)、十六进制整型常量(以0X或0x开头的09/af/AF字符串);整型常量在一般微型机中占用2个字节,它们的数值范围都是十进制的3276832767。 C语言还提供一种长常量(在整型常量后面紧跟L或l)。它们的数值范围 是十进制的21474836482147483647,在计算机中占用四个字节,如OL,038L,ox15L。 2、实型常量(简称为浮点常量或实数) 两种形式:十进制小数形式和指数形式(用E或e表示),例:12 30,例:0123 0400,例:0X1E3 -0x1e,例:12L -9l,例:0.123 124.,例:345e+2 .5e-2,2019/7/28,11,实型常量(实数或浮点数) 表示形式: 十进制数形式:是由整数、小数点、小数三部分组成。 其中数据部分或小数部分可以省略。数的正负用前面的“”(可以省略)号或“”号来区分。例如,(必须有小数点) 如0.123,.123, 124.0, 0.0, 124. 指数形式:它是由尾数、小写字母e或大写字母E、指数三部分组成,字母e(或E)之前必须有数字即尾数且尾数部分可以是十进制整型常量或一般形式的实数,指数部分是十进制的短整型常量(可以带E负号) 如12.3e3, 123E-2, 1.23e4, e-5 , 1.2E-4.5 , e3 规范化的指数形式: 在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。 例如: 123.456可以表示为: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4, 其中的1.23456e3称为“规范化的指数形式”。,2019/7/28,12,4.2.2 字符常量,1、字符常量 字符常量是ASCII码字符集里的一个字符,包括字母(大、小写有区别)、数字和标点符号以及特殊字符等,均为半角字符。可以用作整数常量,可参与算术运算。 2、字符常量表示形式: A、把单个字符用一对单引号括起来表示字符常量。如a,d,w,?等都是字符常量。 abc、“a” (不合法) B、用该字符的ASCII码值表示字符常量。 C、转义字符:反斜杠开头后跟规定的单个字符或数字,,例: a ?,2019/7/28,13,例1:字符与整数的转化,#include “stdio.h“ void main() int i; char n; n=97; i=b; printf(“n=%cn“,n); printf(“i=%dn“,i); printf(“i=%cn“,i); ,程序的输出为: n=a i=98 i=b,2019/7/28,14,例2 字符参与整数运算,#include “stdio.h“ void main() char n; n=a; n=n-65; printf(“n=%dn“,n); ,程序的输出结果为: n=32,2019/7/28,15,例3 字母的大小写转换,#include “stdio.h“ void main() char n,i; n=a; i=B; n=n-32; i=i+32; printf(“n=%cn“,n); printf(“i=%cn“,i); ,程序的输出为 n=A i=b,2019/7/28,16,字符串,字符串 用双引号括起来的零个或多个字符序列。 例:“ Turbo C ”,“ China ”。 存储:编译时自动在字符串结尾加一个转义字符0作为字符串结束标志,即长度为n个字符的字符串占n+1个字节空间。但在输出时不输出。,例a “a”,a,a 0,2019/7/28,17,4.2.4 换码序列常量(转义字符常量),是特殊字符常量。以一个反斜杠”开头的字符序列,只代表某个特定的ASCII码字符。用单引号括起。 例:单引号,反斜线,2019/7/28,18,转义符可以出现在字符串中,例如,“ABCD”, “101102x43x44”等都是字符串,分别表示“ABCD”、“ABCD”两个字符串。,一个字符串中所有的字符的个数称为该字符串的长度,其中每个转义字符只当做一个字符。例如,“ABC”的长度为5。,转义字符举例1,2019/7/28,19,转义字符举例2。 #include“stdio.h“ void main() printf(“a btcdbefgn“); printf(“tHello!“); printf(“101=%c,x61=%cn“,101,x61); printf(“101=%d,x61=%d“,101,x61); printf(“n htrijkn“); ,a b cef g Hello! 101=A,x61=a 101=6 5,x61=97 i j k h,t 水平制表位在下一个8位ASCII码位输出:cd,b 水平右退1位输出 ef, e覆盖d,t,b,用单引号括起、以一个反斜杠”开头的字符序列,只代表某个特定的ASCII码字符。, 输出 一个单引号,2019/7/28,20,4.2.3 标识符命名的常量(符号常量),一般用大写字母表示,而变量一般用小写字母表示。符号常量使用之前必须预先定义,其定义格式为 #define 标识符 常量 例: #define PI 3.14159 注:不是语句,后无 ;(结尾没有分号) 优点:清晰易懂; 易于修改。,2019/7/28,21,例4.1 录入半径,求周长和面积。(标识符常量应用) #include #define PI 3.1415926 void main() float radius,circum,area; scanf(“%f“, ,3 circumference is 18.849556 area is 28.274334,2019/7/28,22,4.3 变量,变量:在程序执行过程中,其值可以改变的量。 4.4.1 变量说明和变量地址 4.4.2 变量的初始化 4.4.3 数据类型 4.4.4 存储类型和变量的作用域,2019/7/28,23,4.3 变量,变量的三个要素: (1)变量名。每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。 (2)存储单元。变量名对应着一段存储空间。 (3)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。,2019/7/28,24,1、变量说明 “先定义,后使用。” 变量名:变量的名字,用标识符表示,不能与保留字(语句名、类型名)重名。 变量说明: 存储类型 数据类型 变量名; 如: extern int a; 2、变量的地址:存储某变量的内存空间的首地址,用 &变量名 表示。 注:&-取地址运算,地址值可用十进制或十六进制表示。,4.4.1 变量说明和变量地址,随机数,2019/7/28,25,1.分类 根据占用内存字节数的不同,整型变量又分为类: (1)基本整型(类型关键字为signed int)。 (2)短整型(类型关键字为 signed short int)。 (3)长整型(类型关键字为 signed long int)。 (4)无符号整型。无符号型又分为无符号基本整型(unsigned int)、无符号短整型(unsigned short int )和无符号长整型(unsigned long int )三种,只能用来存储无符号整数。 long(字节)int(字节)short(字节)。,整型变量,2019/7/28,26,2.整型数据在内存中的存放形式 数据在内存中是以二进制形式存放的。,整型变量,例如:整数13在内存中实际存放的情况:,3.整型变量的定义: “强制类型定义” int a,b(指定变量、为整型) unsigned short c,d;(指定变量、为无符号短整型) long e,f;(指定变量、为长整型),2019/7/28,27,实型变量,语言的实型变量,分为三种:,2019/7/28,28,不管是一般形式还是指数形式,它们的数值范围都是1038 10 38 有效数字7位。例如,1.23456789和1.234567是相同的,因为实型常量的有效数字是7位,所以1.23456789中的后两位是无效的。,浮点型数据在内存中的存放形式: 一个浮点型数据一般在内存中占4个字节(32位)。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。,2019/7/28,29,字符变量 字符型变量用来存放字符常量,注意只能放一个字符。 字符变量的定义形式如下:char c1,c2; 在本函数中可以用下面语句对c1,c2赋值: c1a;c2 b ; 一个字符变量在内存中占一个字节。,c=a; ”a”;c”CHINA”;,结论:不能把一个字符串常量赋给一个字符变量。,2019/7/28,30,基本数据类型符及含义如下表所示:,2019/7/28,31,变量的初始化:在定义变量的同时给变量赋予初始值。 变量赋初值的语句格式如下: 存储类型符 数据类型符 变量名1初值1,变量名2初值2,;,4.7 变量的初始化,2019/7/28,32,(1)语言允许在定义变量的同时使变量初始化。 如: int a=3; / 指定为整型变量,初值为 float f=3.56; / 指定为浮点型变量,初值为.56 char c= a; / 指定为字符变量,初值为a,4.7变量的初始化,(2)可以使被定义的变量的一部分赋初值。 如: int a,b,c=5;表示指定、为整型变量,但只对初始化, c的初值为 (3)如果对几个变量赋以同一个初值, 应写成:int a=3,b=3,c=3; 表示、的初值都是。 不能写成 int a=b=c=3; (4)定义之后再给变量赋值: 如: int a,b,c; char c1,c2; a=b=c=10; c1=c2=A;,注意:初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。,2019/7/28,33,4.4.2 变量的初始化,例4.4变量的初始化. void main() char c1=a, c2=b; char c3,c4; c3=c1-a+A; c4=c2-(a-A); printf(“%c,%cn“,c3,c4); printf(“%c,%dn“,c1,c1); ,A,B a,97,2019/7/28,34,4.7 变量的内存单元分配,内存上部,编译程序根据变量数据类型说明在内存单元为其分配指定字节数,1字节,4字节,随机数,float f; double d; int a=10; char c=B; long b=-20;,随机数,4字节,8字节,内存下部,2019/7/28,35,C语言数据混合运算转换规则:不同类型数据运算时先自动转换成同一类型,再进行运算。 什么情况下发生 运算转换-不同类型数据混合运算时 赋值转换-把一个值赋给与其类型不同的变量时 输出转换-输出时转换成指定的输出格式 函数调用转换-实参与形参类型不一致时转换 转换方式:隐式转换 和显示转换,4.8 数据类型转换,2019/7/28,36,隐式转换,由低(字节长度短)向高(字节长度长)转换,2019/7/28,37,显式转换(强制转换) 一般形式:(类型名)(表达式) 例 (int)(x+y) (double)(3/2) (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变,例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 结果:x=3.600000,i=3,精度损失问题,2019/7/28,38,4.9 运算符和表达式(1),4.9.0 运算符和表达式 4.9.1 算术运算符和表达式 4.9.2 赋值运算符和表达式,2019/7/28,39,4.9.0 运算符和表达式(P51),1、C运算符 算术运算符: + - * / % -(取负) + + - - 关系运算符: = 逻辑运算符: ! & | 赋值运算符: = 复合赋值符号+= -= *= /= %= 条件运算符: ? : 逗号运算符: , 指针运算符: * & 求字节数运算符:sizeof 强制类型转换运算符:(类型) 分量运算符: . - 下标运算符: 其他: ( )函数调用运算符,2019/7/28,40,3*5/6 a=b=c=5,学习运算符应注意 (1) 运算符功能 (2) 与运算量关系 -要求运算量个数:单目、双目、三目 -要求运算量类型 (3) 运算符优先级别:15个级别 (4) 结合方向:自左至右、自右至左 (5) 结果的类型,-(负号) &,+ - * %,? :,/自左至右,/自右至左,优先级别,参见附录C 运算符和结合性(p214),2019/7/28,41,4.9.0 运算符和表达式,用算术运算符和括号将运算量(也称操作数)连接起来的、符合语法规则的式子,称为算术表达式。运算对象包括常量、变量、函数等。表达式中所字符写在一行上。 例:*.5a 是一个合法的表达式。,2019/7/28,42,4.9.1 算术运算符和算术表达式,2019/7/28,43,4.9.1 算术运算符和算术表达式,1.基本算术运算符,基本算术运算符的运算对象、运算规则与结果、结合性如表所示 :,2019/7/28,44,算术运算符的优先级规定如下:,单目基本算术运算符 优先于 双目基本算术运算符 *、/、 优先于 、 同级单目基本算术运算符的结合性是自右向左 同级双目基本算术运算符的结合性是自左向右 注意: 对于整数,则为整除,余数舍去;实数则不然。 例:-5/3-1 1/2*2= 1.0/2.0*2.0= 模 % 整除取余 只能用于整型。 分子分母 ,结果=余数。例: 12%5 分子分母 ,结果=分子。例: 2%5 模 %余数与被除数符号相同。 C 语言中乘法、除法运算符的表示与数学中的表示不同。 乘法不能写成mn, m n, mn ;没有乘方运算符aaa。 除法不能写成m n,-4%-3=1,0,1.0,2019/7/28,45,例:基本算术运算符的使用,设变量定义如下: int n=10, m=3; float f=5.0,g=10.0; double d=5.0,e=10.0;,则 n的结果是 10 nm,nm,n*m,n/m, m/n ,n%m的结果 13、 7、 30、 3、 0 、1 de,de,d*e,d/e的结果 15.0,5.0,50.0,0.5 nmf*g/d的运算顺序相当于 (nm(f*g)/d),结果是3.0 nm*f*d的运算顺序相当于 (nm)*f)*d,结果是25.0,2019/7/28,46,2 自增自减运算符,(1)自增自减运算符的运算对象、运算规则与结果、结合性,对象数,单 目,名称,运算符,运算规则,运算对象,运算结果,结合性,增1(前缀),先加1 后使用,增1(后缀),减1(前缀),减1(后缀),先使用 后加1,先减1 后使用,先使用 后减1,整型、字 符型、指 针型变量 或数组 元素,同运算 对象的 类型,自 右 向 左,2019/7/28,47,i+与+i的区别: 是先执行后,再使用的值; 是先使用的值后,再执行。 例如:int i3 ; i的值先变成4, 再赋给,j的值均为 ; 先将 i的值3赋给,的值为,然后变为,2019/7/28,48,(2)运算符的优先级:, 增1减1运算符 优先于 双目基本算术运算符 增1减1运算符和单目运算符、同级别,结合性 是自右向左 自增自减运算符,只能用于变量,而不能用于常量或表达式,如:5+,(a+b)+,若出现难以区分的若干个或组成运算符串时,C语言规定,自左向右取尽可能多的符号组成运算符。,ab 应理解为(a)b ab应理解为 (a)b,错误,2019/7/28,49,例:增1减1运算符的使用,设变量定义如下:char c1b,c2B; (c1,c2可看成整型,其值分别为98,66),则: c1 的值是99,运算后c1的值是c c1 的值是98,运算后c1的值是a c1c2的值是164,运算后c1的值是c,c2的值是B c1c2的值是32,运算后c1的值是a,c2的值是B,2019/7/28,50,关系运算符与关系表达式,关系运算符运算及优先次序,注:不是算术运算符和等。+ - 的优先级为 4。 C语言中的 = 称赋值运算符,不是等于(=)。优先级为 14。,对象数,含义,运算符,运算规则,运算对象,结果 (逻辑值),结合性,双目,小于,小于等于,大于,大于等于,等于,不等于,=,=,=,!=,满足为真 不满足为假,整型、实 型、字符 型等,1 (整数) 0 (整数),自 左 向 右,优先级,6,7,例 优先级示例 ca+b ab!=c a=bc,/c(a+b) /(ab)!=c /a=(bc),2019/7/28,51,4.1.2 关系表达式,用关系运算符将两个表达式(可以是算术表达式或关系表达式、逻辑表达式、字符表达式)连接起来的式子,称关系表达式。 例如,下面都是合法的关系表达式: ab, abbc, (a=3)(b=5), ab, (ab)(bc) 关系表达式的值是一个逻辑值: 即“真”(1)或“假”(0)。,例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc,/d=1,/表达式值1,/表达式值1,/表达式值0,/f=0,ab值为1,b+c=a,2019/7/28,52,4.2 逻辑运算符和逻辑表达式,4.2.1 逻辑运算符 对两个关系式或逻辑值(C语言还可以是数值)进行运算,运算结果仍是逻辑值。 运算符:!逻辑非 & 逻辑与 | 逻辑或 C语言中 运算对象: 0表示“假”,非0表示“真” 运算结果: 0表示“假”, 1表示“真” 优先次序,自左向右,自右向左,2019/7/28,53,4.2.2 逻辑表达式,以0代表“假”,以非0代表“真”。 优先次序: ! 关系运算 & II,例 ab&xy a=b|x=y !a|ab,/ (a=x) & (x=b),/(ab)&(xy),/(a=b)|(x=y),/(!a)|(ab),例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&2|84-!0 c&d,值为1,值为0,值为1,值为1,值为1,值为1,值为1,a&!b 4&0|!a 53&!b|84-!0 !c&a&d ! c|a&d,/(53)&2|(8(4-(!0),2019/7/28,54,特别注意!,(1) (m=ab)&(n=cd),2019/7/28,55,逻辑运算符应用,例: char c1a,c2A; int n165,n297; float f13.0,f23.0001; 则: !c1 的值是 n1&n2 的值是 f1|f2 的值是 !(c2c1) 的值是 !c2c1 的值是 f1f2|!c1 的值是 n1+32=n2&n1=c2 的值是,0 1 1 1 0 0,1,2019/7/28,56,赋值运算符: = 把其右侧表达式的值赋给左侧的变量。 赋值表达式:赋值运算符连接变量和表达式而得到的式子。变量=表达式 -注:左侧必须是变量,不能是常量或表达式 右边的数据类型转换成左边变量的数据类型。赋值表达式的值是左部变量的值和类型。 赋值语句: 赋值表达式加上分号。 变量=表达式;,4.4.1 赋值运算符、赋值表达式和赋值语句,a=2,a=2+3;,算术运算符 优先于 关系运算符 优先于 双目逻辑运算符 优先于 赋值运算符 赋值运算符的结合性是自右向左,2019/7/28,57,4.4.1 赋值运算符、赋值表达式和赋值语句,赋值表达式中的“表达式”,又可以是一个赋值表 达式。例如: a=(b=5),分析:括弧内的“b=5”是一个赋值表达式,它 的值等于5。执行表达式“a=(b=5)”相当于执行 “b=5”和“ab”两个赋值表达式。 赋值运算符 按照“自右而左”的结合顺序,因此,“(b5)” 外面的括弧可以不要,即“a=(b=5)”和“a=b=5” 等价。,2019/7/28,58,4.4.1 赋值运算符、赋值表达式和赋值语句,请分析下面的赋值表达式(a=3*5)=4*3,分析:先执行括弧内的运算,将15赋给a,然后执行 4*3的运算,得12,再把12赋给a。最后a的值为12, 整个表达式的值为12。可以看到(a=3*5)出现在赋 值运算符的左侧,因此赋值表达式(a=3*5)是左值,注意:

温馨提示

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

评论

0/150

提交评论