




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
刘 杰 ,第2章 数据类型及运算,高级语言程序设计,本章提要,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 常量和变量,常量和符号常量 变量 标识符,常量,在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型 一般从其字面形式即可判断的常量,称为字面常量或直接常量。,整 型 100,125,-100,0 浮点型 3.14 , 0.125,-3.789 字符型 a,b,2 字符串 “a“, “ab“,“1232“,符号常量,可以用一个标识符代表一个常量,称为符号常量。即以标识符形式出现的常量。 定义格式:#define 符号常量 常量,运行结果:total=300,#define PRICE 30 #include void main ( ) int num, total; num = 10; total = num * PRICE; printf(“total=%dn“, total); ,符号常量的值在其作用域(在本例中为主函数)内不能改变,也不能再被赋值。 一般用大写字母 是宏定义预处理命令,不是C语句。 含义清楚,一改全改,变量,变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,在程序运行期间,这些值是可以改变的。 变量名实际上是一个以一个名字对应代表一个地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。,标识符,定义:用来对变量、符号常量、函数、数组等数据对象命名的有效字符序列。 简单地说,标识符就是一个名字 组成: 只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线 大小写敏感 不能使用关键字 长度:最长32个字符 命名原则: 见名知意:选有含意的英文单词(或其缩写)作标识符。 不宜混淆:如1与I, o与0,例:判断下列标识符号合法性 sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123,M.D.John,3days,#33,char,$123,ab,变量定义的格式及使用,变量定义的一般格式 数据类型 变量1,变量2,变量n;,变量初始化:定义时赋初值,例: int a,b,c; float data;,决定分配字节数 和数的表示范围,合法标识符,变量的使用:先定义,后使用,例1 int student; stadent=19; /Undefined symbol statent in function main,例2 float a,b,c; c=a%b; /Illegal use of floating point in function main,变量定义位置:一般放在函数开头,2.3 整型数据,整型常量的表示方法 整型变量 整型常量的类型,整型常量的表示方法,整型常量即整常数。在C语言中,有3种形式表示: (1)十进制整数。 123, - 456。 (2)八进制整数。以0头的数是八进制数。 0123表示八进制数123,等于十进制数83。 -011表示八进制数-11,即十进制数-9。 (3)十六进制整数。以0x开头的数是16进制数。 0x123,代表16进制数123,等于十进制数 291。 -0x12等于十进制数-18。,整型变量,整型数据在内存中的存放形式 整型变量的分类 整型变量的定义 整型数据的溢出,整型数据在内存中的存放形式,在内存中以二进制形式存放 int i; i = 10;,10,i在内存中的表示:,示意图,在内存中的实际存放情况,实际上,数值是以补码表示的。 正整数的补码和该数的原码相同。 负数的补码是将该数的绝对值的二进制按位取反再加一。,-10,最左面的一位表示符号,0表示正,1表示负。,整型变量的分类,整型变量的基本类型为int。 根据数值范围可定义为:基本整型、短整型、长整型 对以上三类可以加修饰符:signed或者unsigned,现在有几种整型变量了?,有符号基本整型: signed int 无符号基本整型: unsigned int 有符号短整型: signed short int 无符号短整型: unsigned short int 有符号长整型: signed long int 无符号长整型: unsigned long int,所占内存,由各计算机系统自己决定,一般占一个机器字。 shortintlong,有符号整型 第1位是符号位,无符号整型 第1位是数据位,32767,65535,整数类型的有关数据,类型 类型说明符 长度 数的范围 基本型 signed int 2字节 -3276832767 短整型 short int 2字节 -215215-1 长整型 long int 4字节 -231231-1 无符号整型 unsigned int 2字节 065535 无符号短整型 unsigned short 2字节 065535 无符号长整型 unsigned long 4字节 0(232-1),整型变量的定义,C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。 定义一般放在一个函数的开头部分。,#include void 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,整型变量的溢出,一个int型变量的最大允许值为32767,加1后如何?,#include void main() int a, b; a = 32767; b = a+1; printf(“%d,%d“,a,b); ,运行结果:32767,-32768,进一步 若a=-32768,b=a-1;,则结果为-32768,32767,其原因在于: 1.以补码表示 2.有符号位,整型数据的类型,一个整数,如果其值在-32768+32767范围内,认为它是int型,它可以赋值给int型和long int型变量。 一个整数,如果其值超过了上述范围,而在-2147483637+2147483647范围内,则认为它是为长整型。可以将它赋值给一个long int型变量。 如果所用的C版本(如Turbo C)分配给short int与int型数据在内存中占据的长度相同,则它的表数范围与int型相同。因此一个int型的常量同时也是一个short int型常量,可以赋给int型或short int型变量。 一个整常量后面加一个字母u或U,认为是unsigned int型,如12345u,在内存中按unsigned int规定的方式存放(存储单元中最高位不作为符号位,而用来存储数据)。如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。 在一个整常量后面加一个字母l或L,则认为是long int型常量。例如123l.432L.0L等。这往往用于函数调用中。如果函数的形参为long int型,则要求实参也为long int型。,2.4 浮点型数据,浮点型常量的表示方法 浮点型变量 浮点型数据在内存中的存放形式 浮点型变量的分类 浮点型数据的舍入误差 浮点型常量的类型,浮点型常量的表示方法,浮点数即实数,有两种表示方法: 十进制小数形式。它由数字和小数点组成(注意必须有小数点)。如.123、123.、123.0、0.0等。 指数形式。如123e3或123E3都代表123*103。但注意字母e或E之前必须有数字,且e后面的指数必须为整数。 如e3、2.1e3.5、.e3、e等都是不合法的指数形式。,规范化的指数形式,在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字. 例如: 123.456可以表示为: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4, 0.00123456e5 其中的1.23456e2称为“规范化的指数形式”。,浮点型数据在内存中的存放形式,一个浮点型数据一般在内存中占4个字节(32位)。 浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。,例如:实数3.14159在内存中的存放形式,数符,小数部分,指数部分,浮点型变量的分类,单精度(float) 双精度(double) 长双精度型(long double),float x,y; double z; long double t;,浮点型变量的舍入误差,由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效数字以外的数字将被舍去。,#include void main() float a,b; a = 123456.789e5; b = a+20; printf(“%f“,b); ,理论结果:12345678920 运行结果:12345678848.000000 修改:将float改为double, 结果为12345678920.000000 原因:一个实型变量只能保证的有效数字是7位,后面的数字是无意义的。,应该避免将一个很大的数和一个很小的数直接相加或相减,否则会丢失小的数。,浮点型常量的类型,默认double型 在浮点型常量后加字母f或F ,认为它是float 型,例如: float f; f = 2.45678 * 4523.65 (1)系统先把2.45678和4523.65作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。最后取其前7位赋给浮点型变量f。 (2)如果在数的后面加字母f或F(如1.65f, 654.87F),这样编译系统就会把它们按单精度(32位)处理。,2.5 字符型数据,字符常量 字符变量 字符数据在内存中的存储形式及其使用方法 字符串常量,字符常量,定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 101 -A 012 -n 376 - x61 -a 60 -0,例: A-101-x41-65,如 A65, a97, 048 , n10,如 a A ? n 101,转义字符:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例 main() printf(“101 x42 Cn“); printf(“I say:“How are you?“n“); printf(“C Programn“); printf(“Turbo C“); ,运行结果:(屏幕显示) A B C Isay:”How are you?” C Program Turbo C,例 main() printf(“Yb=n”); ,运行结果: 屏幕显示:= 打印机输出:,例 转义字符的使用,#include void main() printf(“_ab_ct_derftgn“); printf(“htibbj_k“); 说明:假定制表位占8列,12345678901234567890 _ab_c_de f_g fab_c_gde (打印结果) f_gde (屏幕结果) h_i h_j_k h_jik (打印结果) h_j_k (屏幕结果),printf(“1234567890123456n“);,字符变量,定义形式:char 变量名; 只能存放一个字符 例如 char c1, c2; c1=a, c2=b;,在所有的编译系统中都规定了以一个字节来存 放一个字符,或者说一个字符变量在内存中占 一个字节。,在内存中的存储形式及其使用方法,将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。 例如a的ASCII代码为十进制数97,b的ASCII代码为十进制数98。,这样使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。,例 向字符变量赋予整数,#include void main() char c1, c2; c1 = 97; c2 = 98; printf(“%c %cn“,c1,c2); printf(“%d %dn“,c1,c2); ,/* 等价于c1=a */ /* 等价于c1=b */ /* 输出结果 a b */ /* 输出结果 97 98 */,例 大小写字母的转换,#include void main() char c1, c2; c1 = a; c2 = b; c1 = c1-32; c2 = c2-32; printf(“c c “,c1,c2); ,在内存中的存储形式及其使用方法,字符变量存放字符ASCII码 char与int数据间可进行算术运算,a=D; /* a=68; */ x=A+5; /* x=65+5; */ s=!+G /* s=33+71; */,没有字符串变量,用字符数组存放 字符型数据和整型数据既可以用 %c也可用%d 字符数据占一个字节,只能存放0-255内的整数 若将字符变量中的最高位作符号位,取值范围是-128127。如果使用ASCII码128255间的字符,用%d格式输出时,就会得到一个负整数。如果不想按有符号处理,可改为unsigned char类型,这时其取值范围为0255。,字符串常量,定义:用双引号(“)括起来的字符序列符常量 存储:每个字符串尾自动加一个 0 作为字 符串结束标志,字符常量与字符串常量不同,例 输出字符串 printf(“Hello World.n“),字符串常量,0用来判断字符串是否结束。是一个ASCII码为0的字符,是“空操作字符”,它不引起任何控制动作,也不是一个可显示的字符。,从技术角度看,字符串常量就是字符数组。,基本数据类型小结,整型,字符型,实型,有,无,说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例:,2.6 变量赋初值,先定义,后赋值,int a,b; a = 3;,定义的同时赋值,int a = 3;,被定义的一部分变量赋值,int a,b,c = 5;,int a = 3, char b = a; int a=b=c=3; 这样书写格式正确否?为什么?,2.7 各类数值型数据间的混合运算,2.8 算术运算符和算术表达式,C语言运算符简介 算术运算符和算术表达式,C运算符简介,C运算符简介,学习运算符应注意:,运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型,算术运算符和算术表达式,基本的算术运算符 算术表达式和算术运算符的优先级与结合性 强制类型转换运算符 自增、自减运算符 有关表达式中的问题说明,基本的算术运算符,求余运算符,两侧必须是整数 两个整数相除的结果为整数,如5/3的值为1。如-5/3的结果可能为-2或-1。多数机器采用“向零取整”的方法,为-1,取整后向零靠拢 +,-,*,/中 有一个数是实数,结果为double型,+,- , *,/, %,例 5/2 = -5/2.0 =,例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2,2 -2.5,1 -1 1 0 (),算术表达式和运算符的优先级与结合性,算术表达式 用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。运算对象包括常量、变量、函数等。 例如:a*b/c-1.5+a 优先级:* / % + 1 算术运算符的结合方向为“自左向右”,即左结合性。 赋值运算符的结合方向为“自右向左”,即右结合性。,强制类型转换符,利用强制转换符可以将一个表达式转换成所需类型。 一般形式:,(类型名)(表达式),例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变,例 #include void main() float x; int i; x = 3.6; i = (int)x; printf(“x=%f,i=%d“, x, i); 结果:x=3.600000,i=3,精度损失问题,自增、自减运算符: +,-,作用:使变量值加1或减1 种类: 前置 +i, -i (先执行i+1或i-1,再使用i值) 后置 i+,i- (先使用i值,再执行i+1或i-1),说明: + - 不能用于常量和表达式,如5+,(a+b)+ + -结合方向: 自右向左 优先级:- + - * / % + -,-i+; i=3; printf(“%d“,-i+),/ -(i+) / -3,用于循环语句,使循环变量自动加1。 用于指针变量,使指针指向下一个地址。,自增、自减运算符: +,-,j=3; k=+j; j=3; k=j+; j=3; printf(“%d“, +j); j=3; printf(“%d“, j+); a=3; b=5; c=(+a)*b; a=3; b=5; c=(a+)*b;,/ k=4, j=4,/ k=3, j=4,/ 4,/ 3,/ c=20, a=4,/ c=15, a=4,j+k; (j+)+k? j+(+k)?,有关表达式中的问题说明,ANSI C没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自行安排。 例:af1()+f2(); (i+)+(i+)+(i+); 应该尽量避免出现这种歧义性。 C编译系统在处理运算顺序时,尽可能多地(自左向右)将若干字符组成一个运算符。例:i+j 形如: i = 3; printf(“%d,%d“, i, i+); 最好改写成: i = 3; j = i+; printf(“%d,%d“, i, j);,2.9 赋值预算符和赋值表达式,赋值运算符,类型转换 复合的赋值运算符 赋值表达式,符号:= 格式:变量标识符=表达式 作用:将一个数据(常量或表达式)赋给一个变量 举例:a = 3; d = func() c = d+2,类型转换,如果赋值运算符两侧的类型不一致,但都是数值型或字符型,在赋值时要进行类型转换。 原则:按存储单元中的存储形式直接传送。,1.float、double赋给int型变量时,舍弃实数的小数部分。,如i=3.56,则i为3。,如:23赋给float变量f,则f为23.00000,2.int型赋给float、double型变量,数值不变,以浮点数形式存储。,3. double型赋给float型变量时,截取其前面7位有效数字。 但应注意数值不能溢出。,float f; double d=123.456789e100; f=d; 溢出错误,将一个float型数据赋给double型变量时,数值不变,有效位扩大。,类型转换,4.char型赋给int型变量时,将字符数据(8位)放到整型变量低8位中,有两种情况:,(1)所用系统将字符处理为无符号的,则高8位补零。 (2)所用系统将字符处理为有符号的,若字符最高位为0,则高8位补零;若为1,高8位补1。这称为符号扩展,,类型转换,5. int、short、long型赋给char型变量时,截取低8位。,int i=289; char c=a; c=i; c的值为33,类型转换,int a; long b=8; a=b; /* a为8 */,6. signed int型赋给long型变量时,将int的16位赋给long的低16位,同时要进行符号扩展。如果赋值数据为正值,则long型变量的高16位补0;否则高16位补1。反之,long型赋给int型变量,截取低16位。,7. unsigned int型赋给long int型变量时,将int的16位赋给long的低16位,将高16位补0。,unsigned int a=65535; int b; b=a; /* b为-1 */,int a; long b=65536; a=b; /* a为0 */,类型转换,8.非unsigned型数据赋给长度相同的unsigned型变量时,原样照赋。,#include void main() unsign
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高数知识点总结
- 玉溪螺旋换热器施工方案
- 建筑楼顶拆除方案范本
- 廊坊职业技术学院《口腔颌面外科学1》2023-2024学年第二学期期末试卷
- 南京大学《西方翻译流派》2023-2024学年第二学期期末试卷
- 天津财经大学《版面设计与软件应用》2023-2024学年第二学期期末试卷
- 《教学内容和数据流程》课件
- 山东城市建设职业学院《中国建筑史B》2023-2024学年第一学期期末试卷
- 厦门大学嘉庚学院《基础食品化学》2023-2024学年第二学期期末试卷
- 《精粹课件资源库》课件
- 旧混凝土路面加铺沥青混凝土面层施工组织设计方案
- 《成人鼾症》ppt课件
- SAP-BASIS-常维护手册
- 配电线路巡视记录单
- 乙炔气柜施工方案
- 狼和兔子的凄美爱情故事,前世今生的约定,看哭了很多人
- 体育测量与评价PPT课件-第四章 心肺功能的测量与评价
- 儿童故事小壁虎借尾巴ppt课件
- 公路路基土建工程项目拌合站建设方案详细
- 雅马哈电子琴中英文音色对照表
- 埋石混凝土施工工法
评论
0/150
提交评论