




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章数据类型、运算符、表达式数据类型常量与变量整型、实型、字符型不同类型数据间的转换运算符和表达式第二章数据类型、运算符、表达式数据类型2.1数据类型<>C数据类型基本类型构造类型指针类型空类型void字符类型char枚举类型enum整型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int2.1数据类型<>C基本类型构造类型指针类型空类型voi2.2常量与变量常量和符号常量常量:在程序运行过程中,其值不能改变的量如;12,0,-3,4.6,-1.23,‘a’,’c’符号常量:用一个标识符代表一个常量例2.1符号常量的使用#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf(“total=%d”,total);}<>运行结果:total=3002.2常量与变量<>运行结果:符号常量的好处含义清楚如PRICE代表价格能做到一改全改如#definePRICE35程序中所有以PRICE代表的价格自动改为35<>变量在程序运行过程中,其值可以改变的量变量有一个名字变量在内存中占一定的存储单元3a变量值变量名存储单元符号常量的好处<>变量a变量值变量名存储单元标识符定义:用来标识变量、常量、函数等的有效字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感命名原则:见名知意变量名尽量用小写,符号常量用大写长度尽量不要超过8个字符尽量不使用下划线开头不能用关键字作标识符避免使用容易认错的字符例:0oO1lIZz2例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123<>M.D.John3days#33char$123a>b标识符例:0oO例:判断下列标识符号变量的使用应“先定义,后使用”未被事先定义的不作为变量名例:如果在定义部分写了intstudent;而在执行语句中错写成stadent.如:stadent=30;则输出错误“变量stadent未定义”编译时根据变量的类型为其分配相应的存储单元如int为两个字节float为四个字节编译时根据变量的类型检查运算是否合法如%运算只能在整型数据之间进行如果a,b为两个实型变量,则a%b是错误的变量的使用应“先定义,后使用”2.3整型数据整型常量的表示方法十进制整数如;123,-456,0八进制整数以0开头的数如:0123即(123)8
其值为1*82+2*81+3*80=83十六进制整数以0x开头的数如:0x123即(123)16其值为1*162+2*161+3*160=291<>要注意各种进制数字的组成注2.3整型数据<>要注意各种进制数字的组成注各种进制之间的转换二进制、八进制、十六进制转换成十进制方法:按权相加<>各种进制之间的转换<>各种进制之间的转换(整数)二进制、八进制、十六进制转换成十进制方法:按权相加十进制转换成二进制、八进制、十六进制方法:连续除以基,从低到高记录余数,直至商为0例把十进制数59转换成二进制数5922921427232120(59)10=(111011)2110111111011余余余余余余例把十进制数159转换成八进制数1598198280(159)10=(237)8237余7余3余2例把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161CB余11余12余1各种进制之间的转换(整数)十进制转换成二进制、八进制、十六进二进制与八进制之间的转换二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制八进制转换成二进制:用3位二进制数代替每一位八进制数例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~7<>二进制与八进制之间的转换例(1101001)2=(001二进制与十六进制之间的转换二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制十六进制转换成二进制:用4位二进制数代替每一位十六进制数例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000~00001~10010~20011~30100~40101~50110~60111~71000~81001~91010~A1011~B1100~C1101~D1110~E1111~F<>二进制与十六进制之间的转换例(1101010111110字节和位内存以字节为单元组成每个字节有一个地址一个字节一般由8个二进制位组成每个二进位的值是0或101234567012345678910……...<>7643251字节和位01234567012345678910……...<整型变量整型数据在内存中的存放在内存中以二进制形式存放一个整型变量在内存中占两个字节如:inti;i=10;数据在内存中的实际存放情况补码正数的补码和其原码形式相同负数的补码取-10的绝对值按位取反加1
<>0010000000001000001000000000100011011111111101111110111111110111整型变量<>001000000000100000100000整型变量的分类有符号基本整型[signed]int无符号基本整型unsignedint有符号短整型[signed]short[int]无符号短整型unsignedshort[int]有符号长整型[signed]long[int]无符号长整型unsignedlong[int]
=327670111111111111111符号位1111111111111111=65535数据的第一位有符号整型变量无符号整型变量整型变量的分类=327670111111111111111符ANSI标准定义的整数类型类型比特数取值范围[sigend]int16-32768~32767unsignedint160~65535[sigend]short[int]16-32768~32767unsignedshort[int]160~65535[sigend]long[int]32-231~(231-1)unsignedlong[int]320~(232-1)ANSI标准定义的整数类型类型比特数取值范围[sigend]整型变量的定义inta,b;unsignedshortc,d;longe,f<>例2.2整型变量的定义与使用main(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);}运行结果:a+u=22,b+u=-14整型变量的定义<>例2.2整型变量的定义与使用运整型数据的溢出<>例2.3整型数据的溢出main(){inta,b;
a=32767;b=a+1;printf(“%d,%d\n”,a,b);}运行结果:32767,-327680111111111111111a:327671000000000000000b:-32768整型数据的溢出<>例2.3整型数据的溢出运行结果:0整型常量的类型其值在-32768~+32767范围内的整数认为它是int型其值超出上述范围,在-2147483648~+2147483647范围内,则认为是长整型一个整型常量后加一个字母u,认为是unsignedint型如12345u。如果是-12345u,则先将-12345转换成补码53191,然后按无符号数存储。一个整型常量后面加一个字母l或L,认为是longint型
312691245781011整型常量的类型312691245781011思考题请写出下列程序的运行结果<>main(){longinta;a=32767+1;printf(“a=%ld\n”,a);}main(){longinta;a=32768;printf(“a=%ld\n”,a);}思考题<>main()2.4实型数据实型常量的表示方法十进制小数形式由数字和小数点组成(必须有小数点)如;.123、123.、123.0、0.0指数形式如:123e3或123E3都代表123*103字母e之前必须有数字,e后面的指数必须为整数规范化的指数表示形式一个实数可以有多种指数表示形式如123.456可表示为123.456e0、12.3456e1、1.23456e2、0.123456e3等字母e之前的小数部分中,小数点左边有且只能有一位非零的数字
<>2.4实型数据<>实型变量实型数据在内存中的存放
实型变量的分类
<>+.3141591数符小数部分指数类型比特数有效数字数值范围float326~710-37~1038double6415~1610-307~10308longdouble8018~1910-4931~104932实型变量<>+.3141591数符小数部分指数类型比特数有效实型数据的舍入误差
例2.4实型数据的舍入误差main(){floata,b;/*double*/a=123456.789e5;b=a+20;printf(“%f\n”,b);}<>运行结果:12345678848.000000实型常量的类型
系统将实型常量作为双精度来处理
可在数的后面加字母f或F,按单精度处理实型数据的舍入误差<>运行结果:实型常量的类型2.5字符常量定义:用单引号括起来的单个普通字符或转义字符.
如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------()例:‘A’-------’\101’-------’\x41’--------65如‘a’‘A’‘?’‘\n’‘\101’转义字符:反斜线后面跟一个字符或一个代码值表示例转义字符举例main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}运行结果:(屏幕显示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’例main(){printf(“Y\b=\n”);}运行结果:屏幕显示:=打印机输出:¥字符形式含义ASCII代码\n换行,将当前位置移到下一行开头10\t水平制表(跳到下一个制表位)9\b退格,将当前位置移到前一列8\r回车,将当前位置移到本行开头13\f换页,将当前位值移到下页开头12\\反斜杠字符“\”92\’单引号字符39\”双引号字符34\ddd1到3位8进制数所代表的字符\xhh1到2位16进制数所代表的字符2.5字符常量如‘\101’-------例2.5
转义字符的使用main(){printf(“abc\tde\rf\tg\n");printf(“h\ti\b\bjk\n");}运行结果:屏幕显示:fgdehjk打印机输出:fabcgdehjik字符变量定义形式charc1,c2;赋值c1=‘a’;c2=‘b’;例2.5转义字符的使用运行结果:字符变量字符数据在内存中的存储一个字符在内存中占一个字节字符数据在内存中以ASCII码存储例2.6向字符变量赋以整数main(){charc1,c2;c1=97;c2=98;printf(”%c%c\n”,c1,c2);printf(”%d%d\n”,c1,c2);}01100001‘a’在内存中的存储01100010‘b’在内存中的存储字符数据和整型数据存储形式相似,可以互相转换一个字符型数据既可以以字符形式输出,也可以以整数形式输出ASCII码字符输出ASCII码输出运行结果:ab9798c1=‘a’;c2=‘b’字符数据在内存中的存储例2.6向字符变量赋以整数01100例2.7
大小写字母的转换main(){charc1,c2;c1='a';c2='b';c1=c1-32;c2=c2-32;printf("%c%c\n",c1,c2);}运行结果:AB字符数据与整型数据可以互相赋值inti;charc;i=‘a’;c=97;字符变量中的最高位为符号位注例2.7大小写字母的转换运行结果:字符数据与整型数据可<字符常量与字符串常量不同字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个‘\0’作为字符串结束标志hello\0例字符串“hello”在内存中aa\0例‘a’“a”例:charch;ch=“A”;例:charch;ch=‘A’;如“howdoyoudo”,“china”,”a”<字符常量与字符串常量不同字符串常量helANSI标准定义的数据类型<>类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsigned
int0~65535320~4294967295unsigned
longunsigned
short160~65535有float3210-37~1038有double6410-307~10308有char8-128~127无unsignedchar80~255ANSI标准定义的数据类型<>类型符号关键字数的表示范围所占2.6变量赋初值定义变量的同时使变量初始化如:inta=3;floatf=3.56;charc=‘a’;也可部分赋初值如:inta,b,c=3;对几个变量赋初值,可写成inta=3,b=3,c=3;不能写成inta=b=c=3;<>inta=3;inta;a=3;inta,b,c=5;inta,b,c;c=5;2.6变量赋初值<>inta=3;inta;intdoublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换只表示转换方向例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/e例inti;floatf;doubled;longe;<>2.7各类数值型数据间的混合运算doublefloatlongunsignedintchar2.8
算术运算符和算术表达式C运算符算术运算符:+-*/%++--关系运算符:<<===>>=!=逻辑运算符:!&&||位运算符:<<>>~|^&赋值运算符:=及其扩展赋值运算符条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.->下标运算符:[]其它:()-<>2.8算术运算符和算术表达式C算术运算符:+-*算术运算符和表达式基本算术运算符:+-*/%说明:两整数相除,结果为整数采取“向零取整”的方法%要求两侧均为整型数据例5/2=5/2.0=例5%2=-5%2=1%10=
5%1=5.5%2<>例5/2=2
5/2.0=2.5例5%2=1
-5%2=-11%10=
1
5%1=
05.5%2()算术运算符和表达式例5/2=例算术表达式和运算符的优先级与结合性C算术表达式:用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子结合方向为“自左至右”<>例a*b/c-1.5+’a’ab*c/1.5-’a’+强制类型转换运算符可以将一个表达式转换成所需类型形式(类型名)(表达式)类型名与表达式都应用括号括起来例(double)a(int)(x+y)说明:强制类型转换时,得到一个所需类型 的中间变量,原变量的类型未发生变化例2.8强制类型转换main(){floatx;intI;x=3.6;i=(int)x;printf(”x=%f,i=%d\n”,x,i);}运行结果:x=3.600000,i=3算术表达式和运算符的优先级与结合性<>例a*b/c-1自增、自减运算符++--作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-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=3;k=++j;自增、自减运算符++--作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)说明:++--不能用于常量和表达式,如5++,(a+b)++++--结合方向:自右向左优先级:例-i++-(i++)i=3;printf(“%d”,-i++);//-3
例-i++i=3;printf(“%d”,-i++);自增、自减运算符++--说明:例-i++-(表达式使用中的问题说明注意编译系统的调用顺序例设i=3;求(i++)+(i++)+(i++)有的系统值为9,有的为12turboc系统中得到9(++i)+(++i)+(++i)运算符的组成
自左至右尽可能多的将若干个字符组成一个运算符实参的求值顺序
printf(“%d,%d”,i,i++);(i的值为3)有的系统值为3,3有的为4,3turboc系统中得到4,3
表达式使用中的问题说明运算符的组成赋值运算符和表达式赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量类型转换实型数据赋给整型变量时,舍弃实数的小数部分inti;i=3.56;i的值为3,以整数形式存储将整型数据赋给单、双精度变量时,数值不变,补足有效数字,以浮点数形式存储到变量中。floatf;f=23;转换成23.00000存储doublef;f=23;转换成23.00000000000000存储注意:单、双精度变量的有效数字的位数<>赋值运算符和表达式类型转换<>类型转换将一个double数据赋给float变量时,截取其前面7位有效数字,存放到存储单元中。注意:数值范围不能溢出将一个float数据赋给double变量时,数值不变,有效位数扩展到16位,以64位存储。字符型数据赋给整型变量字符为无符号量时,将字符的8位放到整型变量的低8位,高8位补零。若为有符号字符,最高位为零,则整型变量的高8位补零<>11111110c=‘\376’0110000011111000类型转换<>11111110c=‘\376’01100000类型转换若字符最高位为1,则高八位全部补1。注意:目的是使数值保持不变将一个int、short、long数据赋给char变量时,只将其低8位原封不动送到char型变量。<>11111110i=2891110111111111111000100010010000000000101c=‘\376’类型转换<>11111110i=28911101111111类型转换将int型数据赋给long变量时,进行符号扩展,将整型数的16位送到long型低16位中,如果int为正值,则long高16位补零,如果int为负值,则高16位补1。将一个long数据赋给int变量时,将其低16位原封不动送到整型变量。将unsignedint型数据赋给long型变量时,高位补零将一个unsigned类型数据赋给一个占字节数相同的整型变量,将unsigned型变量的内容原样送到非unsigned变量中。若为有符号字符,最高位为零,则整型变量的高8位补零。
注意:有可能出现数据错误<>000000000000100000100000000000000000000000001000类型转换<>000000000000100000100000类型转换unsignedinta=65535;intb;b=a;注意:根据补码知识,b的值为-1。将非unsigned型数据赋给长度相同的unsigned型变量,也是原样照赋。<>a1111111111111111例2.9有符号数据传送给无符号变量main(){unsigneda;intb=-1;a=b;printf(“%u”,a);}运行结果:655351111111111111111b不同类型的整型数据间的赋值:按存储单元中的存储形式直接传送类型转换<>a1111111111111111例2.9有复合的赋值运算符在“=”前加上其他运算符,可构成复合的运算符a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)x%=3等价于x=x%3
为便于记忆,可以这样理解a+=b(a为变量,b为表达式)
a+=b(将有下划线的移到“=”右侧)a=a+b(在“=”左侧补上变量名a)10种复合赋值运算符+=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|=<>复合的赋值运算符<>赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子形式〈变量〉〈赋值运算符〉〈表达式〉求解过程将赋值符右侧的表达式的值赋给左侧的变量<>说明:结合方向:自右向左左侧必须是变量,不能是常量或表达式例3=x-2*y;a+b=3;赋值表达式的值与变量值相等,且可嵌套例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)赋值表达式也可以包含复合的赋值运算符例:a=12;a+=a-=a*a例:inta=2;a%=4-1;a+=a*=a-=a*=3;//a=-264等价于a=a+(a=a-(a*a))//a=0等价于a=a+(a=a*(a=a-(a=a*3)))赋值表达式<>说明:例3=x-2*y;赋值表达式的值与变逗号运算符和表达式形式:表达式1,表达式2,……表达式n结合性:从左向右求值顺序:表达式1,表达式2,……表达式n逗号表达式的值:等于表达式n的值用途:常用于循环for语句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);<>//a=15,表达式值60//a=15,表达式值20//赋值表达式,表达式值18,x=18//逗号表达式,表达式值18,x=3//1,2,3//3,2,3逗号运算符和表达式例a=3*5,a*4<>//a=15逗号运算符和表达式形式:表达式1,表达式2,……表达式n结合性:从左向右求值顺序:表达式1,表达式2,……表达式n逗号表达式的值:等于表达式n的值用途:常用于循环for语句中例:main(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}运行结果:x=3<>逗号运算符和表达式例:运行结果:x=3<>main()
{
chara=176,b=219;
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);}
作业:P412.3(2)、(5),2.6,2.7,2.8,2.9,2.10,2.11,2.12main()
{
chara=176,b=219;
第二章数据类型、运算符、表达式数据类型常量与变量整型、实型、字符型不同类型数据间的转换运算符和表达式第二章数据类型、运算符、表达式数据类型2.1数据类型<>C数据类型基本类型构造类型指针类型空类型void字符类型char枚举类型enum整型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int2.1数据类型<>C基本类型构造类型指针类型空类型voi2.2常量与变量常量和符号常量常量:在程序运行过程中,其值不能改变的量如;12,0,-3,4.6,-1.23,‘a’,’c’符号常量:用一个标识符代表一个常量例2.1符号常量的使用#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf(“total=%d”,total);}<>运行结果:total=3002.2常量与变量<>运行结果:符号常量的好处含义清楚如PRICE代表价格能做到一改全改如#definePRICE35程序中所有以PRICE代表的价格自动改为35<>变量在程序运行过程中,其值可以改变的量变量有一个名字变量在内存中占一定的存储单元3a变量值变量名存储单元符号常量的好处<>变量a变量值变量名存储单元标识符定义:用来标识变量、常量、函数等的有效字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感命名原则:见名知意变量名尽量用小写,符号常量用大写长度尽量不要超过8个字符尽量不使用下划线开头不能用关键字作标识符避免使用容易认错的字符例:0oO1lIZz2例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123<>M.D.John3days#33char$123a>b标识符例:0oO例:判断下列标识符号变量的使用应“先定义,后使用”未被事先定义的不作为变量名例:如果在定义部分写了intstudent;而在执行语句中错写成stadent.如:stadent=30;则输出错误“变量stadent未定义”编译时根据变量的类型为其分配相应的存储单元如int为两个字节float为四个字节编译时根据变量的类型检查运算是否合法如%运算只能在整型数据之间进行如果a,b为两个实型变量,则a%b是错误的变量的使用应“先定义,后使用”2.3整型数据整型常量的表示方法十进制整数如;123,-456,0八进制整数以0开头的数如:0123即(123)8
其值为1*82+2*81+3*80=83十六进制整数以0x开头的数如:0x123即(123)16其值为1*162+2*161+3*160=291<>要注意各种进制数字的组成注2.3整型数据<>要注意各种进制数字的组成注各种进制之间的转换二进制、八进制、十六进制转换成十进制方法:按权相加<>各种进制之间的转换<>各种进制之间的转换(整数)二进制、八进制、十六进制转换成十进制方法:按权相加十进制转换成二进制、八进制、十六进制方法:连续除以基,从低到高记录余数,直至商为0例把十进制数59转换成二进制数5922921427232120(59)10=(111011)2110111111011余余余余余余例把十进制数159转换成八进制数1598198280(159)10=(237)8237余7余3余2例把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161CB余11余12余1各种进制之间的转换(整数)十进制转换成二进制、八进制、十六进二进制与八进制之间的转换二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制八进制转换成二进制:用3位二进制数代替每一位八进制数例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~7<>二进制与八进制之间的转换例(1101001)2=(001二进制与十六进制之间的转换二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制十六进制转换成二进制:用4位二进制数代替每一位十六进制数例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000~00001~10010~20011~30100~40101~50110~60111~71000~81001~91010~A1011~B1100~C1101~D1110~E1111~F<>二进制与十六进制之间的转换例(1101010111110字节和位内存以字节为单元组成每个字节有一个地址一个字节一般由8个二进制位组成每个二进位的值是0或101234567012345678910……...<>7643251字节和位01234567012345678910……...<整型变量整型数据在内存中的存放在内存中以二进制形式存放一个整型变量在内存中占两个字节如:inti;i=10;数据在内存中的实际存放情况补码正数的补码和其原码形式相同负数的补码取-10的绝对值按位取反加1
<>0010000000001000001000000000100011011111111101111110111111110111整型变量<>001000000000100000100000整型变量的分类有符号基本整型[signed]int无符号基本整型unsignedint有符号短整型[signed]short[int]无符号短整型unsignedshort[int]有符号长整型[signed]long[int]无符号长整型unsignedlong[int]
=327670111111111111111符号位1111111111111111=65535数据的第一位有符号整型变量无符号整型变量整型变量的分类=327670111111111111111符ANSI标准定义的整数类型类型比特数取值范围[sigend]int16-32768~32767unsignedint160~65535[sigend]short[int]16-32768~32767unsignedshort[int]160~65535[sigend]long[int]32-231~(231-1)unsignedlong[int]320~(232-1)ANSI标准定义的整数类型类型比特数取值范围[sigend]整型变量的定义inta,b;unsignedshortc,d;longe,f<>例2.2整型变量的定义与使用main(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);}运行结果:a+u=22,b+u=-14整型变量的定义<>例2.2整型变量的定义与使用运整型数据的溢出<>例2.3整型数据的溢出main(){inta,b;
a=32767;b=a+1;printf(“%d,%d\n”,a,b);}运行结果:32767,-327680111111111111111a:327671000000000000000b:-32768整型数据的溢出<>例2.3整型数据的溢出运行结果:0整型常量的类型其值在-32768~+32767范围内的整数认为它是int型其值超出上述范围,在-2147483648~+2147483647范围内,则认为是长整型一个整型常量后加一个字母u,认为是unsignedint型如12345u。如果是-12345u,则先将-12345转换成补码53191,然后按无符号数存储。一个整型常量后面加一个字母l或L,认为是longint型
312691245781011整型常量的类型312691245781011思考题请写出下列程序的运行结果<>main(){longinta;a=32767+1;printf(“a=%ld\n”,a);}main(){longinta;a=32768;printf(“a=%ld\n”,a);}思考题<>main()2.4实型数据实型常量的表示方法十进制小数形式由数字和小数点组成(必须有小数点)如;.123、123.、123.0、0.0指数形式如:123e3或123E3都代表123*103字母e之前必须有数字,e后面的指数必须为整数规范化的指数表示形式一个实数可以有多种指数表示形式如123.456可表示为123.456e0、12.3456e1、1.23456e2、0.123456e3等字母e之前的小数部分中,小数点左边有且只能有一位非零的数字
<>2.4实型数据<>实型变量实型数据在内存中的存放
实型变量的分类
<>+.3141591数符小数部分指数类型比特数有效数字数值范围float326~710-37~1038double6415~1610-307~10308longdouble8018~1910-4931~104932实型变量<>+.3141591数符小数部分指数类型比特数有效实型数据的舍入误差
例2.4实型数据的舍入误差main(){floata,b;/*double*/a=123456.789e5;b=a+20;printf(“%f\n”,b);}<>运行结果:12345678848.000000实型常量的类型
系统将实型常量作为双精度来处理
可在数的后面加字母f或F,按单精度处理实型数据的舍入误差<>运行结果:实型常量的类型2.5字符常量定义:用单引号括起来的单个普通字符或转义字符.
如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------()例:‘A’-------’\101’-------’\x41’--------65如‘a’‘A’‘?’‘\n’‘\101’转义字符:反斜线后面跟一个字符或一个代码值表示例转义字符举例main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}运行结果:(屏幕显示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’例main(){printf(“Y\b=\n”);}运行结果:屏幕显示:=打印机输出:¥字符形式含义ASCII代码\n换行,将当前位置移到下一行开头10\t水平制表(跳到下一个制表位)9\b退格,将当前位置移到前一列8\r回车,将当前位置移到本行开头13\f换页,将当前位值移到下页开头12\\反斜杠字符“\”92\’单引号字符39\”双引号字符34\ddd1到3位8进制数所代表的字符\xhh1到2位16进制数所代表的字符2.5字符常量如‘\101’-------例2.5
转义字符的使用main(){printf(“abc\tde\rf\tg\n");printf(“h\ti\b\bjk\n");}运行结果:屏幕显示:fgdehjk打印机输出:fabcgdehjik字符变量定义形式charc1,c2;赋值c1=‘a’;c2=‘b’;例2.5转义字符的使用运行结果:字符变量字符数据在内存中的存储一个字符在内存中占一个字节字符数据在内存中以ASCII码存储例2.6向字符变量赋以整数main(){charc1,c2;c1=97;c2=98;printf(”%c%c\n”,c1,c2);printf(”%d%d\n”,c1,c2);}01100001‘a’在内存中的存储01100010‘b’在内存中的存储字符数据和整型数据存储形式相似,可以互相转换一个字符型数据既可以以字符形式输出,也可以以整数形式输出ASCII码字符输出ASCII码输出运行结果:ab9798c1=‘a’;c2=‘b’字符数据在内存中的存储例2.6向字符变量赋以整数01100例2.7
大小写字母的转换main(){charc1,c2;c1='a';c2='b';c1=c1-32;c2=c2-32;printf("%c%c\n",c1,c2);}运行结果:AB字符数据与整型数据可以互相赋值inti;charc;i=‘a’;c=97;字符变量中的最高位为符号位注例2.7大小写字母的转换运行结果:字符数据与整型数据可<字符常量与字符串常量不同字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个‘\0’作为字符串结束标志hello\0例字符串“hello”在内存中aa\0例‘a’“a”例:charch;ch=“A”;例:charch;ch=‘A’;如“howdoyoudo”,“china”,”a”<字符常量与字符串常量不同字符串常量helANSI标准定义的数据类型<>类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsigned
int0~65535320~4294967295unsigned
longunsigned
short160~65535有float3210-37~1038有double6410-307~10308有char8-128~127无unsignedchar80~255ANSI标准定义的数据类型<>类型符号关键字数的表示范围所占2.6变量赋初值定义变量的同时使变量初始化如:inta=3;floatf=3.56;charc=‘a’;也可部分赋初值如:inta,b,c=3;对几个变量赋初值,可写成inta=3,b=3,c=3;不能写成inta=b=c=3;<>inta=3;inta;a=3;inta,b,c=5;inta,b,c;c=5;2.6变量赋初值<>inta=3;inta;intdoublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换只表示转换方向例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/e例inti;floatf;doubled;longe;<>2.7各类数值型数据间的混合运算doublefloatlongunsignedintchar2.8
算术运算符和算术表达式C运算符算术运算符:+-*/%++--关系运算符:<<===>>=!=逻辑运算符:!&&||位运算符:<<>>~|^&赋值运算符:=及其扩展赋值运算符条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.->下标运算符:[]其它:()-<>2.8算术运算符和算术表达式C算术运算符:+-*算术运算符和表达式基本算术运算符:+-*/%说明:两整数相除,结果为整数采取“向零取整”的方法%要求两侧均为整型数据例5/2=5/2.0=例5%2=-5%2=1%10=
5%1=5.5%2<>例5/2=2
5/2.0=2.5例5%2=1
-5%2=-11%10=
1
5%1=
05.5%2()算术运算符和表达式例5/2=例算术表达式和运算符的优先级与结合性C算术表达式:用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子结合方向为“自左至右”<>例a*b/c-1.5+’a’ab*c/1.5-’a’+强制类型转换运算符可以将一个表达式转换成所需类型形式(类型名)(表达式)类型名与表达式都应用括号括起来例(double)a(int)(x+y)说明:强制类型转换时,得到一个所需类型 的中间变量,原变量的类型未发生变化例2.8强制类型转换main(){floatx;intI;x=3.6;i=(int)x;printf(”x=%f,i=%d\n”,x,i);}运行结果:x=3.600000,i=3算术表达式和运算符的优先级与结合性<>例a*b/c-1自增、自减运算符++--作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-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=3;k=++j;自增、自减运算符++--作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)说明:++--不能用于常量和表达式,如5++,(a+b)++++--结合方向:自右向左优先级:例-i++-(i++)i=3;printf(“%d”,-i++);//-3
例-i++i=3;printf(“%d”,-i++);自增、自减运算符++--说明:例-i++-(表达式使用中的问题说明注意编译系统的调用顺序例设i=3;求(i++)+(i++)+(i++)有的系统值为9,有的为12turboc系统中得到9(++i)+(++i)+(++i)运算符的组成
自左至右尽可能多的将若干个字符组成一个运算符实参的求值顺序
printf(“%d,%d”,i,i++);(i的值为3)有的系统值为3,3有的为4,3turboc系统中得到4,3
表达式使用中的问题说明运算符的组成赋值运算符和表达式赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量类型转换实型数据赋给整型变量时,舍弃实数的小数部分inti;i=3.56;i的值为3,以整数形式存储将整型数据赋给单、双精度变量时,数值不变,补足有效数字,以浮点数形式存储到变量中。floatf;f=23;转换成23.00000存储doublef;f=23;转换成23.00000000000000存储注意:单、双精度变量的有效数字的位数<>赋值运算符和表达式类型转换<>类型转换将一个double数据赋给float变量时,截取其前面7位有效数字,存放到存储单元中。注意:数值范围不能溢出将一个float数据赋给double变量时,数值不变,有效位数扩展到16位,以64位存储。字符型数据赋给整型变量字符为无符号量时,将字符的8位放到整型变量的低8位,高8位补零。若为有符号字符,最高位为零,则整型变量的高8位补零<>11111110c=‘\376’01100000111
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 特价房买卖合同模板
- 会议音响租赁合同
- 食品供应链服务合同范文
- 搪瓷化工容器的安全标准考核试卷
- 户外帐篷批发考核试卷
- 助动车行车记录仪使用与维护考核试卷
- 摩托车ABS系统传感器检测考核试卷
- 工业机器人的智能电源管理考核试卷
- 体育运动心理承受能力测试考核试卷
- 家装整装合同范本
- v建筑主墩双壁钢围堰施工工艺资料
- 人教版新课标小学美术二年级下册全册教案
- 病历书写基本规范及相关法律解析
- 我国互联网公司资本结构分析-以新浪公司为例
- 【蓝天幼儿园小一班早期阅读现状的调查报告(含问卷)7800字(论文)】
- 2023年全国职业院校技能大赛赛项-ZZ005 装配式建筑构件安装赛项模块一理论赛题
- 第二次全国土地调查技术规程完整版
- 客户答谢活动承包合同
- AQ/T 5201-2007 涂装工程安全设施验收规范(正式版)
- 华南师范大学333教育综合专业硕士历年考研真题汇编(含部分答案)合集
- 食管早癌的内镜诊断
评论
0/150
提交评论