C语言课件chap06

上传人:M****1 文档编号:579400286 上传时间:2024-08-26 格式:PPT 页数:75 大小:706.53KB
返回 下载 相关 举报
C语言课件chap06_第1页
第1页 / 共75页
C语言课件chap06_第2页
第2页 / 共75页
C语言课件chap06_第3页
第3页 / 共75页
C语言课件chap06_第4页
第4页 / 共75页
C语言课件chap06_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《C语言课件chap06》由会员分享,可在线阅读,更多相关《C语言课件chap06(75页珍藏版)》请在金锄头文库上搜索。

1、Chap6数据类型和表达式数据类型和表达式6.1数据的存储和基本数据类型数据的存储和基本数据类型6.2常量和变量常量和变量6.3数据的输入和输出数据的输入和输出6.4类型转换类型转换6.5表达式表达式本章要点本章要点nC语言的基本数据类型有哪些?语言的基本数据类型有哪些?n各各种种基基本本数数据据类类型型的的常常量量和和变变量量是是怎怎样样定定义的?义的?nC语言有哪些表达式?语言有哪些表达式?n各种表达式的求解规则是什么?各种表达式的求解规则是什么?数据类型和表达式数据类型和表达式n数据类型数据类型基本数据类型基本数据类型n整型整型intn实型(浮点型)实型(浮点型)floatdoublen

2、字符型字符型char构造数据类型构造数据类型数组、结构、联合、枚举数组、结构、联合、枚举指针类型指针类型空类型空类型n运算:对数据的操作运算:对数据的操作运算符数据运算符数据表达式表达式6.1数数据的存储和基本数据类型据的存储和基本数据类型6.1.1数据的存储数据的存储整型、实型、字符型数据的存储整型、实型、字符型数据的存储6.1.2基本数据类型基本数据类型整型、实型、字符型整型、实型、字符型6.1.1数据的存储整型数据数据的存储整型数据设整数在内存中用设整数在内存中用2个字节存储个字节存储10000001100000010000000110000001符号位符号位1:负数:负数0:正数:正数

3、数值的表示方法原码数值的表示方法原码反码反码补码补码n正数正数的原码、反码和补码相同的原码、反码和补码相同1的补码的补码000000000000000132767的补码的补码0111111111111111(215-1,2个字节的存储单元能表示的最大正数个字节的存储单元能表示的最大正数)n负数负数的原码、反码和补码不同的原码、反码和补码不同-1原码原码1000000000000001反码反码1111111111111110原码取反原码取反补码补码1111111111111111反码反码1原码原码反码反码补码补码32767n补码补码0111111111111111-32767n原码原码11111

4、11111111111n反码反码1000000000000000原码取反原码取反n补码补码1000000000000001反码反码1-32768=-32767-1n补码补码1000000000000000(2个字节的存储单元能表示的最小负数个字节的存储单元能表示的最小负数)-32768-101327673276701111111111111111000000000000000100000000000000000-11111111111111111-21111111111111110-327671000000000000001-32768100000000000000032767+1=32768

5、?100000000000000=-32768-32768-1=-32769?0111111111111111=32767实型和字符型数据的存储实型和字符型数据的存储n实型数据的存储实型数据的存储-1.2345e+02符号位符号位阶码阶码尾数尾数n字符型数据的存储字符型数据的存储一个字节存储一个字节存储ASCII码码5.1.2基本基本数据类型数据类型n整型整型有符号整型有符号整型无符号整型无符号整型数据长度数据长度intunsignedint16或或32位位shortintunsignedshortint16位位longintunsignedlongint32位位n字符型字符型char8位位n

6、实型(浮点型)实型(浮点型)单精度浮点型单精度浮点型float32位位双精度浮点型双精度浮点型double64位位基本基本数据类型数据类型整型整型扩展的整数类型:扩展的整数类型:shortlongunsignedint有符号整型有符号整型无符号整型无符号整型数据长度数据长度intunsignedint16或或32位位shortintunsignedshortint16位位longintunsignedlongint32位位有符号有符号short1000000000000000-32768-215011111111111111132767215-1无符号无符号unsignedshort00000

