《第03章数据类型与运算精.ppt》由会员分享,可在线阅读,更多相关《第03章数据类型与运算精.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第03章数据类型与运算第1页,本讲稿共50页程序设计概述程序设计概述一个程序应包括对数据的描述和对数据处理的描述。一个程序应包括对数据的描述和对数据处理的描述。1 1对数据的描述对数据的描述,即数据结构。数据结构是计算机即数据结构。数据结构是计算机学科的核心课程之一,有许多专门著作论述。学科的核心课程之一,有许多专门著作论述。在在C C语言中,系统提供的数据结构,是以数据类型的形语言中,系统提供的数据结构,是以数据类型的形式出现的。式出现的。第2页,本讲稿共50页程序设计概述程序设计概述 2 2对数据处理的描述对数据处理的描述,即计算机算法。,即计算机算法。算法是为解决一个问题而采取的方法和步
2、骤,算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。为此,著名计算机科学家沃是程序的灵魂。为此,著名计算机科学家沃思提出一个公式:思提出一个公式:数据结构数据结构+算法算法=程序程序 实际上,一个程序除了数据结构和算实际上,一个程序除了数据结构和算法外,还必须使用一种计算机语言。法外,还必须使用一种计算机语言。第3页,本讲稿共50页3.1 C3.1 C语言的数据类型语言的数据类型C C语语言言提提供供的的数数据据结结构构,是是以以数数据据类类型型形形式式出出现现的的。具具体体分分类类如下:如下:1.1.基本类型基本类型分为整型、实型分为整型、实型(又称浮点型)、(又称浮点型)、字符型和枚
3、举型四种。字符型和枚举型四种。2.2.构造类型构造类型分为数组类型、结构类型和共用类型三种。分为数组类型、结构类型和共用类型三种。3.3.指针类型指针类型。在第。在第9 9章中介绍。章中介绍。4.4.空类型空类型第4页,本讲稿共50页3.1 C3.1 C语言的数据类型语言的数据类型 C C语语言言中中的的数数据据,有有常常量量和和变变量量之之分分,它们分别属于上述这些类型。它们分别属于上述这些类型。本本章章将将介介绍绍基基本本类类型型中中的的整整型型、实实型型和和字符型三种数据。字符型三种数据。第5页,本讲稿共50页3.2 3.2 常量和变量常量和变量3.2.1 3.2.1 常量常量1.1.常
4、量的概念常量的概念 在程序运行过程中,其值不能被改变的量称为常量。在程序运行过程中,其值不能被改变的量称为常量。2.2.常量的分类常量的分类 (1 1)整型常量整型常量 如如 1 1、3 3、0 0、-1-1、-2-2(2 2)实型常量实型常量 如如 1.1 1.1、3.83.8、0.20.2、-10.2-10.2、-2.7-2.7(3 3)字符常量字符常量 如如 a a,b b,A A,F F(必须(必须有有 )(4 4)符号常量符号常量 程序例子求圆的面积。程序例子求圆的面积。#define PI 3.14#define PI 3.14 中中PIPI 为符号常量。为符号常量。符号常量将在第
5、九章详细介绍符号常量将在第九章详细介绍。第6页,本讲稿共50页3.2 3.2 常量和变量常量和变量3.2.2 3.2.2 变量变量1.1.变量的概念变量的概念 在在程程序序运运行行过过程程中中,其其值值可可以以被被改改变变的的量量称称为为变变量量。它它代代表表内内存存中中具具有有特特定定属属性性的的内内存存单单元元,用用来来存存储储数数据据,如如同同教教室室里一个位置,可以坐不同的同学。里一个位置,可以坐不同的同学。第7页,本讲稿共50页3.2 3.2 常量和变量常量和变量2.2.变量的两个要素变量的两个要素(变量名与变量值)(变量名与变量值)(1 1)变变量量名名。每每个个变变量量都都必必须
6、须有有一一个个名名字字变变量名,变量命名遵循标识符命名规则。量名,变量命名遵循标识符命名规则。(2 2)变变量量值值。在在程程序序运运行行过过程程中中,变变量量值值存存储储在在内内存存中。在程序中,通过变量名来引用变量的值。中。在程序中,通过变量名来引用变量的值。3a变量名变量名变量名变量名变量值变量值变量值变量值存储单元存储单元存储单元存储单元变量名(椅子)变量名(椅子)变量名(椅子)变量名(椅子)(一排(一排(一排(一排7 7号)号)号)号)变量值(同学)变量值(同学)变量值(同学)变量值(同学)(张三)(张三)(张三)(张三)第8页,本讲稿共50页.标识符命名规则标识符命名规则(1 1)
7、有有效效字字符符:只只能能由由字字母母、数数字字和和下下划划线线组组成成,且以字母或下划线开头。且以字母或下划线开头。(2 2)有有效效长长度度:随随系系统统而而异异,但但至至少少前前个个字字符符有有效效。如果超长,则超长部分被舍弃。如果超长,则超长部分被舍弃。例例如如,由由于于student_namestudent_name和和student_numberstudent_number的的前前个个字字符相同,有的系统认为这两个变量,是一回事而不加区别。符相同,有的系统认为这两个变量,是一回事而不加区别。在在TC TC V2.0V2.0中中,变变量量名名(标标识识符符)的的有有效效长长度度为为个
8、字符,缺省值为。个字符,缺省值为。第9页,本讲稿共50页(3 3)C C语言的关键字不能用作变量名。语言的关键字不能用作变量名。注注意意:C C语语言言对对英英文文字字母母的的大大小小敏敏感感,即即同同一一字字母母的的大大小小写写,被被认认为为是是两两个个不不同同的的字字符。符。习习惯惯上上,变变量量名名和和函函数数名名中中的的英英文文字字母母用小写,以增加可读性。用小写,以增加可读性。第10页,本讲稿共50页标识符命名的良好习惯标识符命名的良好习惯见名知意见名知意:所所谓谓“见见名名知知意意”是是指指,通通过过变变量量名名就就知知道道变变量量值值的的含含义义。通通常常应应选选择择能能表表示示
9、数数据据含含义义的的英英文文单单词词(或或缩缩写写)作作变变量量名名,或或汉汉语语拼音字头作变量名。拼音字头作变量名。例例如如,name/xmname/xm(姓姓名名)、sex/xbsex/xb(性性别别)、age/nlage/nl(年龄)、(年龄)、salary/gzsalary/gz(工资)。(工资)。第11页,本讲稿共50页4.4.变量的定义与初始化变量的定义与初始化在在语语言言中中,要要求求对对所所有有用用到到的的变变量量,必必须须先先定定义义、后后使使用用;每每个个变变量量只只能能定定义义一一次次且且又又确确定定类类型型。我我们们称称在在定定义义变变量量的的同同时时进进行行赋初值的操
10、作为变量初始化。赋初值的操作为变量初始化。(1 1)变量定义的一般格式变量定义的一般格式 存储类型存储类型 数据类型数据类型 变量名变量名,变量名变量名2 2;例如,例如,float radius,length,area;float radius,length,area;(2 2)变量初始化的一般格式变量初始化的一般格式 存存储储类类型型 数数据据类类型型 变变量量名名=初初值值,变变量量名名2=2=初初值值22;例如,例如,float radius=2.5,length,area;float radius=2.5,length,area;第12页,本讲稿共50页3.3 3.3 整型数据整型数
11、据3.3.1 3.3.1 整型变量整型变量 1.1.分类分类 根据占用内存字节数的不同,整型变量又分为类:根据占用内存字节数的不同,整型变量又分为类:(1 1)基本整型(类型关键字为)基本整型(类型关键字为intint)。)。(2 2)短整型(类型关键字为)短整型(类型关键字为short intshort int)。)。(3 3)长整型(类型关键字为)长整型(类型关键字为long intlong int)。)。(4 4)无符号整型。无符号型又分为无符号基本整型)无符号整型。无符号型又分为无符号基本整型(unsigned intunsigned int)、无符号短整型()、无符号短整型(unsi
12、gned shortunsigned short)和无)和无符号长整型(符号长整型(unsigned longunsigned long)三种,只能用来存储无符号整数。)三种,只能用来存储无符号整数。第13页,本讲稿共50页3.3 3.3 整型数据整型数据2.2.占用内存字节数与值域占用内存字节数与值域 上述各类型整型变量占用的内存字节数,随系统而异。在上述各类型整型变量占用的内存字节数,随系统而异。在1616位操位操作系统中,一般用字节表示一个作系统中,一般用字节表示一个intint型变量,且型变量,且longlong型(字节)型(字节)intint型(字节)型(字节)shortshort型
13、(字节)。型(字节)。显然,不同类型的整型变量,其值域不同。占用内存字节数为显然,不同类型的整型变量,其值域不同。占用内存字节数为n n的的(有符号)整型变量,其值域为:(有符号)整型变量,其值域为:-2-2n*8-1n*8-1(2 2n*8-1n*8-1-1-1);无符号整型);无符号整型变量的值域为:变量的值域为:00(2 2n*8n*8-1-1)。)。例如,例如,PCPC机中的一个机中的一个intint型变量,其值域为型变量,其值域为-2-22*8-12*8-1(2 22*8-12*8-1-1-1),),即即-3276832767-3276832767;一个;一个unsignedunsi
14、gned型变量的值域为:型变量的值域为:00(2 22*82*8-1-1),即),即065535065535。第14页,本讲稿共50页3.3.整型变量的定义。整型变量的定义。同其它变量一样,整型变量必同其它变量一样,整型变量必须须“先定义,后使用先定义,后使用”。且定义一般放在程序的开头。且定义一般放在程序的开头。程程序举例(定义整型变量、计算求和并输出计算结果)。序举例(定义整型变量、计算求和并输出计算结果)。说明不同整型数据间可以进行运算。说明不同整型数据间可以进行运算。4.4.整型数据的溢出。整型数据的溢出。每一变量都有其存储范围,当数每一变量都有其存储范围,当数据大于或小于其存储范围是
15、就会发生数据溢出。就如同一据大于或小于其存储范围是就会发生数据溢出。就如同一个座位是不能坐下一个重个座位是不能坐下一个重200200公斤的相扑的。公斤的相扑的。程序举例。程序举例。说明整型数据溢出时会出现的问题。说明整型数据溢出时会出现的问题。第15页,本讲稿共50页3.3.2 整形数据在内存的存放形式整形数据在内存的存放形式 数据在内存中是以二进制格式存放。数据在内存中以其补码形式存放,正数的补码是其本身,数据在内存中是以二进制格式存放。数据在内存中以其补码形式存放,正数的补码是其本身,而负数的补码是其绝对值的二进制取反后加而负数的补码是其绝对值的二进制取反后加1。以。以10 和和 -10
16、为例说明。为例说明。0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0在存放整数的存储单元中,最左端的一位表示符号,该位为在存放整数的存储单元中,最左端的一位表示符号,该位为在存放整数的存储单元中,最左端的一位表示符号,该位为在存放整数的存储单元中,最左端的一位表示符号,该位为0 0表示数值为正值,表示数值为正值,表示数值为正值,表示数值为正值,该位为该位为该位为该位为1 1表示数值为负值。表示数值为负值。表示数值为负值。表示数值为负值。10的原码的原码10原码取反原码取反10原码取反原码取反加加1得得-10的补的补码码1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1
17、1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0举例说明十进制数据与二进制数据的转化。(以举例说明十进制数据与二进制数据的转化。(以举例说明十进制数据与二进制数据的转化。(以举例说明十进制数据与二进制数据的转化。(以1010为例)为例)为例)为例)1025022210110的二进制表示为1010反之,二进制1010的值为1X23+0X22+1X21+0X20=10第16页,本讲稿共50页3.3.3 有符号整型变量与无符号整型变量存储有符号整型变量与无符号整型变量存储在无符号整型变量在内存中存放时,最左端的位不再表示符号位,而表示数值。在无符号整型变量在内存中存放时,最左端的位不再
18、表示符号位,而表示数值。0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1有符号整有符号整型最大值型最大值1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1=215-1=32767有符号整有符号整型最大值型最大值=216-1=65535代表符号代表符号代表数值代表数值长整型数据的存储空间一般大于整型,通常为长整型数据的存储空间一般大于整型,通常为32位,其数据存放规则与整位,其数据存放规则与整型数据相似,只是存放数值更大。型数据相似,只是存放数值更大。有符号长整有符号长整型最大值型最大值01 111111111111111111111111111111111111111
19、11111111111111111111111无符号长整无符号长整型最大值型最大值=231-1=232-1第17页,本讲稿共50页3.3.4 3.3.4 整型常量整型常量.三种表示形式三种表示形式整型常量即整常数,在语言中可用三种形式表示:整型常量即整常数,在语言中可用三种形式表示:(1 1)十进制十进制。例如。例如1010、3636。(2 2)八进制八进制(以数字开头)。例如(以数字开头)。例如012012 012=1X8 012=1X8(1)(1)+2X8+2X8(0)(0)=10=10(3 3)十六进制十六进制(以数字(以数字+小写字母小写字母x x开头)。例如开头)。例如0 x120
20、x12。0 x12=1X16 0 x12=1X16(1)(1)+2X16+2X16(0)(0)=18=18说明十进制数据向八进制和十六进制转化的方法:说明十进制数据向八进制和十六进制转化的方法:1717转化到八进制为转化到八进制为2121;1717转化到十六进制为转化到十六进制为1111;(说明转化方法);(说明转化方法)3.3 3.3 整型数据整型数据第18页,本讲稿共50页.分类分类(1 1)基基本本整整型型。在在1616位位机机中中,用用2 2字字节节存存储储,其其数数据据范范围与围与intint型变量一样。型变量一样。(2 2)长长整整型型(在在数数值值后后面面加加“L L(l l)”
21、)。对对超超出出基基本本整整型型值值域域的的整整型型常常量量,可可使使用用长长整整型型常常量量表表示示,其其取取值值范范围围可可达达-(-)。例例如如,123l123l、315315等。等。第19页,本讲稿共50页.类型匹配规则类型匹配规则类类型型匹匹配配规规则则为为:一一个个整整型型常常量量,可可以以赋赋给给能能容容纳纳下下其其值的整型变量。值的整型变量。例例如如,其其值值在在-(-)的的整整型型常常量量,可可以以赋赋给给intint型型变变量量和和long long intint型型变变量量;其其值值在在-(-)的的整整型型常常量量,就就只只能能赋赋给给long long intint型型
22、变量。变量。注注意意:常常量量无无unsignedunsigned型型。但但一一个个非非负负整整型型常常量量,只只要要它它的的值值不不超超过过相相应应变变量量的的值值域域(即即取取值值范范围围),也也可以赋给可以赋给unsignedunsigned型变量。型变量。第20页,本讲稿共50页3.4 3.4 浮点型数据(实型数据)浮点型数据(实型数据)3.4.1 3.4.1 实型变量实型变量 语言的实型变量,分为两种:语言的实型变量,分为两种:(1 1)单精度型单精度型。类型关键字为类型关键字为floatfloat,一般占字,一般占字节(位)、提供位有效数字。节(位)、提供位有效数字。(2 2)双精
23、度型双精度型。类型关键字为类型关键字为doubledouble,一般占个,一般占个字节、提供字节、提供15161516位有效数字。(还有位有效数字。(还有long doublelong double型,型,6464字节字节,但应用较少。),但应用较少。)第21页,本讲稿共50页3.4 3.4 浮点型数据(实型数据)浮点型数据(实型数据)3.4.2 3.4.2 实型常量实型常量 .表示形式表示形式实型常量即实数,在语言中又称浮点数,其值有两种表达形式:实型常量即实数,在语言中又称浮点数,其值有两种表达形式:(1 1)十进制形式。例如)十进制形式。例如3.143.14、9.89.8。(2 2)指数
24、形式:)指数形式:EE(e e)。例如。例如3.03.0+5+5等等(说(说明规范表示方法)。明规范表示方法)。.关于类型关于类型 实型常量不分实型常量不分floatfloat型和型和doubledouble型,型,通常以通常以doubledouble型处理。型处理。一个一个实型常量,可以赋给一个实型变量(实型常量,可以赋给一个实型变量(floatfloat型或型或doubledouble型)。型)。第22页,本讲稿共50页3.4 3.4 浮点型数据(实型数据)浮点型数据(实型数据)3.4.3 3.4.3 实型变量的存放与舍入误差实型变量的存放与舍入误差 实型变量在内存中一般占有实型变量在内存
25、中一般占有4 4个字节,并在内存中以指数形式存储,系统把一个数据个字节,并在内存中以指数形式存储,系统把一个数据分成小数部分和指数部分分别存放。分成小数部分和指数部分分别存放。+.31415921符号位符号位小数部分小数部分指数部分指数部分=3.141592由于一般实数数据有一定的有效位数(单精度有效数字为由于一般实数数据有一定的有效位数(单精度有效数字为6-76-7位,双精度位,双精度有效数字为有效数字为15-1615-16位),有效数字以外的数字将被舍去,从而产生计算上的误位),有效数字以外的数字将被舍去,从而产生计算上的误差。差。程序举例程序举例123456.789X10123456.7
26、89X105 5+10+10的值,打印计算前后的值,打印计算前后的值。的值。第23页,本讲稿共50页3.5 3.5 字符型数据字符型数据3.5.1 3.5.1 字符常量字符常量1.1.字符常量的定义字符常量的定义用一对单引号括起来的单个字符,称为字符常量。用一对单引号括起来的单个字符,称为字符常量。例如,例如,A A、等。等。2.2.转义字符转义字符语言还允许使用一种特殊形式的字符常量,就是以反斜杠语言还允许使用一种特殊形式的字符常量,就是以反斜杠“”开头的开头的转义字符。转义字符。注意:如果反斜杠或单引号本身作为字符常量,必须使用转义字符:注意:如果反斜杠或单引号本身作为字符常量,必须使用转
27、义字符:、。对课本对课本 例例3.5 3.5 用转义字符输出可打印字符和不可打印字符用转义字符输出可打印字符和不可打印字符进行进行说明解释。说明解释。第24页,本讲稿共50页#include“stdio.h”Void main()printf(“_ab_ct_derftgn”);printf(“htibbj_kn”);解释输出结果。解释输出结果。第25页,本讲稿共50页3.5.2 3.5.2 字符变量字符变量字符变量的类型关键字为字符变量的类型关键字为charchar,一般占,一般占1 1字节内存单元。字节内存单元。1.1.变量值的存储变量值的存储 字符变量用来存储字符常量。将一个字符常量存储
28、到一个字符变量中,字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的实际上是将该字符的ASCIIASCII码值(无符号整数)存储到内存单元中。码值(无符号整数)存储到内存单元中。例如,例如,char ch1,ch2;/*char ch1,ch2;/*定义两个字符变量:定义两个字符变量:ch1ch1,ch2*/ch2*/ch1=ch1=a a;ch2=;ch2=b b;/*;/*给字符变量赋值给字符变量赋值*/*/第26页,本讲稿共50页2.2.特性特性字符数据在内存中存储的是字符的字符数据在内存中存储的是字符的ASCIIASCII码码 一个无符号整数,其形一个无符
29、号整数,其形式与整数的存储形式一样,所以语言允许字符型数据与整型数据之间通用。式与整数的存储形式一样,所以语言允许字符型数据与整型数据之间通用。(1 1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。)一个字符型数据,既可以字符形式输出,也可以整数形式输出。程序例子,用字符形式和整数形式输出字符变量程序例子,用字符形式和整数形式输出字符变量Include“stdio.h”void main()char ch1,ch2;ch1=a;ch2=b;printf(“ch1=%c,ch2=%cn”,ch1,ch2);printf(“ch1=%d,ch2=%dn”,ch1,ch2);程序运行结果
30、:程序运行结果:ch1=a,ch2=b ch1=97,ch2=98第27页,本讲稿共50页(2 2)允许对字符数据进行算术运算,此时就是对它们的)允许对字符数据进行算术运算,此时就是对它们的ASCIIASCII码值进行码值进行算术运算。算术运算。程序例子程序例子-字符数据的算术运算。字符数据的算术运算。#includeVoid main()char ch1,ch2;ch1=a;ch2=B;/*字母的大小写转换字母的大小写转换*/printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32);/*用字符形式输出一个大于用字符形式输出一个大于256的数值的数值*/printf(ch1
31、+200=%dn,ch1+200);printf(ch1+200=%cn,ch1+200);printf(ch1+256=%dn,ch1+256);printf(ch1+256=%cn,ch1+256);第28页,本讲稿共50页程序运行结果:程序运行结果:ch1=A,ch2=bch1+200=297ch1+200=)ch1+256=353ch1+256=a 思思考考题题:用用字字符符形形式式输输出出一一个个大大于于256256的的数数值值,会会得得到到什什么么结果?(实验)结果?(实验)2.5.3 2.5.3 字符串常量字符串常量1.1.字符串常量的概念和字符串长度字符串常量的概念和字符串长度
32、字符串常量是用一对双引号括起来的若干字符序列。字符串常量是用一对双引号括起来的若干字符序列。字符串中字符的个数称为字符串长度。长度为字符串中字符的个数称为字符串长度。长度为0 0的字符串(即一个字符都的字符串(即一个字符都没有的字符串)称为空串,表示为没有的字符串)称为空串,表示为“”(一对紧连的双引号)。(一对紧连的双引号)。第29页,本讲稿共50页例如,例如,“How do you do.How do you do.”、“Good morning.Good morning.”等,都是字符串常量,等,都是字符串常量,其长度分别为其长度分别为1414和和1313(空格也是一个字符)。(空格也是
33、一个字符)。如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。例如:(例如:(1 1)C:msdosv6.22 C:msdosv6.22C:msdosv6.22 C:msdosv6.22 (2 2)I say:Goodbye!I say:Goodbye!I say:Goodbye!I say:Goodbye!“2.2.字符串的存储字符串的存储C C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个00作为字符串的结束标志。作为字符串的结束标志。注意:在
34、源程序中书写字符串常量时,不必加结束字符注意:在源程序中书写字符串常量时,不必加结束字符00,否则画蛇,否则画蛇添足。添足。如果有一个字符串为如果有一个字符串为“CHINACHINA”,则它在内存中的实际存储如下所示:,则它在内存中的实际存储如下所示:最后一个字符最后一个字符00是系统自动加上的,它占用字节而非字节内存空间。是系统自动加上的,它占用字节而非字节内存空间。CHINA0第30页,本讲稿共50页综上所述,字符常量综上所述,字符常量AA与字符串常量与字符串常量AA是两回事:是两回事:(1 1)定定界界符符不不同同:字字符符常常量量使使用用单单引引号号,而而字字符符串串常常量量使使用双引
35、号;用双引号;(2 2)长长度度不不同同:字字符符常常量量的的长长度度固固定定为为1 1,而而字字符符串串常常量量的长度,可以是的长度,可以是0 0,也可以是某个整数;,也可以是某个整数;(3 3)存存储储要要求求不不同同:字字符符常常量量存存储储的的是是字字符符的的ASCIIASCII码码值值,而而字字符符串串常常量量,除除了了要要存存储储有有效效的的字字符符外外,还还要要存存储储一一个个结结束束标标志志00。第31页,本讲稿共50页3.6 3.6 变量赋值与数据混合运算变量赋值与数据混合运算3.6.1 3.6.1 变量赋值变量赋值1.1.在变量定义时进行初始化在变量定义时进行初始化 int
36、 a=7;char ch1=int a=7;char ch1=A A;float pi=3.1415;float pi=3.1415;2.2.变量定义时对部分变量赋值变量定义时对部分变量赋值int a,b,c=12;cha ch1,ch2=int a,b,c=12;cha ch1,ch2=p p;3.3.先定义变量,再对变量赋值先定义变量,再对变量赋值int a,b,c;a=11;b=1;c=35;int a,b,c;a=11;b=1;c=35;但不能写成:但不能写成:int a=b=c=6;int a=b=c=6;这种形式。(这种形式。(错误)错误)不管哪种表示方法,程序中变量的初始化不是在
37、编译阶段完成的,都是在程序的执不管哪种表示方法,程序中变量的初始化不是在编译阶段完成的,都是在程序的执行阶段完成的,行阶段完成的,只有第只有第8 8章的静态存储变量和外部标量的初始化在编译阶段完章的静态存储变量和外部标量的初始化在编译阶段完成。成。第32页,本讲稿共50页3.6 3.6 变量赋值与数据混合运算变量赋值与数据混合运算3.6.2 3.6.2 不同数值间的混合运算不同数值间的混合运算1.1.不同数值间的混合运算是允许的,整型、实型、字符型数据间可以进不同数值间的混合运算是允许的,整型、实型、字符型数据间可以进行数值计算,但运算时不同类型的数据先转化成同一类型,然后进行计算,如行数值计
38、算,但运算时不同类型的数据先转化成同一类型,然后进行计算,如 7+3.14+7+3.14+a a*10.5-9*10.5-9数据转化时的规则是从低向高转化。即在运算过程中先将低级数据类型转化为数据转化时的规则是从低向高转化。即在运算过程中先将低级数据类型转化为高级数据类型,在进行运算。高级数据类型,在进行运算。doublefloatlongunsignedintChar,short低低高箭头表示数据级别的高低箭头表示数据级别的高低程序例子解释程序例子解释-数据的混合运算数据的混合运算Void main()int i=5;float f=3.14;double d=1.2;long int e=
39、50;double sum;Sum=10+a+i*f d/e第33页,本讲稿共50页3.7 3.7 算术运算与算术表达式算术运算与算术表达式在语言中,除控制语句和输入输出函数外,其它所有基本操作都作在语言中,除控制语句和输入输出函数外,其它所有基本操作都作为运算符处理。为运算符处理。C C语言的运算符有以下几类(将在以后各章展开学习讨论):语言的运算符有以下几类(将在以后各章展开学习讨论):1.1.算术运算符(算术运算符(算术运算符(算术运算符(+-*/%+-*/%)2.2.关系运算符(关系运算符(关系运算符(关系运算符(=!=)3.3.逻辑运算符(!逻辑运算符(!逻辑运算符(!逻辑运算符(!
40、&|&|)4.4.位运算符(位运算符(位运算符(位运算符(|&|&)5.5.赋值运算符(赋值运算符(赋值运算符(赋值运算符(=及其他)及其他)及其他)及其他)6.6.条件运算符(条件运算符(条件运算符(条件运算符(?:?:)7.7.逗号运算符(逗号运算符(逗号运算符(逗号运算符(,C C特有)特有)特有)特有)8.8.指针运算符(指针运算符(指针运算符(指针运算符(*&*&)9.9.求字节数运算符(求字节数运算符(求字节数运算符(求字节数运算符(sizeof sizeof)10.10.强制转换类型运算符(类型)强制转换类型运算符(类型)强制转换类型运算符(类型)强制转换类型运算符(类型)11.
41、11.分量运算符(分量运算符(分量运算符(分量运算符(.-.-)12.12.下标运算符(下标运算符(下标运算符(下标运算符()还有其他一些运算符,总之,还有其他一些运算符,总之,还有其他一些运算符,总之,还有其他一些运算符,总之,C C语言的运算符十分丰富。语言的运算符十分丰富。语言的运算符十分丰富。语言的运算符十分丰富。第34页,本讲稿共50页3.7 3.7 算术运算与算术表达式算术运算与算术表达式 1.1.五种基本算术运算符五种基本算术运算符 +、-(减法(减法/取负)、取负)、*、/、%(求余数)(求余数)(1 1)关于除法运算)关于除法运算/C C语言规定:两个整数相除,其商为整数,小
42、数部分被舍弃。例如,语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如,5/2 5/2=2=2。(2 2)关于求余数运算)关于求余数运算要求两侧的操作数均为整型数据,否则出错。要求两侧的操作数均为整型数据,否则出错。2.2.表达式和算术表达式表达式和算术表达式(1 1)表达式的概念)表达式的概念 用用运运算算符符和和括括号号将将运运算算对对象象(常常量量、变变量量和和函函数数等等)连连接接起起来来的的、符符合合语言语法规则的式子,称为表达式。语言语法规则的式子,称为表达式。第35页,本讲稿共50页 单单个个常常量量、变变量量或或函函数数,可可以以看看作作是是表表达达式式的的一一种种特特例
43、例。将将单单个个常常量量、变变量量或或函函数构成的表达式称为简单表达式,其它表达式称之为复杂表达式。数构成的表达式称为简单表达式,其它表达式称之为复杂表达式。(2 2)算术表达式的概念)算术表达式的概念表表达达式式中中的的运运算算符符都都是是算算术术运运算算符符。例例如如,3 3+6 6*9 9、(x(x+y)y)/2 2-1 1等等,都都是算术表达式。是算术表达式。良良好好的的源源程程序序书书写写习习惯惯:在在表表达达式式中中,在在双双目目运运算算符符的的左左右右两两侧侧各各加加一一个个空空格格,可增强程序的可读性。可增强程序的可读性。请比较表达式请比较表达式“(x+y)/2 (x+y)/2
44、 1 1”与与“(x+y)/2(x+y)/21 1”,3.3.运算符的优先级与结合性运算符的优先级与结合性(参考附录(参考附录C C)(1 1)语语言言规规定定了了运运算算符符的的优优先先级级和和结结合合性性。所所谓谓结结合合性性是是指指,当当一一个个操操作作数数两两侧侧的的运运算算符符具具有有相相同同的的优优先先级级时时,该该操操作作数数是是先先与与左左边边的的运运算算符符结结合,还是先与右边运算符结合。合,还是先与右边运算符结合。第36页,本讲稿共50页自左至右的结合方向,称为左结合性。反之,称为右结合性。自左至右的结合方向,称为左结合性。反之,称为右结合性。结结合合性性是是语语言言的的独
45、独有有概概念念。除除单单目目运运算算符符、赋赋值值运运算算符符和和条条件件运运算算符是右结合性外,符是右结合性外,其它运算符都是左结合性。其它运算符都是左结合性。(2 2)表达式求值)表达式求值1 1)按运算符的优先级高低次序执行。例如,先乘除后加减。)按运算符的优先级高低次序执行。例如,先乘除后加减。2 2)如如果果在在一一个个运运算算对对象象(或或称称操操作作数数)两两侧侧的的运运算算符符的的优优先先级级相相同同,则按语言规定的结合方向(结合性)进行。则按语言规定的结合方向(结合性)进行。例例如如,算算术术运运算算符符的的结结合合方方向向是是“自自左左至至右右”,即即:在在执执行行“a a
46、 b b+c c”时,变量时,变量b b先与减号结合,执行先与减号结合,执行“a-ba-b”;然后再执行加;然后再执行加c c的运算。的运算。程序例子:程序例子:a+b*c-da+b*c-d第37页,本讲稿共50页4.4.数据类型转换数据类型转换(1 1)在语言中,整型、实型和字符型数据间可以混合运算。在语言中,整型、实型和字符型数据间可以混合运算。如如果果一一个个运运算算符符两两侧侧的的操操作作数数的的数数据据类类型型不不同同,则则系系统统按按“先先转转换换、后后运运算算”的的原原则则,首首先先将将数数据据自自动动转转换换成成同同一一类类型型,然然后后在同一类型数据间进行运算。在同一类型数据
47、间进行运算。1 1)横横向向向向左左的的箭箭头头,表表示示必必须须的的转转换换。charchar和和short short 型型必必须须转转换换成成 int int 型,型,floatfloat型必须转换成型必须转换成doubledouble型。型。2 2)纵向向上的箭头,表示不同类型的转换方向。纵向向上的箭头,表示不同类型的转换方向。例例如如,intint型型与与doubledouble型型数数据据进进行行混混合合运运算算,则则先先将将intint型型数数据据转转换换成成doubledouble型型,然然后后在在两两个个同同类类型型的的数数据据间间进进行行运运算算,结结果果为为doubled
48、ouble型。型。第38页,本讲稿共50页doublefloatlongunsignedintChar,short低低高注意:注意:注意:注意:箭头方向只表示数据类型由低箭头方向只表示数据类型由低箭头方向只表示数据类型由低箭头方向只表示数据类型由低向高转换,不要理解为向高转换,不要理解为向高转换,不要理解为向高转换,不要理解为intintintint型先转换型先转换型先转换型先转换成成成成unsignedunsignedunsignedunsigned型,再转换成型,再转换成型,再转换成型,再转换成longlonglonglong型,最型,最型,最型,最后转换成后转换成后转换成后转换成doub
49、ledoubledoubledouble型。型。型。型。第39页,本讲稿共50页(2 2)除自动转换外,语言也允许强制转换)除自动转换外,语言也允许强制转换。数据类型强制转换的一般格式为:数据类型强制转换的一般格式为:(要转换成的数据类型要转换成的数据类型)()(被转换的表达式被转换的表达式)当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。例如,例如,(double)a(double)a(等价于(等价于(double)(a)/*(double)(a)/*将变量将变量a a的值转换成的值转换成doubledouble型型
50、*/*/(int)(x+y)/*(int)(x+y)/*将将x+yx+y的结果转换成的结果转换成intint型型*/*/(float)5/2(float)5/2(等价于(等价于(float)(5)/2(float)(5)/2)/*/*将将5 5转换成实型,再除以转换成实型,再除以2 2(=2.5=2.5)*/*/(float)(5/2)/*(float)(5/2)/*将将5 5整除整除2 2的结果(的结果(2 2)转换成实型()转换成实型(2.02.0)*/*/注注意意:强强制制转转换换类类型型得得到到的的是是一一个个所所需需类类型型的的中中间间量量,原原表表达达式式类类型型并并不不发发生生变