C语言程序设计-第2-讲字符集.ppt

上传人:tia****nde 文档编号:12805526 上传时间:2020-05-25 格式:PPT 页数:92 大小:753.50KB
返回 下载 相关 举报
C语言程序设计-第2-讲字符集.ppt_第1页
第1页 / 共92页
C语言程序设计-第2-讲字符集.ppt_第2页
第2页 / 共92页
C语言程序设计-第2-讲字符集.ppt_第3页
第3页 / 共92页
点击查看更多>>
资源描述
C语言程序设计,第二讲,(1)C文件可以由一个或多个C源程序组成,(2)C源程序可以由一个或多个函数组成,(3)C文件有且仅有一个主函数(main函数),(4)C源程序中用预处理命令调用库函数或其它程序。,(5)每个执行语句以分号结尾。,(6)变量要先定义再应用,上节提要:,(7)一个函数由两部分组成:,函数的说明部分:函数名后有一对圆括号,函数体部分:花括号+执行语句,(8)C程序书写区分大小写,(9)printf(“格式化字符串”,参数表)。,(10)可以用/*/或/对C源程序做注解,上节提要:,语言的字符集,每一种可书写的语言,全部可用的字符的集合称为字符集英语的字符集a-z26个字母阿拉伯数字的字符集为0-9汉语的字符集(中文字符,太多了)两个或两个以上的字符组合称为词汇。,语言的字符集,语言字符集由字母,数字,空格,标点和特殊字符组成。在字符常量,字符串常量和注释中还可以使用汉字或其它可表示的图形符号。1.字母大小写英文字母2.数字093.空白符空格符、制表符(t)、换行符(n)等统称为空白符。空白符只在字符常量和字符串常量中起作用。4.标点和特殊字符标点:冒号,逗号,大中小括号特殊字符:+-*/%等,一、语言词汇在语言中使用的词汇分为六类:标识符,关键字,运算符,分隔符,常量,注释符等。1.标识符在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。标识符是只能由字母、数字和下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。,由英文字母、数字和下划线组成,大小写敏感不可以是数字开头直观,见名知意,便于记忆和阅读最好使用英文单词或其组合切忌使用汉语拼音下划线和大小写通常用来增强可读性Variablename(太长,不建议)variable_name(UNIX风格)VariableName,variableName(Windows风格)不允许使用关键字作为标识符的名字int,float,for,while,if等某些功能的变量采用习惯命名如:for语句所采用的循环变量习惯用i,j,k,标识符命名,在使用标识符时还必须注意以下几点:(1)标准C不限制标识符的长度,但它受各种版本的C语言编译系统限制,同时也受到具体机器的限制。例如在某版本C中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是同一个标识符。定义标识符最好不要超过8个。(2)在标识符中,大小写是有区别的。例如BOOK和book是两个不同的标识符。最好全部用小写(3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便于阅读理解,作到“顾名思义”。,以下标识符是合法的:a,x,x3,BOOK_1,sum5以下标识符是非法的:3s以数字开头U.S中间有非法字符.s*T出现非法字符*-3x以减号开头bowy-1出现非法字符-(减号)Goodbye中间有空格int关键字,2.关键字关键字是由语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同。语言的关键字分为以下几类:(1)类型说明符用于定义、说明变量、函数或其它数据结构的类型。如int,double(2)控制语句符用于表示一个语句的功能。如if就是条件语句的语句定义符。,ANSIC一共只有32个关键字,(1)数据类型说明符(12个)长短(单)双正负longshortdoubleunsignedsingned无值整型浮点字符(指针)voidintfloatchar联合枚举结构(数组)unionstructenum(2)变量类型(4个):外部静态自动寄存器externstaticautoregister(3)常量(1个):const,(2)程序结构语句定义符(12个)判断:Ifelse循环:fordowhile转移:goto跳出:breakcontinue返回:return开关:switchcasedefault,3、其它关键字sizeof大小typedef类型定义volatile可变的变量,数据为什么要区分类型?不同类型的数据代表不同的数据表示形式合法的取值范围占用内存空间大小可参与的运算种类,数据类型(DataType),语言的数据类型,数据类型是按被说明变量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。数据类型:基本构造空指针,基本类型,构造类型,指针类型,空类型void,整型,浮点型(实型),字符型char,枚举类型enum,基本整型(singned)int,长整型long(int),短整型short(int),数据类型,无符号整型unsigned(int),单精度实型float,双精度实型double,数组类型,结构体类型struct,联合类型union,数据类型(DataType),1、基本数据类型:基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。2、构造数据类型:构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中,构造类型有以下几种:数组类型结构体类型联合类型,计算机中的数据单位:b,B,KB,MB,GB,TB,bit,位bByte,字节BKilobyte(KB),KMegabyte(MB),兆MGigabyte(GB),GTerabyte(TB),T,1TB=1,024GB,1GB=1,024MB,1MB=1,024KB,1KB=1,024B,1B=8b,思考:为什么是1024而不是更容易计算的1000?1024是2的10次方,注意:硬盘的容量计算与此不同,硬盘的1K是1000,思考:为什么是8而不是更直观的10?,int整数,在目前绝大多数机器上占4个字节。TC2中是2个字节inta=64;float浮点数单精度浮点数,一般是4个字节长floatb=64.0;char字符字符,一般是1个字节长用来表示256个ASCII字符,或者0-255的整数。char=a;,基本数据类型,shortint,短整型,2个字节。通常简写为shortlongint,长整型,4个字节。通常简写为longsingle单精度浮点数4个字节double双精度浮点数8个字节longdouble?signed用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0),数据类型修饰符,数据的存储形式,计算机中,所有的数据都是以二进制进行存储的。因为用一个两位的十六进制数就可以表示8位的二进制数,为方便阅读,都是以16进制的形式写出。常用字符与ASCII码对应。,使用ULTRAEDIT打开flashfxp.exe文件,进行十六进制编辑:,以13为例:二进制数为:1101int型(2字节,15位有效数字,最高位为符号位):,longint型(4字节,31位有效数字,最高位为符号位):,unsignedint型(2字节,16位有效数字,无符号位):,unsignedlongint型(4字节,31位有效数字,无符号位):,整型数据在内存中的存放形式,0D,0D00,0D,0D00,TurboC中各类整型量所分配的内存字节数及数的表示范围。,TC2中int的范围是-3276832767如果我们给它一个小于-32768或者大于32767的数会如何呢?,小蛇能吞下大象吗?,超出取值范围会怎样?,一台安装了Windows95/98的机器,如果连续运行49.7天没有重新启动,可能死机原因:Windows自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。这个计数器是个unsignedlong类型的变量unsignedlong的最大值是:4294967295一天有24*60*60*1000=86400000毫秒4294967295/86400000=49.71026961805当49.7天的时候,此计数器会溢出,引起死机,溢出(Overflow)造成的危害,2浮点型数据,浮点型常量的表示方法,两种表示形式,小数指数,0.1231.23e-3,注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数,1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e,3.4浮点型数据,规范化的指数形式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字.例如:123.456可以表示为:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e其中的1.23456e3称为“规范化的指数形式”。,3.4浮点型数据,3.4.2浮点型变量(1)浮点型数据在内存中的存放形式一个浮点型数据一般在内存中占4个字节(32位)。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。,图3-7,计算机中用二进制表示浮点数,使用二进制表示只有0和1,那么对于小数就只能用下面的方式来表示:a12-1+a22-2+a32-3+.+an2-n其中a1等数可以是0或者1,从理论上将,使用这种表示方法可以表示一个有限的小数。,IEEE754标准,一个浮点数V在IEEE754标准中可以用V(-1)SM2E的形式表示在表示浮点数时,每个浮点数均由三部分组成:符号位S,指数部分E和有效数字MS=0表示正数,S=1表示负数有效数字M是二进制小数,M的每一位数只能是0或1,以0.75为例十进制数0.75=0.5+0.25=1*1/2+1*1/4=1*2-1+1*2-2写成二进制的格式:0.75d=1.1*2-1b,219.125d=11011011.001b换算过程:=1*128+1*64+0*32+1*16+1*8+0*4+1*2+1*1+0*0.5+0*0.25+1*0.125=1*27+1*26+0*25+1*24+1*23+0*22+1*21+1*20+0*2-1+0*2-2+1*2-3=11011011.001b=1.1011011001*27b,写成计算机存储的规范格式01000011010110110010000000000000,符号位s,正数则s=0,指数位E:用127代表0,E大于0则为127+E,E小于0则为127-E,省略整数1后得到有效数字(或称尾数),219.125d=1.101101100127,类型位数数的范围有效数字float32-3.410-383.4103867位double型64-1.710-3081.7103081516位longdouble128-1.210-49321.21049321819位,浮点型数据的有效位数,(2)浮点型变量的分类浮点型变量分为单精度(float型)、双精度(double型)和长双精度型(longdouble)三类形式。,有效数是M(23位)111111111111111111111111111B=8388607D,3.2常量与变量,3.2.1常量和符号常量在程序运行过程中,其值不能被改变的量称为常量常量区分为不同的类型:,整型100,012,0 xFF实型3.14,1.23E2字符型a,2,72字符串“a”,“ab”,“1232”符号常量#definePRICE30,整型常量18、-31长整型常量123l、123L、123456l、123456L无符号型常量123u、123U浮点常量十进制小数形式123.45、456.78指数形式1e-2、4.5e3单精度实型常量123.45f、456.78F、1e-2f、4.5e3F长双精度型常量123.45l、456.78L、1e-2l、4.5e3L(没有长单精度的说法),常量(Constant),以数字“0”开始的整型常量是八进制数022、-037010和10大小不一样因为八进制并不常用,所以此种表示法比较少见以“0 x”或者“0X”开始的整型常量是十六进制A-F和a-f用来表示十进制的10-15十六进制的形式比较常用,尤其在进行位一级的控制的时候0 x12、-0 x1F,-0 x1f,八进制与十六进制常量,练习:,写出以下程序的执行结果:voidmain()inta,b,c;a=12;b=012;c=0 x12;printf(%d,%d,%d,a,b,c);,练习,找出下列程序中的错误:,voidmain()inta,b,c,d,e,f,g;a=0X2A;b=0XA0;c=5A;d=0XFFFF;e=0X3H;f=019;g=003;printf(%d,%d,%d,%d,%d,%d,%d,a,b,c,d,e,f,g);,字符常数为用单引号扩起的一个字符:a,A,5,%,$单引号内只能有一个字符,除非用开头其值为整数,也可以参与各种数学运算每个字符具有一个0-255之间的数值,可从ASCII表查出注意:5和整数5的区别字符的数学运算在密码学内用得比较多,字符(Character)常量,例:向字符变量赋以整数。#includevoidmain()charc1,c2;c1=97;c2=98;printf(%c%cn,c1,c2);printf(%d%dn,c1,c2);,说明:在第和第4行中,将整数和分别赋给c1和c2,它的作用相当于以下两个赋值语句:c1;c2;因为a和b的ASCII码为和,运行结果:9798,3.5字符型数据,3.5.3字符数据在内存中的存储形式及其使用方法将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。,这样使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。,转义字符一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示,字符常数,小写字母转换为大写字母,Char型与int型之间的关系,例2.4,例2.5,以字符型和整数型两种格式输出字符变量。,main()charch=a;/*定义ch为字符型变量*/printf(%c,%dn,ch,ch);/*分别以字符形式、整数形式输出ch*/,main()charch=b;ch=b-32;printf(%c,%dn,ch,ch);,用双引号括住的由0个或多个字符组成的字符序列Iamastring表示空字符串转义字符也可以在字符串中使用引号只作为字符串开始和结束的标志C语言内部用0表示字符串的结束除注释外,是唯一可以出现中文的地方x和x是不同的里定义了一系列专门的字符串处理函数,字符串(String)常数,练习:写出以下程序的执行结果:,#includestdio.hmain()inta,b=322;floatx,y=8.88;charc1=k,c2;a=y;printf(a=%dn,a);x=b;a=c1;c2=b;printf(%ft,%dt,%ct,x,a,c2);,宏常量也称符号常量一般采用大写字母表示#define标识符字符串不是语句,而是一种编译预处理命令宏替换(MacroSubstitulition),#include#definePI3.14159#defineR5.3main()printf(area=%fn,PI*R*R);printf(circumference=%fn,2*PI*R);,宏常量,例2.2,习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。,用const修饰定义的变量为常量constfloatpi=3.1425926;常量只能在定义时赋值,然后不能再改变其值,const常量,main()constfloata=3.5;floatb=a;a=a+2;b=b+2;printf(%f,%f,a,b);,练习:找出下列程序的错误:,3.2变量,3.2.2变量变量的值存放在特定存储单元中的数据,在程序运行期间,变量的值是可以改变的。变量名对应着内存空间中的某个地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。,变量,使用变量的基本原则变量必须先定义,后使用所有变量必须在第一条可执行语句前定义不同变量定义的顺序无关紧要一条定义语句可定义若干个同类型的变量定义变量,是初始化变量的最好时机不被初始化的变量,其值为危险的随机数charesc=a;inti=1;intsum=0;floateps=1.0e-5;,练习:写出以下程序的执行结果,#includemain()inta=1,b=2,c;floatf1=1.0,f2=2.0,f3=3.0;charch1=a,ch2=b;printf(a=%d,b=%d,c=%dnn,a,b,c);printf(%f,%2.0f,%3.2fnn,f1,f2,f3);printf(%c,%cn,ch1+1,ch2+3);,float型数据提供7位有效数字double型数据提供16位有效数字使用不当导致舍入误差,#includemain()floata;doubleb;a=123456.789e4;b=123456.789e4;printf(%fn%fn,a,b);,实型数据提供的有效数字位数,#includemain()floatf;f=123.456;if(f=123.456)printf(fisequalto123.456indeed.);elseprintf(Infact,fisequalto%fn,f);运行结果会是什么?,浮点数的陷阱,不要轻易使用单精度浮点来进行判断。,float的精度低,较易发生精度带来的相等性判断问题double精度高,这个问题发生的概率小一些,但也存在解决办法:if(fabs(f123.456),=,、a+=5;x*=a+3;y/=x;z%=x;printf(%d,%d,%d,%d,a,x,y,z);,2.6.6增一和减一运算符,n+,n-,+n,-n+让参与运算的变量加1,-让参与运算的变量减1,操作数只能是变量作为后缀运算符时,先取n的值,然后加/减1作为前缀运算符时,先加/减1,然后取n的值m=n+;等价于m=n-;m=n;m=n;n+;n-;m=+n;等价于m=-n;n+;n-;m=n;m=n;,练习:写出下列程序的输出结果,Inti=8;printf(“%dn”,+i);printf(“%dn”,-i);printf(“%dn”,i+);printf(“%dn”,i-);printf(“%dn”,-i+);printf(“%dn”,-i-);,良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次加1或者减1运算过多的加1和减1运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行结果Sum=(+a)+(a+);/*晦涩,可读性差*/,2.6.6增一和减一运算符,/*+,-的使用例子,+,-的优先级大于-*/#includestdio.hmain()inti=8,x=5,y=5,p,q;printf(Afteri=%dt+ishow%dtbeforei=%dn,i,+i,i);printf(Afteri=%dt-ishow%dtbeforei=%dn,i,-i,i);printf(Afteri=%dti+show%dtbeforei=%dn,i,i+,i);printf(Afteri=%dti-show%dtbeforei=%dn,i,i-,i);printf(Afteri=%dt-i+show%dtbeforei=%dn,i,-i+,i);printf(Afteri=%dt-i-show%dtbeforei=%dn,i,-i-,i);printf(n);printf(Afterx=%dtpshow%dtbeforex=%dn,x,p=(x+)+(x+)+(x+),x);printf(Aftery=%dtqshow%dtbeforey=%dn,y,q=(+y)+(+y)+(+y),y);,/*+,-的使用例子,+,-的优先级大于-*/#includestdio.hmain()inti=8,x=5,y=5,p,q;printf(Afteri=%dt+ishow%dtbeforei=%dn,i,+i,i);printf(Afteri=%dt-ishow%dtbeforei=%dn,i,-i,i);printf(Afteri=%dti+show%dtbeforei=%dn,i,i+,i);printf(Afteri=%dti-show%dtbeforei=%dn,i,i-,i);printf(Afteri=%dt-i+show%dtbeforei=%dn,i,-i+,i);printf(Afteri=%dt-i-show%dtbeforei=%dn,i,-i-,i);printf(n);printf(Afterx=%dtpshow%dtbeforex=%dn,x,p=(x+)+(x+)+(x+),x);y=5;printf(Aftery=%dtqshow%dtbeforey=%dn,y,q=(+y),y);y=5;printf(Aftery=%dtqshow%dtbeforey=%dn,y,q=(+y)+(+y),y);y=5;printf(Aftery=%dtqshow%dtbeforey=%dn,y,q=(+y)+(+y)+y,y);y=5;printf(Aftery=%dtqshow%dtbeforey=%dn,y,q=(+y)+(+y)+(+y),y);,#includestdio.hmain()inta=1,b,c,k;b=(1-a)*a+;printf(a=%d,b=%dn,a,b);a=1;b=(1-a)*+a;printf(a=%d,b=%dn,a,b);a=3;k=(a+)+(a+)+(a+);printf(k=%d,a=%dn,k,a);a=1;b=2;c=afloatlongintshortchar把数据赋值给另外一种类型变量也会发生自动类型转换从小到大,顺利转换从大到小,可能丢失信息(好的编译器会发出警告),类型强制转换,消除从大到小的警告l=(long)i;可以通过“(类型)表达式”的方式把表达式的值转为任意类型强转时,你必须知道你在做什么强转与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将,#includestdio.h“main()intm=5;printf(m/2=%dn,m/2);printf(float)(m/2)=%fn,(float)(m/2);printf(float)m/2=%fn,(float)m/2);printf(m=%dn,m);,2.6.8位操作运算符,y=(x=a+b),(b+c);printf(y=%d,x=%d,y,x);,2.6.9逗号运算符,2.6.9逗号运算符,表达式1,表达式2,.,表达式n多数情况下,并不使用整个逗号表达式的值,更常见的情况是要分别得到各表达式的值主要用在循环语句中,同时对多个变量赋初值等for(i=0,j=0;ib)z=a;elsez=b;z=(ab)?a:b;此种表达式切忌用得过于繁杂,优先级,()-.!+-+-*&(类型)sizeof*/%+-=!=&|&|?:=+=-=*=/=%=&=|=,结合性,多数运算符为左结合少数为右结合:一元运算符赋值运算符条件运算符,变量的命名规则数据类型char,short,int,long,float,double,longdoublesigned,unsigned常数、转义字符运算符算术运算符、关系运算符、逻辑运算符、增一/减一运算符、位运算符、赋值运算符、类型强转运算符、逗号运算符、条件运算符(?:)、sizeof类型转换优先级和结合性,小结,ASCII字符表1,练习:编程实现下列功能,从键盘中输入两个参数:圆半径、圆柱高计算圆周长,圆面积,球表面积、球体积、圆柱体积,保留小数点后两位。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!