7、000000000000111111111111111165535216-1整数类型的取值范围整数类型的取值范围int32位位-21474836482147483647-231231-1shortint16位位-3276832767-215215-1longint32位位-21474836482147483647-231231-1unsignedint32位位042949672950232-1unsignedshortint16位位0655350216-1unsignedlongint32位位042949672950232-1基本基本数据类型数据类型字符型字符型n字符具有数值特征字符具有数值特

8、征A6501000001n整型变量和字符变量的定义和赋值可以互换整型变量和字符变量的定义和赋值可以互换 【ASCII码码范围】范围】 charc; c=A; 或或 c=65; inti; i=65; 或或 i=A;基本基本数据类型数据类型实型实型实型(浮点型)数据实型(浮点型)数据n单精度浮点型单精度浮点型floatn双精度浮点型双精度浮点型double存储存储数据精度数据精度取值范围取值范围(有效数字有效数字)float4字节字节七七/八八位位(10-381038)double8字节字节十六十六位位(1030810308)数据精度和取值范围数据精度和取值范围n数据精度数据精度与与取值范围取值

9、范围是两个不同的概念:是两个不同的概念:floatx=1234567.89;虽在取值范围内,但无法精确表达。虽在取值范围内,但无法精确表达。floaty=1.2e55;y的精度要求不高,但超出取值范围。的精度要求不高,但超出取值范围。n并不是所有的实数都能在计算机中精确表示并不是所有的实数都能在计算机中精确表示n实型常量的类型都是实型常量的类型都是double1234567.806.2.1常量常量符号常量符号常量整型常量、实型常量、字符型常量整型常量、实型常量、字符型常量6.2.2变量变量 变量的定义和使用变量的定义和使用6.2常量和变量常量和变量6.2.1常量常量常量的类型通常由书写格式决定

10、常量的类型通常由书写格式决定123(整型)整型)4.56(实型实型)A(字符型字符型)符号常量符号常量:用一个标识符代表一个常量:用一个标识符代表一个常量 :PI :EPS例例5-1求球的表面积和体积求球的表面积和体积#include#definePI3.14intmain(void)doubler,s,v;printf(“Enterr:);scanf(%lf,&r);s=4.0*PI*r*r;v=4.0/3.0*PI*r*r*r;printf(s=%f,v=%fn,s,v);return0;加分号加分号? ?通常用大写字母通常用大写字母符号常量的优点符号常量的优点#includeintmai

11、n(void)doubler,s,v;scanf(%lf,&r);s=4.0*r*r*3.14;v=4.0/3.0*r*r*r*3.14;.return0;#include#definePI3.14intmain(void)doubler,s,v;scanf(%lf,&r);s=4.0*PI*r*r;v=4.0/3.0*PI*r*r*r;.return0;3.141593.141593.14159整型常量(整数)整型常量(整数)n整数的表示整数的表示三种表现形式:三种表现形式:十进制整数:正、负号,十进制整数:正、负号,09,首位不是,首位不是0例:例:10,123八进制整数:正、负号,八进制

12、整数:正、负号,07,首位是,首位是0例:例:010,012316进制整数:正、负号,进制整数:正、负号,09,a-f,A-F,前,前缀是缀是0x,0X例:例:0x10,0x123整数的表示整数的表示123=01111011(B)二进制二进制=173(O)八进制八进制=7B(X)十六进制十六进制12301730x7b160200x10100120XA100100x10n不能超出整型数据的取值范围不能超出整型数据的取值范围n比长整型数还要大的数只能用实数来表示比长整型数还要大的数只能用实数来表示整数的类型整数的类型判断整数的类型判断整数的类型n整数后的字母后缀整数后的字母后缀123Llong12

