kj-第2章数据类型、运算符和表达式.ppt_第1页
kj-第2章数据类型、运算符和表达式.ppt_第2页
kj-第2章数据类型、运算符和表达式.ppt_第3页
kj-第2章数据类型、运算符和表达式.ppt_第4页
kj-第2章数据类型、运算符和表达式.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计 第2章数据类型、运算符和表达式 第2章 数据类型、运算符与表达式 本章概述 本章的学习目标 主要内容 1 C语言程序设计 第2章数据类型、运算符和表达式 本章概述 l本章主要介绍C程序中经常用到的常量、变 量、基本数据类型(整型、实型、字符型 )、运算符(算术运算符、赋值运算符、 强制类型转换运算符、自增自减运算符、 逗号运算符、求字节运算符)、表达式( 算术表达式、赋值表达式、逗号表达式) 等内容。 2 C语言程序设计 第2章数据类型、运算符和表达式 本章的学习目标 l本章教学目的: l 掌握整型、实型和字符型常量、变量的基本 使用方法,掌握变量赋初值方法、混合运算规则 、算术运算符和表达式的用法,理解赋值表达式 和逗号表达式。 l本章教学重点: l 整型、实型和字符型常量、变量的基本使用 方法,算术运算符和表达式的用法 l本章教学难点: l 混合运算规则、赋值表达式和逗号表达式 3 C语言程序设计 第2章数据类型、运算符和表达式 主要内容 l2.1 C语言的数据类型 l2.2 常量和变量 l2.3 整型数据 l2.4 实型数据 l2.5 字符型数据 l2.6 算术运算符和算术表达式 l2.7 赋值运算符和赋值表达式 l2.8 其它运算符和表达式 4 C语言程序设计 第2章数据类型、运算符和表达式 2.1 C语言的数据类型 5 C语言程序设计 第2章数据类型、运算符和表达式 2.2 常量和变量 2.2.1 常量 l在程序运行过程中,其值不能被改变的量称为常量。 l常量分为: l(1)整型常量(如369、0、-547); l(2)实型常量(如2.71828、-9.8、3.14159); l(3)字符常量(如A、a、#、3); l(4)符号常量用一个标识符代表一个常量。例如若 在程序开始有这样的预处理命令:“# define N 10”,那 么C预处理程序会将程序中所有的N用10代替。 6 C语言程序设计 第2章数据类型、运算符和表达式 l2.2.2 变量 l在程序运行过程中,其值可以被改变的量称为变 量。 l在使用一个变量前,必须先定义该变量,就是为 该变量起个名字并声明它的数据类型。根据定义 ,编译系统在内存中为该变量分配存储单元,在 该存储单元中存放该变量的值。 l用来标识变量名(或符号常量名、函数名、数组 名、类型名、文件名)的有效字符序列称为标识 符。C语言规定,标识符只能由英文字母、数字 、下划线三种字符组成,并且第一个字符必须是 字母或下划线。 7 C语言程序设计 第2章数据类型、运算符和表达式 l注意,大写英文字母和小写英文字母是不同的字符, 例如aver和Aver是两个不同的标识符。为变量起名 字时一般用小写英文字母。 l变量定义的一般格式: l 存储类型 数据类型 变量名1, 变量名2; l例如: int a, b, number, sum; l称在定义变量的同时对变量进行赋初值的操作为变量 初始化。 l变量初始化的一般格式: l存储类型 数据类型 变量名1=初值1, 变量名2= 初值2; l例如:float radius=2.5, length=3.6, area; 8 C语言程序设计 第2章数据类型、运算符和表达式 2.3 整型数据 l整型常量即整常数,在语言中,整型常量可 用三种形式表示: l(1)十进制,例如456、0、-789。 l(2)八进制(以数字开头),例如0123, 即(123)8,等于十进制的83。 l(3)十六进制(以数字+小写字母x开头), 例如0x23, 即(23)16, 等于十进制的35。 l2.3.1 整型常量 9 C语言程序设计 第2章数据类型、运算符和表达式 l2.3.2 整型变量 l根据变量的取值范围,整型变量可分为:基本整型(类型关键字 为int)、短整型(类型关键字为short int)、长整型(类型关 键字为long int)。 l对以上三种都可以加上修饰符unsigned,指定是“无符号数”。 不加修饰符unsigned的,隐含是有符号(signed)。即有符号 的,signed可以省略不写。 l归纳起来,整型变量有以下6种: l有符号基本整型 signed int l无符号基本整型 unsigned int l有符号短整型 signed short int l无符号短整型 unsigned short int l有符号长整型 signed long int l无符号长整型 unsigned long int l(方括弧内的部分可以省略,如unsigned long int与 unsigned long等价。) 10 C语言程序设计 第2章数据类型、运算符和表达式 l数据在内存中是以二进制形式存放的。若 不指定是无符号型unsigned或指定是有符 号型signed,则存储单元的最高位是符号 位(0为正,1为负)。 l若指定是无符号型unsigned,则存储单元 的全部二进制位(bit)都用来存放数本身 ,而不包括符号。 11 C语言程序设计 第2章数据类型、运算符和表达式 lC标准没有具体规定以上各类数据所占内存大小,只要求 long型数据不短于int型,short型不长于int型,怎样实现 由计算机系统自行决定。例如在微机上,short和int型占 2个字节,long型占4个字节。 l表2.1列出了ANSI标准定义的各种整数类型和有关数据, 其中“最小取值范围”是指不能低于此值,但可高于此值, 如有的C编译系统规定一个int型数据占4个字节。 表2.1 ANSI标标准定义义的各种整数类类型和有关数据 类型 字节数最小取值范围 signed int unsigned int signed short int unsigned short int signed long int unsigned long int 2 2 2 2 4 4 -3276832767 即 215 (215-1) 065535 即 0 (216-1) -3276832767 即 215 (215-1) 065535 即 0 (216-1) -21474836482147483647 即 231 (231-1) 04294967295 即 0 (232-1) 12 C语言程序设计 第2章数据类型、运算符和表达式 l2.3.3 整型数据的输入输出 l可以使用scanf函数和printf函数进行数据的输入输出。 lscanf函数的功能是按照指定格式将标准输入设备输入的 内容送入变量中,printf函数的功能是按照指定格式在标 准输出设备上显示数据。“指定格式”需要使用格式说明符 %和格式字符,显示整型数的格式字符有英文字母d、o、 x、u等。 l具体含义如下: l%d表示把数据按十进制整型输入(输出); l%o表示把数据按八进制整型输入(输出); l%x表示把数据按十六进制整型输入(输出); l%u表示把数据按无符号整型输入(输出)。 l除了%d格式之外,上面的其余几种格式都将数据作为无 符号数输入(输出)。 l如果输入(输出)的是长整型数,一定要在转换字符的前 面加字符l(字符L的小写),否则显示可能不对。 13 C语言程序设计 第2章数据类型、运算符和表达式 例2.1 整型数据的输出。 l#include lint main() l int a=200,b=100,c; l c=a+b+15; l printf(“%d,%d,%d,%dn“, a,b,c,a-b-70); l printf(“%o,%o,%o,%on“, a,b,c,a-b-70); l printf(“%x,%x,%x,%xn“, a,b,c,a-b-70); l return 0; l l运行结果如下: l200,100,315,30 l310,144,473,36 lC8,64,13b,1e 14 C语言程序设计 第2章数据类型、运算符和表达式 l#include lint main() l int a,b,c; unsigned d;long e; l scanf(“%d,%o,%x,%u,%ld “, l printf(“%d,%d,%d,%u,%ld n“, a,b,c,d,e); l return 0; l l若输入为: l10,10,10,65533,654321 (回车符) l显示结果为: l10,8,16,65533,654321 例2.2 整型数据的输入。 15 C语言程序设计 第2章数据类型、运算符和表达式 2.4 实型数据 2.4.1 实型常量 l实数又称浮点数,有两种表示形式: l(1)十进制小数形式:由数字和小数点组成,必须有 小数点,例如3.14159、0.0、9.0、.12345、-9.8等。 l(2)指数形式:E(或e)。例如 1.23E3、2.71e-5(分别代表1.23103、2.7110-5) 等。注意:E(或e)的两边必须有数字,且后面的指数 必须是整数。 l一个实数有多种指数表示形式。例如314.159可以表示 为3141.59E-1、314.159E0、3.14159E2、 0.314159E3等,把其中的3.14159E2称为“规范化的指 数形式”,即小数点左边有且只有一位非零数字。 16 C语言程序设计 第2章数据类型、运算符和表达式 l实型变量分为单精度型和双精度型,有的C版本还支持长双 精度型(long double)。 l(1)单精度型。类型说明符为float,在内存中占个字节 (32位),有效数字的个数是位十进制数字,数值范围- 3.410-383.4 1038 。 l(2)双精度型。类型说明符为double,在内存中占个字 节(64位),有效数字的个数是15位十进制数字,数值范围 -1.710-3081.7 10308 。 l2.4.2 实型变量 17 C语言程序设计 第2章数据类型、运算符和表达式 2.4.3 实型数据的输入输出 l可以使用%f和%e控制输入(输出) float类型的数据, l可以使用%lf和%le控制输入(输出) double类型的数据。 18 C语言程序设计 第2章数据类型、运算符和表达式 例2.3 实型数据的输入输出。 l#include lint main() l float a,b; double x,y; l scanf(“%f,%e,%lf,%le“, l printf(“%f,%e,%lf,%le n“, a,b,x,y); l return 0; l l若输入为: l3.1415,314.15,123.456,12345.6 (回车符) l显示结果为: l3.141500,3.14150e+02,123.456000,1.23456e+04 l若输入为: l3.1415926,666.666666,123456789.123456789, 123456.7898765 l显示结果为: l3.141593,6.66667e+02,123456789.123457,1.23457e+05 从显示可见:对于十 进制小数形式,单精度型 和双精度型的有效数字分 别是7位和15位。对于十 进制指数形式,都是6位 有效数字。 19 C语言程序设计 第2章数据类型、运算符和表达式 lC的字符型常量是用一对单引号括起来的单个字符,例如 ,A、3、a、?等都是字符型常量。注意A和a是不 同的。 l还有一种特殊形式的字符型常量,就是以转义符“”开头 的一些字符构成的转义序列。例如n表示“回车换行”。 常见的转义字符如表2.2所示。 l表中ddd表示1到3位8进制数所代表的字符,例如101 代表字符A,77代表字符?,43代表字符#。 l表中xhh表示1到2位16进制数所代表的字符,例如x61 代表字符a,x23代表字符#。 l表中t表示横向跳格,跳到下一个制表位置,一个制表区 占8列,执行t就是将当前位置跳到下一个制表区的开头 。 2.5 字符型数据 2.5.1 字符型常量 20 C语言程序设计 第2章数据类型、运算符和表达式 表2.2 常见转义字符及其含义 字符 形 式 含义 a b f n r t ” d dd x hh 0 警告声 退格,将当前位置 移到前一列 换页 ,将当前位置 移到下一页开头 换行,将当前位置 移到下一行开头 回车,将当前位置 移到本行开头 横向跳格,跳到下 一个tab位置 反斜线字符 单撇号字符 双撇号字符 1到3位8进制数所代 表的字符 1到2位16进制数所 代表的字符 字符串终止字符 21 C语言程序设计 第2章数据类型、运算符和表达式 例2.4 转义字符的使用 l#include lint main() l printf(“A102x43DEtbbx2343x61x62n“); lprintf(“A53“101“tb43141142x63bx64n“); l return 0; l l显示结果为: l ABCDE#ab l A+“A”#abd 22 C语言程序设计 第2章数据类型、运算符和表达式 2.5.2 字符串常量 l字符串常量是用一对双引号括起来的若干字符序 列。例如:“How are you”,“No.345”。 lC编译程序在存储字符串常量时自动采用字符0 作为字符串结束标志,字符0的ASCII码值为0, 它不引起任何控制动作,也不是一个可显示的字 符。 l因此,字符串“Good”在内存中要占5个字节数, 而不是4个。 l注意:A和“A”是不同的,A是字符常量,在内 存占1个字节数;“A”字符串常量,在内存占2个 字节数,包含A和0两个字符。 23 C语言程序设计 第2章数据类型、运算符和表达式 2.5.3 字符型变量 l字符变量的类型说明符为char,例如:“char c1,c2;” 表示定义了两个字符变量。 l字符变量用来存储字符常量,一个字符变量只能存储1个 字符,即只能存储1个字节的信息,就是说一个字符变量 在内存中占一个字节。例如用如下语句给上面定义的字符 变量c1、c2赋值: lc1=A;c2=B; l将一个字符常量放到一个字符变量中,实质上是将该字符 常量对应的ASCII代码放到了字符变量中,系统为字符变 量所分配的一个字节的存储单元中,存放的是该字符常量 的二进制形式的ASCII代码,例如A的ASCII代码是65, 65的二进制形式是01000001,所以系统为c1所分配的一 个字节中,存放的是01000001。 24 C语言程序设计 第2章数据类型、运算符和表达式 2.5.4 字符数据的输入输出 l可以使用%c控制输入(输出)char类型的数据。 l例2.5 字符变量值的输入输出。 l#include lint main() l char c1,c2,c3=P; l scanf(“%c“, l c2=D; l printf(“%c%c%c“ ,c1,c2,c3); l printf(“,%c,%c,%c n “ ,c1,c2,c3); l return 0; l 若输入为: G 输出结果为: GDP,G,D,P 25 C语言程序设计 第2章数据类型、运算符和表达式 例2.6 将大写英文字符转换为小写英文字符。 l#include lint main() l char c1,c2; l printf(“请输入2个两个大写英文字符:“); l scanf(“%c, %c“, l printf(“%c%c “, c1, c2); l c1=c1+32; c2=c2+32; l printf(“%c, %cn “ , c1, c2); l return 0; l 若输入为: A, B 输出结果为: AB a, b 26 C语言程序设计 第2章数据类型、运算符和表达式 2.6 算术运算符和算术表达式 2.6.1 算术运算符 l基本的算术运算符有如下五种: l+(加法运算符、或正值运算符,如13+25、+9); l-(减法运算符、或负值运算符,如32-15、-2); l*(乘法运算符,如4*7、5.6*7.8); l/(除法运算符,如32/5、1.23/3.45); l%(求余数运算符,或称取模运算符,如8%5的值为 3)。 27 C语言程序设计 第2章数据类型、运算符和表达式 l关于除法运算符/: l若是两个整数相除,其商为整数,小数部分被舍弃。例如 ,5/2的结果不是2.5,而是2;12/24的结果是0。若除数 和被除数中有一个是浮点数(实数),则与数学的运算规 则相同,例如6/4.0、6.0/4、6.0/4.0的结果都是1.5。 l关于求余数运算符: l要求两侧的操作数均为整型数据,结果的符号与%左边的 符号相同。例如16%4的结果是0,-17%4的结果是-1, 18%-4的结果是2,-19%-4的结果是-3。可以利用%运算 来判断一个数能否被另一个数整除。 28 C语言程序设计 第2章数据类型、运算符和表达式 2.6.2 算术表达式 l(1)算术表达式的概念 l用算术运算符和圆括号将运算对象(常量、变量和函数等 )连接起来的、符合语言语法规则的式子,称为C算术 表达式。 l单个常量、变量或函数,可以看作是表达式的一种特例。 l例如数学表达式(2x+3y)(4xy),写成语言的算术 表达式,应该是: l(2*x+3*y)/(4*x*y),或(2*x+3*y)/4/x/y,不能是 (2x+3y)/(4xy), l也不能是2*x+3*y/(4*x*y), l也不能是(2*x+3*y)/4*x*y。 29 C语言程序设计 第2章数据类型、运算符和表达式 l算术表达式的结果不应超过其能表示的数的范围。例如int 型数的范围是-32768至32767,下面程序中的算术表达式 x+y超过了32767,赋给z显然是错的。 lmain() l int x, y, z; l x=31500; y=24600; l z=x+y; l printf(“%d”, z); l l若将x、y和z定义为long型,就没有问题了。 30 C语言程序设计 第2章数据类型、运算符和表达式 l(2)算术运算符的优先级与结合性 l表达式求值时,按运算符的优先级别高低,按次序执行。 算术运算符的优先级是:先乘除,后加减;求余数运算的 优先级与乘除相同;函数和圆括号的优先级最高。 l所谓结合性是指:当一个操作数两侧的运算符具有相同的 优先级时,该操作数是先与左边的运算符结合,还是先与 右边的运算符结合?自左至右的结合方向,称为左结合性 。反之,称为右结合性。 l算术运算符的结合方向是“自左至右”,例如:在执行“a b+c”时,变量b先与减号结合,执行“ab”;然后再执行 加c的运算。 31 C语言程序设计 第2章数据类型、运算符和表达式 2.6.3 不同数据类型间的混合运算 l在语言中,整型、实型和字符型数据间 可以混合运算。 l如果一个运算符两侧的操作数的数据类型 不同,则系统按“先转换、后运算”的原则 ,首先将数据自动转换成同一类型,然后 在同一类型数据间进行运算。 l有两种转换方式:自动转换和强制转换。 32 C语言程序设计 第2章数据类型、运算符和表达式 1自动转换 l自动转换就是系统根据规则自动地将两个不同数据 类型的运算对象转换成同一数据类型。自动转换又 称为隐式转换。自动转换的规则如图2.1所示。 图2.1中,横向向右的箭头表示的是必须的转换。char和short 型必须转换 成int型参与运算,float型必须转换成double型参与运算(即使是两个float型 数据相加,也要先转换成double型,然后再相加)。 图2.1中,纵向箭头表示的是当运算对象为不同类型时转换的方向。例如 ,若int型与double型数据进行混合运算,则先将int型数据转换成double型, 然后进行运算,结果为double型。纵向箭头的方向只是表示数据类型的高低, 由低向高转换,不要理解为int型先转换成unsigned型,然后再转换成long型 ,然后再转换成double型。 图2.1 33 C语言程序设计 第2章数据类型、运算符和表达式 注意: l自动转换只是针对一个运算符两侧的两个运算对 象,不能对表达式中的所有运算符涉及到的运算 对象做一次性的自动转换。 l例如,表达式6.0/5+4.32和表达式6/5+4.32, l前者的值是5.52,后者的值是5.32。 l因为6.0/5是先将5转换成实型后进行运算,值是 1.2,再与4.32相加,值是5.52。 l而6/5是按int型运算,值是1,再与4.32相加,值 是5.32; l不要理解成将6/5+4.32中的每个数全部转换成实 型后再运算。 34 C语言程序设计 第2章数据类型、运算符和表达式 2强制转换 l编写程序时,可以利用强制类型转换运算符将一个表达式的 值转换成所需类型,强制转换的格式为: l (类型名)(表达式) l例如: l(float)a l将a转换成float型。注意不能写成float(a)。 l(int)3.45 l将3.45转换成int型。 l(double)(7%6) l将7%6的值转换成double型。 l(float)(x+y) l将x+y的值转换成float型。注意不能写成(float)x+y。 35 C语言程序设计 第2章数据类型、运算符和表达式 2.7 赋值运算符和赋值表达式 2.7.1 赋值运算符 l1普通赋值运算符 l普通赋值运算符就是“=”,它的作用是将运算 符右侧表达式的值赋给运算符左侧的变量。 l例如“x=1.23”的作用是将常量1.23赋给变量x ,“y=3*x+5.26”的作用是将表达式3*x+5.26 的值赋给变量y。 l例如“x= x+1”的作用是:将变量x原来的值加 1后再赋给变量x,若变量x原来的值是2,则 执行“x= x+1”后,变量x的值是3。 36 C语言程序设计 第2章数据类型、运算符和表达式 2复合赋值运算符 l复合赋值运算符是在普通赋值运算符“=”的前面加上 其它运算符,复合算术赋值运算符有如下5个: l+=、-=、*=、/=、%= l另外还有5种复合赋值运算符(=、 l i=6; l j=+i; /*表达式+i的值是7 */ l k=i+; /*表达式i+的值是7 */ l printf(“%d,%d,%dn “ ,j,k,i); l i=-6; l j=-i; /*表达式-i的值是-7 */ l k=i-; /*表达式i-的值是-7 */ l printf(“%d,%d,%dn “ ,j,k,i); l return 0; l 输出结果为: 7,7,8 -7,-7,-8 48 C语言程序设计 第2章数据类型、运算符和表达式 要注意的几点: l(1)自增、自减运算符,不能用于常量和表达式。 l 例如,+6、-(i+3*j)等都是非法的。 l(2)自增、自减运算符的优先级高于算术运算符,与单 目运算符-(取负)和!(逻辑非)的优先级相同,结合 方向自右至左。 l 例如-a+等价于-(a+)。 l(3)像“printf(”%d,%d n“ ,i,i+);”这样出现“i, i+”的语句,在不同的编译系统中结果是不同的。 l若i的值是6,按从左至右求值,输出“6,6”;按从右至左 求值,输出“7,6”。Turbo C是按从右至左求值的。 l(4)自增或自减运算符最好单独使用,避免自增或自减 运算与其它运算符混合使用。像i+j这样的很难理解 的表达式,应避免使用。 49 C语言程序设计 第2章数据类型、运算符和表达式 2.8.2 逗号运算符和逗号表达式 lC语言还提供逗号运算符,逗号将两个表达式连接起来,形成一 个表达式,称为逗号表达式。它的一般形式如下: l 表达式1,表达式2 l逗号表达式的求值过程是:先求表达式1的值,再求表达式2的值 ,将表达式2的值作为逗号表达式的值。 l例如,逗号表达式“8-3,6+5”的值是11, l因为表达式6+5的值是11。 l例如,逗号表达式“k=2*3,+k”的值是7, l因为第一个表达式k=2*3的值是6,k的值也是6,所以第二个表 达式+k的值是7。 l注意,赋值运算符的优先级高于逗号运算符,所以“k=2*3, +k”是逗号表达式,不要将其理解为“k=(2*3,+k)”。 l例如,逗号表达式“a=6,a+=9”的值是15。 l因为第一个表达式a=6的值是6,a的值也是6,所以第二个表达 式a+=9(等价于a=a+9)的值是15。 50 C语言程序设计 第2章数据类型、运算符和表达式 l一个逗号表达式可与另一个表达式组成新的逗号表达式, 例如“(k=2*3,+k),4*k”就是这样的逗号表达式。 l对于这样的逗号表达式,先计算逗号表达式“(k=2*3, +k)”的值,再计算表达式“4*k”,“4*k”的值就是“( k=2*3,+k),4*k”的值,而“4*k”的值是28,所以这个 逗号表达式的值是28。 l逗号表达式的一般形式可以扩展为: l 表达式,表达式,表达式n

温馨提示

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

评论

0/150

提交评论