1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五
2、级,*,C语言第二讲-数据的存储与运算,2.1C,语言的基本数据类型,数据在计算机中是以二进制形式存储的,计算机中为什么要采用二进制呢?,二进制在电器元件中容易实现。二进制只有,0,和,1,两个数,在电学中具有两种稳定状态,并可以用,0,和,1,表示的东西很多。例如,电压的高和低、电容器的充电和放电、脉冲的有与无、晶体管的导通与截止等等。,2.1C,语言的基本数据类型,十进制数,二进制数,十进制数,二进制数,0,0,6,110,1,1,7,111,2,10,8,1000,3,11,9,1001,4,100,10,1010,5,101,2.1C,语言的基本数据类型,位、字节和地址,位(,bit,
3、每个二极管元件称为一个“二进制位”,是存储信息的最小单位。,字节(,byte,),:一个存储器包含多个“二进制位”。一般将,8,个“二进制位”组成一组,称为“字节”。,地址,:存放数据的存储器中的存储单元,存储单元以字节为单位编号。,2.1C,语言的基本数据类型,2.1C,语言的基本数据类型,不同类型数据的存储方式,整数的存储方式,整型数以二进制形式存放在存储单元中;,例如:用一个字节存储整数,15,;,(15),10,-(00001111),2,整型数具有两种表示方式:有符号数和无符号数;,无符号数:只表示正整数,无符号位。,有符号数:可表示正、负数,最高位为符号位;,正数采用原码方式
4、存储;,负数采用补码方式存储。,2.1C,语言的基本数据类型,不同类型数据的存储方式,实数的存储方式,实数采用指数形式存储;,标准化指数形式:数值部分是一个小数,小数点前的数字是零,小数点后的第一位数字不是零。,规范化指数形式:在尾数中,小数点左边只有一个非零数字。,如:,123.456,可以表示为:,0.123 45610,3,123 45610,-3,123 45.610,-2,123 4.5610,-1,123.45610,-0,2.1C,语言的基本数据类型,不同类型数据的存储方式,字符的存储方式,字符包括字母(如:,A,a,X,x,等),专用字符(如:,$,、,、,%,、,#,等),计
5、算机并不是将字符本身放到存储单元中,而是将字符的代码存储到相应的存储单元中。,ASCII,码(,American National Standard Code for Information Interchange,)。,例如:“,A,”:,65,(,ASCII,)。,0,1,0,0,0,0,0,1,2.2,常量和变量,常量,(,常数,):,数据,12,,,-3,(整型),4.6 -1.23,(实型),a,(字符),符号常量:用标识符表示的常量数据,:,PI,:,EPS,通常用大写字母表示符号常量,变量,C,语言中的量,常量,(,常数,),:数据,符号常量,:用标识符表示的常量数据,在程序运行
6、过程中,,其值不能被改变,变量,:存放数据的内存单元,在程序的运行过程中,,其值可以改变,变量的定义,变量定义的一般形式:,类型名 变量表;,变量名:大小写字母,见名知义,类型名:,整型,int,实型,float double,字符,char,变量的定义,int i,j,k;(,定义,i,j,k,为整型变量,),char c;(,定义,c,为字符型变量,),float x,y;,double area,length;,变量名代表内存中的一个存储单元,变量类型决定了存储单元的大小,变量的使用,变量:先定义,后使用,先赋值,后引用,#include,void main(),int x,y;,x=3
7、y=x*x;,printf(“%d”,y);,变量的赋值,赋初值:在定义变量时对它赋值,int a=5,b=3;,赋值表达式:,int a,b;,a=5;,b=3;,输入函数:,scanf(“%d%d”,变量赋初值,在定义变量的同时设置初值,也称初始化。,如:,int a=3;,float f=3.56;,char c=a;,int i,j,k=5;,int x=1,y=1,z=1;,int x=y=z=1;,标识符命名规则,标识符,用来标识变量名、符号常量名、函数名、数组名、文件名等的有效字符序列。,1,、组成字符:字母、数字、下划线。,2,、以字母或下划线开头。,3,、字符长度不超过,8
8、个字符。,4,、标示符区分大小写。,5,、保留字不能作为标识符使用。,如,y3 _imax ELSE,7y int,(合法),(不合法),保留字,保留字(关键字):其为,C,语言中具有特定含义,专门用作语言特定成分的一类标识符。,如:,main int char float define,保留字分类:,类型说明符,例如:,int,;,语句定义符,例如:,if,;,预处理命令字,例如:,include,;,1,、所有保留字都有固定含义,不能用作其它。,2,、所有保留字都必须小写。,整型数据的运算与分析,鸡兔同笼问题,在一个笼子里同时养着一些鸡和兔,你想了解有多少只鸡和多少只兔,若已知鸡和兔的总
9、头数是,16,和总脚数是,40,,计算鸡和兔的数量。,整型数据的运算与分析,鸡兔同笼问题,#include,void main(),int h,f,x,y;/*,定义整型变量,h,f,x,y*/,h=16;/*,对整型变量,h,赋值,使,h,的值等于,16*/,f=40;/*,对整型变量,f,赋值,使,f,的值等于,40*/,y=(f-2*h)/2;/*,对表达式,(f-2*h)/2,进行运算,把结,果赋给,y*/,x=h-y;/*,对表达式,h-y,进行运算,把结果赋给,x*/,printf(“,x=,%d,y=,%dn”,x,y);/*,输出鸡和兔的个数,*/,整型常量与整型变量,一、整型
10、常量(整数),三种表现形式,十进制,整数:正、负号,,0-9,,首位不是,0,例:,123,,,-456,,,0,。,八进制,整数:正、负号,,0-7,,,首位是,0,例:,010,,,0123,十六进制,整数:正、负号,,0-9,,,a-f,,,A-F,,,前缀是,0 x,或,0X,例:,0 x10,,,0X123,123=1111011,(,B,)二进制,=173,(,O,)八进制,=7B,(,X,)十六进制,int i=0173;,int j=0 x7b;,int k=123;,例:,16 020 0 x10,整型变量,如有以下定义及赋值语句,int,ai,bi,ci,di=0;,ai=
11、1;,说明,1,为一十进制整数,bi=-027;,说明,-027,为一八进制整数,ci=0 x12;,说明,0 x12,为一十六进制整数,整型变量,二、整型变量,1,、整型数据在内存中的存放形式:,以,二进制补码,表示:,0,000,0000,0000,1010,1,111,1111,1111,0110,+10,-10,整型变量,2,、整型变量的分类,整型变量根据其数值范围,可将变量定义为三类:,基本整型(,int,),2,字节,短整型(,short int,),2,字节,长整型(,long int,),4,字节,无符号数:以,unsigned int,或,unsigned,说明。,有符号数:
12、以,signed int,或,int,说明。,整型变量的值是整数,其取值范围有限,int,型取值范围,-3276832767,整型变量,3,、整型变量的定义,int a,b;,long num,i,j;,unsigned short c,d;,整型数据的输入输出,printf(,格式控制,输出参数,1,,,,输出参数,n);,scanf(,格式控制,输出参数,1,,,,输出参数,n);,格式控制说明,%,%d,:,以有符号十进制形式输入,输出整数,%u,:,以无符号十进制形式输入,输出整数,%o,:,以八进制形式输入、输出整数,%x,:,以十六进制形式输入、输出整数,例:各种进制整数的输出,#
13、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,,,a,实,型数据的运算与分析,实,型数据的运算与分析,分期付款的计算,#include/*,用输入输出函数时用,stdio.h,头文件,*/,#include/*,用数学函数时必须用,math.h,头文件,*/,void main(),int d,p;/*,定义,d,和,p,为整型变量,*/,float
14、r,m;/*,定义,r,和,m,为实型变量,*/,d=324 500;/*,给,d,赋值,*/,p=3245;/*,给,p,赋值,*/,r=0.008;/*,给,r,赋值,*/,m=(log10(p)-log10(p-d*r)/log10(1+r);/*,求,m,的值,*/,printf(“month=%fn”,m);/*,输出,m,的值,*/,printf(“total=%fn”,m*p);/*,计算并输出总的还款额,*/,实,型数据的运算与分析,实数又称浮点数。有两种表示形式:,(1),、十进制小数形式。,如,123.0 .123 0.123 0.0,等等,(2),、指数形式,如,123e
15、3,实型变量的表现形式,常用系统中,一个实型数据在内存中占,4,个字节(,32,位),。,浮点型数据是按照,指数形式,存储的。即在存储时,把指数部分和小数部分分别存放。小数和指数部分各占有的位数有由编译系统决定。,实型变量的分类,实型变量分为三类:,单精度实型变量(,float,型);,双精度实型变量(,double,型);,长双精度实型变量(,long double,型),sizeof,sizeof(,类型名,),或,sizeof(,变量名,),例如:,printf(“%d”,sizeof(long double);,浮点型数据的舍入误差,由于实型变量是由有限的存储单元组成的,因此能提供的有
16、效数字总是有限的,在有效位之外的数字将被舍去。,通常,float,型有,7,位有效数字。,而,double,型有,16,位有效数字。,实型数据的输入输出,printf(,格式控制,输出参数,n);,scanf(,格式控制,输出参数,n);,格式控制说明,%,%f,:,以小数形式输入输出实数,%e,:,以指数输入输出实数,2.4,字符型数据的运算,例:逐个输出英文字母,C,H,I,N,A,。然后按反序输出,,A,N,I,H,C,。,#include,void main(),char a=C,b=H,c=I,d=N,e=A;,printf(“%c%c%c%cn”,a,b,c,d,e);,print
17、f(“%c%c%c%cn”,e,d,c,b,a);,2.4,字符型数据的运算,一、字符常量,字符常量,用,单引号,括起来的,一个字符,。,如,a b?$,转义字符,用,开头的字符序列。,如,n,表示换行(光标移到下一行开头),t,表示跳到下一个,tab,的位置,r,表示回车(光标移到本行开头),表示反斜杠字符,字符常量,表示单引号字符,”,表示双引号字符,ddd,1-3,位,8,进制数所代表的字符(,ASCII,),xhh,1-2,位,16,进制数所代表的字符(,ASCII,),eg1,:,char c1,c2;,c1=A;c2=101;c3=x41;,eg2,:,printf(“A=101=
18、x41”);,例,转义字符的使用,#include,void main(),printf(“ab,c,t,de,r,f,t,g,n,”);,printf(“h,t,i,bb,j,k”);,f,gde,h,j,k,ab,c,de,f,gde,h,i,h,j,k,字符变量,二、字符变量,定义形式如下:,char c1,c2,c3;,c1=a;,c2=b;,c3=101,字符变量在内存中以一个字节存放。,字符数据的存储,1,、将一个字符常量放到一个字符变量中,并不是将该字符本身放到内存单元中,而是将该字符的相应的,ASCII,码,放到存储单元中。实际上也就是以,二进制的形式,存放的。,例,向字符变量
19、赋以整数,#include,void main(),char c1,c2;,c1=a;c2=b;,printf(“,%c,%c,n”,c1,c2);,c1=97;c2=98;,printf(“%c,%cn”,c1,c2);,a,b,a,b,字符数据的存储,2,、字符数据与整型数据可以相互赋值。,3,、字符数据可以以字符形式输出,也可以以整型数形式输出。,例题,#include,void main(),int i;char c;,c=a;i=97;,printf(“%c,%dn”,c,c);,printf(“%c,%dn”,i,i);,a,97,a,97,例,大小写字母的转换,#include,
20、void main(),char c1,c2;,c1=a;c2=b;,c1=c1-32;,c2=c2-32;,printf(“%c,%c”,c1,c2);,A,B,字符数据的存储,字符数据在内存中占,一个字节,,即只能存放,0255,范围内的整数。,注意,:,turbo C,把字符处理成带符号的整数。,即认为其取值范围为,-128127,。,如果使用,ASCII,码为,0127,间的字符,用,%d,输出时,会输出一个,正,整数;如果使用,ASCII,码为,128255,间的字符,用,%d,输出时,会输出一个,负,整数。,例题,2EG,#include,void main(),char c;,c
21、376;,printf(“%c,%d”,c,c);,-2,字符型数据的输入输出,printf(,格式控制,输出参数,1,,,,输出参数,n);,scanf(,格式控制,输出参数,1,,,,输出参数,n);,格式控制说明,%,%c,:,输入输出一个字符,字符串常量,三、字符串常量,字符串常量,是由一对,双,引号括起来的,字符序列,。,如“,How do you do.”“CHINA”“a”,C,规定:在存储字符串常量时,由系统在字符串的末尾自动加一个,0,作为字符串的结束标志。,如:“,CHINA”,在内存中存储为:,C,H,I,N,A,0,字符常量与字符串常量的区别,(,1,)定界符不同:字
22、符常量使用单引号,而字符串常量使用双引号;,(,2,)长度不同:字符常量的长度固定为,1,,而字符串常量的长度是某个整数;,(,3,)存储要求不同:字符常量存储的是字符的,ASCII,码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志,0,。,字符串数据的输入输出,printf(,格式控制,输出参数,1,,,,输出参数,n);,scanf(,格式控制,输出参数,1,,,,输出参数,n);,格式控制说明,%,%s,:,输入输出一个字符串,例题,3EG,#include,void main(),char,c20;,scanf(“%s”,c);,printf(“%sn”,c);,各类数
23、值型数据间的混合运算,整型、实型,(,包括单、双精度,),和字符型数据可以混合运算。,如:,10+a+1.5-8765.1234*b,是合法的。,在运算时,不同类型的数据要先转换成同一类型,然后进行运算。,double,float,long,unsigned,int,char,short,高,低,2.5,符号常量,2.5,符号常量,符号常量的作用,改进:,pow,(,r,n,)函数;,如何替代,3.1415926,?,方法一:,double PI=3.1415926,;,问题:如果误操作:,PI=9.8,;会造成错误;,方法二:采用符号常量,#define PI 3.1415926,然后用,P
24、I,代替所有出现的,3.1415926,2.6,算术运算符和算术表达式,在语言中,除控制语句和输入输出函数外,其它所有基本操作都作为运算符处理。,1.,算术运算符,7.,逗号运算符,2.,关系运算符,8.,指针运算符,3.,逻辑运算符,9.,求字节数运算符,4.,位运算符,10.,强制类型转换运算符,5.,赋值运算符,11.,分量运算符,6.,条件运算符,12.,下标运算符,13.,其他,算术运算符和算术表达式,1.,五种基本算术运算符,+,(加法或正值运算符)如,2+3 +6,-,(减法或负值运算符)如,2-3 -6,*,(乘法运算符)如,3*4 2*x,/,(除法运算符)如,5/3,(,x
25、y,),/,(,a+b,),%,(模运算符或求余运算符)如,7%4,的值为,3,注意:两个整数相除时,其值为整数。如,5/3,值为,1,;,除数、被除数中有一个为负值时,结果“向零取整”。如,-5/3,值,-1,;,除数、被除数中有一个为实数时,结果为,double,型。,%,两侧均要为整型数据。,-7%4 7%-4 -7%4,的值为多少。,-3 3 -3,算术运算符和算术表达式,2.,算术表达式和运算符的优先级与结合性,(,1,)用算术运算符和括号将运算对象(也叫操作数)连接起来的,符合,C,语言语法规则的式子,称为,算术表达式,。,运算对象包括常量、变量、函数等。,(,2,)运算符的优先
26、级与结合性,优先级:,先*,/%,后,+,结合性:,左结合性,。,强制类型转换运算符,3,、强制类型转换运算符,可以用一个强制类型转换运算符将一个表达式转换成所需类型。,一般形式,:(类型名)(表达式),如,(double)a;,(int)(x+y);,(float)(5%3),例,强制类型转换,#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,自增、自减运算符,4,、自增、自减运算符,+i i,表示在使用,i,之前,先使,i,的值加,1,或减,1,。,i+
27、i,表示在使用,i,之后,使,i,的值加,1,或减,1,。,例题,4EG,#include,void main(),int i=0,j;,j=i+;,printf(“%d,%dn”,i,j);,i=0;j=+i;,printf(“%d,%dn”,i,j);,1,0,1,1,注意区分:,j=i+1,和,j=+i,与,j=i+,自增、自减运算符,注意,:,(,1,)自增、自减运算符只能用于变量,而不能用于常量或表达式。,如:,5+,,,-,(,a+b,)是不合法的。,(,2,),+,和,的,优先级高于算术运算符,,且结合性是,右结合性,。,如:,-i+,相当于,-,(,i+,),赋值运算符与赋值表
28、达式,一、赋值运算符“,=”,用法:,变量,=,表达式;,作用:将表达式的值赋给变量(常量、变量是 表达式的特例)。,如:,a=5;ave=(a+b)/10;,注意:与数学中的等式不同!,二、赋值结果与类型转换,1,、实型数据赋给整型变量时,舍弃实数的小数部分。,赋值运算符与赋值表达式,2,、整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。,3,、将一个,double,型数据赋给,float,变量时,截取其前面,7,位有效数字。,4,、长度相同的有符号与无符号整型数间,原样赋值(但数值有时会有变化)。,例题,5EG,#include,void main(),int a=3,
29、b;float c=2.3,d,e;,double f=123.45678987656;,b=c;d=a;e=f;,printf(“b=%d,d=%f,e=%f”,b,d,e);,b=2,d=3.000000,e=123.456787,例,6,有符号数传送给无符号变量,#include,void main(),unsigned a;,int b=-1;,a=b;,printf(“%u”,a);,00 00 00 00 00 00 00 01,1,11 11 11 11 11 11 11 10,-1,+1,11 11 11 11 11 11 11 11,-1,65535,赋值运算与赋值表达式,5
30、char,、,int,、,long,等类型的转换,1,),“,短,”,数据赋给,“,长,”,变量,符号扩展,:若最高位为,1,(负数),则变量高字节位补,1,;反之,补,0,;,2,),“,长,”,数据赋给,“,短,”,变量,只将数据的低字节位原封不动地送到变量中(数据有可能有差错)。,例题,6EG,#include,void main(),char c;int i;,c=43;i=c;,printf(“i=%dn”,i);,c=376;i=c;,printf(“i=%dn”,i);,0,0 10 10 11,c=43,i,0,0 10 10 11,00 00 00 00,1,1 11
31、11 10,c=376,i,11,11 11 10,11 11 11 11,i=43,i=-2,赋值运算符与赋值表达式,三、复合的赋值运算符,在赋值符,“,=,”,之前加上其它运算符,构成复合赋值运算符。,+=-=*=/=%=,如:,a+=3,等价于,a=a+3,x*=y+8,等价于,x=x*(y+8),x%=3,等价于,x=x%3,赋值运算符与赋值表达式,四、赋值表达式,由赋值运算符将一个变量和一个表达式连接起来的式子称为,“,赋值表达式,”,。,形式:,变量,=,表达式,如:,a=5 a=(b=5),计算过程:计算赋值运算符右侧,“,表达式,”,的值;,将计算结果赋给左侧的变量;,(,右结
32、合性,),赋值表达式的值就是被赋值的变量的值。,如:,a=b=c=5;a=5+(c=6);a=(b=4)+(c+6),a+=a-=a*a,逗号运算符和逗号表达式,形式:,表达式,1,,表达式,2,,,,表达式,i,作用:用于连接表达式,如:,3+5,,,6+8,计算过程,:求解表达式,1,;,再求解表达式,2,,,,表达式,i,;,整个逗号表达式的值是表达式,i,的值。,一个逗号表达式又可与另一个表达式组成一个新的逗号表达式。逗号运算优先级低于赋值运算。,如,:,(,a=3*5,a*4,),a+5,条件判断,如果你在家,我去拜访你;,如果考试不及格,要补考;,如果遇到红灯,要停车等待;,周末我
33、们去郊游;,70,岁以上的老人,入公园免票;,如果,ab,,输出,a,。,条件判断的结果是一个逻辑值:“是”或者“否”。在计算机语言中用“真”或者“假”表示。,关系运算符和关系表达式,关系运算符和关系表达式,1,、关系运算:对两个量进行“比较运算”。,2,、关系运算符:,、,、,=,、,=,、,!=,3,、优先级:,、,、,=,(同级),=,、,!=,(同级),算术运算符、关系运算符、赋值运算符,如:,ca+b,等同于,c(a+b),a=bc,等同于,a=(bc),a=bc,等同于,a=(bc),4,、结合性:左结合,高,低,高 低,关系运算符和关系表达式,5,、关系表达式:用关系运算符将两个
34、表达式(算术或赋值表达式)连接起来的有意义的式子。,如:,x!=0 a=A a*a+b*ba+b,a=bc,a=bc,条件运算符和条件表达式,形式:,?,:,作用:用于判断选择操作,如:,ab?a:b,计算过程,:求运算,”,表达式,1”,;若值为真,则整个条件表达式的值为“表达式,2”,的值,反之,则为“表达式,3”,的值。,如,:a=2,b=3;c=ab?a:b;a=b?a:b,条件运算优先级高于赋值运算,低于关系和算术运算。,条件运算的结合方向是右结合。,如:,x=10;x0?1:xb?4.0:2;,条件运算符和条件表达式,例:从键盘中输入字符,如果字符是英文小写字母,则将其转换成大写后
35、输出,否则输出原字符。,提示:大写字母的,ASCII,码比对应小写字母的小,32,;,Char c;,scanf(“%c”,(c=a&cb&bc,等同于,(ab)&(bc),a=b|x=y,等同于,(a=b)|(x=y),!a|ab,等同于,(!a)|(ab),53&2|!83&2|(!8)3&2|(!8)3)&2|(!8)3)&2)|(!8)2,x1+a,或,yb,(x=2|x=0&x!=0,x2|x-2,x=1+a|y=b,逻辑运算符和逻辑表达式,若,a=1,b=0,c=-2.5,试写出下列表达式的值,a*b|c,!b&c,0|a,1&!a/c,位运算符与位运算表达式,位逻辑运算符,按位与
36、运算符,(&),:,参与运算的两个数转换为二进制,将各对应的二进位相与;用于对某些位进行清,0,操作。,例如:,7&15=0111&1111=0111=7,;,按位或运算符,(|),:,参与运算的两个数转换为二进制,将各对应的二进位相或;用于对某些位进行置,1,操作。,例如:,7|15=0111|1111=1111=15,;,按位非运算,(),:,对参与运算的数转换为二进制,将各对应的二进位按位求反。,例如:,7=(0111)=1000=8,;,按位异或运算符,(),:对参与运算的数转换为二进制,将各对应的二进位按位相异或。可用于:字节取反,交换两个整形变量的值,而不需要第三个量的传递;,例如
37、715=01111111=1000=8,;,位运算符与位运算表达式,移位运算符,左移位运算符,(),:,n,把左边表达式以二进制形式给出的值全部向左移动,n,位,左边移出的位丢弃,右边空出的位补,0,。其中,“表达式”是进行移位的对象,“,n”,是移位的位数。每左移,1,位相当于乘,2,操作。,例如:,73=00000111),:,n,把左边表达式以二进制形式给出的值全部向右移动,n,位,右边移出的位丢弃,左边空出的位补,0,。其中,“表达式”是进行移位的对象,“,n”,是移位的位数。每右移,1,位相当于除,2,操作。,例如:,73=000001113=00000000=0;,此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢,






