收藏 分销(赏)

c程序设计谭浩强..ppt

上传人:天**** 文档编号:12860229 上传时间:2025-12-18 格式:PPT 页数:53 大小:656.97KB 下载积分:14 金币
下载 相关 举报
c程序设计谭浩强..ppt_第1页
第1页 / 共53页
c程序设计谭浩强..ppt_第2页
第2页 / 共53页


点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,2,章,C,语言基础,2.1,数据类型,2.2,标识符、常量和变量,2.3,基本类型数据,2.4,运算符及表达式,数据类型,基本类型,(简单),构造类型,指针类型,空类型,数组类型,结构体类型,共用体类型,标准类型,用户自定义类型:,整型,实型,字符型,单精度型,双精度型,枚举类型,2.1,数据类型,2.2,标识符、常量与变量,1,、字符集,C,语言字符集由以下几部分组成:,字母:大、小写英文字母共,52,个。,数字:,0,9,共,10,个,空白符:空格符、制表符、换行符等统称为空白符共,3,个。,标点和特殊字符:,+-*/%_ .=?:”!#,等,25,个。,标识符是指用来标识变量名、符号常量名、函数名、文件名以及一些具有专门含义的有效字符序列。,以字母或下划线,(_),开头,由字母、数字、下划线组成的字符序列。,如:,num,,,a8,,,no_1,3d,,,no 1,,,xk#1,大写字母和小写字母,视为两个不同的字符。,标识符的长度一般规定取前面,8,个字符,多余的不被识别。例如,student_name,和,student_num,被认为是相同的标识符,student_,。,2,、,标识符,:,关键字标识符,:,预定义标识符:,用户标识符:,代表固定含义,不能另作它用。,代表特定含义(一般是库函数名和预编译处理命令名),一般不另作它用。,标识符分,类,定义用户标识符时注意:,大小写有区分。,如,book,,,BOOK,,,Book,。,标识符做到“见名知意”,。如,average,sum,length,等。,关键字不能作为标识符,。如,do,int,if,等。,3,、常量:,在程序运行过程中,其值,不能被改变,的量称为常量。,符号常量:,#define,符号常量名 常量,常量类型:,算术型运算常量:,123,,,3.1415926,字符型常量:,a,“hello”,#include ,stdio.h,main(),float radius;,/*radius,圆的半径*,/,float area,,,length;,/*area,圆的面积*,/,printf,(Please input radius:);,scanf,(%,f,&radius,);,/*,输入圆的半径*,/,area=,3.1415926,*radius*,radius,;,/*,计算圆的面积*,/,length=2*,3.1415926,*,radius;,/*,计算圆的周长*,/,printf,(,“,area=%f,,,length=%,f,area,length,);,#define PI 3.1415926,PI,PI,【,例,】,计算圆的面积和周长。,程序执行过程中,其值可以被改变的量,(1),变量名:,既代表某存储空间,又代表该空间存储的数据。,(3),变量的数据类型,(,内存中占据内存空间的大小和变量的取值范围,),C,要求,:,变量必须先声明后使用,指明其数据类型,变量定义格式:,数据类型标识符 变量名表,如:,int,a,b,c;float d;,(4),变量的地址:即变量所占内存空间的首字节的编号。,4,、变量:,a,6,(2),变量的值:存放在存储单元中的数据(存储单元内容)。,标识符,整型数据类型标识符,整型数据有基本型、短整型、长整型和无符号型四种。,基本整型(简称整型):类型标识符为,int,。,短整型:类型标识符为,short,int,或,short,。,长整型:类型标识符为,1ong,int,或,1ong,。,无符号型:表示不带符号的整数。又可分为以下三种:,无符号整型:类型标识符为,unsigned,int,。,无符号短整型:类型标识符为,unsigned short,无符号长整型,类型标识符为,usigned,1ong,。,整型数据,2.3,基本类型数据,类型名称,占用的字节数,数值范围,int,2,-32768(-2,15,)32767(2,15,-1),short,int,2,-32768(-2,15,)32767(2,15,-1),long,int,4,-2147483648(-2,31,)2147483647(2,31,-1),unsigned,int,2,065535(2,16,-1),unsigned short,2,065535(2,16,-1),unsigned long,4,04294967295(2,32,-1),表,2.1,各种整型数据所占内存字节数和取值范围,例如:,int,k;,long p,l;,unsigned short n,m;,任何一种数据类型都有常量和变量之分,2,、整型变量的定义,变量定义后,只是在内存中申请了相应的空间,此时存储空间中并没有有意义的数据,即变量没有确定的值。,C,语言中整型常量可以用,3,种形式表示:,十进制数,如,+123,,,-234,,,0,,,23,;,八进制数,如,0,234,,,0777,;,十六进制数,如,0 x,234,,,0 x9A,。,整型数又分为基本整型、短整型、长整型,(,后加,l,或,L),和无符号整型数,(,后加,u,或,U),。,前缀、后缀可同时使用以表示不同类型不同进制的整型数。,如,03456LU,表示八进制无符号长整型数。,3,、整型常量,二,.,实型数据,1.,实型数据类型标识符,实型数据有单精度型和双精度型两种。,单精度型:,类型标识符为,float,。,双精度型:,类型标识符为,double,。,类型,占用字节数,有效数字,数值范围,float,4,6-7,3.4*10,-38,-3.4*10,38,double,8,15-16,1.7*10,-308,-1.7*10,308,实型数据存储方式:,规范化的指数形式,假设机器字长为,32,位,其指数(即阶码)部分占,8,位,尾数占,24,位,则如图所示。,1,1,1,0,1,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,30,24,23,22,1,0,阶,符,指数部分,数,符,尾数部分,二进制数据,0.00000011101011,的存储形式,指其尾数部分为纯小数,即小数点前整数部分小于,1,,小数点后的第,1,位大于,0,2.,实型变量的定义,float f,,,f1,;,/*,定义,f,、,f1,为单精度实型变量*,/,double d,;,/*,定义,d,为双精度实型变量*,/,3.,实型常量,(,又称实数,只有十进制形式,),小数形式,指数形式,由数字和小数点组成,(,必有小数点,但其前后,0,可省,),例如:,0.246 .246 5.0 5.,等。,由小数或整数、字母,E,或,e,及指数部分组成。,(,e,前必有数字,后必为整数,),其格式为:整数部分,.,小数部分,E,指数部分,例如:,135e3 12.12e-5 .123e4 0e0,e2 3.5e1.5,在程序中,实数可以用小数或指数形式表示,但在内存中,实数都以规范化的指数形式存放。,#include,stdio.h,main(),float x=123456789;,double y=123456789;,printf(nx,=%,f,y,=%,f,x,y,);,程序运行的结果:,x=123456792.000000,y=123456789.000000,实型常量不区分,float,型和,double,型,可以赋给,float,型和,double,型变量,根据变量的类型截取常量中的有效位数字。,【,例,】,将一个有效数字位超过,7,位的数赋值给实型变量,然后输出实型变量的值。,1.,字符型数据类型标识符,类型标识符为,char,,在内存中存储一个字符型数据需要一个字节。,三,.,字符型数据,说明字符变量用,char,作标识符,如:,char x;,一个字符变量在内存中,占一个字节,,一个字符变量只能存放一个字符,如:,x=,a,;,将字符,a,赋值给字符变量,x,实际上是,把,a,的,ASCII,代码值,97,放到,x,对应的内存单元中去,2,字符型变量的定义,如,:char c1,c2;,int,i;,c1=a;,c2=c1-32;,i=97;,printf(%c,%dn,c1,c1);,c1,c2,i,=c1=97;,=c2=A;=c2=65;=c2=a-32;,=i=a;,=,printf(%c,%d,n,i,i);,注意:,*,在内存中,字符数据和整型数据的存储形式相似,所以在,c,语言中二者可以通用。,97,65,97,3.,字符型常量,字符常量,:,用单引号括起来的字符。,代表,ASCII,字符集中的一个字符,两种表示形式:,由单引号括起来的,普通字符常量,;如,A,,,a,3,由单引号括起来的,转义字符,;如,n,,,t,单引号中的大小写字母代表不同的字符常量。如:,a,A,a,和,a,的区别,是一个字符常量,有一空格,和,的区别。,单引号中只能包含一个字符,只能用表示字符常量,“”表示的是字符串常量,C,语言规定,:,字符型常量在内存中占,8,位(一个字节)。,字符常量在内存中实际存储的是其,ASCII,码的值 如:,A a 3,一、普通字符常量,65,97,51,字符常量和整型常量是可以混用的。,以一个,反斜线,开头后跟一个特定的字符,代表某一特定的,ASCII,字符。,又称反斜线字符。如:,n,后可跟,8,进制或,16,进制数,表示一个,ASCII,字符,如:,A,也可用,101,或,0101,x41,表示,(,后不允许用,X,,,0 x),二、转义字符常量,#include,stdio.h,main(),printf(nt101);,printf(ntbbbb,);,printf,(*hello*);,printf(ntx41);,输出结果:,A,*hello*,A,【,例,】,使用转义字符控制输出。,4,字符型数据在内存中的存储形式,c2,c1,01000001,00001010,图,2.4,字符型数据的存储,char c1,c2;,c1=A,;,c2=n,【,例,2.3】,字符型数据的输出。,main(),char c1,;,c1=65,;,printf(“%c,,,%,dn,”,,,c1,,,c1),;,可对字符数据进行的运算,字符型数据可参与任何整数运算,如:,算术运算,B-A,等价于,66-65,等价于,1,a+1,等价于,97,1,等价于,98,等价于,b,大小写字母的相互转换,:,A+32,等价于,65,32,等价于,97,等价于,a,b-32,等价于,98-32,等价于,66,等价于,B,数字字符与相应整数值的相互转换,:,9-0,等价于,57,48,等价于,9,9,0,等价于,9,48,等价于,9,【,例,】,#include,stdio.h,main(),char c1,c2;,c1=A;,c2=b;,c1=c1+32;,c2=c2-32;,printf(c1=%c,c2=%c,c1,c2);,四,.,字符串常量,用一对,双引号,括起来的一串字符;如,“,hello,”,“,%d%d,”,C,规定:在一个字符串的末尾加一个串结束标志,0,在内存中占的字节数,=,字符个数,+1,如:,“,hello,”,在内存中的存储形式是,(,该字符对应,ASCII,码值,),:,104,101,108,108,111,0,为了能直观理解,以后直接用字符本身表示。上例表示成:,h,e,l,l,o,0,注意:,在写字符串时不必加,0,,否则画蛇添足。,0,字符是系统自动加上的。,“”,和“”的区别,字符常量与字符串常量的区别:(,b,与”,b”,),形式上:括起来的单个字符或以,开头,“”,内存表示:都存储,ASCII,码,但字符常量占一个字节,转义字符也不例外,注意:,C,语言中没有字符串变量,字符串存放在字符数组中。,变量赋初值是指在定义变量的同时对变量进行赋值。,例如:,int,a=5;,int,a,b,c,=10;,五,.,变量赋初值,如果对几个变量赋以同一个初值,不能写成:,int,a=b=c=8,;,而应写成:,int,a=8,,,b=8,,,c=8,;,运算符,:,算术运算符、关系运算符、赋值运算符、逗号运算符等,表达式:由运算对象(常量、变量、函数)、运算符和括号组成的、有意义的、符合,C,语言规定的式子。,表达式的求值规则:先按运算符的,“,优先级,”,由,高到底,进行,,若级别相同,则按运算符的,“,结合性,”,处理。,2.5,运算符和表达式,结合性,右结合性,:自右至左的结合方向,左结合性,:自左至右的结合方向,一、算术运算符和算术表达式,1.,算术运算符及优先级和结合性,双目,:,+(,加法运算符,),-,(,减法运算符,),*,(,乘法运算符,),/,(,除法运算符,),%(,模运算符 或 求余运算符,),说明:,1.,除,双目运算对象可以是整型、实型。运算对象只能是整型。,2.,操作数类型一致时运算结果与操作数类型一致。,3.,不一致时不能直接运算,数据类型自动转换,整除:整,/,整整(舍去所有小数部分,四舍五入),8/3=2,实除:两实数或与一实数相除双精度型。,如,:8/3.0=2.6666666,整型,%,整型整型,如:,8%3=2,-19%4=-3,(,运算量为负数时,在,TC,中结果的符号与被除数相同),/(,除法运算符,),%(,模运算符 或 求余运算符,),单目:,+(,正值运算符,)+3,-(,负值运算符,)-3 ,-2.0,注:,1.,运算符必须出现在运算对象的左边。,2.,运算对象可以是整型、实型。,2.,算术运算符和圆括号的优先级:,()+-*/%+-,单目,双目,同级,同级,同级,结合性:,高,低,双目:从左到右,单目:从右到左,优先级,a-b+c,3,.,算术表达式,:,算术运算符,和,括号,将,运算对象,连接起来的、符合,C,语法规则,的式子,常量、变量、函数等,2+sqrt(c)*b,求值规律:,1),括号可以嵌套多层,但左右括号必须配对。由内向外计算。,2),不同级别的运算符,按,优先级由高到低,运算,同一级别运算符,按,结合性,运算,3),若一个运算符两侧数据类型不同,则先进行类型转换,然后计算。,如:,2,*,3%5/4,a,*,b/c-1.5 (a,b,c,为变量,),int,i=10;float f=12.0,e=10.0;double d=12.0;,10 +i *f -d /e,double float,long,unsigned,int,char,short,高 低,为必定的转换,当运算符两侧的运算对象,的数据类型不一致时的转换方向。,注:,102.400,103,110.400,4.,基本类型数据间的混合运算,5 +b -x/2 +y*m,int,m=2,,,float x=1.2,double y=4.0,0.600,-,+y*m,+y*m,8.000,1),自动类型转换,功能:将,表达式的值,转换为指定类型。,如:,(double),a,(,把,a,转换为,double,类型,),(,int,)(x+y)(,把,x+y,的值,转换为整型,),(float)(5%3)(,把,5%3,的值,转换为,float,型,),注:,1.,整型数转换为实型时,补足有效位数;,实型数转换为整型时,只取其整数部分。,2.(int)x+y (,把,x,转换为整型,然后与,y,相加,),3.,表达式为变量时不加()。,4.,强制类型转换或自动类型转换,只是得到,了一个所需类型的,中间变量,原变量或表达式的值和类型并不变。,5.,强制类型转换的优先级高于自动类型转换。,强制类型转换运算符,2,)强制类型转换,格式:,(,类型名,),(,表达式,),main(),int,i=1,,,j=5,,,k1,,,k2,,,k3,;,float x=5.7,,,y=2.8,,,z1,,,z2,,,z3,;,k1=(,int)x,;,k2=(,int)(x)/y,;,k3=(,int)(x/y,),;,z1=(,float)i,;,z2=(,float)i/j,;,z3=(,float)(i/j,),;,printf,(,k1=%,dn,,,k1),;,printf,(,k2=%,dn,,,k2),;,printf,(,k3=%,dn,,,k3),;,printf,(,z1=%,fn,,,z1),;,printf,(,z2=%,fn,,,z2),;,printf,(,z3=%,fn,,,z3),;,【,例,2.6】,强制类型转换示例,1.,基本赋值运算符:,=,如:,a=10,复合赋值运算符:,+=,,,-=,,*,=,,,/=,等,二、赋值运算符和赋值表达式,格式:,变量,赋值运算符,表达式,作用:把表达式的值赋给一个变量。,a=3,a=a+1,a+=5,a=b=c=1,(,结合性:,自右向左,),2.,赋值表达式,:由赋值运算符组成的表达式,a,10,(,1),赋值运算符可以是基本的、复合的赋值运算符。,赋值运算符的优先级,只高于逗号运算符。,表达式,也可以是一个赋值表达式。,赋值表达式的值与类型,=,赋值运算符左边变量的值与类型,例,1,:,int,a,b,c,;,a=5,;,a=(b=5),;,a=(b=5)+(c=3);,(,3),在程序中可给一个变量多次赋值,最后赋的值为其当前数据。,(,2),赋值运算符左侧必须是变量,不能是常量或表达式。,(,4,)赋值过程:,求,出表达式的,值,,比较表达式值的类型与变量的类型,,类型相同时:直接,赋值,类型不同时:先自动类型转换再赋值。,如:,float f;,f=23;,则,f=23.00000,如:,double f;,f=23;,则,f=23.00000000000000,b,、整型 实型 :舍弃小数部分,如:,int,i;i=12.5,则,i=12,(,5,)赋值运算中的类型转换,原则:赋值前,自动把右侧表达式值按左边变量类型转换,a,、实型 整型:数值不变,但以浮点数形式存储到变量中,c,、,整型 字符型,:,将字符数据,(8,位,),作为整型变量的低,8,位,高,8,位的处理有以下两种情况:,如果所用系统将字符处理为无符号的量或对,unsigned,int,型变量赋值,则高,8,位补零。,如果所用系统将字符处理为带符号的量,若字符最高位为,0,,则整型变量高,8,位补,0,;若字符最高位为,1,,则高,8,位补,1.,a=341,11 10 00 01,00,00,00,00,int,j,(a),11 10 00 01,a=341,(b),11 10 00 01,11 10 00 01,11,11,11,11,0000 0000 0000 0000,1111 1111 1111 1000,1111 1111 1111 1111,低位字节照写,高位字节扩展:,被转换为有符号型,(,左边,),时:符号位扩展 被转换为无符号类型时:,0,扩展,0,000 0000 0000 1000,0000 0000 0000 0000,0000 0000 0000 1000,1111 1111 1111,1000,0000 0000 0000 0000,int,a=8;long,int,b;,b=a;,符号位,符号位,符号位,int,a=-8;,long,int,b;,b=a;,符号位,unsigned long,d,、,(1),较长的整型变量 较短的整数,0,000 0000 0000 1000,0000 0000 0000 1000,0,000 0000 0000 0000,(2),较短型整数 较长型整数:只截取低位字节位。,int,a;long,int,b=8;,a=b;,符号位,符号位,e.,长整型变量 无符号的整数,:,低位赋值,不足的,高位补,0,1,111 1111 1111 1111,1,111 1111 1111 1111,-1,unsigned,int,a=65535;,int,b;,b=a;,同长整型变量 无符号的整数,:,若数据超出范围,则出错,0,000 0000 0000 1000,0,000 0000 0000 0000,0000 0000 0000 1000,符号位,unsigned,int,a=8;,long,int,b;,b=a;,数值位,数值位,符号位,f.,同长无符号整型变量 带符号的整数,:,(符号作为数据传入),例,2.7 main(),unsigned,int,i;,int,j=-6;,i=j;,printf(“%u”,i,);,1,111 1111 1111 1010,1,111 1111 1111 1010,结果,:,65530,i,j,补码,数值位,符号位,3.,复合赋值运算符,任何双目运算符,若,i=2,j=12,k=10,则,k+=j+=i+8,的值是?,=k=k+(j=j+(i+8),值是,32,在赋值符,“,”,之前加上,其它运算符,,构成复合运算符。,注:其它运算符放在“”之前,如:,a+=3,等价于,a=a+3,x*=y+8,等价于,x=x*(y+8),x%=3,等价于,x=x%3,三、自增,(+),、自减,(-),运算符,如:,int,i=3,x,;,x=+i;,x=i+,;,和使运算对象的值增,1,或减,1,。,运算对象可为实型变量、整型变量。,不能,是常量或表达式,如:,3,,(,i+j,),-,都不合法。,是单目运算符。,+,i,-i,,,i+,i,-,都是合法的表达式。,结合方向为:,“,自右向左,”,。如:,-i+,相当于,-(i+),+i,-i,:前置运算符,(i,值先增,/,减,1,,后使用,i),i+,i-,:后置运算符,(,先使用,i,的值,后使,i,值增,/,减,1),相同点:,变量都具有自增,1,或自减,1,的效果,不同点,:表达式却会有不同的值,=,i=i+14;x=i4;,=,x=i=3;i=i+1=4;,最好不要在一个表达式中对同一个变量进行多次或操作,【,例,2.8】,自增、自减运算符使用示例:,main(),int,i=5,,,j,,,k,;,j=+i,;,i=5,;,k=i+,;,printf,(,i=%d,,,j=%d,,,k=%,dn,,,i,,,j,,,k),;,printf(“j,=%d,,,k=%,dn,”,,,+j,,,k+),;,求下列算术表达式的值,2*3%5/4,+a-c+b+(a=1,c=3,b=3),0,2,a+-c+b+(a=3,b=-4,c=5),+a-c+(+b)(a=3,b=-4,c=5),-6,-4,逗号运算符:,“,,,”,优先级,:,最低,结合性:从左到右,逗号表达式:用逗号将表达式连接起来的式子,格式:,表达式,1,表达式,2,表达式,N,逗号表达式的值:,从左到右,依次求出各表达式的值,,表达式,N,的值和类型为逗号表达式的值和类型。,如:,x=(a=3,b=5,c=b*4),t=3,t+2,(a=2*3,a*5),a+6,四、逗号运算符和逗号表达式,五、,sizeof,运算符,sizeof,运算符是一个单目运算符,它返回变量或数据类型的字节长度。,一般形式为:,sizeof,(,类型标识符,),或,sizeof,(,变量名,),例如:,sizeof(double,),sizeof(int,),设有下列程序段,:,float f;,int,i;i=,sizeof(f,);,则变量,i,的值为,4,。,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服