您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > C语言程序设计-第03章 数据类型、运算符与表达式
第三章数据类型、运算符与表达式§3.1C的数据类型算法处理的对象是数据,而数据是以某种特定的形式存在的。所谓数据结构指的是数据的组织形式。所有的程序设计必需有两个问题待解决:1、数据描述2、操作步骤就象厨师做菜一样,没有原材料就无法做出菜来。在C语言中编程序也是要先定义数据常量、变量,与PASCAL相同,其主要原因是在内存中事先预留出地方以便使用。§3.2常量与变量一、常量和符号常量:常量:在程序运行的过程中,不能被改变的量称为常量。整型常量:12、0、-8实型常量:4.6、1.23、-0.9字符型常量:‘a’、‘B’、‘’其中‘’为定界符,而不是字符型常量的一部分。符号常量:#definePRICE30这是一种编译预处理,叫做“宏定义”。指定PRICE代替30,在以后的程序中遇到PRICE即用30代替,这种用一个标识符代表一个常量,称为符号常量。它不属于C语句,所以不必在末尾加上“;”。其作用域在文件结束或遇#undef处结束。一般格式为:#define符号常量常量优点:含义清楚、改动方便注意:常量名常用大写、变量名常用小写!二、变量:在程序运行过程中,其值能被改变的量。一个变量有一个名字,占一定的存储单元,在该存储单元中存储变量的值。1、每个变量都有两个特点:一是变量的名字;二是每个变量都占据一块内存单元。例如:我们的教室,就象一个变量,T1是变量的名字,全体的学生就是变量的当前值,而T1的房间号(101)就是该内存变量的地址。如下节课是机械学生在这里上课,那么该变量的当前值就改变了。和其它语言一样,所有变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列被称为标识符(identifier)。C语言规定标识符只能由字母、数字、下划线三种字符组成,且第一个字符必须为字母或下划线。2、变量起名原则:①变量所起的名字不可与32个保留字重名(P375上部)②必须以字母或下划线开头,由字母、数字或下划线组成的长度为8的字符串。(TurboC允许有32个字符)③应本着见名知义的原则。常见初学者有起a1,b,a2等等。名字虽不影响程序的运行,但可读性不好,或起成app_num,可以猜到是表示苹果数。④大写字母与小写字母意义不同,被认为是两个不同的字符。一般变量名用小写字母表示。合法:yearDaya_12_abcdef等不合法:#123.com$1001999Ya=b1_2_3+abcedfghi∏-5π等3、变量要先定义后使用要用到的变量,必须先对其进行定义,才可以使用。如果是未经定义的变量,在编译时会检查出来。定义变量时指定变量的类型,在编译时准备为其分配相应的存储单元。另外,还可在编译时检查该变量所做运算是否合法。4、变量小结了解了变量特性后,应有这样的习惯,一遇到一变量时,应想到:该变量是否定义过?是哪种类型?在内存中占几个字节?可以表示数的范围是多少?§3.3整型数据一、整型常量的表示方法1、十进制整数:234、-123等。每个数位都可以是0---9。2、八进制整数:以0开头,(128)10=0200。即(200)8每数位都可以是0-7。-011表示十进制-9。3、十六进制整数:以0x开头,(291)10=(123)16。每数位都可以是0-9、A-F。二、整型变量1、整型变量在内存中的存放形式:数据在内存中是以二进制形式存放。每一个整型变量在内存中占两个字节。在计算机导论中应该学过补码,数值在内存中应以其补码形式存放的。而正数的补码和其原码相同。负数的补码是反码加1。例如10、-10:10的编码和-10的编码:十进制数10的二进制形式为1010,2、整型变量的分类基本类型分为:1)基本整型2)短整型3)长整型在C中,为了更精确描述整型数据,又进一步分为六种类型,区别主要是在表示整数的范围不同。具体见下表:[Signed]int基本整型16-32768—+32767Short[int]短整型16-32768—+32767Long[int]长整型32-21亿—+21亿Unsingedint无符号整型160—65535Unsingedshort[int]无符号短整型160—65535Unsingedlong[int]无符号长整型320—42亿3、整型变量的定义inta,b;(定义两个整型变量a和b)unsignedshortc,d,f;(定义三个无符号短整型变量c、d、f)longe;(定义一个无符号长整型变量)格式应为:数据类型变量1[,变量2,变量3……变量n];一般应在函数一开始就进行定义。例如下列程序:main(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);}运行结果:a+u=22,b+u=-144、整型数据的溢出在运算的过程中,若变量的值超过该类型的范围,则会产生溢出。例:main(){inta,b;a=32767;b=a+1;printf(“%d,%d”,a,b);}运行结果为:32767,-32768三、如何判断整型常量的类型①若在-32768—32767之间,可认为是int或short型,long型。②若超出了-32768—32767,而在-2147483648—+2147483647之间,则认为是long。若认为是int类型的,系统不做检查,但数据会丢失。三、如何判断整型常量的类型③常量unsigned型,但一个非负值的整数可以赋值给unsigned型变量,注意其范围。50000可赋给unsignedint型,70000却不可以。为什么?P42无符号整型变量最大值65535.④如一整型常量后有L或l则表示为longint型的。常用于函数的调用中。一、实型常量的表示方法1、十进制小数形式:由整数部分、小数点和小数部分组成。例如:1.240.345.222234.0333.0.0等。2、指数形式:由实数部分、指数部分E(e)组成。用于表示一些比较大、比较小的数值。§3.4实型数据2、指数形式例如:123*1022-123E22注意:E之前必须要有数字,E之后数字必须为整数。e124.4e1.5.e5都是不合法的。对于123.456有以下几种表示方法:123.456e012.3456e11.23456e20.123456e30.0123456e40.00123456e5等。其中1.23456e2为“规范化的指数形式”。二、实型变量一个实型数据在内存中占4个字节、32位。1、实型数据在内存中的存放形式与整型数据不同,实型数据是按照指数形式存储的。3.1415926一般实型数据占4个字节(32位),其中多少位存放小数部分,多少位存放指数部分不确定,但存放小数部分的位数越多,有效数字越多。而存放指数部分的位数越多,能表示数值的范围越大。2、实型变量的分类float单精度326-710-37-1038double双精度6415-1610-307-10308longdouble长双精度12818-1910-4931-104932以上的有效位数和数值范围适用于TurboC、MSC、BorlandC,不同系统会有差异。3、实型数据的舍入误差例:main(){floata,b;a=123456.789e5;b=a+20;printf(“b=%f”,b);}结果为:x=7.123456954956054690结果为:b=12345678848。000000main(){floatx;x=7.1234567890;printf(“x=%20.18f”,x);}三、实型常量的类型没有必要区分其类型,但事实上是有区别的。例如:main(){floatx;doubley;x=123456.789;y=123456.789;printf(“%f,%f”,x,y);}结果为:123456.789062,123456.789000这就说明,一个实型常量赋值给一个实型变量时,只根据实型变量表示的有效数字的位数,在实型常量中按从左向右的方向截取数据。float型的变量只能保存7位有效数字,double型的变量只能保存15-16位有效数字。§3.5字符型数据一、字符常量1、在C语言中字符型常量是用单引号括起来的一个字符。如:’a’、’A’、’3’、’?’、’’、’$’等。2、以“\”开头的转义字符例3.5转义字符的使用main(){printf(“□ab□c\t□de\rf\tg\n”);printf(“h\ti\bj□k”);}运行结果:□ab□c□□□□defab□c□□□gdeh□□□□□□jik二、字符变量一个字符变量只能存放一个字符常量charc1,c2;c1=’a’;c2=’b’;在内存中占一个字节的空间。‘\r’代表回车符号,’\101’(65)代表字母’A’,’\012’(10)代表换行,’\x20’(32)代表空格字符。例如:main(){printf(“цabцc\tцde\rf\tg\n”);printf(“h\ti\b\bjцk”);}结果为:fabцcцццgdehццццццjцk打印结果为:fabцcцццgdehццццццjik三、字符数据在内存中的存储形式系统在表示一个字符数据时,并不是将字符本身的形状存入内存,而只是将字符的ASCII码存入内存。在内存中所有的数据又是以二进制的形式存放的。例如字符’a’的ASCII码为97,’b’的ASCII码为98,所以使得——在C语言有效的范围中字符数据和整型数据之间通用。(0—255)例如:main(){charc1,c2;c1=97;c2=98;printf(“%c,%c\n”,c1,c2);结果为:a,bprintf(“%d,%d\n”,c1,c2);}结果为:97,98一个字符型数据,既可以字符形式输出,也可以整数形式输出。例如:整型和字符型变量可以相互赋值:main(){inti;charc;i=’a’;c=97;printf(“c=%c,c=%d\n”,c,c);printf(“i=%c,i=%d\n”,i,i);}执行结果为:c=a,c=97i=a,i=97说明:TC中将字符变量中的最高位作为符号位,其取值范围是-128-127(一个字节),在用%d格式输出时,ASCII码在0-127之间的会输出一个整数。如ASCII码在128-255之间的字符,会得到一个负数。例如:main(){charc=130;printf(“%d,%c”,c,c);}结果为:-126,é如果不想按有符号处理,其取值范围是0——255。Signedchar和unsignedchar与signedint和unsignedint相仿(1字节).四、字符串常量字符串常量是由双引号括起来的字符序列。如:“howdoyoudo”,“CHINA”,“a”,“4+3”,“$134323.54”“a”和‘a’是有本质的区别的,究竟区别在哪里呢?‘a’在内存中只占一个字节的宽度,而“a”在内存中占两字节的宽度。每一个字符串的结尾都有一个字符的结束标志:’\0’,它占一个字节的宽度。字符串变量在C语言中没有专门的字符串变量来存放字符串常量,须用字符数组来存放。这将在第7章数组中介绍。关于变量的总结:inta,s;整型floatx,y;实型charc,d;字符型§3.6变量赋初值程序中常需要对一些变量预先设置初始值。一、什么是对变量赋初值(C语言允许在定义同时赋初始值)。变量赋初值就是在定义变量的同时,给变量赋一个值。这个变量产生后第一次被赋值,所以叫赋初值。如:inta=3;floatx=5.56;charc1=’a’;二、如何进行赋初值对变量赋初值只要在定义的时候用赋值运算符赋给该变量一个值就行。例如:intm=1,x
本文标题:C语言程序设计-第03章 数据类型、运算符与表达式
链接地址:https://www.777doc.com/doc-3265873 .html