单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,1,第,2,章,C,语言程序设计的初步知识,本章要点,:,标识符命名规则,常量和变量,基本数据类型,常用运算符及表达式,运算符的优先级及结合性,本章难点,:,不同类型数据间的混合运算,运算符的优先级,自增,(+),自减,(-),运算符的使用,1第2章 C语言程序设计的初步知识本章要点:,2,2.1 C,语言的数据类型,整型,字符型,实型,(,浮点型,),枚举类型,单精度型,双精度型,数组类型,结构体类型,共用体类型,构造类型,基本类型,指针类型,空类型,数据类型,22.1 C语言的数据类型整型字符型实型(浮点型)枚举类型,3,2.2,常量、变量和标识符,2.2.1,标识符,C,语言中的标识符可以分为系统定义标识符和用户定义标识符。,系统定义标识符,关键字,关键字是,C,语言系统使用的具有特定含义的标识符,不能作为预定义标识符和用户定义标识符使用。,C,语言定义了,32,个关键字,如表,2.1,所示。,2),预定义标识符,预定义标识符也是具有特定含义的标识符,包括系统标准函数名和编译预处理命令等,如,scanf,、,printf,、,define,和,include,等都是预定义标识符。,32.2 常量、变量和标识符2.2.1标识符,4,表,2.1 C,语言中的关键字,auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,if,int,long,register,return,short,signed,sizeof,static,struct,switch,typedef,unsigned,union,void,volatile,while,关键字必须用小写字母;不允许使用关键字为变量、数组和函数等操作对象命名。,4表2.1 C语言中的关键字auto breakcasec,5,2.,用户定义标识符,用户定义标识符用于对用户使用的变量、数组和函数等操作对象进行命名。例如将一个变量命名为,a,,将一个数组命名为,date,,将一个函数命名为,fun,等。,用户标识符命名时要注意:,(1)C,语言对英文字母的大小写敏感,即同一字母的大小写被认为是两个不同的字符。例如,total,与,TOTAL,是不同的标识符。,(2),标识符必须由字母或下划线开头,并且除了,字母,、,数字,和,下划线,外,不能含有其他字符。,(3),标识符的命名要见名知意,即通过变量名就知道变量值的含义。,(4),标识符的有效长度随系统而异,但至少前,8,个字符有效。如果超长,则超长部分被舍弃。,5 2.用户定义标识符,6,2.2.2,常量,1.,定义:在程序执行期间,其值不可改变的量称为常量,2.,类型:,数值常量,例如:,5,,,-10,,,3.14,等,符号常量,即用一个符号代表一个常量,例2.1 用标识符代表常量。,#define PI 3.1415926,main(),float s,r;,r=5;,s=PI*r*r;,printf(%f,s);,62.2.2 常量,7,说明,:,符号常量必须,先定义,后才能用它表示一个数值。,符号常量的值在其作用域内不能改变,也不能再被赋值。,符号常量名习惯用,大写,字母表示。,7说明:符号常量必须先定义后才能用它表示一个数值。,8,2.2.3,变量,1.,变量概念,:,程序执行期间值可以改变的量。,命名规则,:,变量名由标识符表示,只能由,字母,、,数字,和,下划线,三种字符组成,且,第一个字符必须为字母或下划线。,例如:以下为不合法的变量名:,M.D.Jess ,1add,age&,5th,lotus-1-2-3,cd*ef,int,2.,变量的定义,要使用变量,必须为变量命名。变量名是用户自己定义的标识符,习惯上由小写字母组成。,变量定义的一般格式为:,数据类型标识符 变量名,1,变量名,2,变量名,n;,int a;,/*,定义了整型变量,a*/,82.2.3 变量1.变量概念:程序执行期间值可以改变的量,9,3.,变量的初始化,C,语言允许在定义变量的同时给变量赋值,这称为变量的初始化。变量初始化的一般格式为:,数据类型标识符 变量名,1=,初值,1,变量名,2=,初值,2,变量名,n=,初值,n;,C,语言允许在定义变量的同时初始化变量,如:,int a=2;/*,指定,a,为整型变量,初值为,2*/,float f=3.45;/*,指定,f,为实型变量,初值为,3.45*/,char c=A;/*,指定,c,为字符变量,初值,A*/,也可以使被定义的变量的一部分赋初值,如:,int a=1,b=-3,c;,93.变量的初始化,10,在,C,语言中,变量必须强制定义,其目的是:,1,、凡未被事先定义的,不作为变量名。,2,、每一个变量被指定为一确定的类型,在编译时就能为,其分配相应的存储单元。,3,、指定每一个变量为一确定的类型,在编译时据此检查,该变量所进行的运算是否合法。,*选变量名时,要做到“,见名知意,”,例如:,name st_age xm nl class sum,*,大小写字母是两个不同的字符,,C,变量名习惯,用,小写,字母表示。,*建议变量名的长度不要超过,8,个字符。,注意,:,10在C语言中,变量必须强制定义,其目的是:注意:,11,2.3,整型数据,2.3.1,整型常量,1.,整型常量的形式,十进制整数:由数字(,0-9,)和正负号表示,例如:,123,、,-456,、,0,等,八进制整数:以,0,开头数是八进制数,例如:,0123,即(,123,),8=(83)10,(123),8,=1,8,2,+2 8,1,+3 8,0,=(83)10,十六进制整数:以,0 x,或,0X,开头,,例如:,0 x123,即(,123,),16=,(,291,),10,main(),int a=0123;b=0 x123;/*0123,是八进制数,0 x123,是十六进制*,/,printf(a=%d,b=%d,a,b);,程序运行结果为:,a=83,b=291,112.3 整型数据2.3.1整型常量,12,n,进制数,十进制,乘权求和,顺序输出,除基数取余,逆序输出,二进制,八进制(十六进制),三(四)位变一位,一位变三(四)位,12n进制数十进制乘权求和,顺序输出除基数取余,逆序输出二进,原码、反码、补码,正数的原码、反码、补码相同,负数的原码为该数二进制最高位为,1,负数的反码:除符号位外,按位取反,负数的补码:反码加一,13,原码、反码、补码13,14,2.,整型常量的类型,我们已知整型变量可分为,int,、,short int,、,1ong int,和,unsigned int,、,unsigned short,、,unsigned long,等类别。,(1),一个整常量,如果其值在,-32 768,+32 767,范围内,则认为它是,int,型。可以将它赋值给,int,型和,1ong int,型变量。,一个整常量,如果其值超过了上述范围,而在,-2 147 483 648,2 147 483 647,范围内,则认为它是,1ong int,型。,(3),如果某一计算机系统的,C,版本确定的,short int,与,int,型数据在内存中占据的长度相同,则它的表示范围与,int,型相同。,(4),常量中无,unsigned,型,但一个非负值的整常量可以赋值给,unsigned,型整变量,只要它的范围不超过变量的表示范围即可。,(5),在一个整常量后面加一个字母,l,或,L,则认为是,1ong int,型常量,例如,123l,、,432L,,这往往用于函数调用中。,142.整型常量的类型,15,2.3.2,整型变量的分类,基本型:以,int,表示,短整型:以,short int,或,short,表示,1.,类型 长整型:以,long int,或,long,表示,(123l,、,123L,),无符号基本型,(,unsigned int,),无符号型 无符号短整型,(,unsigned short,),无符号长整型,(,unsigned long,),(,-3276832767,),一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。,int i;/*,变量,i,的数值范围:,-3276832768 */,unsigned int j;/*,变量,j,的数值范围:,065535 */,1.,整型变量的类型,152.3.2整型变量的分类,16,整,型变量的字长,short,型字长,16,位(,2,个字节)。,long,型字长,32,位(,4,个字节)。,int,型随编译程序而定(可以是,2,个字节,也可以是,4,个字节),C,要求,long,型数据长度不短于,int,型,,short,型不长于,int,型。,(short=int=long),long,型可以得到大范围的数据,但同时会降低运算速度,因此除非不得已,不要随便使用,long,型。,16 整型变,17,整型数据的溢出:,main(),int a,b;,a=32767;b=a+1;,printf(“”%d,%d”,a,b);,运行结果:,32767,-32767,改进:将变量,a,和,b,改成,long,型,并按,%ld,格式输出。,17整型数据的溢出:,18,2.,整型变量的定义,前面已提到,,C,规定在程序中所有用到的变量都必须在程序中指定其类型,即“定义”。这是和,BASIC,、,FORTRAN,不同的,而和,PASCAL,相类似。例如:,int a,b;/*,指定变量,a,b,为整型*,/,unsigned short c,d;/*,指定变量,c,d,为无符号短整型*,/,1ong e,f;/*,指定变量,e,f,为长整型*,/,对变量的定义,一般是放在一个函数的开头部分,(,也可以放在程序中间,但作用域只限于某一部分程序,),。,例,2.4,整型变量的定义与使用。,main(),int a,b,c,d;,/*,指定,a,b,c,d,为整型变量*,/,unsigned u;,/*,指定为无符号整型变量*,/,a=20;b=-40;u=10;,c=a+u;d=b+u;,printf(c=%d d=%d,c,d);,运行结果为:,c,30,d=-30,182.整型变量的定义运行结果为:,19,2.4,实型数据,2.4.1,实型常量,1.,实型常量,的形式,(,两种,),:,十进制数形式:,由数字和小数点及正负号组成。,(注意:必须有小数点),例如:,3.14 8.6 -23.,指数形式:,由,数字、小数点、字母,e,或,E,及,正负号,组成。,(注:,e,或,E,之前必须有数字,且后指数必须为整数),例如:正确,:3.5E-5 2e3,错误:,E2 3.6e3.5 .e6,2.,实型常量的类型,多数,C,编译系统对实型常量按双精度,(double),类型处理,以,提高运算精度。此时系统为实型常量分配,8,个字节的存储空间。,如果在实型常量后加字母,f,或,F,,则强调表示该数是,float,型,常量,这时系统会为其分配,4,个字节的存储空间。,192.4实型数据2.4.1实型常量,20,2.4.2,实型变量,实型变量可分为:,单精度,(,float,型)如:,float x ,y ;,双精度型,(,double,型)如:,double a ,b ,c ;,说明:,1.float,型变量在内存中占,4,个字节;,double,型变量在内存中占,8,个字节。,2.,单精度实数提供,7,位有效数字;双精度实数提供,1516,位有效数字。,3.,一个实型常量不分,float,和,double,型,一个实型常量,可以赋给一个,float,型或,double,型变量,并根据变量的类型截取实型常量中相应的有