13、3Uunsigned123LUunsignedlongn整数的值整数的值实型常量(实数、浮点数)实型常量(实数、浮点数)n实数的表示实数的表示浮点表示法浮点表示法0.123123.412.12科学计数法科学计数法6.026E-271.2e+301E-5n实数的类型实数的类型double字符型常量字符型常量n字符常量字符常量aA9+$nASCII字符集字符集列出所有可用的字符(列出所有可用的字符(256个)个)每个字符:惟一的次序值(每个字符:惟一的次序值(ASCII码)码)0-9升序排列升序排列A-Za-z字符的数值特征字符的数值特征字符字符ASCII码码对字符进行运算对字符进行运算对字符的对

14、字符的ASCII码进行运算码进行运算例如:例如:A的的ASCII码码65则:则:A+1=66,对应字符对应字符B区分数字字符和数字区分数字字符和数字11转转义义字字符符n反斜杠后跟一个字符或数字反斜杠后跟一个字符或数字n字符常量,代表字符常量,代表一个一个字符字符n101x41An所有字符都可以用转义字符表示所有字符都可以用转义字符表示6.2.2变量变量在程序运行过程中,其值可以被改变的量。在程序运行过程中,其值可以被改变的量。n变量必须先定义,后使用变量必须先定义,后使用n定义变量时要指定变量名和数据类型定义变量时要指定变量名和数据类型n变量应该先赋值,后引用变量应该先赋值,后引用变量的定义

15、变量的定义n变量名:合法的标识符变量名:合法的标识符小写字母;见名知义小写字母;见名知义n变量的类型:在定义时指定变量的类型:在定义时指定n变量定义的一般形式变量定义的一般形式类型名类型名 变量名表;变量名表;intcelsius,fahr;floatx;doublearea,length;变量名变量名代表内存中的一个存储单元,存放该变量的值代表内存中的一个存储单元,存放该变量的值该存储单元的大小由变量的该存储单元的大小由变量的数据类型数据类型决定决定变量的使用变量的使用n必须先必须先定义定义,后,后使用使用n应该先赋值,后引用应该先赋值,后引用n变量的赋值方法变量的赋值方法变量赋初值:在定义

16、变量时对它赋值变量赋初值:在定义变量时对它赋值inta=5,b=3;赋值表达式赋值表达式inta,b;a=5;b=3;输入输入inta,b;scanf(%d%d,&a,&b);6.3.1整型数据的输入和输出整型数据的输入和输出6.3.2实型实型数据的输入和输出数据的输入和输出6.3.3字符型字符型数据的输入和输出数据的输入和输出6.3数数据的输入和输出据的输入和输出6.3.1 整型数据的输入输出整型数据的输入输出printf(格式控制格式控制,输出参数输出参数1,.,输出参数输出参数n);scanf(格式控制格式控制,输入参数输入参数1,.,输入参数输入参数n);格式控制说明格式控制说明%十进

17、制十进制八进制八进制十六进制十六进制int%d%o%xlong%ld%lo%lxunsigned%u%o%xunsignedlong%lu%lo%lx例例6-2(1)输出整型数据输出整型数据#includeintmain(void)printf(%d,%o,%xn,10,10,10);printf(%d,%d,%dn,10,010,0x10);printf(%d,%xn,012,012);return0; 00101010,12,a10,8,1610,a例例6-2(2)输入整型数据输入整型数据#includeintmain(void)inta,b;printf(inputa,b:);scanf

18、(%o%d,&a,&b);printf(%d%5dn,a,b);printf(%x,%dn,a,b);return0; inputa,b:17171517f,17%x%d6.3.2实型数据的输入和输出实型数据的输入和输出n输入输入scanf()float:%f或或%e以小数或指数形式输入一个单精度浮点数以小数或指数形式输入一个单精度浮点数double:%lf或或%le以小数或指数形式输入一个以小数或指数形式输入一个双精度双精度浮点数浮点数n输出输出printf()float和和double使用相同的格式控制说明使用相同的格式控制说明%f以小数形式输出浮点数,保留以小数形式输出浮点数,保留6位小

