2011第01章-02(数据类型和运算符).ppt_第1页
2011第01章-02(数据类型和运算符).ppt_第2页
2011第01章-02(数据类型和运算符).ppt_第3页
2011第01章-02(数据类型和运算符).ppt_第4页
2011第01章-02(数据类型和运算符).ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

第1章(2)数据类型、运算符与表达式 C语言基本语法成分 C语言的数据类型 常量和变量 基本数据类型 算术运算与算术表达式 赋值运算与赋值表达式 C语言特有的运算和运算符 1 C语言基本语法成分 void mvoid main( )ain( ) intint a,b,sum;a,b,sum; /*/*定义变量定义变量* */ / a=123; b=456; a=123; b=456; sum=a+b; sum=a+b; printf(“sumprintf(“sum is is %d%dn“,n“, sumsum); ); void: 关键字 main:标准标识符 (由系统定义) a,b,sum:标识符 (由用户定义) , : 运算符 (空格):分隔符 2 1. C语言字符集 C程序是用下列字符所组成的字符集写成的: 字母:A-Z,a-z 数字:0-9 标点符号、特殊字符: 空白符:空格,制表符(Tab,跳格键), 换行符(空行)的总称。 ! # % : ? “ ( ) 空白符只在字符、字符 串中有意义 ,编译系 统忽略其它位置的空白 。空白符在程序中只是 起到间隔的作用。 3 2. 标识符 用来标识变量名、符号常量名、函数名、数组 名、类型名等实体(程序对象)的有效字符序列。标识符由 用户定义。 C语言标识符定义规则包括: 标识符只能由字母、数字和下划线三种字符组成,且第 一个字符必须为字母或下划线。 例如,合法的标识符:a,i,sum,average,_total,Class,day, student,p405; 不合法的标识符:5a,M.D.John,$123,3D64,a-b。 大小写敏感,即C认为大小写字母为不同的字符。 例如:sum不同于Sum,BOOK不同于book。 C程序员习惯:变量名小写,常量名大写,但不绝对。 4 (3)标识符不能与“关键字”同名,也不与系统预先定 义的“标准标识符”同名,如main、printf等。 在定义标识符时,建议遵循下面的原则: 尽量不要用下划线开头。因为系统内部使用了一些下 划线开头的标识符(如_fd、_cs、_ss),避免与系统定义 的标识符冲突。 尽量做到“见名知义”,例如,name/xm(姓名)、 sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。 变量名、函数名用小写,符号常量用大写。 在容易出现混淆的地方应尽量避免使用容易认错的字 符。如:数字1与字母L和字母I,数字0与字母o和O,数字2 与字母Z和z。 5 3. 关键字 关键字是C语言预先定义的、具有特定意义的标 识符,也称为保留字。C语言包括32个关键字: autobreakcasecharconstcontinue defaultdodoubleelseenumextern floatforgotoifintlong registerreturnshortsignedsizeofstatic structswitchtypedefunionunsignedvoid volatilewhile C语言的关键字都是小写。不能重新定义关键字,也不能 把关键字定义为一般标识符。 6 算术运算符:+ - * / % + - 关系运算符: = != 逻辑运算符:! 6. 其他符号 花括号“”和“”通常用于标识函数体或者一个语 句块(即复合语句)。 “/*”和“*/”构成一组注释符。编译系统将/* . */之间的所有内容看作注释,编译时编译系统忽略注释。 8 C语言的数据类型 C语言提供的数据结构,是以数据类型形式出现的。具体 分类如下: 字符型(char) 实型(浮点型) 单精度型(float) 双精度型(double) 整型 短整型(short int) 整型(int) 长整型(long int) 枚举类型(enum) 数组类型 结构体类型(struct) 共用体类型(union) 文件类型(FILE) 基本类型 构造类型 指针类型 空类型(void) C数据类型 注:C语言中的数据, 有常量和变量之分,它们分 别属于这些类型。 本章将重点介绍 基本类型中的整型、实型和 字符型三种数据。其他类型 会在后面章节陆续介绍。 9 常量和变量 一、常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常量。 2.常量的分类 (1)整型常量(如12、0、-3为整型常量) (2)实型常量(4.6、-1.23为实型常量) (3)字符常量( a、d字符常量) (4)符号常量 常量的类型,可通过书写形式来判别。 10 符号常量: 有时为了使程序更加清晰和便于修改,用一个标识符来代表常量,即 给某个常量取个有意义的名字,这种常量称为符号常量。 如:#define PI 3.1416 使用符号常量的好处: ( 1)含义清楚、见名知意。 ( 2)修改方便、一改全改。 例:符号常量应用 #define PI 3.1416 void main() float area; area=10*10*PI; printf(“area=%fn“,area); 结果:area=314.160000 11 二、变量 1.变量的概念 在程序运行过程中,其值可以被改变的量称为变量。 2.变量的两个要素 (1)变量名。每个变量都必须有一个名字变量名 ,变量命名遵循标识符命名规则。 (2)变量值。在程序运行过程中,变量值存储在内存 中。在程序中,通过变量名来引用变量的值。 实际上变量是内存中的一个存储区,在存储区中存 放着该变量的值,每个变量有一个名字,如:x,sum, area等。 12 3.变量的定义与初始化 在语言中,要求对所有用到的变量,必须先定义、后 使用;定义变量的目的是为变量在内存中申请存放数据的内 存空间。 在定义变量的同时进行赋初值的操作为变量初始化。 (1)变量定义的一般格式 数据类型 变量名, 变量名2; 例如,float radius, length, area; (2)变量初始化的一般格式 数据类型 变量名=初值, 变量名2=初值2; 例如,float radius=2.5, length2.5, area=2.5; 但 float radius=length=area=2.5;是错误的! 13 基本数据类型 C语言的基本数据类型包括: 整型 实型 字符型 枚举型(本次课不讲) 14 整型数据 1. 整型常量 整型常量即整型常数。C语言中,整型常量可用3种 表示方式: 十进制数:以非0数字开头的数,如123,-5,0。 八进制数:以数字0开头的数,如0123表示八进制数 (123)8,等于十进制数83。 十六进制数:以0x或0X开头的数,如0x123表示十六 进制数(123)16,等于十进制数291。 15 2.整型变量 C语言中的整型变量分为short int、int和long int三 种类型,每种类型又分为有符号类型和无符号类型,分别 用unsigned和signed表示,缺省为signed类型。 类型比特数最小取值范围 signed int16 -3276832767 即-215(215-1) unsigned int16 065535 即0(216-1) signed short int16 -3276832767 即-215(215-1) unsigned short int16 065535 即0(216-1) long int32-21474836482147483647 即-231(231-1) unsigned long int32 04294967295 即0(232-1) 如果在整常数后面加字母U或u,表示short int型常数; 加字母L或l表示long int型常数。 16 显然,不同类型的整型变量,其值域不同。占用内存字 节数为n的(有符号)整型变量,其值域为:-2n*8-1(2n*8-1- 1);无符号整型变量的值域为:0(2n*8-1)。 整型变量的定义 变量的定义形式为: 数据类型 变量名表; 其中变量名表的变量可为1个或多个,中间用逗号“,”分 隔。 如:int a,b,sum; unsigned long x; 17 实型数据 一、实型变量 语言的实型变量,分为三种: (1)单精度型。类型关键字为float,一般占字节 (位)、提供6-位有效数字。 (2)双精度型。类型关键字为double,一般占个 字节、提供15-16位有效数字。 (3)长双精度型。类型关键字为long double,一般占 10个字节、提供1819位有效数字。 18 二、实型常量 .表示形式 实型常量即实数,在语言中又称浮点数,其值有 两种表达形式: (1)十进制形式。由数字和小数点组成(必须有小 数点),但小数点前后的0可以省略,如0.12,.12, 123.0,123.,0.等。 (2)指数形式:E(e)。注意e( 或E)前面要有数字,且e(或E)后面的指数必须为整数 。如1.E2,2.3e3.5,e2等都是不合法的表示形式。 .关于类型 一个实型常数默认为double型。要表示float型数, 则必须在实数后加上字母f或F。表示long double型数, 则必须在实数后加字母l或L。 19 “规范化的指数形式”:在字母e(或E)之前的小数部分 中,小数点左边应有一位(且只能有一位)非零的数字 。一个实数在用指数形式输出时,是按规范化的指数形 式输出的。 说明:1. 123.456E0 12.3456E1 1.23456E2 0.123456E3 1234.56E-1 123.456规范化的指数形式 20 字符型数据 一、字符常量 1.字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,A、等。 2.转义字符 语言还允许使用一种特殊形式的字符常量,就是以 反斜杠“ ”开头的转义字符,意思是将反斜杠后面的字 符转变成另外的意义。 注意:如果反斜杠或单引号本身作为字符常量,必须 使用转义字符:、。 21 转义字符含 义ASCII值 0表示字符串结束0 n换行,将当前位置移到下一行开头10 t水平制表(跳到下一个Tab的位置)9 v垂直制表11 b左退一格8 r回车,将当前位置移到本行开头13 f换页 ,将当前位置移到下页开头12 a响铃7 单引号39 “双引号34 反斜杠“”92 ddd1到3位八进制数代表的字符 xhh1到2位十六进制所代表的字符 22 “ddd”、“xhh”是用ASCII码表示一个字符。 如101、x41代表ASCII为65的字符A; 012、xa代表ASCII码为10的换行符等。用 这种方法可以表示任何可输出的字母字符、专 用字符、图形字符和控制字符。 说明: 23 例: void main() printf(“x4Fx4Bx21n”); /* 等价于printf(“OK!n”); */ printf(“x15 xABn”); ! 程序演示 printf(“xf” ) 24 二、字符变量 1.定义 字符变量用来存放字符常量。注意只能存放一个字符。 定义形式: char c1,c2; c1=a; c2=b; 一般以一个字节来存放一个字符,或者说一个 字符变量在内存中占一个字节。 25 字符数据在内存中的存储形式及使用方法 1. 字符数据在内存中以相应的ASCII码存放, 占1个字节 2. 字符数据和整数在一定范围内互相通用 97 98 c1=ac2=b 01100001 01100010 26 2.特性 字符数据在内存中存储的是字符的ASCII码 一个无 符号整数,其形式与整数的存储形式一样,所以语言允 许字符型数据与整型数据之间通用。 (1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。 例:字符变量的字符形式输出和整数形式输出。 void main() char ch1,ch2; ch1=a; ch2=b; printf(“ch1=%c,ch2=%cn”,ch1,ch2); printf(“ch1=%d,ch2=%dn”,ch1,ch2); ch1=a,ch2=b ch1=97,ch2=98 27 (2)允许对字符数据进行算术运算,此时就是对它 们的ASCII码值进行算术运算。 例:字符数据的算术运算 void main() char ch1,ch2; ch1=a; ch2=B; /*字母的大小写转换*/ printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32); /*用字符形式输出一个大于256的数值*/ printf(“ch1+200=%dn“, ch1+200); printf(“ch1+200=%cn“, ch1+200); printf(“ch1+256=%dn“, ch1+256); printf(“ch1+256=%cn“, ch1+256); 运行结果: ch1=A,ch2=b ch1+200=297 ch1+200=) ch1+256=353 ch1+256=a 思考题:用字符形式输出一个大于256的数值,会得 到什么结果? 28 main( ) int i; char c; i=a; c=97; printf(“%c,%dn“,c,c); printf(“%c,%dn“,i,i); 输出结果为:a,97 a,97 (3)字符数据和整型数据还可以相互赋值。 29 三、字符串常量 1.字符串常量的概念和字符串长度 字符串常量是用一对双引号括起来的若干字符序列。 字符串中字符的个数称为字符串长度。 长度为0的字符串(即一个字符都没有的字符串)称为空 串,表示为“” (一对紧连的双引号)。 30 例如,“How do you do.”、“Good morning.”等, 都是字符串常量,其长度分别为14和13(空格也是一个 字符)。 如果反斜杠和双引号作为字符串中的有效字符,则 必须使用转义字符。 例如:(1)C:msdosv6.22 “C:msdosv6.22“ (2)I say:“Goodbye!“ “I say:“Goodbye!“ 31 2.字符串的存储 C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一 个0作为字符串的结束标志。 注意:在源程序中书写字符串常量时,不必加结束字符0,否则画 蛇添足。 如果有一个字符串为“CHINA”,则它在内存中的实际存储如下 所示: 最后一个字符0是系统自动加上的,它占用字节而非字节内存空 间。 CHINA0 32 综上所述,字符常量A与字符串常量“A“是两回事: (1)定界符不同:字符常量使用单引号,而字符串 常量使用双引号; (2)长度不同:字符常量的长度固定为1,而字符串 常量的长度,可以是0,也可以是某个整数; (3)存储要求不同:字符常量存储的是字符的ASCII 码值,而字符串常量,除了要存储有效的字符外,还要 存储一个结束标志0。 33 指针类型 1 1、地址地址 在计算机中,把内存区划分为一个一个的存储单元,每个单元在计算机中,把内存区划分为一个一个的存储单元,每个单元 为一个字节(位),它们都有一个编号,这个编号就是为一个字节(位),它们都有一个编号,这个编号就是内存单元内存单元 的地址的地址。 说明:说明: 1 1、每个变量都占有各自的内存单元,具、每个变量都占有各自的内存单元,具 有相应的地址有相应的地址 。 2 2、一个变量所占有的内存单元个数是由、一个变量所占有的内存单元个数是由 其类型决定的。其类型决定的。 3 3、首地址:变量所占第、首地址:变量所占第1 1个字节的地址个字节的地址 4 4、注意、注意表示地址的数表示地址的数与与整数整数的不同:属的不同:属 于不同的数据类型于不同的数据类型( (指针、整型指针、整型) ) 34 2 2、指针指针 一个变量占有内存单元,具有相应的地址,通过地址能找到所一个变量占有内存单元,具有相应的地址,通过地址能找到所 需的变量,可以说:需的变量,可以说:地址地址“ “指向指向” ”该变量该变量。 因此,把一个因此,把一个变量的地址变量的地址称为该变量的称为该变量的“ “指针指针” ”。 可以定义一种变量,专门用来存放其它变量的地址(指针),可以定义一种变量,专门用来存放其它变量的地址(指针), 这种变量称为这种变量称为指针变量指针变量。 变量的指针变量的指针就是变量的地址。就是变量的地址。 指针变量指针变量就是存放变量地址的变量。就是存放变量地址的变量。 整型变量整型变量i i 指针变量指针变量ipip 如何使如何使ipip和和i i建立联系?建立联系?赋值:赋值: ipip= 10 20002000 i i 30003000 ipip 20002000 35 算术运算与算术表达式 在语言中,除控制语句和输入输出函数外,其它所 有基本操作都作为运算符处理。 1.五种基本算术运算符 +、-(减法/取负)、*、/、%(求余数) (1)关于除法运算 / C语言规定:两个整数相除,其商为整数,小数部分被舍弃。 例如,5 / 2 = 2。 (2)关于求余数运算 5%2=1 要求两侧的操作数均为整型数据,否则出错。 2.表达式和算术表达式 (1)表达式的概念 用运算符和括号将运算对象(常量、变量和函数等)连接起 来的、符合语言语法规则的式子,称为表达式。 36 (2)算术表达式的概念 表达式中的运算符都是算术运算符。 例如,3 + 6 * 9、(x + y) / 2 - 1等,都是算术表 达式。 37 3.运算符的优先级和结合性 运算符有优先级和结合性,在求表达式的 值时,要按照优先级的高低依次计算,如果运算对象 两侧的优先级相同,则按规定的结合方向进行。 38 优先级 - (负号运算符) * / % + - (加减运算符) 我最高! 我最低! 39 结合性 注: 取负运算符的结合性是自右向左 所谓结合性是指,当一个操作数两侧的运算符具有相同 的优先级时,该操作数是先与左边的运算符结合,还是先与 右边的运算符结合。 自左至右的结合方向,称为左结合性。反之,称为右结 合性。 结合性是语言的独有概念。除单目运算符、赋值运算 符和条件运算符是右结合性外,其它运算符都是左结合性。 40 表达式求值 1)按运算符的优先级高低次序执行。 例如, 3 + 6 * 9、(x + y) / 2 - 1 2)如果在一个运算对象(或称操作数)两侧的运算符的优 先级相同,则按语言规定的结合方向(结合性)进行。 例如,算术运算符的结合方向是“自左至右”,即:在执行“a b + c” 时,变量b先与减号结合,执行“a - b”;然后再执行加c的运算。 41 不同类型数据的混合运算 C语言中,整型、实型和字符型数据间可以混合运算(因为 字符数据与整型数据可以通用)。 (1)当运算符两侧的数据类型不同时,不同类型的数据要先转 换成同一类型,然后进行运算。转换的规则如图所示: 高 double float long unsigned 低 int char, short 42 说明 横向向左的箭头表示必定的转换。 如字符型(char)数据和短整型(short)数据必定先转换 成整型(int),以提高运算精度。 纵向的箭头表示当运算对象为不同类型时转换的方向。 数据总是由低级别向高级别转换。 如:int数据与double数据进行运算,则 intdouble; int数据与long数据进行运算,则 intlong 注意:箭头方向只表示数据类型由低向高转换,int转换成double不要理解 为int型先转换成unsigned型,再转换成long型,最后转换成double型。 43 例如: (double)a (等价于(double)(a) /*将变量a的值转换成double型*/ (int)(x + y) /*将x+y的结果转换成int型*/ (float)5 / 2(等价于(float)(5)/2) /*将5转换成实型,再除以2(=2.5)*/ (float)(5 / 2) /*将5整除2的结果(2)转换成实型(2.0)*/ 注意:强制转换类型得到的是一个所需类型的中间量,原表 达式类型并不发生变化。 例如:若x原为实型变量且值为2.6,在执行i=(int)x后得到 一个整数2,并把它赋给整型变量i,但x仍为实型,值为2.6 。 (2)除自动转换外,语言也允许强制转换。 数据类型强制转换的一般格式为:

温馨提示

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

评论

0/150

提交评论