第2章数据类型运算符和表达式.ppt
第2章 数据类型、运算符与表达式,学习目标,理解常量和变量的概念。熟悉C语言的基本数据类型:整型、实型和字符型数据的表示及范围。掌握C语言的基本运算符及表达式。,2023年9月2日1时31分,1/49,2.1 引言,程序数据结构算法 程序:编写程序的目的是利用计算机完成某一问题的求解任务数据:数据是计算机程序在运行时的处理对象算法:对数据的求解操作通过程序步骤,既算法反映出来,2023年9月2日1时31分,2/49,2.2 C语言的字符集和词法约定,#include#define PI 3.14void main()int choice;float radius,area,perimeter;scanf(%d,%f,【例2-1】一个C程序实例,根据用户的选择,计算以radius为半径的圆的面积或周长。,2023年9月2日1时31分,3/49,2.2.1 C语言的字符集,字符是组成语言的最基本元素。C语言的字符集由字母,数字,空格,标点和特殊字符组成:1.字母:大小写字母共52个2.数字:09共10个3.空白符:空格符、制表符、换行符等统称为空白符 4.标点和特殊字符:包括表示一条语句结束的“;”以及逗号表达式中的“,”等。,2023年9月2日1时31分,4/49,2.2.2 C语言词汇,C语言使用的词汇分为六类,1.标识符:就是用来标识变量名、符号常量名、函数名、类型名、文件名等的有效字符序列。,在使用标识符时需要注意以下几点:1)标识符命名应尽量作到见名知意。2)C语言的标识符大小写字母敏感,即代表不同的变量。例如PI和pi会被认为是两个不同的标识符。3)标识符的长度受不同版本的C语言编译系统以及具体计算机系统的限制。,2023年9月2日1时31分,5/49,2.2.2 C语言词汇(3),C语言的关键字分为以下几类:1)类型说明符。用于定义、说明变量、函数或其他数据结构的类型。2)语句定义符。用于表示一个语句的功能。3)预处理命令字。用于表示一个预处理命令。,2.关键字:关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。,如例2-1中用到的float等。,如例2-1中用到的if。,如例2-1中用到的include。,2023年9月2日1时31分,6/49,C语言的关键字,3运算符C语言中含有相当丰富的运算符。运算符与变量,函数一起组成表达式,表示各种运算功能。4分隔符在C语言中采用的分隔符有逗号和空格等。逗号主要用在类型说明和函数参数表中,分隔各个变量。空格多用于语句各单词之间,作间隔符。5常量C语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。,2023年9月2日1时31分,7/49,C语言的关键字(2),6.注释符1)以“/*”开头并以“*/”结尾的串,用来注释一段;例2-1中,“/*选择1,计算面积*/”2)用“/”注释一行。例2-1中的:if(choice=2)后的“/选择2,计算周长”,2023年9月2日1时31分,8/49,2.3 常量和变量,2.3.1 常量概念:在程序运行过程中,其值不发生改变的量称为常量。常量数据的类型一般为上述基本类型中的一种,如:整型常量:3,0,-1实型常量:1.2,-2.345字符常量:a,1,2023年9月2日1时31分,9/49,从使用形式上看,常量包括字面常量和符号常量,1)字面常量。直接以数据值表示的常量,称字面常量或直接常量 例2-1中的2便是一个字面常量。2)符号常量。以标识符号(以下简称标识符)表示的常量称为符号常量,例2-1中的PI就是一个符号常量,并且在使用之前需通过#define命令定义。定义后,在程序中,PI将一直代表3.14。,为什么要引入符号常量,2023年9月2日1时31分,10/49,2.3 常量和变量(3),2.3.2 变量概念:在程序运行过程中值可以改变的量,称为变量。例2-1中,choice,radius等为变量。执行程序的输入语句后,这两个变量依次保存2和1.0,即变量值分别为2和1.0。要区别开变量名和变量值以及变量的地址这三个概念。,2023年9月2日1时31分,11/49,本次课程介绍的主要内容,1、数据类型;2、数据的输入输出;3、不同数据类型的转换;4、表达式及其表示和应用。,2023年9月2日1时31分,12/49,2.4 数据类型(Data Type),数据类型,基本类型,构造类型,指针类型,空类型,整型,实型(浮点型),字符型,枚举类型,数组类型,结构体类型,共用体类型,单精度实型,双精度实型,短整型,基本整型,长整型,2023年9月2日1时31分,13/49,2.4.1 整型数据,1整型常量即表示整数的常量,C语言中的整数有3种表示形式:1)十进制形式。如99,-1。2)八进制形式。以数字0打头:如012,0。3)十六进制形式。以0 x(0X)打头:如0 x12,0Xff。常见错误:1)把表示八进制和十六进制的0和0 x误写成o和ox。2)八进制中出现超过“7”的数。,2023年9月2日1时31分,14/49,2.整型变量,有符号整型(signed int):通常简写为int,在内存中占两个字节,int型变量的范围为-3276832767。无符号整型(unsigned int):可简写为unsigned,在内存中占两个字节,unsigned变量的范围为065535。有符号短整型(signed short int):可简写为short,范围与int相同。无符号短整型(unsigned short int):可简写为unsigned short,范围与unsigned int相同。有符号长整型(signed long int):可简写为long,在内存中占四个字节,范围为-231231-1。无符号长整型(unsigned long int):可简写为unsigned long,范围为0232-1。,2023年9月2日1时31分,15/49,【例2-2】请观察下面程序的运行结果,#includevoid main()short n=32768;printf(n=%d,n);程序运行结果:n=-32768,2023年9月2日1时31分,16/49,例2-2思考,请观察下面程序的运行结果,#includevoid main()unsigned short n=32768;printf(n=%d,n);程序运行结果:n=32768,2023年9月2日1时31分,17/49,2.4.2 实型数据,1实型常量1)十进制数形式:由数码09和小数点组成。例如:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均为合法的实数。注意:小数点不能缺。2)指数形式:123e3,.123e6,123.E3,1.23E5。指数形式的规范化形式为:尾数中小数点左边有且只能有一位非零数字。,2023年9月2日1时31分,18/49,注意:,e(E)前一定要有数字(尾数)e(E)后一定要有整数(指数)尾数和e(E)之间不能有任何分隔符,常见的错误书写形式:E1 原因:阶码标志E之前无数字。53.-E3 原因:负号位置不对。2.7E 原因:无阶码。,2023年9月2日1时31分,19/49,2.实型变量,实型数据在内存中的存放形式:,所以实型数据-111.1101B在内存中的存放形式为:,2023年9月2日1时31分,20/49,单精度型float单精度型占4个字节内存空间只能提供七位有效数字,其余的精度将丢失。双精度型double 双精度型占8 个字节内存空间可提供16位有效数字。,实型变量分为两类,2023年9月2日1时31分,21/49,【例2-3】分析观察以下程序的运行结果,#includevoid main()float f;double d;f=111111.111111;d=111111.111111;printf(f=%fnd=%fn,f,d);,程序运行结果:f=111111.109375 d=111111.111111,整数部分已经6位,再加上小数点,就已经7位,只有12位数值位,再加1位小数点,共13位,2023年9月2日1时31分,22/49,2.4.4 字符型数据,1字符常量字符常量有两种表示方法:1)普通表示形式,用单引号括起的单个字符。如A,a,$,等。2)转义字符表示形式。转义字符有以下三种用法:表示控制字符,表示特殊字符,表示所有字符,,2023年9月2日1时31分,23/49,常用的转义字符及其含义,【例2-4】转义字符的使用举例,#includevoid main()printf(NumtNamen);printf(x31t101n);,程序运行结果(其中代表一个空格):NumName1A,2023年9月2日1时31分,25/49,2字符型变量,用以保存字符类型数据的变量为字符型变量。例如:char c1;,字符型变量的类型说明符,字符型变量,字符型变量保存的是字符数据的ASCII,字符型变量只占一个字节。,2023年9月2日1时31分,26/49,【例2-5】字符变量的赋值举例,#includevoid main()char c1,c2,c3,c4;c1=A;c2=65;c3=x41;c4=101;printf(c1=%c;c2=%c;c3=%c;c4=%cn,c1,c2,c3,c4);printf(c1=%d;c2=%d;c3=%d;c4=%dn,c1,c2,c3,c4);,程序运行结果:c1=A;c2=A;c3=A;c4=Ac1=65;c2=65;c3=65;c4=65,2023年9月2日1时31分,27/49,【例2-6】大小写字母的转换,#includevoid main()char c1,c2;c1=a;c2=A;printf(%c%cn,c1,c2);c1=c1-32;/小写字母转大写字母c2=c2+32;/大写字母转小写字母printf(%c%cn,c1,c2);,程序运行结果:a AA a,2023年9月2日1时31分,28/49,3字符串常量,用一对双引号括起来的零个或多个字符序列称为字符串。字符串的长度是指该字符串的有效字符个数,不包括双引号以及字符串结束标志。示例:字符串:Teacher 实际串长为7,占了8字节空间(字符串结束标志也占一个字节)。,2023年9月2日1时31分,29/49,常见错误:,1)混淆单个字符和只包含一个字符的字符串的区别。例:char ch=c;语句错误,字符串c 在内存中占两个字节空间,char类型变量ch占一个字节内存空间。正确的书写形式为:char ch=c;2)以为存在包含零个字符的字符数据。例:char ch=;只有包含零个字符的空串,但没有包含零个字符的空字符常量,正确的书写形式应该为:char ch=0。如果想把一个空格字符保存到ch变量中,空格字符也要表示出来,例如:char ch=;(其中代表一个空格),2023年9月2日1时31分,30/49,2.5 运算符及表达式,算术运算符+-*/%+-关系运算符=|&赋值运算符=及其复合赋值运算符条件运算符?:逗号运算符,指针和取地址运算符*&求字节运算符sizeof强制类型转换运算符(类型)分量运算符.-下标运算符 其他运算符 例如(),语言的运算符分为以下几类:,表达式:由运算符和运算对象组成的合法式子。,2023年9月2日1时31分,31/49,2.5.2 算术运算符和算术表达式,1.C语言中基本的算术运算符,注意:,1)参与运算的对象数。2)参与运算对象的类型。需要注意的是取模运算,即求余数运算%,要求两侧的操作对象均为整型数据。3)运算结果的类型。C语言规定:两个整数相除,其结果也为整数,小数部分被舍弃。例如,5/2得2,结果为整型。,2023年9月2日1时31分,33/49,【例2-7】字符型数据的算术运算,#includevoid main()char c;/定义字符型变量 int n;/定义整型变量 c=9;/给字符9赋值给c n=c-0;/将c中的字母变成数字9后赋给n printf(%c%dn,c,n);,程序运行结果:9 9,字符,数字,2023年9月2日1时31分,34/49,2自增、自减运算符及其表达式,在使用自增、自减运算符时,需要注意以下几点:,1)+和-只能用于变量,不能用于常量和表达式。例如以下是错误用法:a+;+(a+b);#define ONE 1 ONE+;2)出现多个运算符时,编译器在处理时尽可能多的从左到右将若干个字符组合成一个运算符。i+j应解释为(i+)+j,而不是i+(+j)。3)在C语言中调用函数时,实际参数的处理顺序是从右到左。,2023年9月2日1时31分,36/49,【例2-8】分析观察下面程序的运行结果,#includevoid main()int i=1;printf(%d,%d,i,i+);,程序运行结果:1,1,2023年9月2日1时31分,37/49,2.5.3 赋值运算符和赋值表达式,1赋值运算符 在c语言中,用=表示赋值运算符,它的作用是将右侧表达式的值赋给左侧变量。例如:a=3/常数3赋给变量aa=b+c+1/算术表达式的结果赋给变量a,左边只能取变量,不能为常量或表达式;,右边可取变量、常量或任意表达式。,2023年9月2日1时31分,38/49,2变量初始化,定义变量时给变量赋予初值称为变量初始化。例如:int i=0;定义i为整型变量,同时初始化为0float f=2.25;定义f为单精度实型变量,同时初始化为为2.25char c=0;定义c为字符型变量,同时初始化为为字符 0,2023年9月2日1时31分,39/49,分清初始化和赋值语句赋值的概念,int i=0;是初始化 int i;i=0;是赋值 i=j=k=0;正确 int i=j=k=0;错误,用同一值初始化几个变量的正确的写法应该为:int i=0,j=0,k=0;,2023年9月2日1时31分,40/49,3复合的赋值运算符,复合赋值运算的一般格式为:变量 双目运算符=表达式,例如:c+=32 等同与 c=c+32 z*=a-b 等同与 z=z*(a-b),2023年9月2日1时31分,41/49,2.5.4 逗号运算符和逗号表达式,逗号表达式一般的形式:表达式1,表达式2,表达式3,.,表达式n表达式n的值就是逗号表达式的最终取值。,2023年9月2日1时31分,42/49,2.6 运算符的优先级和结合性,对于多个运算符组成的表达式进行求值运算时,需要根据运算符的优先级别高低次序和结合性执行。一般规则是:1)按运算符的优先级高低次序执行。C语言中,运算符的运算优先级共分为15级。在表达式中 优先级较高的先于优先级较低的进行运算。例如,先乘除后加减,如果有括号,则先计算括号。2)如果一个运算对象(或称操作数)两侧运算符的优先级相同,则按C语言规定的结合方向(结合性)进行。C语言中各运算符的结合性分为左结合性(自左至右)和右结合性(自右至左)两种。,2023年9月2日1时31分,43/49,2.7 C语言中的数据类型转换,以下情况需要进行数据类型转换:不同数据类型的运算对象进行混合运算需要将一个表达式的结果转换成期望的类型时,就需要依据数据类型转换规则进行转换。,2023年9月2日1时31分,44/49,2.7.1 混合运算时的类型转换规则,1)综向箭头表示必定会进行的转换 如float型数据必先转换为double型数据,然后同另外操 作数进行运算;依此类似,如有char型或short型数据,必先转换得到int型,然后运算。2)横向箭头表示当运算对象为不同类型数据时的转换方向 如int同unsigned数据运算,int型转换为unsigned型后方 可进行运算转换。int同double数据运算,int直接转换为 double型后进行运算,不能理解为先转化为unsigned int 型,然后转换为long int型,最后再转换为double型。,2023年9月2日1时31分,45/49,2.7.2 赋值时的类型转换,当赋值运算符两侧的类型不同时,需进行类型转换,这种转换也是系统自动进行的。具体转换原则见课本说明,依据赋值运算符左侧数据的类型而定。,2023年9月2日1时31分,46/49,2.7.3 强制类型转换,在C语言中,允许强制类型转换,将某一数据的数据类型转换为指定的另一种数据类型。强制转换运算符组成的运算表达式的一般形式为:(类型名)(表达式)例如:(int)(x+y)将x+y的值转换成整型,即取整数部分。(float)x+y 将x转换成单精度型。,2023年9月2日1时31分,47/49,小结,掌握C语言的基本词汇掌握常量和变量的概念,符号常量的定义形式,了解引入符号常量的意义熟悉三种基本数据类型:整型、实型和字符型的基本特征和用法掌握如何实现变量的定义、赋值和初始化掌握算术运算符、逗号运算符、赋值运算符及其相关表达式理解运算符的优先级和结合性理解C语言中的数据类型转换问题,2023年9月2日1时31分,48/49,第一次 P27:2.2、2.3的(2)、(4)、(5)第二次 P27:2.4、2.7、2.8第三次 P27:2.6、2.9的(1)、(3)、(5),作业,2023年9月2日1时31分,49/49,