19、数位小数%e以指数形式输出以指数形式输出实型数据输出示例实型数据输出示例#includeintmain(void)doubled=3.1415926;printf(%f,%en,d,d);printf(%5.3f,%5.2f,%.2fn,d,d,d);return0;3.141593,3.14159e+003.142,3.14,3.14一共一共5位,小数位,小数3位,小数点一位位,小数点一位实型数据输入输出示例实型数据输入输出示例假定假定float的精度为的精度为7位,位,double的精度为的精度为16位位#includeintmain(void)floatf;doubled;printf(

20、inputf,d:);scanf(%f%lf,&f,&d);printf(f=%fnd=%fn,f,d);d=1234567890123.12;printf(d=%fn,d);return0;inputf,d:1234567890123.1234561234567890123.123456f=1234567954432.000000d=1234567890123.123540d=1234567890123.1201206.3.3字符型数据输入输出字符型数据输入输出nscanf()和和printf()%ccharch;scanf(%c,&ch);printf(%c,ch);ngetchar()和

21、和putchar()charch;ch=getchar();putchar(ch);输入输出一个字符输入输出一个字符例6-3(1) 输入输出字符示例#includeintmain(void)charch1,ch2;ch1=getchar();ch2=getchar();putchar(ch1);putchar(#);putchar(ch2);return0;AbA#b例6-3(2) 输入输出字符示例#includeintmain(void)charch1,ch2,ch3;scanf(%c%c%c,&ch1,&ch2,&ch3);printf(%c%c%c%c%c,ch1,#,ch2,#,ch3

22、);return0;AbCA#b#CAbCA#b例6-4 输出字符型数据b的的ASCII码码98#includeintmain(void)charch=b;printf(%c,%dn,b,b);printf(%c,%dn,98,98);printf(%c,%dn,97,b-1);printf(%c,%dn,ch-a+A,ch-a+A);return0;01100010b98b98b,98b,98a,97B,66#includeintmain()charch;ch=b;printf(%c,%dn,ch,ch);return0;01100010b9814262b9801420x62printfb%

23、cputchar98%d142%o62%xscanfb%cgetchar98%d142%o62%xscanf(%c,&ch);字符运算字符运算n大小写英文字母转换大小写英文字母转换 b-a=B-Az-a=Z-AmMa-AA-a0lm-a+A=MlM-A+a=ml8-0=8l8+0=8n数字字符和数字数字字符和数字转换转换 9-0=9-09=9+088不不同同类类型型数数据据的的混混合合运运算算,先先转转换换为为同同一一类类型,再运算。型,再运算。6.4.1自动类型转换自动类型转换非赋值运算的类型转换非赋值运算的类型转换赋值运算的类型转换赋值运算的类型转换6.4.2强制类型转换强制类型转换6.4

24、类型转换类型转换6.4.1自动类型转换(非赋值运算)自动类型转换(非赋值运算)n水平方向:自动水平方向:自动n垂直方向:低垂直方向:低高高高高doublefloatunsignedlonglongunsignedunsignedshort低低intchar,short自动类型转换(非赋值运算)自动类型转换(非赋值运算)A+1210.05657766.95高高doublefloatunsignedlonglongunsignedunsignedshort低低intchar,short自动类型转换(赋值运算)自动类型转换(赋值运算)变量变量 = 表达式表达式n计算赋值运算符右侧计算赋值运算符右侧表

