《c语言程序设计基础第4章(基本数据类型和表达式).ppt》由会员分享,可在线阅读,更多相关《c语言程序设计基础第4章(基本数据类型和表达式).ppt(65页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Chap 2 基本数据类型和表达式基本数据类型和表达式l数据类型数据类型基本数据类型l整型intl实型(浮点型)floatdoublel字符型char构造数据类型数组、结构、联合、枚举指针类型空类型l对数据的操作运算对数据的操作运算运算符和表达式Chap 2 基本数据类型和表达式基本数据类型和表达式l常量和变量常量和变量l整数类型整数类型l实数类型实数类型l字符类型字符类型l表达式表达式l数据的存储和类型转换数据的存储和类型转换2.1 常量和变量常量和变量2.1.1 2.1.1 常量常量l常量(常数):数据常量(常数):数据123(整型)4.56(实型)A(字符型)l符号常量:用标识符表示的常
2、量数据符号常量:用标识符表示的常量数据:PI:EPS通常用大写字母例例21 求球的表面积和体积求球的表面积和体积#include void main()float r,s,v;scanf(%f,&r);s=4.0*3.14*r*r;v=4.0/3.0*3.14*r*r*r;printf(s=%f,v=%fn,s,v);s=4.0*3.14159159*r*r;v=4.0/3.0*3.14159159*r*r*r;例例22 符号常量符号常量#define PI 3.14#include void main()float r,s,v;scanf(%f,&r);s=4.0*PI*r*r;v=4.0/
3、3.0*PI*r*r*r;printf(s=%f,v=%fn,s,v);#define PI 3.14159159 2.1.2 变量变量C C语言中的量语言中的量l常量常量(常数):数据(常数):数据l符号常量符号常量:用标识符表示的常量数据:用标识符表示的常量数据在程序的运行过程中,在程序的运行过程中,其值不能被改变其值不能被改变l变量变量:存放数据的:存放数据的工作单元工作单元在程序的运行过程中,在程序的运行过程中,其值可以改变其值可以改变变量的定义变量的定义变量定义的一般形式 类型名 变量表;变量名:小写字母,见名知义变量名:小写字母,见名知义类型名:类型名:l整型intl实型(浮点型)
4、floatdoublel字符型char变量的定义变量的定义int i,j,k;(定义定义i,j,k为整型变量)为整型变量)char c;(定义定义c为字符型变量)为字符型变量)float x,y;double area,length;变量名代表内存中的一个存储单元变量名代表内存中的一个存储单元用于存放该变量的值用于存放该变量的值该存储单元的大小由变量的数据类型决定该存储单元的大小由变量的数据类型决定变量的定义与使用变量的定义与使用变量必须变量必须 先先定义,后后使用。#includevoidmain()intx,y;x=3;y=x*x;printf(“%d”,y);一个变量名只能定义一次。变量
5、一般都定义在程序的头上,不能定义在程序的中间或后面。变量的使用变量的使用变量:先定义,后使用 先赋值,后引用#includevoidmain()intx,y;x=3;y=x*x;printf(“%d”,y);变量的赋值变量的赋值l赋初值:在定义变量时对它赋值 int a=5,b=3;l赋值表达式:int a,b;a=5;b=3;l输入函数:scanf(“%d%d”,&a,&b);2.2 整数类型整数类型2.2.1 2.2.1 整型常量(整数)整型常量(整数)三种表现形式l十进制整数:正、负号,十进制整数:正、负号,0 09 9,首位不是,首位不是0 0例:10,123l八进制整数:正、负号,八
6、进制整数:正、负号,0 07 7,首位是,首位是0 0例:010,0123l1616进制整数:正、负号,进制整数:正、负号,0 09 9,a-f,A-F,a-f,A-F,前缀是前缀是0 0 x,0Xx,0X例:0 x10,0 x123123=1111011(B)二进制=173(O)八进制=7B(X)十六进制inti=0173;intj=0 x7b;intk=123;例:160200 x10100120XA 整型变量整型变量intai,bi,ci,di=0;ai=1;bi=-27;ci=012;整型变量的值是整数,它的取值范围有限最小取值范围32768,32767 整型数据的输入输出整型数据的输
7、入输出printf(格式控制格式控制,输出参数输出参数1,.,输出参数输出参数n);scanf(格式控制格式控制,输入参数输入参数1,.,输入参数输入参数n);格式控制说明%d:以十进制形式输入、输出整数%o:以八进制形式输入、输出整数%x:以十六进制形式输入、输出整数例例2-3#include void main()printf(%d,%o,%xn,10,10,10);printf(%d,%d,%dn,10,010,0 x10);printf(%d,%xn,012,012);运行结果为:运行结果为:10,12,a 10,8,16 10,a001010例例2-4#include void ma
8、in()int a,b;scanf(%o%d,&a,&b);printf(%d%5dn,a,b);printf(%x,%dn,a,b);输入:输入:17 17运行结果为:运行结果为:15 17f,172.3 实型数据实型数据2.3.1 实型实型常量常量(实数实数)浮点表示:0.123123.41.科学计数法:123e40.2e-12.3.2 实型实型变量变量单精度浮点型floatx,y,z;双精度浮点型double u,v,w;4字节存储8字节存储数据精度和取值范围数据精度和取值范围数据精度取值范围单精度七位有效数字(10-381038)双精度十六位有效数字(1030810308)l 数据数据
9、精度精度 与与 取值范围取值范围是两个不同的概念:是两个不同的概念:floatx=1.23456789;floaty=123456789;虽在数据表示范围内,但无法精确表达。floatz=1.2e55z的精度要求不高,但数据表示范围超出。l并不是所有的实数都能在计算机中精确表示。并不是所有的实数都能在计算机中精确表示。l 实型常量的类型都是实型常量的类型都是doublex=1.234568y=1.234567e82.3.3 实型数据的输入和输出实型数据的输入和输出l输出printf()float 和和double使用相同的格式控制说明使用相同的格式控制说明%f:以小数形式输出浮点数,保留以小数
10、形式输出浮点数,保留6位小数。位小数。%e:以指数形式输出以指数形式输出位整数位整数.5位小数位小数位指数位指数 例2-5实型数据的输出实型数据的输出#include void main()float f=123.45;double d=3.1415926;printf(%f,%en,f,f);printf(%f,%en,d,d);printf(%5.3f,%5.2f,%.2fn,d,d,d);一共一共5位,小数位,小数3位,小数点一位位,小数点一位运行结果为:运行结果为:123.450000,1.23450e+023.141593,3.14159e+003.142,3.14,3.14例2-6
11、假定float的精度为7位,double的精度为16位#include void main()float f;double d1,d2;printf(f=%f n d1=%f n d2=%f n,f,d1,d2);运行结果为:运行结果为:f=1234567954432.000000540实型数据的输入实型数据的输入scanf()float 和和double使用不同的格式控制说明使用不同的格式控制说明%f和和%e相同相同%f:以小数或指数形式输入一个单精度浮点数%e%lf:以小数或指数形式输入一个双精度浮点数%le例2-7#includevoidmain()floatf1;doubled1;sc
12、anf(%f%lf,&f1,&d1);printf(f1=%fnd1=%fn,f1,d1);输入:输入:12 1234567.12345运行结果为:运行结果为:f1=12.000000d1=1234567.1234502.4字符类型字符类型2.4.1 字符常量字符常量aA9+$ASCII字符集:列出所有可用的字符每个字符:惟一的次序值(ASCII码)0-9A-Za-z2.4.1 字符常量字符常量字符的存储字符的存储在在内内存存中中,每每个个字字符符占占用用一一个个字字节节,存存储储该该字字符符的的ASCII码码字符字符 ASCII码码 内存内存A 65 0100 0001 B 66 0100
13、0010 字符的数值特征字符的数值特征字符可以当整数用,ASCII码A+1=?2.4.2 字符变量字符变量char c1,c2,c3;c1=2;c2=#;c3=A;或c3=65;int i;i=65;或i=A;整型变量和字符变量的定义和赋值可以互换【ASCII码范围】2.4.3 字符型数据输入输出字符型数据输入输出lscanf()和printf()%ccharch;scanf(%c,&ch);printf(%c,ch);lgetchar()和putchar()charch;ch=getchar();putchar(ch);输入输出一个字符例2-9#includevoidmain()charch
14、1,ch2;ch1=getchar();ch2=getchar();putchar(ch1);putchar(#);putchar(ch2);运行结果为:运行结果为:A#b输入:输入:Ab例2-10#includevoidmain()charch1,ch2,ch3;scanf(%c%c%c,&ch1,&ch2,&ch3);printf(%c%c%c%c%c,ch1,#,ch2,#,ch3);运行结果运行结果1为:为:A#b#C输入输入1:AbC运行结果运行结果2为:为:A#b输入输入2:A bC输入数据包括字符和数值的混合输入数据包括字符和数值的混合#includevoidmain()int
15、i;char c;float x;scanf(%d%c%f,&i,&c,&x);printf(%d%c%f,i,c,x);输入:3a1.2输出:3 a 1.200000 数据之间不能用空格等间隔,也不需要单引号例2-11已知:b的ASCII码98#includevoidmain()printf(%c,%dn,b,b);printf(%c,%dn,98,98);printf(%c,%dn,97,b-1);运行结果为:运行结果为:b,98b,98a,970110 0010b98b98#includevoidmain()charch=b;printf(%c,%dn,ch,ch);0110 0010b
16、9814262b9801420 x62printfb%cputchar98%d142%o62%xscanfb%cgetchar98%d142%o62%xscanf(%c,&ch);字符运算字符运算l大小写英文字母转换大小写英文字母转换 b-a=B-Az-a=Z-AmMl数字字符和数字数字字符和数字 9-0=9-09=9+088a-AA-a0lm-a+A=MlM-A+a=ml8-0=8l8+0=82.4.4 转义字符转义字符l反斜杠后跟一个字符或数字l字符常量,代表一个字符n101x41Al所有字符都可以用转义字符表示2.5 表达式表达式2.5.1 算术表达式算术表达式l算术运算符算术运算符单目
17、 +-+-双目 +-*/%注意!注意!l%模(求余)整型数据565,941,10040l/整数除整数,得整数1/20,9/42l双目运算符两侧操作数的类型要相同算术运算符的优先级和结合性算术运算符的优先级和结合性单目+-+-双目*/%双目+-高高低从右向左-5+3%2=(-5)+(3%2)=-43*5%3=(3*5)%3=0-i+-(i+)算术表达式算术表达式例例2-15 数学式数学式 -C表达式表达式s(s-a)(s-b)(s-c)(x+2)e2xs*(s-a)*(s-b)*(s-c)(x+2)*exp(2*x)2.5.2 赋值赋值表达式表达式l赋值运算符赋值运算符 =l赋值表达式赋值表达式
18、变量表达式l计算赋值运算符右侧表达式的值l将赋值运算符右侧表达式的值赋给左侧的变量l将赋值运算符左侧的变量的值作为表达式的值n=2;n=n+1;l赋值运算符的优先级和结合性赋值运算符的优先级和结合性优先级较低,从右向左x=y=3;x=(y=3)例例 大小写字母转换大小写字母转换输入一个小写字母,输出对应的大写字母。输入一个小写字母,输出对应的大写字母。#includevoidmain()charch;scanf(%c,&ch);ch=ch-a+A;printf(%cn,ch);2.5.3 逗号逗号表达式表达式l表达式表达式1,表达式表达式2,,表达式,表达式n先计算表达式,然后计算表达式,,最
19、后计算表达式n的值,并将表达式n的值作为逗号表达式的值.l逗号运算符的优先级最低,从左向右逗号运算符的优先级最低,从左向右a=(3+5,4*6)a=3+5,4*6 a=24a=8自增运算符和自减运算符自增运算符和自减运算符l自增运算符自增运算符+和自减运算符和自减运算符-intn,n+n n-n(只适合变量运算)使变量的值增1或减1+n n+n=n+1-n n-n=n-1取变量的值作为表达式的值+n:n=n+1;取n值作为表达式+n的值n+:取n值作为表达式n+的值;n=n+1自增运算和自减运算自增运算和自减运算inti,k;i=2;k=+i;i=2;k=i+;i=3i=3k=3k=2k=ii
20、=i+1i=i+1k=i例例2-17#includevoidmain()inta,b,c;b=5;c=5;a=+b+c-;printf(%d,%d,%dn,a,b,c);a=b-c;printf(%d,%d,%dn,a,b,c);a=-b+c;printf(%d,%d,%dn,a,b,c);b=b+1,a=b+c,c=c-1a=b-c,b=b-1a=-(b+)+ca=(b-)-ca=-b+c,b=b+1复合算术赋值运算符复合算术赋值运算符l赋值运算符赋值运算符简单赋值运算符=复合(算术)赋值运算符+=-=*=/=%=l赋值表达式赋值表达式变量 赋值运算符表达式x+=expx=x+(exp)例例
21、2-18#includevoidmain()intx,y,z;z=(x=7)+(y=3);printf(%d,%d,%dn,x,y,z);x=y=z=x+2;printf(%d,%d,%dn,x,y,z);x*=y-3;printf(%d,%d,%dn,x,y,z);x=7,y=3,z=x+yz=x+2,y=z,x=zx=x*(y-3)2.6 数据的存储和类型转换数据的存储和类型转换2.6.1 数据的存储数据的存储l整型数据的存储整型数据的存储设整数占2个字节1 000 0001 1000 00010 000 0001 1000 0001符号位符号位1:负数:负数0:正数:正数原码原码 反码反
22、码 补码补码正数的原码、反码和补码相同1的补码000000000000000132767的补码0111111111111111(215-1)负数-1l原码1000000000000001l反码1111111111111110原码取反l补码1111111111111111反码1原码原码 反码反码 补码补码32767补码0111111111111111-32767原码1111111111111111反码1000000000000000原码取反补码1000000000000001反码1-32768=-32767-1补码1000000000000000-32768-10132767 32767 011
23、1 1111 1111 1111 1 0000 0000 0000 0001 0 0000 0000 0000 0000 -1 1111 1111 1111 1111 -2 1111 1111 1111 1110 -32767 1000 0000 0000 0001 -32768 1000 0000 0000 000032768=32767+11000 0000 0000 0000 =-32768-32769=-32768-10111 1111 1111 1111 =32767实型和字符型数据的存储实型和字符型数据的存储l实型数据的存储实型数据的存储-1.2345e+02符号位阶码尾数l字符型
24、数据的存储字符型数据的存储一个字节存储ASCII码2.6.2 整数类型的扩展整数类型的扩展有 符 号 无 符 号 数据长度intunsignedint16或32shortintunsignedshortint16longintunsignedlongint32无符号unsigned设整数占2个字节00000000000000000111111111111111165535(216-1)整数类型的最小取值范围整数类型的最小取值范围int-3276832767(-215215-1)shortintlongint-21474836482147483647(-231231-1)unsignedint0
25、65535(0216-1)unsignedshortintunsignedlongint04294967295(0232-1)整型常量的表示整型常量的表示l不能超出整型数据的取值范围不能超出整型数据的取值范围l比长整型数还要大的数只能用实数来表示比长整型数还要大的数只能用实数来表示l整型常量的类型整型常量的类型整数后的字母后缀l123L longl123U unsignedl123LU unsigned long数值整型数据的输入输出整型数据的输入输出printf(格式控制格式控制,输出参数输出参数1,.,输出参数输出参数n);scanf(格式控制格式控制,输入参数输入参数1,.,输入参数输入
26、参数n);格式控制说明%十进制八进制十六进制int%d%o%xlong%ld%lo%lxunsigned%u%o%xunsignedlong%lu%lo%lx例例2-19#includevoidmain()intai;longcl;unsignedbu;unsignedlongdul;ai=32767;bu=65535U;cl=-2147483648L;dul=4294967295LU;printf(%d,%u,%ld,%lun,ai,bu,cl,dul);printf(%x,%x,%lx,%lxn,ai,bu,cl,dul);7fff,ffff,80000000,ffffffff2.6.3
27、数据类型转换数据类型转换不同类型数据的混合运算不同类型数据的混合运算类型转换l自动转换l强制转换运算自动类型转换自动类型转换(非赋值运算非赋值运算)l水平方向:自动水平方向:自动l垂直方向:低垂直方向:低 高高 高 double float unsigned long long unsigned unsigned short 低 int char,short自动类型转换自动类型转换(非赋值运算非赋值运算)A+1210.05657766.95高 double float unsigned long long unsigned unsigned short 低 int char,short自动类型
28、转换自动类型转换(赋值运算赋值运算)变量 赋值运算符 表达式l计算赋值运算符右侧表达式的值l将赋值运算符右侧表达式的值赋给左侧的变量l将赋值运算符左侧的变量的值作为表达式的值将赋值运算符右侧表达式的类型将赋值运算符右侧表达式的类型自动转换成自动转换成赋值号左侧变量的类型赋值号左侧变量的类型自动类型转换自动类型转换(赋值运算赋值运算)doublex;x=1;x=?shorta=1000;charb=A;longc=80000;c=a+b;c=?intai;ai=2.56;ai=?intbi;bi=0 x12345678Lbi=?例2-20#includevoidmain()longa,b,c;a=1000000L;b=1000*1000LU;c=1000*1000;printf(%ld,%ld,%ldn,a,b,c);运行结果为:运行结果为:1000000,1000000,16960 强制类型转换强制类型转换强制类型转换运算符(类型名)表达式优先级同+,从右向左(double)3(int)3.8(double)(5/2)(double)5/23.032.02.5运算符优先级运算符优先级l()l-+-(类型名)类型名)l*/%l+-l=+=-=*=/=%=l,高高低