中国石油大学曾怡C课件chapter2w_第1页
中国石油大学曾怡C课件chapter2w_第2页
中国石油大学曾怡C课件chapter2w_第3页
中国石油大学曾怡C课件chapter2w_第4页
中国石油大学曾怡C课件chapter2w_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、数据类型及其运算 第二章1回顾了解 C 语言的发展和特点C语言程序的结构和语法规那么C程序编译和开发过程目标了解标识符列出C语言程序中的各种数据类型并使用它们区分变量和常量讨论变量讨论运算符和表达式C语言的基本元素符号集字符集C语言使用的基本符号共有如下五种1大写字母A-Z 2小写字母a-z 3阿拉伯数字 09 4下划线 _ ( 5 ) 标点符号和运算符,(%.)!& and(与);|xor(异或):/*?-=“b int Class 123x_abcBasic123%number数据类型第14页基本类型C语言数据类型整型(int)实型(浮点型)字符型(char)枚举型(enum)单精度型(f

2、loat) 双精度型(double)构造类型数组类型结构体类型(struct )共用体类型(union)指针类型空类型(void)常量第16-17页常量在程序运行过程中,其值不能被改变的量。例如常量区分为不同类型表示形式书写形式5 数字/整型常量 数字/实数常量“Black 字符串常量其标志为0C,/t 字符常量/转义字符常量#define PI 3.1415926 符号常量#define NAME “王明通过观察区分一下字符串常量和字符常量?符号常量用一个标识符代表的一个常量(放在函数体的外面)定义方法:#define 标识符 常量#define PRICE 30Void main()int

3、 num,total;Num = 10;Total = num*PRICE;Printf(“total=%d,total);变量15内存中的数据数据15内存计算机要为每一项数据分配内存 需要多少内存 数据被存储在哪个通过变量,可以为内存中的位置提供一个有意义的名称是可以改变的量,它用标识符变量名来表示在内存中占一定的存储单元。例如:变量 #define price 30/定义常量 main ( ) int num, total;/定义变量 num=10;/赋初值 total=num * price;/公式计算 printf(“total=%d,total);/输出结果 price是什么,num

4、、total是什么?每个变量有一个名字,即变量名。其遵循标识符的命令规那么。变量的值存储在内存中,不同类型的变量,占用的内存单元数不同。我们通过变量名来引用变量。变量的定义与初始化C 程序中常需要对一些变量先定义后使用。C 语言允许在定义变量的同时使变量初始化。变量定义格式如下:存储类型 数据类型 变量名1,变量名2;例如:int a,b,c,d; /*定义 a,b,c,d为整型变量*/ char c1,c2; /*定义 c1,c2为字符型变量*/float m,n; /*定义 m,n为实型变量*/Double y1,y2;变量的本卷须知见名知意total先定义后使用因为定义就是在计算机里面分

5、配空间,有了空间,我们的计算机才能操作习惯上、符号常量名用大写;变量名小写,表示区分#define PRICE 30/定义常量 main ( ) int num, total;/定义变量 num=10;/赋初值 total=num * price;/公式计算 printf(“total=%d,total);/输出结果 变量的初始化变量初始化的一般格式如下:存储类型 数据类型 变量名1=初值1,变量名2=初值2,;例如: int a=3; /* 指定a为整型变量,初值为3 */float f=3.56;/* 指定f为实型变量,初值为3.56 */char c=a; /* 指定c为字符变量,初值为

6、a */也可以使被定义的变量的一部分赋初值。如: int a,b,c=5;表示指定a、b、c为整型变量,只对c初始化,c的值为5。整型数据整型常量:十进制整型常量由0到9的数字组成,没前缀,不能以0开始,没有小数部分。如-123,45等。八进制整型常量以0为前缀后跟由0到7的数字组成,没有小数部分。如0123相当于83。十六进制整型常量以0 x或0X为前缀后跟由0到9的数字和A到F的字母组成,没有小数部分。如0 x123相当于291。整型常量中的长整型数据可用Ll作后缀。如123L整型常量中的无符号数据可用Uu作后缀。如123U整型数据整型变量:整型变量的分类整型变量根据其数值的范围,可以将变

7、量定义为三类基本整型int2 短整型short int2 长整型long int4为了充分利用变量的表数是范围,又可以将变量定义为:有符号数(signed)(可省略)无符号(unsigned)有符号型基本型:以int说明,占用2字节,如:int I,sum短整型:以short int或short说明,2,如:short s,sum长整型:以long int或long说明,4 ,long l,sum无符号型存放没有符号的整数整型变量的定义例如int a ,b;long num,I,jlunsigned short c,d;不同种类整型数据的运算#include Void main()int a,