25、达式表达式的值的值n将赋值运算符右侧将赋值运算符右侧表达式表达式的值赋给左侧的的值赋给左侧的变量变量将赋值运算符右侧表达式的类型将赋值运算符右侧表达式的类型自动转换成自动转换成赋值号左侧变量的类型赋值号左侧变量的类型自动类型转换(赋值运算)自动类型转换(赋值运算)doublex;x=1;x=?shorta=1000;charb=A;longc;c=a+b;c=?intai;ai=2.56;ai=?shortbi;bi=0x12345678Lbi=?5.4.2强制类型转换强制类型转换强制类型转换运算符强制类型转换运算符(类型名类型名)表达式表达式(double)3(int)3.8(double)

26、(5/2)(double)5/23.032.02.5强制类型转换示例强制类型转换示例#includeintmain(void)inti;doublex;x=3.8;i=(int)x;printf(x=%f,i=%dn,x,i);printf(double)(int)x=%fn,(double)(int)x);printf(xmod3=%dn,(int)x%3);return0;x=3.800000,i=3(double)(int)x=3.000000xmod3=0表表达达式式:由由运运算算符符和和运运算算对对象象(操操作作数数)组组成成的的有有意意义义的的运运算算式式子子,它它的的值值和和类类

27、型型由由参加运算的运算符和运算对象决定。参加运算的运算符和运算对象决定。运算符:具有运算功能的符号运算符:具有运算功能的符号运算对象:常量、变量和函数等表达式运算对象:常量、变量和函数等表达式算算术术表表达达式式、赋赋值值表表达达式式、关关系系表表达达式式、逻逻辑表达式、条件表达式和逗号表达式等辑表达式、条件表达式和逗号表达式等6.5表达式表达式6.5.1算术表达式算术运算符算术表达式算术运算符n单目单目 +-+-n双目双目 +-*/%注意注意/整数除整数,得整数整数除整数,得整数1/4=0,10/3=3%模模(求余求余):针对整型数据针对整型数据5%6=5,9%4=1,100%4=0+和和n

28、单目运算符,单目运算符,+10和和10n双目运算符,双目运算符,x+10和和 y10双双目目运运算算符符两两侧侧操操作作数数的的类类型型要要相相同同,否否则则,自自动动类型转换后,再运算。类型转换后,再运算。自增运算符自增运算符+和自减运算符和自减运算符-intn;n+nn-n(只适合变量运算)(只适合变量运算)使变量的值增使变量的值增1或减或减1+nn+n=n+1-nn-n=n-1取变量的值作为表达式的值取变量的值作为表达式的值+n:n=n+1;取取n值作为表达式值作为表达式+n的值的值n+:取取n值作为表达式值作为表达式n+的值;的值;n=n+1自增运算和自减运算自增运算和自减运算intn

29、,m;n=2;m=+n;n=2;m=n+;n=3n=3m=3m=2m=nm=n+1n=n+1m=n算术运算符的优先级和结合性算术运算符的优先级和结合性单目单目 + - + -双目双目 * / %双目双目 + -高高低低从右向左从右向左-5+3%2=(-5)+(3%2)=-43*5%3=(3*5)%3=0-i+-(i+)写出写出C表达式表达式数学式数学式C算术表达式算术表达式s(s-a)(s-b)(s-c)(x+2)e2x6.5.2赋值赋值表达式表达式n赋值运算符赋值运算符 =x=3*4优先级较低,结合性从右向左优先级较低,结合性从右向左x=y=3 x=(y=3)赋值赋值表达式表达式变量变量 =

30、 表达式表达式计算赋值运算符右侧计算赋值运算符右侧表达式表达式的值的值将赋值运算符右侧将赋值运算符右侧表达式表达式的值赋给左侧的的值赋给左侧的变量变量将赋值运算符左侧的将赋值运算符左侧的变量变量的值作为表达式的值的值作为表达式的值右侧表达式的类型自动转换成左侧变量的类型右侧表达式的类型自动转换成左侧变量的类型intn;doublex,y;n=3.14*2;x=10/4;x=(y=3);复合赋值运算符复合赋值运算符n赋值运算符赋值运算符简单赋值运算符简单赋值运算符=复合赋值运算符复合赋值运算符n复合算术赋值运算符复合算术赋值运算符+=-=*=/=%=n复合位赋值运算符复合位赋值运算符n赋值表达式

