第2章-数据类型运算符与表达式.ppt
《第2章-数据类型运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《第2章-数据类型运算符与表达式.ppt(128页珍藏版)》请在三一文库上搜索。
1、C语言,讲授人: 蔡娟,北京林业大学信息学院,C语言程序设计,C语言程序设计,C语言程序设计,问题与讨论,1. 编写程序 (1) 编写程序,输出“北京,2008” 。 (2)编写程序,求出两个数的最小值 。,第2章 数据类型、运算符与表达式,2.1C语言的数据类型 2.2常量与变量 2.2.1常量 2.2.2变量 2.3整型数据 2.3.1整型常量 2.3.2整型变量 2.3.3整型数据在内存中的存放形式 2.3.4整型数据的溢出 2.3.5整型常量的类型 2.4浮点数据类型 2.4.1浮点型常量 2.4.2浮点型变量 2.4.3浮点型常量的类型,本章内容,2.5 字符型数据 2.5.1字符常
2、量 2.5.2字符变量 2.5.3字符数据在内存中的存储形式及其使用方法 2.5.4字符串常量 2.6各类数值型数据间的混合运算 2.7算术运算符和算术表达式 2.7.1C语言运算符和C算术表达式 2.7.2主要的算术运算符和算术表达式 2.8逗号运算符和逗号表达式 本章小结,本章内容,2.1C语言的数据类型,程序的主要部分是由数据和执行语句组成的。计算机处理的对象是数据。,在程序中对所用到的所有数据都必须指定其数据类型,数据的类型决定数据在内存中占空间大小以及存储方式,数据类型,数据类型,整型,浮点型,字符型(char),短整型(short),整型(int),长整型(long),单精度浮点型
3、(float),双精度浮点型(double),空类型(void),基本类型,指针类型(T*),构造类型,枚举类型(enum),结构体类型( struct) ),共用体类型( union ),标识符,在C语言中,有3类标识符: 关键字 不能用作变量名。 如int, float, char, if, while, for 系统预定义的标识符;不能用作变量名 如printf, main, sin 用户标识符 用户自己定义的标识符 如符号常量、变量、函数名,数组,结构体,共用体,文件等,标识符,标识符是由字母、数字和下划线组成,且第一个字符不能是数字。 例如变量名、数组名、自定义函数名等。 相同字母标
4、识符的大写和小字是有区别的, 被认为是不同的表示形式。 例如:count Count coUNT 是不同的 习惯上,符号常量用大写,变量用小写。,判断以下标识符是否为合法:,count _above N_name x_1 x_2_ y1 y2K C_sum_1 M.d 99job $12 a-1 float,circle area c1 _sum_a PI ,1_c ab Doc. Bao bei int ,2.2常量与变量,数据的基本表现形式为常量和变量,2.2.1常量,在程序执行过程中,其值不能被改变的数据叫做常量。 直接(字面)常量 在程序中可以直接使用的常量。 符号常量 用一个符号名来
5、代表一个常量。,直接常量,常量也是区分不同类型的。 C语言有四种类型的常量分别简称为整数、实数、字符和字符串。 整型常量: 如 12,0,-3 浮点型(实型)常量: 如 4.6,-1.23, 1.2e3 字符型常量: 如 a,+,n 字符串常量: 如“ a” ,“C Program”,符号常量,C程序是通过#define预处理命令来定义符号常量的。 一个#define命令只能定义一个符号常量,且用一行书写,不用分号结尾。 符号常量要先定义后使用,定义的一般格式是: #define 符号常量 常量 如 #define PI 3.1415926 /*不可写成 PI = 3.1415926*/,标识
6、符使用原则: (1)符号常量名用大写; (2)见名知义,含义清楚; 如 sum , max (3)符号常量能够做到“一改全改” 需要对某一个数进行多处修改时,利用符号常量, 只需要修改其定义的地方即可,避免了偶然的错误。,#define PI 3.1415926 #include void main() double r,area,circle; r=3.6; area=PI*r*r; circle=2*PI*r; printf(“%lf,%lfn“,area,circle); ,c2_1.c,符号常量,浮点型常量,整型常量,字符型常量,常量举例,使用符号常量应注意以下两个方面: (1)它不同
7、于变量,在其作用域内其值不能改变和赋值。 如:在上例中如再用PI=3.14;这一语句进行赋值,则 是错误的。 (2)符号常量名一般用大写,而变量名用小写以示区别。 标识符的长度无统一规定,随系统而不同,TC为32个,建议不要超过 个。,2.2.2变量,在程序运行过程中,其值可以改变的量称为变量。 变量应该有一个名字,以便被引用,在内存中占据一定的存储单元。 注意变量区分变量名和变量值,这是两个不同的概念。变量名实际上是以一个名字带秒一个内存地址。,变量的说明:,变量应该“先定义,后使用”,变量定义: 数据类型 变量名列表 数据类型: 合法的数据类型 变量名列表:用逗号隔开的多个标识符 举例:
8、如 int a,b,c,d;,int a = 3 ;,变量名,3,变量值,存储单元,a,变量,在对程序编译时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上就是通过变量名找到相应的内存地址,从该存储单元中读取数据。,10,两个字节,a,地址,地址,变量名,变量值,存储单元,内存,short a=10;,变量的类型有整型、实型(单精度实型和双精度实型)、字符型等; 8个二进制位是一个字节,表示一个基本存储单元。 不同数据类型的变量,编译系统分配不同大小的存储单元。变量的数据类型决定了该变量占用内存存储单元的个数。,变量,变量的值实际存放在内存存储单元内,不同的变量存放在不同的存储
9、单元中; 用sizeof(类型标识符)来查询变量的存储空间大小。 printf(“%dn”,sizeof(int);,变量,a,b,c,d,0,a=0; a=6; a=a+2 d=10; d=d-a;,6,8,10,2,内存的存储单元,int a,b,c,d;,a,$,56,-61.33,-61.33,内存区,2.3整型数据,2.3.1整型常量 整型常量是程序中使用最多的一种数据类型,在程序中书写整型常量时没有小数部分。 用户根据需要分别可以用十进制、八进制 和十六进制的形式书写:,十进制格式:书写时直接写出数字。 如 123、516、-39、156、0、+708 等。 八进制格式 :以0开头
10、 如 0111、010007、0177777-037、0156、+0100等。 十六进制格式 :以0x或0X开头的数字 如 0x78AC、0xFFFF、0x61、0X2A、0x6d 等,错误的表达形式: 27、-018、090都是非法的八进制整数 2c、-03D、18都是非法的十六进制整数,2.3.2整型变量,基本整型 int 短整型 short int 长整型 long int 占字节数排序 shortintlong Visual C+给整型变量分配字节情况 short: 2个字节 int: 4字节 long: 4字节,例如,短整型(short)变量的数值范围是-3276832767,参见P
11、22-表2-1 TC和VC中的整数数据类型比较,无符号整型变量,无符号基本整型 unsigned int 无符号短整型 unsigned short int 无符号长整型 unsigned long int 占字节数排序 unsigned shortunsigned intunsigned long Visual C+给整型变量分配字节情况 unsigned short: 2个字节 unsigned int: 4字节 unsigned long: 4字节,例如,无符号短整型变量的数值范围是065535,#include void main() short a,c; unsigned short
12、 b,d; a=32767; b=a; c=a+1; d=b+1; printf(“c=%d,d=%dn“,c,d); ,程序运行结果: c=-32768,d=32768,整型变量举例,整型变量举例c2_2.c,整型变量的定义:int a,b main() int a,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); ,a+u=22 b+u=-14,运行结果:,main() int a=-32766; unsigned b; b=a; printf(“a=%d,b=%un“,a,b);
13、 ,结果:a=-32766,b=32766,2.3.3整型数据在内存中的存放形式,数据在内存中是以二进制形式存放的。 例如 int i; i=10; 变量i 在内存中实际存放情况:,10,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,实际上,在存放整数的存储单元中,一般情况下,最左面的一位是用来表示符号的“0”代表数值为正,“1”代表数值为负。,实际上,数值是以补码的形式表示的。正数的原码与它的反码和补码相同。 如果是负数,求其补码的方法: 将该数的绝对值得二进制的形式,按位取反再加1。 例如-10的补码是: 10 取反 再加1,0,0,0,0,1,0,1,0,0,0,0,0
14、,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,或对直接对负数求其补码: 方法是:除符号位外,将其原码的数值部分求反(即变,变)则可求其反码,由反码的最低位加即可求得其补码。 其结果一样。,2.3.4整型数据的溢出,如果在TC环境下,系统给一个整型变量分配2个字节,则变量的最大允许值是32767,如果再加1,则会出现什么情况? 例2-3 整型数据的溢出,include void main( ) int a,b; a=32767; b=a+1; printf(“%d,%dn”,a,b); ,程序运行
15、结果: 32767,-32768,解释,a:32767 b:-32768,下面是-32768的补码形式。 注意: 一个2字节的整数变量只能容纳-3276832767,大于32767,或小于-32768,就要发生”溢出”现象。,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,对于同一道题,在VC环境下,则不会发生溢出,因为在VC环境下,整型的数据占4个字节,则数据的范围为: -21474836482147483647. 这时的运行结果是: 32767,32768,2.3.5整型常量的类型,常量也是有类型的,因为数据是
16、要存储的。不同类型的数据的所所分配的字节和存储方式是不同的。整型常量在字面上就能决定它的类型。 (1)如果值在-3276832767范围内,则认为它是int型,分配2个字节,可以赋值给int和long int型变量,2.3.5整型常量的类型,(2)如果值在-21474836482147483647范围内,则认为它是长整型,分配4个字节,可以赋值给long int型变量。 (3)整型常量后面加l或L,则认为是long int型常量。 例如123l,456L。 (4)整型常量后面加u或U,认为是unsigned int型常量。例如: 123u,456U。,2.4 浮点型数据,实型常量又称为浮点型常
17、量,只能用十进制来表示,可以用小数或指数两种形式表示。 (1)小数形式-数字小数点 (注意必须有小数点) 如:0.12、.12、0.0、12. 等。 (2)指数形式-又称为科学计数法。 如: 12e3=12E3=12*103。 注意:1e和E均可。如12e3和12E3相等。 2e之前必须有数字,e后必须为整数。 如: e2、3e1.2 是非法的指数形式。,2.4.1 浮点型常量,2.4.2浮点型变量,1.浮点型变量的分类 单精度(float型)浮点型变量 双精度(double型)浮点型变量 长双精度(long double型)浮点型变量 一般C编译系统为: 单精度(float)型数据分配4个字
18、节; 双精度(double)型 8 长双精度(long double) 8 不同系统分配的不同,2.浮点型数据在内存中存放形式 浮点型数据是按照指数形式存储。系统把一个浮点型数据分成小数部分和指数部分分别存放。 3.浮点型数据的舍入误差 浮点型数据提供有限的有效数位,超出部分将被舍去。 float类型的单精度变量,它只保证7位有效数字(包括小数点)。 double类型的双精度变量,可以提供16位有效数字。,2.4.3浮点型常量的类型,浮点型常量也是有类型的,不同的类型的数据按不同的方式存储。 C编译系统编译系统把浮点型常量作为双精度处理。 若不想把浮点型常量作为双精度处理,可以在数值后面加f或
19、者F,这样会按单精度处理。 1.23f,3.66F,c2_3.c #include void main() float a; a=3.141592612; printf(“a=%fn“,a); 程序运行结果: a=3.141593,c2_4.c #include void main() double a; a=3.141592612; printf(“a=%10.9fn“,a); 程序运行结果: a=3.141592612,换作double会怎么样?,main() float a,b; a=123456.789e5; b=a+20; printf(“ b= %fn “,b); 结果:b=123
20、45678848.000000,舍入误差,2.5字符型数据,字符型数据,用一对单引号括起来的一个字符,单引号只是字符与其他部分的分割符,不是字符的一部分,并且,不能用双引号代替单引号。在单引号中的字符不能是单引号或反斜杠,如: a , A, # 合法的字符常量 , 非法的字符常量 “A” 不代表字符常量,2.5.1.字符常量,除了以上形式的字符常量外,C语言还允许一种特殊形式的字符常量转义字符。 这些字符用于控制输出或编译系统本身保留,无法作为字符常量来表示。 C语言中规定,采用反斜杠后“”跟一个字母来代表一个控制字符,反斜杠“”后的字符不再作原有的字符使用,而具有新的含义。,转义字符,例子,
21、101 A 012 换行n 0或000 空操作字符 例子2-5转义字符的使用 /t一个“制表区”占8列 /r回车,将当前位置移到本行开头 /n换行,将当前位置移到下一行开头 /b退格,将当前位置移到前一列,转义字符的使用,c2_5.c #include void main() printf(“ab ct derftgn“); printf(“hti bbj kn“); 运行结果:,解释:,r,回车,将当前位置移到本行开头; 意味着自此输出的字符(包括空格和跳格所经过的位置)将取代原来在该位置上显示的字符。,转义字符的使用,#include void main() printf(“a“); pr
22、intf(“101n“); printf(“xFn“); ,#include void main() printf(“boytgirln“); printf(“atbrUn“); 程序运行结果: boy girl U b,字符变量,字符变量用来存放字符常量,它只能放一个字 符,不要以为在一个字符变量中可以存放一个 字符串(包括两个以上的字符)。 字符变量的定义形式如下: char c1,c2; 字符变量的赋值 c1=a; c2=b; 在所有的编译系统中都规定用一个字节来存放一个字符,因此一个字符型变量在内存中占1个字节。,字符型变量的值在内存中的表现形式为该字符对应的ASCII值,是二进制数。
23、 c1的值为:01100001(97) c2的值为:01100010(98) 字符型数据和整型数据之间可以通用,也可以进行算术运算。,2.5.3字符的存储形式及使用方法,存储形式: ASCII代码二进制形式 常用字符与ASCII码的对照表参见 附录I 使用方法:字符型数据可与整型数据通用 输出: 字符型数据可以字符形式输出,也可以整数(0-255)形式输出。 赋值: 字符型数据可与整型数据互相赋值,2.5.3字符的存储形式及使用方法,main() char c1,c2; c1=97; /*等价于c1=a*/ c2=98; /*等价于c2=b*/ printf(“%c,%cn“,c1,c2);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据类型 运算 表达式
链接地址:https://www.31doc.com/p-3423338.html