8、b,c,d;unsigned u;a = 12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%dn,c,d);整型常量的类型值在-32768+32767范围内,认为是int型值在-2147483648+2147483647内,认为是long int型八进制、十六进制常量的类型根据数值的大小可以是整型、无符号整型066535、长整型或无符号长整型整数后有后缀l或L,认为是long int型在严格要求类型匹配的场合有用,如函数参数整数后有后缀u或U,认为是unsigned型。实型数据实数常量:由整数部分和小数部分组成的。有两种表现形式:定点数形式。由数字和小

9、数点组成。整数和小数部分可以省去一个,但不可两者都省,且小数点不能省。如:1.23,.23,123.,0.0等。指数形式科学表示法。在定点数形式表示法后加Ee和数字。指数部分可正可负,但须为整数,且E前后必须有数字。e3。那e3,12.34e2,1e2.3,.e3,e是否正确?注意:e前后必须有数字,e后必须为整型数实型常量的后缀用Ff表示单精度型,而后缀用Ll表示长双精度型e2fe5L表示双精度数。缺省实型数据实型变量取值范围与值的精度与机器有关单精度float型:占4个字节,7位有效数字3.4e+38双精度double型:占8个字节,1516位有效数字1.7e+308Long double

10、 型:占10个字节,1516位有效数字如:float x,y; double a,b,c;实型数据的舍入误差虽然实型数据的表示形式有两种在程序中但是在内存中均是以指数形式存放。假设数据超过有效位,那么被舍去,故可能产生误差。字符型常量包含字符常量和字符串常量两种。字符常量:是用一对单引号括起来的一个字符如:a,A,b,*,S。实际含义是该字符在内存中的编码,也就是用其对应的ASCII 码。还包括转义字符,以反斜杠符(代表一个字符)开头,后跟字符p18。字符串常量:是用一对双引号括起来的零个或多个字符的序列如:hello,1999,a。系统会为字符串末尾加上字符0(字符串结束标记)。因此长度为n

11、个字符的字符串常量,在内存中要占用n+1个字节的空间。字符型变量字符变量字符变量用来存放字符,且只能存放一个字符。定义方法:char c1,c2;unsigned char c3,c4;字符型变量的赋值方法C1=a;c2=101;c3=0 xff;c4=377;字符数据的存储1、将一个字符常量存放到一个字符变量中,是将该字符的相应ascii代码存放到存储单元中。2、字符数据存储的是ascii码,整型术与整型数据可以相互赋值3、字符数据可以以字符形式输出,也可以用整型数形式输出。运算符分类按照其功能分类: 1算术运算符 (+ - * / % + -) 2关系运算符 ( = = = !=) 3逻辑

