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

下载本文档

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

文档简介

第二章数据类型、运算符与表达式,2.1 C的数据类型 2.2 常量与变量 2.3 整型数据 2.4 实型数据 2.5 字符型数据 2.6 变量的赋值 2.7 各类数值型数据之间的转换 2.8 算术运算符和算术表达式 2.9 赋值运算符和赋值表达式 2.10 逗号运算符与逗号表达式,2.1 C的数据类型,整型 字符型 基本类型 实型(浮点型)单精度型 双精度型 枚举类型 数据类型 数组类型 构造类型 结构体类型 共用体类型 指针类型 空类型,2.2 常量与变量,一、 常量与符号常量 常量:在程序运行中,其值不可能被改变的 量称为常量。如任何数字值、单个字 符或字符串及转义符均为常量。 类型:常见的常量类型有int,char,float(double), 字符常量要用单引号引起来(或双引 号括起来),符号常量:用标识符代表一个常量。格式为: #define PRICE 30 (宏定义命令) 注: #define为宏定义命令,表示用PRICE来代表常量30。 宏定义#define的作用域由定义的起始位 置至宏定义解除(#undef 标识符)处 或本程序末尾。 宏定义命令#define必须写在函数的最 前面,且此句之后不带分号。, 在宏定义的作用域内,该符号(标识符) 不能再被重新赋值。 习惯上符号常量用大写,变量用小写, 以示区别。,二、变量,定义:程序执行过程中其值可以被改变的量称 为变量。 标识符:C 语言中用来标识变量名,函数名, 数组名,类型名,文件名的有效字符 序列称为标识符。,变量的定义:C语言中所有变量都必须先定义后使用。 标识符规定:只能由字母,数字,下划线三种字符组成,且第一个字符必须为 字母或下划线。 标识符长度:系统不同,允许的长度不同,一般取长度8即可,标识符大小写不 通用。 变量的基本类型有:int , float , char , num.,例1 指出以下哪些是非法变量名?,value$ sum Piece Flag s5_9 3sp _sy5tem int, $为非法变量名字符 变量名中间不允许有空格 不允许数字打头 C语言中的保留名或关键字,2.3 整型数据,一、整型常量: 整型常量即整常数(可正可负),C中的(int) 常量有三种形式:十进制、八进制、十六进制。 1. 十进制整数:由正负号与09共10个数字组 成,终端输出时printf中的格式为 %d。 2.八进制整数:由正负号与07共8个数字组成, 且八进制整常量第一个数字一定为0,例-011, 终端输出时printf中的格式为%o(字母o),十六进制整数:由正负号与0F共16个字符组成,此类常数最前面要由数字0和字母x 引导,如:-0x12, 输出函数printf 中格式规定为%x。,二、整型变量: 有四类:int, short(int), long(int), unsigned(int)或:unsigned(short)、 unsigned (long ) 。,各类型整型变量所占内存字节数,在C语言中没有统一规定,看 P113表2.1,三、整型常量与变量的关系: 1常量在-215215-1之间可以赋给int和long int型变量(16位)。 2常量在-231231-1之间可以赋给long int型变量(32位)。 3若short型长度与int数范围相同,则它们可互相赋值。 4非负的整常量可以赋给相应的unsigned变量。 5在一个整常量后面加字母l或L,则此整常 量被认为是long型常量。,2.4 实型数据,一、实型常量:有两种表示方法: 1.十进制表示形式:由小数点、正负号和十个数字表示,必须有小数点,且小数点最前面和最后面的0均可省,但两者不可同时省略。 2指数形式(科学计数法):由数字、正负号、 小数点和字母e或E组成。要求字母e或E之 前必须有数字(1也不可省), e或E后面的数字 必须为整数(可带正负号)、此数字代表10的 幂次。 例:123E3=123 103,二、实型变量:(浮点数) 有float和double两种。其中: float实数提供7位有效数字,赋值时当多余7位数字,则7位以上的数字不被变量接收。 float实数一般在内存中占4个字节。(32位) double变量可接受大约16个十进制数,在内存中占8个字节。 long double有效数字为19位,占16个字节。,三、 整数与浮点数的转换: 规定:如果将一个浮点数赋给整型变量,则系统自动将该浮点数的小数部分截取。 如果将一个整数赋给实型变量,则在 数值上不会引起任何变化。 实型数据的舍入误差:,main() float a,b; a=123456.789e5; b=a+20; printf(“%f” ,b); ,输出结果为:123456788848.000000,注意:应当避免将一个很大的数和一个很小的 数直接相加减,否则就会“丢失”小数。,2.5 字符型数据,一、字符常量:有两类: 1单个的ASCII字符:用单引号引起来,在内 存中以ASCII码值的形式存储,看P374附录。 2以反斜杠“ ”开头的字符系列:他们是一些 特殊字符的转义字符,看P48表3.3。,例2 转义字符的使用。 main( ) printf(abctderftgn); printf(htibbjk); 程序运行时在显示屏上得到的结果是: fgde hjk 程序运行时在打印机上得到的结果是: fabcgde hjik,二、字符变量:用char定义 每一个字符变量只能存放一个字符,不能存 放字符串,字符串需用数组来存放。 可以给字符变量赋0255的正整数。因为这 是ASCII码值。 字符变量显示时,可用格式%c显示字符本身, 也可用%d显示字符的ASCII码值。(若定义为signed字符变量时,当ASCII值在0127时显示ASCII码值,若ASCII值在128255时显示-128-1)。,例3 向字符变量赋以整数。 main( ) char cl,c2; cl=97; c2=98; printf(%c %cn,cl, c2); printf(%d %dn,cl, c2); ,程序运行时输出结果是: a b 97 98,例4 大小写字母的转换。 main( ) char cl,c2; cl=a; c2=b; cl=cl-32; c2=c2-32; printf(%c %c,cl, c2); ,程序运行时输出结果是: A B,三、字符串常量与变量: 字符串常量:用双引号引起来的字符序列。 字符串在内存中存放时,系统会自动为字符 串末尾加上结束符O,但书写时不加O,显 示也不会出现任何操作。例:a与“a”不同。 其中: a在内存中以一个字节61H(97)存储, “a”用2个字节61H和00H存储。 字符串常量值若要存放在变量中,必须用字符 数组来存放。做P66 习题3.63.8。,例5 写出以下程序运行的结果。 main( ) char cl=a,c2=b, c3=c; char c4=101, c5=116; printf(a%cb%ctc%ctabcn,cl,c2,c3); printf(tb%c %c,c4,c5); ,程序的运行结果为:,aabbccabc AN,例6 要将“China”译成密码,密码规律是:用原 来的字母后面第个字母代替原来的字母。 例如,字母“”后面第个字母是“”,用 “”代替“”。因此,“China”应译为 “Glmre”。请编一程序,用赋初值的方法使 c1、c2、c3、c4、c5五个变量的值分别为、 h、i、n、a,经过运算,使c1、c2、c3、 c4、c5分别变为G、l、m、r、e,并 输出。,main( ) char c1=C, c2=h, c3=i; char c4=n, c5=a; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf(密码是 %c%c%c%c%cn,c1, c2, c3,c4, c5); ,程序的运行结果为:,密码是 Glmre,例7 例3能否改成如下:运行时显示什么内容? 为什么? main( ) int cl,c2; (原为char cl, c2) cl=97; c2=98; printf(%c %cn,cl,c2); printf(%d %dn, cl,c2); ,解:可以。因为在可输出的字符范围内,使 用整型和使用字符型作用相同。,2.6 变量的赋值,程序中常需要对变量赋予初值,C中赋初值 的方法有以下几种: 在定义变量的同时赋值。 例:float b=3.14; int a,b,c=5; 在变量定义之后再为变量赋值。 例:int a,b,c; a=1; 定义变量的同时可同时给多个变量赋初值。 例:int a=b=c=1; (TC不承认),2.7 各类数值型数据之间的转,C中允许int,float,double和char型数据混合运算,运算时首先必须将不同类型转化为同一类型方可进行运算,转化的规则见右图,转化过程由系统自动进行。, 图中横向向左的箭头是运算过程中必定要进行的转化过程(运算对象相同也要转化)。 图中纵向箭头表示当运算对象为不同类型时的转化方向。,2.8 算术运算符和算术表达,一、C运算符简介:看 P55和 P365附录C 二、算术运算符和算术表达式: 1.基本的算术运算符:+,-,*,/,%(模,求余) 对于除法(/)运算:若两个正整数相除,则 结果为正整数(舍去小数部分) 例:7/3=2 若不同符号的两个整数相除,结果为负整数, 小数舍入方向不固定,有的系统采用四舍五入,有的采用 “向零取整”。例:-5/3=-1.67 有的系 统给出-2,有的给出-1,多数系统采用后种。 除法运算中,只要有一数为实型,则所有数 和结果均为double 型。 模运算符%:只能用于int型数,即两个数均 为int型。要求运算结果与被除数同符号。 例如:7%3=1,-5%3=-2, 5%(-3)=2。, 此类运算符要求所有运算分量都必须是算术 类型。 (int, float 或 double) 2算术运算符的优先级与结合性 优先级:先*、/、%,后+、, 但+,-号用于单目运算时其优先级最高,用于双目 运算时优先级最低,同级运算符按规 定的结合方向处理。 结合方向:自左至右,具有左结合性,即运算时由左向右计算。(先处理操作对象左边的运算符,再处理右边的运算符),注:双目运算符中,除赋值运算符为右结合 外,其余均为左结合。 大部分单目运算符均为右结合。 豆号运算符为左结合。 条件运算符为右结合。 三、强制类型转换运算符: 功能:这样的运算符可以将表达式的值强制转换为所需类型(当系统不能实现自动转换 的情况下使用)。,形式为:(类型名) (表达式) 例: (double) a, (int)(x+y), (float)(7%4) 注意:在运行强制类型转换时,得到一个所需类型的中间变量,而原变量的类型不发生变化。,例1: main() float x=3.6,y=6.7; float i; i=(int)(x+y); printf(“x=%f,y=%f,i=%f” ,x,y,i); ,运行结果为:,x=3.60000,y=6.700000,i=10.000000,3.9 求下面算术表达式的值。 (1) x+a%3*(int)(x+y)%2/4 设x=2.5, a=7, y=4.7 (2) (float)(a+b)/2+(int)x%(int)y 设a=2, b=3, x=3.5, y=2.5,2.5 3.5,功能:使自变量的值加1或减1。 格式: +i; -i; 功能为在使用i值之前先使i的 值加1(或减1) 例:i=3; j=+i;则有: j=4; i=4 i+; i-;功能为先使用i的值,之后再 使i的值加1(或减1) 例:i=3 ;j=i+;则有: j=3; i=4,四、自增自减运算符:+或-,+或-是单个运算符,所以他们之中不能有空 格,否则会被看成两个+或两个-对待。 +或-运算符只能用于变量,而不能用于常量 和表达式,如5+或(a+b)均违法。 自增自减运算符有副作用,因为此类运算符在 运算时不仅可以向外提供一个值,而且同时还 改变了运算分量自身的值,正确使用可使程序 简练,使用不当会出现意想的结果。,例2:x=+i+i ; 对于第一i个,其值先加1,对于第二个i值, 是使用自加前的i值还是使用自加后的i值, 与具体实现有关,结果不确定。所以编程 时尽可能将此副作用隔离,使之仅在一个 小范围内起作用。 如上面语句可改为:+i; x=i+i;或x=2*(+i),例3:k=(i+)+(i+)+(i+) , 设i=3 在Turbo C 和 ms C上: k=(+i)+(+i)+(+i) , 设i=3 在Turbo C 和 ms C上 : 当表达式中连续出现多个+或-时,C编译在处 理时尽可能多的自左而右将若干个字符组成 一个运算符。(希望避免此类写法,以免造 成误解),k=9, i=6,k=18, i=6,例4:x=i+j; 理解为:x=(i+)+j; 最好写成 :x=(i+)+j;或:x=i+ +j; 函数调用时,实参数的求值顺序因不同的系 统而不同,要注意上机试试。 例5:printf(“%d,%d” ,i,i+) ; 设i=3 自左至右求值顺序的系统输出结果为:3,3 自右至左求值顺序的系统输出结果为:4,3 , TC为此结果。, +和-为右结合性。 例6:printf(“%d”,-i+) ; 当i=3时问上述语句执行后的结果及i的值。 输出结果:-3,但i变为+4,先使用i值后 自加 右结合时,-i+相当于:-(i+) 而左结合时,-i+相当于:(-i)+,2.9 赋值运算符和赋值表达式,一、简单赋值运算符“=”及其表达式: 此运算符功能为:将赋值号右边的常量或变量或表达式的值赋给左边的变量。 赋值时注意类型转换: float型数据赋给int型变量,则小数自动舍弃。 int型数据赋给float型变量,数值不变,以浮 点形式存到变量中。, char型数据赋给int型变量:一般将符号位扩展到高8位,但对于unsigned int最高位补0。 带符号的int型数据赋给long int型变量:,对long int型的高16位进行扩展。 无符号数unsigned int赋给long int 型变量,最高位补0即可。 将符号数赋给长度相同的无符号变量时,数值 (连同符号)原样照赋,只是赋值后,原来数值 中的符号(例负号),现在变为数值的最高位了。,二、复合赋值运算符:有十类 它们的格式为:算术运算符或

温馨提示

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

评论

0/150

提交评论