第2章数据类型运算符和表达式.ppt
第2章 数据类型、运算符与表达式,苏小红 ,C语言大学实用教程,内容提要,基本数据类型; 常量和变量; 标识符命名; 常用运算符和表达式; 运算符的优先级与结合性,一个简单的C程序例子,include /*函数功能计算两个整数相加之和 入口参数整型数据a和b 返回值 整型数a和b之和 */ int Addint a, int b return a b; /*主函数*/ main int x, y, sum 0; printf two integers; scanfdd, /*输出x和y相加之和*/,C程序常见符号分类,关键字(Keyword) 又称为保留字,C语言中预先规定的具有固定含义的一些单词 标识符(Identifier) 系统预定义标识符 用户自定义标识符 运算符(Operator) 34种,详见附录2 分隔符(Separator) 空格、回车/换行、逗号等 其它符号 大花括号“”和“”通常用于标识函数体或者一个语句块 “/*”和“*/”是程序注释所需的定界符 数据(Data) 变量(Variable) 常量(Constant,数据类型(Data Type,数据为什么要区分类型 不同类型的数据代表不同的 数据表示形式 合法的取值范围 占用内存空间大小 可参与的运算种类 从基本数据类型到抽象数据类型 无数据类型 基本数据类型 构造数据类型 抽象数据类型,数据类型(Data Type,标识符命名,变量名 函数名 由英文字母、数字和下划线组成,大小写敏感 不可以是数字开头 直观,见名知意,便于记忆和阅读 最好使用英文单词或其组合 切忌使用汉语拼音 下划线和大小写通常用来增强可读性 variablename variable_name VariableName, variableName 不允许使用关键字作为标识符的名字 int, float, for, while, if等 某些功能的变量采用习惯命名 如for语句所采用的循环变量习惯用i, j, k,Windows 风格,UNIX 风格,b, B, KB, MB, GB, TB,MegabyteMB,中文叫法兆 KilobyteKB,中文叫法 K Byte,中文叫法字节 bit,中文叫法位 GigabyteGB,中文叫法G TerabyteTB,中文叫法T,1 TB 1,024 GB,1 GB 1,024 MB,1 MB 1,024 KB,1 KB 1,024 B,1 B 8 b,b, B, KB, MB, GB, TB,一个位有多大 只能是“0”或者“1”,这叫二进制 一个字节有多大 保存一个字符(英文字母、数字、符号) ASCII(美国标准信息交换码)编码 两个字节保存一个汉字 GB编码 可以表示数字0255,基本数据类型,int 整数,在目前绝大多数机器上占4个字节。TC2中是2个字节 float 单精度浮点数,一般是4个字节长 double 双精度浮点数,一般是8个字节长 char 字符,一般是1个字节长 用来表示256个ASCII字符,或者0255的整数,数据类型修饰符,short short int,短整数,一般2个字节长。通常简写为short long long int,长整数,一般是4个字节长。通常简写为long long double,长双精度(高精度)浮点数,一般是10个字节长。 signed 用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略 unsigned 用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0,使用变量要注意,不要对变量所占的内存空间字节数想当然 用sizeof获得变量或者数据类型的长度 现场演示程序在Turbo C2.0和Visual C下的运行结果,注意,include main printfData type Number of bytesn; printf- -n; printfchar dn, sizeofchar; printfint dn, sizeofint; printfshort int dn, sizeofshort; printflong int dn, sizeoflong; printffloat dn, sizeoffloat; printfdouble dn, sizeofdouble;,变量声明,使用变量的基本原则 变量必须先定义,后使用 所有变量必须在第一条可执行语句前定义 声明的顺序无关紧要 一条声明语句可声明若干个同类型的变量 声明变量,是初始化变量的最好时机 不被初始化的变量,其值为危险的随机数 char esc a; int i 1; int sum 0; float eps 1.0e-5,实型数据提供的有效数字位数,float型数据提供7位有效数字 double型数据提供16位有效数字 使用不当导致舍入误差,include main float a; double b; a 123456.789e4; b 123456.789e4; printffnfn,a,b;,数据在内存中的存储格式,整型 实型 字符型,char型与int型之间的关系,小写字母转换为大写字母,include main char ch b; ch b - 32; printfc, dn, ch, ch;,include main char ch b; ch b - a - A ; printfc, dn, ch, ch;,常数(Constant,整型常数 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,八进制与十六进制常数,以数字“0”开始的整型常数是八进制数 022、-037 010和10大小不一样 因为八进制并不常用,所以此种表示法比较少见 以“0 x”或者“0X”开始的整型常数是十六进制 AF和af用来表示十进制的1015 十六进制的形式比较常用,尤其在进行位一级的控制的时候 0 x12、-0 x1F, -0 x1f,字符(Character)常数,字符常数的表示方法 a,A,5,, 单引号内只能有一个字符,除非用“”开头 就是一个普通整数,也可以参与各种数学运算 每个字符具有一个0255之间的数值,可从ASCII表查出 注意5和整数5的区别 字符的数学运算在密码学内用得比较多,字符常数,转义字符 一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示,字符串(String)常数,用双引号括住的由0个或多个字符组成的字符序列 I am a string 表示空字符串 转义字符也可以在字符串中使用 引号只作为字符串开始和结束的标志 C语言内部用0表示字符串的结束 除注释外,是唯一可以出现中文的地方 x和x是不同的 里定义了一系列专门的字符串处理函数,枚举(Enumeration)常量,一个被遗忘的角色 从程序来窥其一斑 enum weeks MON, TUE, WED, THU, FRI, SAT, SUN; enum weeks today; enum response no, yes, none; enum response answer; today TUE; answer yes; if answer yes printfToday is Tuesday.n; else printfToday is NOT Tuesday.n,宏常量,宏常量 也称符号常量 一般采用大写字母表示 define 标识符 字符串 不是语句,而是一种编译预处理命令 宏替换(Macro Substitulition,include define PI 3.14159 define R 5.3 main printfarea fn, PI * R * R; printfcircumference fn, 2 * PI * R;,宏常量,宏常量 也称符号常量 一般采用大写字母表示 define 标识符 字符串 不是语句,而是一种编译预处理命令 宏替换(Macro Substitulition,include define PI 3.14159 define R 5.3 main printfPI*R*R fn, PI * R * R; printf2*PI*R fn, 2 * PI * R;,const常量,用const修饰定义的变量为常量 const float pi 3.1425926; 常量只能在定义时赋值,然后不能再改变其值 常数、 const常量、宏常量和枚举常量,都可以用来表示一个永远不会改变的数 前者不建议直接使用,而用后三者代替,算术运算符,,-,*,/ 加、减、乘、除运算 四则混合运算中,先算乘除,后算加减,按从左向右的顺序计算,左结合 求余运算,常用的标准数学函数,关系运算符,,,, 大于,大于等于,小于,小于等于,等于,不等于 关系运算符运算出的结果为0和非0 0,表示假,即该关系不成立 非0,表示真,即该关系成立 绝大多数编译器,关系运算得到的非0结果为1,但是不要利用这个1,逻辑运算符,逻辑运算也被称为布尔(Boolean)运算 可以通过“类型表达式”的方式把表达式的值转为任意类型 强转时,你必须知道你在做什么 强转与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将,include main int m 5; printfm / 2dn, m/2; printffloat m / 2 fn, float m / 2; printffloat m / 2 fn, float m / 2; printfm dn, m;,增一和减一运算符,n,n-,n,-n 让参与运算的变量加1,-让参与运算的变量减1 作为后缀运算符时,先取n的值,然后加/减1 作为前缀运算符时,先加/减1,然后取n的值 m n; 等价于 mn; n; m n; 等价于 n; mn,增一和减一运算符,良好的程序设计风格提倡在一行语句中,一个变量只能出现一次加1或者减1运算 过多的加1和减1运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行结果,位操作运算符, 按位与运算 | 按位或运算 按位异或运算,按位右移运算 按位求反,赋值运算符,下面两个语句是等价的 i i 2; i 2; 、-、*、/、、 i j; i, j,条件表达式,把a和b中的最大值放入z中 if a b z a;else z b; z a b a b; 此种表达式切忌用得过于繁杂,优先级, - . - - * 类型 sizeof * / - | | - * / | ,优先级,能背下优先级表的人凤毛麟角 用括号来控制运算顺序更直观、方便,并减少出错的概率,结合性,多数运算符为左结合 少数为右结合 一元运算符 赋值运算符 条件运算符,这一章我们学到了,变量的命名规则 数据类型 char,short,int,long,float,double,long double signed,unsigned enum 常数、转义字符 运算符 算术运算符、关系运算符、逻辑运算符、增一/减一运算符、位运算符、赋值运算符、类型强转运算符、逗号运算符、条件运算符( )、 sizeof 类型转换 优先级和结合性,ASCII字符表1