《第2章 基本数据类型优秀课件.ppt》由会员分享,可在线阅读,更多相关《第2章 基本数据类型优秀课件.ppt(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第2章章 基本数据类型基本数据类型第1页,本讲稿共47页2.1 求平均分求平均分 2.1.12.1.12.1.12.1.1 程序解析程序解析程序解析程序解析 例例 2-1 2-1 输入某学生两门课的成绩,求平均分输入某学生两门课的成绩,求平均分 分析:分析:1 1、百分制的学生成绩表达式一般不含小数,故两门课的分、百分制的学生成绩表达式一般不含小数,故两门课的分 数一般是整数。数一般是整数。2 2、平均分一般含小数,故在、平均分一般含小数,故在C C中定义为单精度的实型数据。中定义为单精度的实型数据。3 3、输入成绩要用、输入成绩要用scanf()scanf()函数,整型数据的输入格式为函数
2、,整型数据的输入格式为%d%d。4 4、输出平均分要用、输出平均分要用printf()printf()函数,实型数据的格式符为函数,实型数据的格式符为%f%f。5 5、算法:定义相关变量;输入两门课的成绩;求平均分;、算法:定义相关变量;输入两门课的成绩;求平均分;输出平均分。输出平均分。第2页,本讲稿共47页2.1 求平均分求平均分 2.1.12.1.12.1.12.1.1 程序解析程序解析程序解析程序解析 程序代码程序代码#include#include void main()void main()int score1,score2;/int score1,score2;/定义相关变量定义
3、相关变量 float average float average;printf(printf(“请输入两门课的分数请输入两门课的分数(百分制百分制):”);/);/输入提示输入提示 scanf(scanf(“%d%d%d%d”,&score1,score1,&score2);/score2);/输入成绩输入成绩 average=(score1+score2)/average=(score1+score2)/2.02.0;/;/求平均分求平均分 printf(printf(“average=%average=%4.14.1f fnn”,average);/,average);/输出平均分输出平均
4、分 第3页,本讲稿共47页2.1 求平均分求平均分C语言定义语言定义6种整型,分别是:种整型,分别是:基本整型基本整型 int无符号基本整型无符号基本整型 unsigned int短整型短整型 short或或 short int无符号短整型无符号短整型 unsigned short或或 unsigned short int长整型长整型 long或或 long int无符号长整型无符号长整型 unsigned long或或 unsigned long int 2.1.2 2.1.2 2.1.2 2.1.2 整型整型整型整型 第4页,本讲稿共47页2.1 求平均分求平均分整数类型字节数及取值范围类
5、类 型型字节数字节数取值范围取值范围int4-21474836482147483647 即即 -231(231-1)unsigned int 404294967295 即即 0(232-1)short2-32768 32767 即即 -215(215-1)unsigned short20 65535 即即 0(216-1)long4-21474836482147483647 即即 -231(231-1)unsigned long404294967295 即即 0(232-1)第5页,本讲稿共47页(1)short int型型 补码为补码为16位二进制数,它表示一个有符位二进制数,它表示一个有符
6、号整数,其特点是:当首位为号整数,其特点是:当首位为0时表示一个正数,当首位为时表示一个正数,当首位为1时表示一个负数。正数的补码与其原码相同,而负数的补时表示一个负数。正数的补码与其原码相同,而负数的补码为其对应正数的反码加码为其对应正数的反码加1。如:。如:+4补补=0000 0000 0000 0100 -4补补=1111 1111 1111 1100(2)short int型负数的补码计算公式:型负数的补码计算公式:X的补码的补码=216-|X|X0整型数据的存储整型数据的存储第6页,本讲稿共47页一个用补码表示的二进制数,最高位为符号位,当符号位为一个用补码表示的二进制数,最高位为符
7、号位,当符号位为“0”(即正数)时,其余位即为此数的二进制值;但当符号(即正数)时,其余位即为此数的二进制值;但当符号位为位为“1”(即负数)时,其余位不是此数的二进制值,应把(即负数)时,其余位不是此数的二进制值,应把它们按位求反,且在最低位加它们按位求反,且在最低位加1,才是它的二进制值。如:,才是它的二进制值。如:X补补=1111 1111 1111 1101 则则 X =-000 0000 0000 0011=-3已知负数已知负数X的补码求原码也可通过公式:的补码求原码也可通过公式:X=-216-(X的补码)的补码)整型数据的存储整型数据的存储第7页,本讲稿共47页2.1 求平均分求平
8、均分2.1.32.1.3 实型实型实型数据又称浮点型数据,有三种类型实型数据又称浮点型数据,有三种类型 单精度浮点数类型,简称浮点类型单精度浮点数类型,简称浮点类型 float float 双精度浮点数类型,简称双精度类型双精度浮点数类型,简称双精度类型 double double 长双精度类型长双精度类型 long double long double实型的相关规定实型的相关规定类类 型型字节数字节数有效数字有效数字数值范围数值范围float47-3.410-38 3.41038double816-1.710-308 1.710308long double1019-3.410-4932 3.
9、4104932第8页,本讲稿共47页实型数据按指数形式存储。float型在内存中占4个字节即32位0 1,分别存放符号位、规格化的尾数、阶符位和阶码。例如,实数-32.28E-20的存储情况如图。实型数据存在舍入误差,提供的有效数字是有限的,只有7(double是16)位,尾数在有效位以外的部分将被舍去。18-0.322800-实型数据的存储实型数据的存储第9页,本讲稿共47页2.1 求平均分求平均分2.1.4 2.1.4 字符型字符型 ASCIIASCII字字符符:大大小小写写英英文文字字母母、数数字字、各各种种标标点点符符号号,控控制制字字符符,一一共共128128个。扩展个。扩展ASCI
10、IASCII字符:字符:256256个。个。字符类型的数据在内存中存储的是字符类型的数据在内存中存储的是ASCIIASCII码值,一个字符占一个字节的内存码值,一个字符占一个字节的内存空间。空间。注:注:ASCIIASCII码字符的取值范围是码字符的取值范围是0 0127127,可用,可用charchar和和unsigned charunsigned char类型类型表示;在表示;在128128255255范围内的扩展范围内的扩展ASCIIASCII码字符只能用码字符只能用unsigned charunsigned char类型类型表示。表示。类类 型型字节数字节数取值范围取值范围char(有
11、符号)(有符号)1-128 127 即即 -27(271)unsigned char(无符号)(无符号)10 255 即即 0(28-1)第10页,本讲稿共47页用一个字节(用一个字节(8 8位二进制信息)存储字符类型数据。对于无符位二进制信息)存储字符类型数据。对于无符号字符类型(号字符类型(unsigned charunsigned char)数据直接存放)数据直接存放ASCIIASCII码或扩码或扩展展ASCIIASCII码。对于有符号字符类型码。对于有符号字符类型(charchar)的数据也是用补的数据也是用补码存储的。码存储的。字符型数据可看成是只有一个字节的整数,与字符型数据可看成
12、是只有一个字节的整数,与整数通用。整数通用。字符型数据的存储字符型数据的存储第11页,本讲稿共47页2.2 求三角形求三角形 2.2.12.2.12.2.12.2.1 程序解析程序解析程序解析程序解析 例例 2-2 2-2 已知三角形的三边是已知三角形的三边是4 4、5 5、6 6,现要求计算其面积,现要求计算其面积 注:海伦公式为注:海伦公式为 分析:分析:1 1、三角形的三边边长、三角形的三边边长a=4a=4、b=5b=5、c=6c=6是常量,不需要键盘输入。是常量,不需要键盘输入。2 2、海伦公式计算时用到开平方根,在、海伦公式计算时用到开平方根,在C C中用数学函数中用数学函数sqrt
13、()sqrt()实实 现,要求包含头文件现,要求包含头文件math.hmath.h。3 3、输出用、输出用printf()printf()函数,注意实型数据的格式符为函数,注意实型数据的格式符为%f%f。4 4、计算周长的一半时,要注意除数是、计算周长的一半时,要注意除数是2.0.2.0.5 5、算法:变量定义及赋值;根据公式计算、算法:变量定义及赋值;根据公式计算l l和和S S;输出;输出S S。第12页,本讲稿共47页2.2 求三角形求三角形 2.2.12.2.12.2.12.2.1 程序解析程序解析程序解析程序解析 程序代码程序代码#include#include#include#in
14、clude void main()void main()int a=4,b=5,c=6;/int a=4,b=5,c=6;/变量定义及赋初值变量定义及赋初值 float l,s float l,s;l=(a+b+c)/l=(a+b+c)/2.0;2.0;/计算计算l l s=s=sqrtsqrt(l*(l-a)*(l-b)*(l-c);/(l*(l-a)*(l-b)*(l-c);/计算面积计算面积s s printf(printf(“s=%fs=%fnn”,s);/,s);/输出面积输出面积 第13页,本讲稿共47页2.2 求三角形求三角形(1)(1)十进制整数,如十进制整数,如154154、
15、565565、-6523-6523。(2)(2)八进制整数,以八进制整数,以0 0开头。如开头。如01230123表示八进制表示八进制(123)(123)8 8,等于,等于8383。(3)(3)十六进制整数,以十六进制整数,以0 x0 x开头。如开头。如0 x4a0 x4a即即(4a)(4a)1616,等于,等于7474。(4)(4)长整型,数尾加长整型,数尾加L L(l l)(5)(5)无符号型,数尾加无符号型,数尾加U U(u u)例例如如-63L-63L、0123LU0123LU、0 x4aL0 x4aL等等分分别别表表示示十十进进制制有有符符号号长长整整型型数数、八八进制无符号长整型数
16、和十六进制有符号长整型数。进制无符号长整型数和十六进制有符号长整型数。2.2.2 常量常量1.整型常量整型常量第14页,本讲稿共47页2.2 求三角形求三角形2.实型常量实型常量只能用十进制形式表示,没有八进制和十六进制形式表示。(1)小数形式:由数字和小数点组成,如小数形式:由数字和小数点组成,如-0.12、3.1415926、.4、3.等都是实数。等都是实数。(2)指数形式:如指数形式:如1.8e5或或1.8E5都代表都代表1.8x105。但注意字母。但注意字母e(或(或E)之前必须有数字,且)之前必须有数字,且e后面指数必须为整数,如后面指数必须为整数,如e3、2.1e3.2、e等都不是
17、合法的指数形式。等都不是合法的指数形式。第15页,本讲稿共47页字符型常量是由一对单引号括起来的单个字符构成,例如字符型常量是由一对单引号括起来的单个字符构成,例如,a,b,1等都是有效字符型常量等都是有效字符型常量 一个字符型常量的存储值是该字符集中对应的一个字符型常量的存储值是该字符集中对应的ASCII编码值,编码值,常用字符的常用字符的ASCII编码值如下:编码值如下:字符字符AZ的码值是的码值是6590,字符字符az的码值是的码值是97122,字符字符09的码值是的码值是4857,空格字符空格字符 的的ASCII码值码值32。2.2 求三角形求三角形3.字符常量字符常量第16页,本讲稿
18、共47页2.2 求三角形求三角形C语言中转义字符字符形式字符形式功功 能能n换行,将光标从当前位置移到下一行开头换行,将光标从当前位置移到下一行开头t横向跳格,光标跳到下一个水平制表位横向跳格,光标跳到下一个水平制表位b退格退格r回车,将光标从当前位置移到本行开头回车,将光标从当前位置移到本行开头f换页,将光标从当前位置移到下一页开头换页,将光标从当前位置移到下一页开头反斜杠字符反斜杠字符单引号字符单引号字符双引号字符双引号字符ddd1到到3位位8进制数所代表的字符进制数所代表的字符xhh1到到2位位16进制数所代表的字符进制数所代表的字符第17页,本讲稿共47页2.2 求三角形求三角形字符串
19、常量与字符常量的区别字符串常量与字符常量的区别(1)(1)字符常量由单引号括起来,字符串常量由双引号括起来。字符常量由单引号括起来,字符串常量由双引号括起来。(2)(2)字字符符常常量量占占一一个个字字节节内内存存空空间间。字字符符串串常常量量占占的的内内存存字字节节数数等等于于字字符符串中字符所占的字节数加串中字符所占的字节数加1 1。多余一个字节用于存放字串结束标记。多余一个字节用于存放字串结束标记00。注注意意:不不要要将将单单个个字字符符组组成成的的字字符符串串常常量量与与字字符符常常量量混混淆淆。不不能能把把一一个字符串常量赋给一个字符变量。个字符串常量赋给一个字符变量。4.字符串常
20、量字符串常量 字符串常量是由一对双引号括起来的字符序列组成的,例如字符串常量是由一对双引号括起来的字符序列组成的,例如“abcabc”、“a a”等都是字符串常量。等都是字符串常量。第18页,本讲稿共47页2.2 求三角形求三角形宏常量就是使用符号代表常量。宏常量就是使用符号代表常量。C C语言中允许用标识符定义一个常量,这种常量定义在语言中允许用标识符定义一个常量,这种常量定义在C C语言中被称语言中被称之为之为“宏定义宏定义”。其基本格式如下:。其基本格式如下:#define N 10 /#define N 10 /定义符合常量定义符合常量N N,其值为,其值为1010。注意:宏定义的末尾
21、一般不用分号,定义位置放在函数之外注意:宏定义的末尾一般不用分号,定义位置放在函数之外5.宏常量宏常量6.CONST常量常量 上宏常量中没有数据类型,编译器对宏常量不进行类型检查,只进行简单上宏常量中没有数据类型,编译器对宏常量不进行类型检查,只进行简单的字符串转换,有时产生意想不到的错误,此时可以使用的字符串转换,有时产生意想不到的错误,此时可以使用constconst常量。其定常量。其定义格式如下:义格式如下:const int MAXN=100;/const int MAXN=100;/声明一个名为声明一个名为MAXNMAXN的整型的整型constconst常量,常量,其值为其值为100
22、100。第19页,本讲稿共47页2.2 求三角形求三角形 变量是内存中的一块区域,其值在程序运变量是内存中的一块区域,其值在程序运行过程中可以被改变。必须先定义,后使用。行过程中可以被改变。必须先定义,后使用。在在C C语言中使用标识符作为变量的名字。语言中使用标识符作为变量的名字。2.2.3 变量变量 标识符是程序中表示数据和程序段的基本手段,标识符是程序中表示数据和程序段的基本手段,是由字母、数字等字符组成的一个字符串。是由字母、数字等字符组成的一个字符串。1.标识符标识符第20页,本讲稿共47页标识符命名规则如下:标识符命名规则如下:(1)(1)标识符只能由下划线标识符只能由下划线“_
23、_”、数字与、数字与2626个字母构成,个字母构成,不能有汉字。不能有汉字。(2)(2)标识符的首字符必须是字母或下划线标识符的首字符必须是字母或下划线“_ _”。(3)C(3)C语言中区分大小写。语言中区分大小写。(4)(4)标识符不能使用系统关键字。标识符不能使用系统关键字。(5)(5)系统预定义标识符如系统预定义标识符如definedefine、includeinclude、系统函数名、系统函数名 如如scanfscanf、printfprintf等可作为用户标识符,但建议不用。等可作为用户标识符,但建议不用。(6)(6)命名尽量作到命名尽量作到“见名知义见名知义”,例如,例如maxma
24、x、scorescore等。等。(7)(7)避免使用易混字符,如避免使用易混字符,如1 1、l l、i i;0 0、o o;2 2、z z等。等。2.2 求三角形求三角形第21页,本讲稿共47页2.2 求三角形求三角形是指系统预定义的保留标识符,又称保留字。它们有特定含义,不能再作其它用途。ANSI C定义的关键字共32个 autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgoto
25、sizeofvolatiledoifwhilestatic2.关键字关键字第22页,本讲稿共47页2.2 求三角形求三角形类型类型 变量名变量名=初值初值,变量名,变量名=初值初值,;例如:例如:char a;float f;double x,y,min;int m,n=3,w=5;【注意注意】不能用关键字做变量名;在一个函数中,同一个不能用关键字做变量名;在一个函数中,同一个变量不能被定义两次;变量未赋值时其值是随机的。变量不能被定义两次;变量未赋值时其值是随机的。3.变量的定义和初始化变量的定义和初始化第23页,本讲稿共47页2.2 求三角形求三角形2.2.4 函数函数 C语言中提供许多事
26、先编好的函数,供用户使用,如例语言中提供许多事先编好的函数,供用户使用,如例2-2的的求平方根函数求平方根函数sqrt()。用户调用库函数时,要用户调用库函数时,要#include命令将函数所在的头文件包含命令将函数所在的头文件包含到程序中。到程序中。常用的数学库函数有:常用的数学库函数有:1.绝对值函数绝对值函数fabs(x)2.平方根函数平方根函数sqrt(x)3.幂函数幂函数pow(x,n)4.以以e为底的对数函数为底的对数函数loge(x)5.指数函数指数函数exp(x)第24页,本讲稿共47页 例例 2-3 2-3 计算银行存款的本息,输入存款金额计算银行存款的本息,输入存款金额mo
27、neymoney、存期、存期yearyear和和年利率年利率rate,rate,根据公式计算存款到期时的本息合计根据公式计算存款到期时的本息合计sumsum,输出,输出时保留两位小数。注:时保留两位小数。注:第25页,本讲稿共47页 程序代码程序代码#include#include#include#include void main()void main()int money,year;/int money,year;/定义相关变量定义相关变量 float rate,sum float rate,sum;printf(printf(“Enter moneyEnter money:”);/);/
28、提示输入提示输入moneymoney scanf(scanf(“%d%d”,&money);/money);/调用调用scanf()scanf()函数输入函数输入moneymoney printf(printf(“Enter yearEnter year:”););scanf(scanf(“%d%d”,&year);year);printf(printf(“Enter rateEnter rate:”););scanf(scanf(“%f%f”,&rate);rate);sum=money*sum=money*powpow(1+rate),year);/(1+rate),year);/调用调用
29、POW()POW()函数计算函数计算sumsum printf(printf(“sum=%sum=%.2.2f fnn”,sum);,sum);第26页,本讲稿共47页2.3 整数逆序输出整数逆序输出2.3.12.3.12.3.12.3.1 程序解析程序解析程序解析程序解析 例例 2-4 2-4 输入一个两位整数,要求将该数逆序输出输入一个两位整数,要求将该数逆序输出#include#include void main()void main()int a,b;/b int a,b;/b表示表示a a的逆序的逆序 int x,y int x,y;/x/x和和y y分别表示分别表示a a的个位数和
30、十位数的个位数和十位数 printf(printf(“请输入一个两位数:请输入一个两位数:”););scanf(scanf(“%2 2d d”,&a);/%2da);/%2d表示输入两位整数表示输入两位整数 x=a%10;/x=a%10;/求求a a的个位数的个位数 y=a/10;/y=a/10;/求求a a的十位数的十位数 b=10*x+y;/b=10*x+y;/组成新数组成新数b b printf(printf(“a=%d b=%dna=%d b=%dn”,a,b);,a,b);第27页,本讲稿共47页2.32.3 整数逆序输出整数逆序输出1.1.基本算术运算符基本算术运算符(+(+加加
31、减减 *乘乘 /除除%求余求余)(1)(1)运运算算符符%仅仅用用于于整整型型数数据据的的运运算算,a%ba%b的的结结果果为为a a除除以以b b的的余余数数,余数的符号与被除数相同余数的符号与被除数相同。(2)(2)运运算算符符+、-、*、/的的操操作作对对象象可可以以是是整整数数,也也可可以以是是实实数数。当当操操作作对对象象均均是是整整数数时时,结结果果仍仍是是整整数数;若若两两个个操操作作对对象象中中有有一一个个是是实实数数,则则结结果为果为doubledouble型。型。(3)(3)当当两两个个整整数数相相除除时时结结果果为为整整数数。但但是是如如果果除除数数或或被被除除数数中中有
32、有一一个个为为负负数数,则则舍舍入入的的方方向向是是不不固固定定的的。多多数数机机器器采采取取“向向零零取取整整”方方法,即法,即-5/3=-1-5/3=-1,取整后向零靠拢取整后向零靠拢。2.3.2 2.3.2 算术运算算术运算第28页,本讲稿共47页2.3 2.3 整数逆序输出整数逆序输出表达式是由常量、变量、函数和运算符构成的式子。表达式是由常量、变量、函数和运算符构成的式子。(1)(1)算术表达式定义算术表达式定义由由算算术术运运算算符符、括括号号以以及及操操作作对对象象组组成成的的符符合合C C语语言言语语法法规规则则的表达式称为算术表达式。如的表达式称为算术表达式。如a+b-c/d
33、*(a-c)a+b-c/d*(a-c)。(2)(2)优先级和结合性优先级和结合性在在表表达达式式求求值值时时,先先按按运运算算符符优优先先级级别别高高低低次次序序执执行行。若若一一个个运运算算对对象象两两侧侧的的运运算算符符的的优优先先级级别别相相同同,如如a-b+ca-b+c,则则按按规规定定的的“结结合合方方向向”处处理。理。算算术术运运算算符符的的结结合合方方向向为为“自自左左至至右右”,又又称称为为左左结结合合性性,即即先先左左后右,因此先执行后右,因此先执行a-ba-b的运算,再执行加的运算,再执行加c c的运算。的运算。2.算术表达式及其优先性和结合性算术表达式及其优先性和结合性第
34、29页,本讲稿共47页2.3 2.3 整数逆序输出整数逆序输出自增运算符自增运算符+既可以放在操作数前,也可以放在操作数后,操作对象只能既可以放在操作数前,也可以放在操作数后,操作对象只能是变量,不能是常量或表达式。是变量,不能是常量或表达式。如如i+i+,i-i-/*/*表示在使用表示在使用i i值之后将值之后将i i的值加的值加(减减)1*/)1*/+i+i,-i -i /*/*表示在使用表示在使用i i值之前将值之前将i i的值加的值加(减减)1*/)1*/例如:设例如:设i i的原值为的原值为5 5j=i+;j=i+;/*/*先将先将i i赋给赋给j j,i i再自增再自增1 1,i
35、i的值为的值为6 6,j j的值为的值为5*/5*/j=+i;j=+i;/*/*先将先将i i的值自增的值自增1 1,再赋给,再赋给j j,i i的值为的值为6 6,j j的值为的值为6*/6*/3.自增自增+、自减、自减-运算符运算符第30页,本讲稿共47页2.3 2.3 整数逆序输出整数逆序输出(1)(1)自自增增自自减减运运算算符符的的优优先先级级高高,和和单单目目运运算算符符相相同同。其其结结合合方方向向自自是是“自自右右向向左左”(右右结结合合性性)。考考虑虑表表达达式式-i+-i+,由由于于“-”和和“+”优优先先级相同,均为右结合性,因此相当于级相同,均为右结合性,因此相当于-(
36、i+)-(i+)。(2)(2)自自增增自自减减运运算算符符给给程程序序员员带带来来方方便便,但但同同时时也也带带来来副副作作用用。例例如如,“printf(%d,%dn,i,i+);printf(%d,%dn,i,i+);”在在不不同同编编译译环环境境下下结结果果有有可可能能不不同同。若若i i的值为的值为3 3,则结果,则结果VCVC是是“3,33,3”,TCTC是是“4,34,3”。(3)(3)C C编编译译在在处处理理时时尽尽可可能能多多地地自自左左而而右右将将若若干干个个字字符符组组成成一一个个运运算算符,如符,如i+ji+j,将解释为,将解释为(i+)+j(i+)+j,而不是,而不是
37、i+(+j)i+(+j)。第31页,本讲稿共47页2.3 2.3 整数逆序输出整数逆序输出1.1.赋值运算符赋值运算符 =C C语语言言中中,赋赋值值被被认认为为是是一一种种运运算算,由由赋赋值值运运算算符符将将一一个个变变量量和和一一个表达式连接起来的式子称为赋值表达式。形式是:个表达式连接起来的式子称为赋值表达式。形式是:变量变量变量变量=表达式表达式表达式表达式赋值表达式的值也可以再赋给其它变量,如赋值表达式的值也可以再赋给其它变量,如a=(b=3+5)a=(b=3+5)。【注注意意】赋赋值值运运算算符符“=”不不同同于于数数学学中中使使用用的的符符号号,它它没没有有“相相等等”的的含含
38、义义。如如果果赋赋值值运运算算符符两两侧侧的的数数据据类类型型不不同同时时,在在赋赋值值时时要要进进行行类类型转换。型转换。2.3.3 赋值运算赋值运算第32页,本讲稿共47页2.3 2.3 整数逆序输出整数逆序输出2.复合赋值运算符复合赋值运算符C语语言言允允许许在在赋赋值值运运算算符符“=”之之前前加加上上其其他他运运算算符符以以构构成成复复合合赋赋值值运算符。运算符。+=,-=,*=,/=,%=,=,&=,=,|=例例:a+=5;等价于等价于a=a+5;a*=b+5;等价于等价于 a=a*(b+5);a%=5;等价于等价于 a=a%5;3.优先级和结合性优先级和结合性赋值运算符和复合赋值
39、运算符优先级相同,只高于逗号运算符,右结合。赋值运算符和复合赋值运算符优先级相同,只高于逗号运算符,右结合。第33页,本讲稿共47页2.3 2.3 整数逆序输出整数逆序输出【例2-5】分析下面程序的运行结果#include main()int a=12;a+=a-=a*a;printf(%d n,a);第34页,本讲稿共47页2.3 2.3 整数逆序输出整数逆序输出1.逗号运算符逗号运算符 ,其一般形式为:其一般形式为:表达式表达式1,表达式,表达式2逗逗号号表表达达式式的的求求值值过过程程是是:先先求求表表达达式式1的的值值,再再求求表表达达式式2的的值,表达式值,表达式2的值就是整个逗号表
40、达式的值。的值就是整个逗号表达式的值。一个逗号表达式与另一个表达式构成一个新的逗号表达式。一个逗号表达式与另一个表达式构成一个新的逗号表达式。例如:例如:(a=5-3,a*5),a+15逗号表达式的一般形式可以扩展为:逗号表达式的一般形式可以扩展为:表达式表达式1,表达式,表达式2,表达式,表达式3,表达式,表达式n2.3.4 逗号运算逗号运算第35页,本讲稿共47页2.3 2.3 整数逆序输出整数逆序输出2.优先级和结合性逗号运算符是所有运算符中级别最低的。逗号表达式的结合性为自左向右的。【注意】并不是任何地方出现的逗号都是作为逗号运算符。【练习】分析下面程序的运行结果练习】分析下面程序的运
41、行结果#include main()int a=5,b=6,c=1;printf(%d%dn,(+a,b+),c+2);第36页,本讲稿共47页2.4 四舍五入运算四舍五入运算2.4.12.4.12.4.12.4.1 程序解析程序解析程序解析程序解析 例例 2-6 2-6 通通过过键键盘盘输输入入一一个个实实数数,要要求求按按四四舍舍五五入入的的规规则则保保留留两两位位小数并输出。小数并输出。程序代码程序代码#include#include void main()void main()float x,y float x,y;printf(printf(“请输入一个小数:请输入一个小数:”);)
42、;scanf(scanf(“%f%f”,&x);,&x);y=y=(int)(int)(x*100+0.5)/100.0;(x*100+0.5)/100.0;printf(printf(“x=%f,y=%fx=%f,y=%fnn”,x,y);,x,y);第37页,本讲稿共47页2.4 四舍五入运算四舍五入运算2.4.2 数据类型转换 1.类型自动转换转换规则 高 double float long unsigned 低 int char,short 图中横向向左的箭头表示必定的转换,纵向图中横向向左的箭头表示必定的转换,纵向的箭头表示当运算对象为不同类型时转换的的箭头表示当运算对象为不同类型时
43、转换的方向。方向。第38页,本讲稿共47页2.4 四舍五入运算四舍五入运算2.赋值类型转换赋值类型转换(1)(1)当整数赋给浮点型变量,数值不变,但有效位增加。当整数赋给浮点型变量,数值不变,但有效位增加。(2)(2)当单、双精度型数据赋给整型变量,小数部分将被舍弃。当单、双精度型数据赋给整型变量,小数部分将被舍弃。(3)(3)将将字字符符型型数数据据赋赋给给整整型型变变量量时时,由由于于字字符符占占一一个个字字节节,整整型型变变量量4 4个个字字节节,故将字符数据放到整型变量低故将字符数据放到整型变量低8 8位中。位中。将将unsigned unsigned charchar型型数数据据赋赋
44、给给unsigned unsigned intint或或intint型型变变量量时时,高高2424位补位补0 0。将将charchar型型数数据据赋赋给给unsigned unsigned intint或或intint型型变变量量时时,高高2424位位补补上上符符号号位位。(若若字字符符值值最最高高位位为为0 0,则则高高2424位位补补0 0;若若字字符符值值最最高位为高位为1 1,则高,则高2424位全补位全补1)1)第39页,本讲稿共47页2.4 数据类型转换数据类型转换2.4.2 赋值类型转换赋值类型转换(1)(1)当整数赋给浮点型变量,数值不变,但有效位增加。当整数赋给浮点型变量,数
45、值不变,但有效位增加。(2)(2)当单、双精度型数据赋给整型变量,小数部分将被舍弃。当单、双精度型数据赋给整型变量,小数部分将被舍弃。(3)(3)将将字字符符型型数数据据赋赋给给整整型型变变量量时时,由由于于字字符符占占一一个个字字节节,整整型型变变量量4 4个字节,故将字符数据放到整型变量低个字节,故将字符数据放到整型变量低8 8位中。位中。将将unsigned unsigned charchar型型数数据据赋赋给给unsigned unsigned intint或或intint型型变变量量时时,高高2424位补位补0 0。将将charchar型型数数据据赋赋给给unsigned unsig
46、ned intint或或intint型型变变量量时时,高高2424位位补补上上符符号号位位。(若若字字符符值值最最高高位位为为0 0,则则高高2424位位补补0 0;若若字字符符值值最最高高位位为为1 1,则高,则高2424位全补位全补1)1)第40页,本讲稿共47页【例【例2-7】分析下面程序的运行结果】分析下面程序的运行结果#include main()unsigned char a;char b;unsigned int x;int y;a=0 xfe;x=a;y=a;printf(%x%xn,x,y);b=0 x7e;x=b;y=b;printf(%x%xn,x,y);b=0 xfe;
47、x=b;y=b;printf(%x%xn,x,y);2.4 四舍五入运算四舍五入运算第41页,本讲稿共47页2.4 四舍五入运算四舍五入运算(4)当长度长的整数赋给长度短变量时,将进行截断赋值。(5)当整型数据赋给长度相同的变量时,将进行原样赋值。【例【例2-8】分析下面程序的运行结果。】分析下面程序的运行结果。#include main()unsigned short a;short b;unsigned long x;x=0 x6a8b5cfd;a=x;b=x;printf(“%x%xn”,a,b);第42页,本讲稿共47页2.4 四舍五入运算四舍五入运算3.强制类型转换 (类型名)(表达
48、式)作用:作用:设计四舍五入算法,例如将一个实数保留两位小数:设设计四舍五入算法,例如将一个实数保留两位小数:设f为考虑的为考虑的实数,则实数,则(int)(100*f+0.5)/100.0即可实现该算法。即可实现该算法。注意注意(1)(类型名类型名)是运算符,是运算符,表达式一般用括号括起来。表达式一般用括号括起来。(2)经强制类型转换后,得到的是一个所需类型的中间数据,原来经强制类型转换后,得到的是一个所需类型的中间数据,原来变量类型不变变量类型不变第43页,本讲稿共47页2.5 综合应用实综合应用实例例 【例2-9】分析下面程序的运行结果。#include void main()int
49、x,y;x=40;y=(x=x-4,x%7);printf(y=%dn,y);第44页,本讲稿共47页2.5 综合应用实综合应用实例例【例2-10】分析下面程序的运行结果。#include vod main()int m,n,k;m=3;n=9;k=(+m)+(-n);printf(m=%d,n=%d,k=%dn,m,n,k);m=3,n=9;k=(m-)+(n+);printf(m=%d,n=%d,k=%dn,m,n,k);第45页,本讲稿共47页2.5 综合应用实综合应用实例例【例【例2-11】取一个整数】取一个整数x从右端开始的从右端开始的47位。位。【分析】【分析】(1)先使先使x右移右移4位,目的是使要取出的那几位移到最右端。位,目的是使要取出的那几位移到最右端。右移到右端可以用下面方法实现:右移到右端可以用下面方法实现:x 4(2)设置一个低设置一个低4位全为位全为1,其余全为,其余全为0的数。的数。可用下面方法实现:可用下面方法实现:(0 4)&(04)第46页,本讲稿共47页2.5 综合应用实综合应用实例例#include void main()unsigned short x,m,n,k;x=0 x3aef;printf(%xn,x);m=x4;n=(04);k=m&n;printf(%x,%dn%x,%dn,m,m,k,k);第47页,本讲稿共47页