12、运算符 (!& |) 4位运算符 ( | & ) 5赋值运算符 (=及其扩展赋值运算符) 6条件运算符 (? :)运算符分类7逗号运算符 (,)8指针运算符 (*和&)9求字节数运算符 (s i z e o f)10强制类型转换运算符 (类型) )11分量运算符 (-)12下标运算符 ()13其他 (如函数调用运算符( )运算符分类按运算符连接运算对象的个数分类:1单目运算符仅对一个运算对象进行操作! + - -负号* & sizeof 类型标识符2双目运算符连接两个运算对象+ - * / % = = != & | & | = 复合赋值运算符3三目运算符连接三个运算对象? :4其他 . C 语

13、言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行。例如先乘除后加减。如:a-b*c,如果在一个运算对象两侧的运算符的优先级别相同. 如:a-b+c 优先级:先*、/、后+、-C 规定了各种运算符的结合方向(结合性),算术运算符的结合方向为“自左至右,即先左后右.C运算符的优先级及结合性算术运算符与算术表达式单目运算符:- 取负:如+6, +取正:如-6双目运算符:+相加,如:2+3,-相减,如:3-4,*(如:3*4),/(如:5/3,(x+y)/(a+b),%(取%两侧均为整型数据,如:7%4值为3)单目运算符高于双目运算符。双目运算符的5个运算符中,* /

14、%高于+ - ,而在优先级相同的情况下,运算符的结合性是从左到右。用算术运算符将运算对象连接起来,符合C语法规那么并能说明运算过程的式子,称为算术表达式。运算对象包括常量、变量、函数等如:3.14*r*r x+sqrt(0.25*y)/(abs(a+b)-3.6)注意两个整数相除,其值为整数,如:5/3值为1除数、被除数有一个为负值时,结果“向零取整 如:-5/3值为-1除数、被除数有一个为实数时,结果为double型自增+与自减 -运算符+i, - -i, 在使用之前,先使i的值加1或减1i+,i- -,在使用之后,使i的值加1或减1例 自增自减运算#include void main()i

15、nt i=0,j; j=i+; printf(“%d %dn,i,j); i=0; j=+i; printf(“%d %dn,i,j);区分:j=i+1;j=+i;自增+与自减 -运算符说明1+ - 运算只能用于变量,是单目运算,而不能用于常量或表达式如:5+、-a+b不合法。分为前缀运算和后缀运算其功能不同。 2+和的优先级别高于算术运算符,结合性是自右至左。 例如:-i+ 相当于-i+ 先进行+,再取- 3功能一:实现简单变量自身的加1或减1运算。功能二:取由其构成的表达式的值。例:include/头文件void main()/主函数 int a=1,b=1;/定义变量,赋初值 print

16、f(“+a=%d,b+=%dn,+a,b+); printf(“a=%d,b=%dn,a,b); printf(“a%d,b-=%dn,-a,b-); printf(“a=%d,b=%dn,a,b); 考虑:i的值为3,表达式+a + +a + a+=?表达式中数据间的混合运算与类型转换当运算符两边的操作数类型不同时,其中一个操作数就要经过类型转换以和另一个操作数的类型相一致,然后才能进行运算。变换操作数采取就高不就低的原那么,即级别低的操作数先被转换成和级别高的操作数具有同一类型,然后再进行运算,结果的数据类型和级别高的操作数相同。如果赋值运算符两侧的类型不一致时,有两种类型转换,第一种是在

17、运算时不必用户指定,系统自动进行的类型转换。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。自动转换的顺序表可以利用强制类型转换运算符将一个表达式转换成所需类型。1.显式强制类型转换其一般形式为:(类型名)(表达式)例如: (double)a (将a转换成double类型) (int)(x+y) (将x+y的值转换成整型) (float)(5%3) (将5%3的值转换成float型) int(1.5+2.3) = ? (int )1.5+2.3=? 注意,表达式应该用括号括起来。如果写成(int)x+y 那么只将x转换成整型,然后与y相加。强制类型转换运算符强制类型转换

18、运算符2.隐式强制转换由两种形式完成。一种运用赋值运算符,另一种是在函数有返回值时总是将return后面的表达式值强制转换为函数的类型当两者类型不一致(后面详述)。例如:main()/主函数 float x;int i; /定义变量 x=36;/赋初值 i=(int)x;/处理语句 显示转换 printf(“x=%f, i=%d,x,i);/输出语句 i=10+a+5*1.5 10/3 /隐式转换 printf(“i=%d,i); 例:a为int 型,b为double型,c为float型,d为char型,那么表达式a+b*c-d/a的结果类型为。选择一项a) intb) doublec) fl

19、oatd) char赋值运算符赋值符号“=就是赋值运算符,用法:变量表达式作用:将表达式的值赋给变量放到变量的存储空间里面去常量、变量表达式的特例因此,是一个双目运算符,其结合性是自右向左。例如: a=3; ave=(a+b)/10;与数学中的等式不同例如:数学中的x=y y=x,而在程序里面不是等号,而是赋值的意思。赋值表达式由赋值运算符将一个变量和一个表达式连接起来式子称为“赋值表达式形式:变量表达式 如:a=5、a=(b=5)(右结合)计算过程:1、计算赋值运算符右侧“表达式的值2、将计算结果赋给左侧的变量3、赋值表达式的值就是被赋值的变量的值例:a=b=c=5 a=5+(c+6) a=

20、(b=4)+(c+6)例:a=(b=4)+(c=6) a=(b=10)/(c=2) a+=a-=a*a 思考:a=a+(a-(a*a)如果赋值运算符两侧的类型不一致, 一律将右侧表达式的类型强制转换为左侧的类型。规那么:(1) 将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。如int i,“i=3.56的结果是3。(2) 将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中,如float f=23,结果是23000000。 类型转换例: #include void main()int i; float f;i=5.34; f=23;printf(“%d %fn,

21、i,f)(3)长度相同的有符号与无符号整型数间,原样赋值但数值有时会有变化 #include void main()unsigned a; int b=-1; a=b; printf(“%d-%u,b,a); a=65534u;b=a; printf(“%d-%un,b,a);1 1 11 11 11 11 11 11 1111 11 11 11 11 11 11 11-1-65535-2-65534b a (4) 将一个int、short、long型等类型转换 1“短数据(表达式)赋给“长变量符号扩展:假设最高位为1负数,那么变量高字节位补1;反之,补0;例 #include void main() char c; int i; c=43;i=c; printf(“i=%dn,i); c=376;i=c; printf(“i=%dn,i); 2“长数据赋给“短变量只将数据的低字节位原封不动送到变量中,数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)。例如: int i=289; char c=a97; c=i;赋值情况见图。c的值为33, 如果用“%c输

温馨提示

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

评论

0/150

提交评论