31、赋值表达式变量变量 赋值运算符赋值运算符 表达式表达式x+=exp等价于等价于x=x+expx*=y-3x=x*(y-3)6.5.3关系表达式关系运算符关系表达式关系运算符n比较两个操作数,比较的结果:比较两个操作数,比较的结果:真真假假xyxyx=yx!=yn优先级优先级算术运算符算术运算符=!=赋值运算符赋值运算符n左结合左结合ab=cd=abcha+1d=a+bc3=xb)=cd=(ab)ch(a+1)d=(a+b)c)(3=x)b=cd=abcha+1d=a+bcb-1=a!=c3=x=3&x=a&ch=A&ch=3&x=3&x=3)&(x0)?x+2:x*x;intn;(n0)?2.

32、9:1n=10n=-102.91.0if(x0)y=x+2;elsey=x*x;x+2x0y=x2xb)?a:b;if(ab)z=a;elsez=b;6.5.6逗号逗号表达式表达式表达式表达式1,表达式表达式2,表达式表达式n先先计计算算表表达达式式,然然后后计计算算表表达达式式,,最最后后计计算算表表达达式式n的的值值,并并将将表表达达式式n的的值值作作为为逗逗号表达式的值号表达式的值.inta,b,c;(a=2),(b=3),(c=a+b);逗号运算符的优先级最低,左结合逗号运算符的优先级最低,左结合a=2,b=3,c=a+bsum=0;for(i=0;i=100;i+)sum=sum+i

33、;逗号逗号表达式的用途表达式的用途for(i=0,sum=0;i=100;i+)sum=sum+i;for(i=0,sum=0;i=100;i+)sum+=i;6.5.7位运算位运算n位逻辑运算位逻辑运算按位取反按位取反单目单目右结合右结合&按位与按位与按位异或按位异或:相同取相同取0,不同取,不同取1|按位或按位或n移位运算移位运算对操作数右移给出的位数对操作数右移给出的位数n复合位赋值运算复合位赋值运算位逻辑运算位逻辑运算x=00000000000000000y=30000000000000011x&y0000000000000000x|y0000000000000011xy0000000

34、00000001110100101=1111注意区分:注意区分:&和和|&和和|按位取反按位取反&按位与按位与按位异或:相同取按位异或:相同取0,不同取,不同取1|按位或按位或x&y得得0x|y得得1位移位运算位移位运算对操作数右移给出的位数对操作数右移给出的位数x3将将x向向左移左移3位,空出的位用零填补位,空出的位用零填补001110103将将x向右移向右移3位位00111010300000111复合位赋值运算符复合位赋值运算符&=|=a&=b相当于相当于a=a&ba=2相当于相当于a=a26.5.8其他运算其他运算n长度运算符长度运算符sizeof单目运算符,计算变量或数据类型的字节长度

35、单目运算符,计算变量或数据类型的字节长度inta;sizeof(a)求整型变量求整型变量a的长度,值为的长度,值为4(bytes)sizeof(int)求整型的长度,值为求整型的长度,值为4(bytes)sizeof(double)求双精度浮点型的长度,值为求双精度浮点型的长度,值为8(bytes)运算符的优先级和结合性运算符的优先级和结合性n()n!-+-(类型名)类型名)sizeofn*/%n+-n=n=!=n&n|n?:n=+=-=*=/=%=n,6.5.9程序解析大小写字母转换程序解析大小写字母转换#includeintmain(void)charch;printf(inputcharacters:);ch=getchar();while(ch!=n)if(ch=A&ch=a&ch=z)ch=ch-a+A;putchar(ch);ch=getchar();rerurn0;input10characters:Reold123?rEOLD123?while(ch=getchar()!=n)(ch=getchar()!=nch=getchar()!=n等价吗等价吗?

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号