c程序设计第三章学习教案

上传人:莉**** 文档编号:110291304 上传时间:2022-06-18 格式:PPTX 页数:42 大小:276.87KB
返回 下载 相关 举报
c程序设计第三章学习教案_第1页
第1页 / 共42页
c程序设计第三章学习教案_第2页
第2页 / 共42页
c程序设计第三章学习教案_第3页
第3页 / 共42页
点击查看更多>>
资源描述
会计学1c程序设计程序设计(chn x sh j)第三章第三章第一页,共42页。(一)数据类型概述(一)数据类型概述(二)常量与变量(二)常量与变量(三)整型数据(三)整型数据(四)实型数据(四)实型数据(五)字符型数据(五)字符型数据 (六)各类数值(六)各类数值(shz)型数据间的混型数据间的混合运算合运算C的数据类型的数据类型第1页/共42页第二页,共42页。(一)(一)C C的数据类型的数据类型C C 语言语言(yyn)(yyn)的数据结构是以数据类型形的数据结构是以数据类型形式出现的。式出现的。C C的数据类型如下:的数据类型如下:数据类型数据类型基本类型基本类型整型整型字符型字符型实型(浮点型)实型(浮点型)单精度型单精度型双精度型双精度型枚举类型枚举类型构造类型构造类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型指针类型指针类型空类型空类型第2页/共42页第三页,共42页。(二)常量与变量(二)常量与变量1. 1. 常量和符号常量常量和符号常量常量:在程序运行过程中,其值不能被改变的量。常量:在程序运行过程中,其值不能被改变的量。 常量区分为不同的类型常量区分为不同的类型(lixng)(lixng):如:整:如:整型常量(型常量(1212、-3-3)、实型常量()、实型常量(4.64.6、 -1.23 -1.23)、)、字符常量(字符常量(aa、dd)。)。符号常量:用一个标识符代表一个常量符号常量:用一个标识符代表一个常量, ,即标识符形即标识符形式的常量。式的常量。 例例 3.1 3.1 符号常量的使用。符号常量的使用。 #define PRICE 30 #define PRICE 30 main( ) main( ) int num ,total; int num ,total; num = 10; num = 10; total = num total = num * * PRICE; PRICE; printf(“total = %d”,total); printf(“total = %d”,total); 第3页/共42页第四页,共42页。(1)程序中用)程序中用#define命令行定义命令行定义PRICE为为30,此后凡在本文件中出现的,此后凡在本文件中出现的PRICE都代表都代表(dibio)30,可以和常量一样进行运算。,可以和常量一样进行运算。 (2)符号常量不同于变量,它的值在其作用域内不能改变,也不能再被赋)符号常量不同于变量,它的值在其作用域内不能改变,也不能再被赋值。如在本例中再用以下赋值语句给值。如在本例中再用以下赋值语句给PRICE赋值是错误的:赋值是错误的: PRICE = 40;(3) 习惯上,符号常量名用大写,变量名用小写,以示区别。习惯上,符号常量名用大写,变量名用小写,以示区别。上述程序上述程序(chngx)的说的说明如下:明如下:使用使用(shyng)符号常量的好处:符号常量的好处:(1)含义清楚含义清楚。如:如:sum=15*30*23.5*43;在检查程序时搞不清各个常数究竟代;在检查程序时搞不清各个常数究竟代表什么。应尽量使用表什么。应尽量使用“见名知意见名知意”的变量名和符号常量。的变量名和符号常量。(2)在需要改变一个常量时能做到)在需要改变一个常量时能做到“一改全改一改全改”。如:如: #define PRICE 35在程序中所有以在程序中所有以PRICE代表的价格就会一律自动全改为代表的价格就会一律自动全改为35。第4页/共42页第五页,共42页。2. 变变 量量变量:其值可以改变变量:其值可以改变(gibin)的量。的量。 一个变量应该有一个名字,在内存中占据一定的一个变量应该有一个名字,在内存中占据一定的存储单元。在该存储单元中存放变量的值。存储单元。在该存储单元中存放变量的值。3变量值变量值存储单元存储单元a变量名变量名 见右图:变量名实际上是一个符号见右图:变量名实际上是一个符号(fho)地址,在对程序编译连接时由系地址,在对程序编译连接时由系统给每一个变量名分配一个内存地址。统给每一个变量名分配一个内存地址。在程序中从变量中取值,实际上是通过在程序中从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储变量名找到相应的内存地址,从其存储单元中读取数据。单元中读取数据。第5页/共42页第六页,共42页。3. 标识符:标识符:用来标识变量名、符号常量名、函数用来标识变量名、符号常量名、函数(hnsh)名、名、数组名、类型名、文件名的有效字符序列称为标识数组名、类型名、文件名的有效字符序列称为标识符。符。C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须须(bx)是字母或下划线。下面列出的是合法的标识符,也是合法的变量名:是字母或下划线。下面列出的是合法的标识符,也是合法的变量名:Sum,average,_total,tan,lotus_1,BASIC,li_ling不合法的标识符和变量名如右:不合法的标识符和变量名如右:M.D.John,#33,3D64,ab(1)大写字母和小写字母被认为是两个不同)大写字母和小写字母被认为是两个不同(b tn)的字符。的字符。(2)变量名的长度不要超过)变量名的长度不要超过8个字符。个字符。Turbo C允许允许32个字符。个字符。(3)所有用到的变量名都要)所有用到的变量名都要“先定义,后使用先定义,后使用”,特别指出每一个,特别指出每一个变量各自属于什么类型。变量各自属于什么类型。对于变量现说明如下:对于变量现说明如下:第6页/共42页第七页,共42页。(三)整型数据(三)整型数据1. 整型常量的表示方法整型常量的表示方法整型常量即整常数。整型常量即整常数。C整常数可用以下三种形式整常数可用以下三种形式表示:表示:(1)十进制整数。如)十进制整数。如123,-456,0。(2)八进制整数。以)八进制整数。以0开头的数是八进制数。如开头的数是八进制数。如:0123表示八进制数表示八进制数123,即,即(123)8,其值为:,其值为:182 28 1 380 ,等于,等于(dngy)十进制十进制数数83。(3)十六进制整数。以)十六进制整数。以0 x或或0X开头的数是十六开头的数是十六进制数。进制数。如:如:0 x123,代表十六进制数,代表十六进制数123第7页/共42页第八页,共42页。2. 整型变量整型变量(1)整型数据在内存中的存放形式)整型数据在内存中的存放形式(xngsh) 数据在内存中是以二进制形式数据在内存中是以二进制形式(xngsh)存放的。如果定义存放的。如果定义了一个整型变量了一个整型变量i: int i; /* 定义为整型变量定义为整型变量 */ i=10; /* 给给i 赋以整数赋以整数10 */ 十进制数十进制数10的二进制形式的二进制形式(xngsh)为为1010,在,在C编译系编译系统中,每一个整型变量在内存中占统中,每一个整型变量在内存中占2个字节。如下所示:个字节。如下所示:i10(a)数据存放的示意图数据存放的示意图i0 0 0 0 0 0 0 00 0 0 0 1 0 1 0(b)数据在内存中实际存放的情况数据在内存中实际存放的情况第8页/共42页第九页,共42页。实际上,数值是以补码(实际上,数值是以补码(complementcomplement)表示的。一个正数)表示的。一个正数(zhngsh)(zhngsh)的补码和其原码的形式相同。下图就是用补码的补码和其原码的形式相同。下图就是用补码形式表示的。如果数值是负的,在内存中如何用补码形式形式表示的。如果数值是负的,在内存中如何用补码形式表示呢?求负数补码的方法是:将该数的绝对值的二进制表示呢?求负数补码的方法是:将该数的绝对值的二进制形式,按位取反再加形式,按位取反再加1 1。例如:求例如:求-10-10的补码:的补码:10的原码的原码0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 取反取反1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1再加再加11 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0得得-10的补码的补码第9页/共42页第十页,共42页。(2)整型变量的分类)整型变量的分类 可以根据数值的范围将变量定义可以根据数值的范围将变量定义(dngy)为基本整型、短为基本整型、短整型或长整型。因此有以下三类整型变量:整型或长整型。因此有以下三类整型变量:基本整型,以基本整型,以int表示。表示。短整型,以短整型,以short int表示,或以表示,或以short表示。表示。长整型,以长整型,以long int表示,或以表示,或以long表示。表示。归纳起来,有以下归纳起来,有以下6种整型变量。即:种整型变量。即: 取值范围取值范围(fnwi) 字字节数节数 有符号基本整型有符号基本整型 signed int -3276832767 2 无符号基本整型无符号基本整型 unsigned int 065535 2 有符号短整型有符号短整型 signed short int -3276832767 2 无符号短整型无符号短整型 unsigned short int 065535 2 有符号长整型有符号长整型 signed long int -21474836482147483647 4 无符号长整型无符号长整型 unsigned long int 04294967295 4第10页/共42页第十一页,共42页。如果不指定如果不指定unsigned或指定或指定signed,则存储单元中最高位代表,则存储单元中最高位代表(dibio)符号(符号(0为正,为正,1为负)。如果指定为负)。如果指定unsigned,为无符号型,存储,为无符号型,存储单元中全部二进制位(单元中全部二进制位(bit)用作存放数本身,而不包括符号。无符号型)用作存放数本身,而不包括符号。无符号型变量只能存放不带符号的整数,如变量只能存放不带符号的整数,如123、4687等,而不能存放负数。等,而不能存放负数。如果在程序中定义如果在程序中定义a和和b两个变量:两个变量:int a; unsigned int b;则变量则变量a的数值的数值(shz)范围为范围为-3276832767。而变量。而变量b的数值的数值(shz)范围为范围为065535。第11页/共42页第十二页,共42页。(3)整型变量的定义)整型变量的定义对变量的定义,一般是放在一个函数对变量的定义,一般是放在一个函数(hnsh)的声的声明部分。明部分。例例3.2:整型变量的定义整型变量的定义(dngy)与使用:与使用:main ( ) int a,b,c,d; /*指定指定a、b、c、d为整型变量为整型变量 */ unsigned u; /* 指定指定u为无符号整型变量为无符号整型变量 */ a=12; b=-24; u=10; c= a+u ;d=b+u; printf(“a+u = %d,b+u = %dn”,c,d); 运行结果为:运行结果为:a+u = 22 ; b+u = -14可以看到不同种类的整型数据可以进行算术运算。可以看到不同种类的整型数据可以进行算术运算。第12页/共42页第十三页,共42页。(4)整型数据的溢出)整型数据的溢出 一个一个(y )int型变量的最大值允许值为型变量的最大值允许值为32767,如果再加,如果再加1,会出现什么情况?会出现什么情况?例例 3.3 整型数据的溢出整型数据的溢出(y ch)。main ( ) int a, b; a = 32767; b = a + 1; 运行结果为:运行结果为: 32767,-32768 printf ( “%d, %d”,a,b); 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 a :1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0b:32767-32768从上图可以从上图可以(ky)看到:变量看到:变量a的最高为的最高为0,后,后15位全为位全为1。加。加1后变成第后变成第1位为位为1,后面,后面15位全为位全为0。而它是。而它是-32768的补码形式的补码形式,所以输出变量,所以输出变量b的值为的值为-32768。第13页/共42页第十四页,共42页。注:一个注:一个int变量只能容纳变量只能容纳-3276832767范围内的数,范围内的数,无法表示大于无法表示大于32767的数。遇此情况就发生的数。遇此情况就发生“溢出溢出”,但运行时并不报错。它好像汽车的里程表一样,达到但运行时并不报错。它好像汽车的里程表一样,达到最大值以后,又从最小值开始计数。所以,最大值以后,又从最小值开始计数。所以,32767加加1得不到得不到32768,而得到,而得到 -32768,这与程序编,这与程序编制者的原意不同。因此制者的原意不同。因此(ync),在操作时要特别注意,在操作时要特别注意,或将变量或将变量b改成改成long 型就可得到预期的结果型就可得到预期的结果32768。第14页/共42页第十五页,共42页。3. 整型常量整型常量(chngling)的类型的类型 我们已知整型变量可分为我们已知整型变量可分为int、short int、long int和和unsigned int、unsigned short、unsigned long等类别。等类别。那么常量那么常量(chngling)是否也有这些类别?在将一个整是否也有这些类别?在将一个整型常量型常量(chngling)赋值给上述几种类别的整型变量时赋值给上述几种类别的整型变量时如何做到类型匹配?请注意以下几点:如何做到类型匹配?请注意以下几点:(1)一个整数,如果其值在)一个整数,如果其值在-3276832767范围内,认为它是范围内,认为它是int型,它型,它可以赋值给可以赋值给int型和型和long int 型变量。型变量。 (2)一个整数,如果其值超过了上述范围,而在)一个整数,如果其值超过了上述范围,而在-2147483648 2147483647范围内,则认为它是长整型,可以将它赋值给一个范围内,则认为它是长整型,可以将它赋值给一个long int 型变量。型变量。(3)一个)一个int 型的常量型的常量(chngling)也同时是一个也同时是一个short int 型常量型常量(chngling),可以赋给,可以赋给int 型或型或short int 型变量。型变量。(4)一个整常量)一个整常量(chngling)后面加一个字母后面加一个字母u,认为是,认为是unsigned int 型,如型,如12345u,在内存中按,在内存中按unsigned int规定的方式存放。规定的方式存放。(5)在一个整常量)在一个整常量(chngling)后面加一个字母后面加一个字母l或或L,则认为是,则认为是long int 型变量。型变量。第15页/共42页第十六页,共42页。(四)实型数据(四)实型数据1. 实型常量实型常量(chngling)的表示方法的表示方法实数(实数(real number )又称浮点数()又称浮点数(floating-point number)。实数有两种表示形式:。实数有两种表示形式:(1)(1)十进制小数形式。它由数字和小数点组成(注意必须有小数点十进制小数形式。它由数字和小数点组成(注意必须有小数点)。如:)。如:123.0 123.0 、.123.123。(2)(2)指数形式。注意字母指数形式。注意字母e e之前必须有数字,且之前必须有数字,且e e后面的指数必须为后面的指数必须为整数整数(zhngsh)(zhngsh)。如:。如:123e3123e3代表代表123123103 103 。 “ “规范化的指数形式规范化的指数形式”:即在字母:即在字母e e之前的小数部分,小数点左之前的小数部分,小数点左边应有一位(且只能有一位)非零的数字。一个实数在用指数形边应有一位(且只能有一位)非零的数字。一个实数在用指数形式输出时,是按规范化的指数形式输出的。式输出时,是按规范化的指数形式输出的。第16页/共42页第十七页,共42页。实型数据实型数据类型类型比特数比特数有效数字有效数字数值范围数值范围floatdoublelong double3264128671516181910-38103810-3081030810-49321049322. 实型变量实型变量(binling)如右图:实数如右图:实数3.141593.14159在内存中的在内存中的存放形式。系统把一个存放形式。系统把一个实型实型数据分数据分成成小数小数部分和部分和指数指数部分,分别存放部分,分别存放。指数部分采用。指数部分采用规范化规范化的指数形式的指数形式。数符数符小数部小数部分分指数部分指数部分.314159 101(1)实型数据在内存中的存放形式)实型数据在内存中的存放形式常用的微机系统中一个实型数据在内存占常用的微机系统中一个实型数据在内存占4个字节个字节(32位位)。与整型数据的存储。与整型数据的存储(cn ch)方式不同,实型数据是按照指数方式不同,实型数据是按照指数形式存储形式存储(cn ch)的。的。(2 2)实型变量的分类)实型变量的分类(fn li)(fn li) 实型变量分为单精度实型变量分为单精度(float(float型型) )、双精度、双精度(double(double型型) )和长双精度型和长双精度型(long double)(long double)三类。见下表:三类。见下表:(3 3)实型数据的舍入误差)实型数据的舍入误差 由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去。由此可能会产生一些误差。,在有效位以外的数字将被舍去。由此可能会产生一些误差。第17页/共42页第十八页,共42页。许多许多C编译系统将实型常量作为双精度来处理编译系统将实型常量作为双精度来处理(chl),可以将一个实型常量可以赋给一个,可以将一个实型常量可以赋给一个float型、型、double型或型或long double变量。变量。如:如: float a; a = 111111.111; 由于由于float型变量只能接收型变量只能接收7位有效数字,因此后两位小位有效数字,因此后两位小数不起作用。若数不起作用。若a改为改为double型,则能全部接收。若将型,则能全部接收。若将实型常量赋给实型常量赋给float型变量,其运算速度慢,为提高速度型变量,其运算速度慢,为提高速度,可在常量后加上,可在常量后加上f或或F。 3. 实型常量实型常量(chngling)的类型的类型第18页/共42页第十九页,共42页。(五)字符型数据(五)字符型数据1. 字符常量字符常量C的字符常量是用单引号括起来的一个单字的字符常量是用单引号括起来的一个单字符,如符,如a 。除了以上形式的字符常量外,还有一个以除了以上形式的字符常量外,还有一个以“”开头的特殊开头的特殊(tsh)的字符常量的字符常量(称为转义字称为转义字符符)。常见的有:。常见的有:字符形式字符形式含含 义义ASCII 码码n换行换行,将当前位置移到下一行开头,将当前位置移到下一行开头tbr水平制表水平制表(跳到下一个(跳到下一个Tab位置)位置)退格退格,将当前位置移到前一列,将当前位置移到前一列109813回车回车,将当前位置移到本行开头,将当前位置移到本行开头f换页换页,将当前位置移到下页开头,将当前位置移到下页开头反斜杠反斜杠,字符,字符“ ”单引号单引号(撇号)字符(撇号)字符”双引号双引号字符字符ddd1到到3位位8进制数进制数所代表的字符所代表的字符xhh1到到2位位16进制数进制数所代表的字所代表的字符符12923934第19页/共42页第二十页,共42页。注意:在显示屏上最后得到的结果注意:在显示屏上最后得到的结果(ji gu)与上述打印结果与上述打印结果(ji gu)不同。不同。例例 3.4 转义字符的使用转义字符的使用(shyng)。main( ) printf( “ ab c t de rftgn ” ); printf( “ htibbj k ” ); 程序运行时在程序运行时在打印机打印机上得到以下结果:上得到以下结果:fab c gdeh jik第20页/共42页第二十一页,共42页。2. 字符变量字符变量字符型变量用来存放字符常量。字符型变量用来存放字符常量。注:一个字符变量只能注:一个字符变量只能(zh nn)放一个字符。一个放一个字符。一个字符变量在内存中占一个字节例如:字符变量在内存中占一个字节例如:char c1,c2;c1=a; c2=b;3. 字符数据在内存中的存储形式字符数据在内存中的存储形式(xngsh)及其使用及其使用方法方法 将一个字符常量放到一个字符变量中,实际上并将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字不是把该字符本身放到内存单元中去,而是将该字符的相应的符的相应的ASCII代码放到存储单元中。代码放到存储单元中。例如:字符例如:字符a的的ASCII代码代码(di m)为为97,b为为98,在内存中变量,在内存中变量c1、c2的值,见右图的值,见右图(a)所示;实际上是以二进制形式存放的,见右图所示;实际上是以二进制形式存放的,见右图(b)所示。所示。9798(a)c1c20110000101100010(b)第21页/共42页第二十二页,共42页。例例 3.5 向字符变量向字符变量(binling)赋以赋以整数。整数。main ( ) char c1 , c2; c 1 = 97; c 2 = 98 ; printf (“ %c %c n ”,c1,c2); printf (“ %d %d n ”,c1,c2 ); 程序运行的结果程序运行的结果(ji gu): a b 97 98可以看到:字符型数据和整型数据是可以看到:字符型数据和整型数据是通用的。它们既可以用字符形式输出通用的。它们既可以用字符形式输出(用(用%c),也可以用整数形式输出(),也可以用整数形式输出(%d)。)。注意:字符数据只占一个字节,它只注意:字符数据只占一个字节,它只能存放能存放0 255范围内的一个整数。范围内的一个整数。例例 3.6 大小写字母的转换大小写字母的转换(zhunhun)。main ( )char c1,c2; c1 = a ; c2 = b ; c1 = c1- 32; c2 = c2 - 32; printf (“ %c %c “,c1,c2); 运行结果为:运行结果为: A B 该程序的作用:将两个小写字母该程序的作用:将两个小写字母a和和b转转换成大写字母换成大写字母A和和B。(从。(从ASCII代代码表中可以看到一个小写字母比它码表中可以看到一个小写字母比它相应的大写字母的相应的大写字母的ASCII码大码大32。)。)注意:注意:字符型字符型数据与数据与整型整型数据可以数据可以互相赋值互相赋值。举例:举例:第22页/共42页第二十三页,共42页。4.4.字符串常量字符串常量字符常量是由一对单引号括起来的单个字符。而字符串字符常量是由一对单引号括起来的单个字符。而字符串常量是由一对双引号括起来的字符序列。常量是由一对双引号括起来的字符序列。如:如:“How do you do ”, “CHINA” ; “How do you do ”, “CHINA” ; 都是字符串常量。都是字符串常量。可以可以(ky)(ky)输出一个字符串,如:输出一个字符串,如:printf (“How do you printf (“How do you do ”)do ”);注:不要将字符常量和字符串常量混淆。注:不要将字符常量和字符串常量混淆。aa是字符常量,是字符常量,“a”“a”是字符串常量,二者不同是字符串常量,二者不同 。例如设例如设c c为字符变量:为字符变量:char c;char c; 则则 :c=a; c=a; 正确正确 c=“a”; c=“a”; 错错误误 也就是说不能把一个字符串赋给一个字符变量。也就是说不能把一个字符串赋给一个字符变量。 第23页/共42页第二十四页,共42页。C规定:在每一个字符规定:在每一个字符(z f)串的结尾加一个串的结尾加一个“字符字符(z f)串结束标志串结束标志”,以便系统据此判断字符,以便系统据此判断字符(z f)串是否结束串是否结束。C规定以字符规定以字符(z f)0作为字符作为字符(z f)串结束标志。如串结束标志。如:“CHINA”,实际上是在内存中是:,实际上是在内存中是:C H I N A 0它的长度不是它的长度不是5个字符,而是个字符,而是6个字符,最后一个字符为个字符,最后一个字符为0。但在输出时不输出但在输出时不输出0。所以。所以(suy)字符串字符串“a”,实际上是,实际上是包含包含2个字符:个字符:a和和0,因此,把它赋给,因此,把它赋给 只能容纳一个字只能容纳一个字符的字符变量符的字符变量c :c=“a”; 显然是不行的。显然是不行的。第24页/共42页第二十五页,共42页。(六)各类数值(shz)型数据间的混合运算整型和实型数据可以混合运算,字符型数据可以和整型通用,因此,整型和实型数据可以混合运算,字符型数据可以和整型通用,因此,整型、实型、字符型数据间可以混合运算。例如:整型、实型、字符型数据间可以混合运算。例如: 10 + a + 1.5 -8765.1234 * b 是合法的。是合法的。 在进行运算时,不同类型的数据要先转换成同一类型(系统自动完成在进行运算时,不同类型的数据要先转换成同一类型(系统自动完成(wn chng),无需人工干预),按照下图进行运算:,无需人工干预),按照下图进行运算: 高高 低低intunsignedlongdoublefloatchar,short注意注意(zh y):箭头方向只表示数据:箭头方向只表示数据类型级别的高低,由低向高转换。类型级别的高低,由低向高转换。不要理解为不要理解为int型先转换成型先转换成unsigned int型,再转换成型,再转换成long型,再转成型,再转成double型。型。上述的类型转换是由系统自动进行上述的类型转换是由系统自动进行的。的。第25页/共42页第二十六页,共42页。运算符和表达式运算符和表达式(一)(一) C运算符简介运算符简介(jin ji)(二)算术运算符和算术表达式(二)算术运算符和算术表达式(三)赋值运算符和赋值表达式(三)赋值运算符和赋值表达式(四)强制类型转换运算符(四)强制类型转换运算符(五)逗号运算符和逗号表达式(五)逗号运算符和逗号表达式第26页/共42页第二十七页,共42页。(一)(一)C运算符简介运算符简介(jin ji):C的运算符有以下几类:的运算符有以下几类:1、算术运算符、算术运算符 8、指针运算符、指针运算符2、关系运算符、关系运算符 9、求字节数运算符、求字节数运算符3、逻辑运算符、逻辑运算符 10、强制类型转换运算符、强制类型转换运算符4、位运算符、位运算符 11、分量运算符、分量运算符5、赋值运算符、赋值运算符 12、下标、下标(xi bio)运算符运算符6、条件运算符、条件运算符 13、其他、其他7、逗号运算符、逗号运算符第27页/共42页第二十八页,共42页。1、基本的算术运算符:、基本的算术运算符: (加法运算符,或正值运算符。如:(加法运算符,或正值运算符。如:3+5、+3) (减法运算符,或负值运算符。如:(减法运算符,或负值运算符。如:5-2、-3) * (乘法运算符。如:(乘法运算符。如:3*5) / (除法运算符。如:(除法运算符。如:5/3) % (模运算符,或称求余运算符,(模运算符,或称求余运算符,%两侧均应为两侧均应为整型数据,如:整型数据,如:7%4的值为的值为3)需要说明的是:两个需要说明的是:两个(lin )整数相除的结果为整整数相除的结果为整数,但是,如果除数或被除数中有一个为负值,则数,但是,如果除数或被除数中有一个为负值,则舍入的方向是不固定的。多数机器采取舍入的方向是不固定的。多数机器采取“向零取整向零取整”的方法,如:的方法,如:-5/3=-1,取整后向零靠拢。,取整后向零靠拢。(二) 算术(sunsh)运算符和算术(sunsh)表达式 第28页/共42页第二十九页,共42页。2、算术表达式和运算符的优先级与结合性、算术表达式和运算符的优先级与结合性算术表达式:用算术运算符和括号将运算对象(也称算术表达式:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合操作数)连接起来的、符合C语法规则语法规则(guz)的式子。的式子。运算对象包括常量、变量、函数等。运算对象包括常量、变量、函数等。例如,例如,a -b * c 是一个合法的是一个合法的C算术表达式。算术表达式。C规定了各种运算符的优先级,上述表达式中,乘号优先于规定了各种运算符的优先级,上述表达式中,乘号优先于减号,因此,相当于减号,因此,相当于a -( b*c )。如果在一个运算对象两侧的运算。如果在一个运算对象两侧的运算符的优先级别符的优先级别(jbi)相同,如:相同,如:a - b + c ,则按规定的则按规定的“结合方向结合方向”处理。处理。C规定了各种运算符的结合方向(结合性),算术运算符的规定了各种运算符的结合方向(结合性),算术运算符的结合方向为结合方向为“自左至右自左至右”,即先左后右,因此,即先左后右,因此b先与减号结合,先与减号结合,执行执行a-b的运算,再执行加的运算,再执行加c的运算。的运算。第29页/共42页第三十页,共42页。3、自增、自减运算符、自增、自减运算符作用是使变量的值增作用是使变量的值增1或减或减1。如:如: + i ; - i ; (在使用在使用i之前,先使之前,先使i的值加的值加(减减)1) i+ ; i- ; (在使用在使用i之后,使之后,使i的值加的值加(减减)1) 如果如果i的原值等于的原值等于(dngy)3,则执行下面的赋值语句:,则执行下面的赋值语句:(1)、j=+i; (i的值先变成的值先变成4,再赋给,再赋给j,j的值为的值为4) (2)、j=i+; (先将先将i的值的值3赋给赋给j,j的值为的值为3,然后,然后i变为变为4)注意:注意:(1)自增运算符自增运算符(+)和自减运算符和自减运算符(-),只能用于变量,而不能,只能用于变量,而不能用于常量或表达式。如用于常量或表达式。如5+或或(a+b)+都是不合法的。都是不合法的。(2)+和和-结合方向是结合方向是“自右至左自右至左”。需知:符号运算符和。需知:符号运算符和“+”运算符同优先级,其结合方向也为运算符同优先级,其结合方向也为“自右至左自右至左”。注注: -(i+)是先用是先用i的原值的原值3加上负号加上负号(f ho)输出输出-3,再对,再对i加加1,不要认为先加完,不要认为先加完1后再加负号后再加负号(f ho),输出,输出-4,这是不对,这是不对的。的。第30页/共42页第三十一页,共42页。如果如果i的原值等于的原值等于3,则:,则:(1) 避免出现歧义。如:避免出现歧义。如:i+i+i+应该写成:应该写成:i=3 ; a=i+; b=i+; c=i+; d=a+b+c;(2) 不要写成:不要写成:i+j, 而应写成而应写成: (i+)+j的形式的形式(xngsh)。(3) 不要写成:不要写成:printf (“ %d,%d”,i,i+); 其结果为:其结果为:4,3而应写成而应写成:j=i+; printf (“ %d,%d”, j , i) 其结果为:其结果为:3,44、有关表达式使用中的问题、有关表达式使用中的问题(wnt)说明:说明:第31页/共42页第三十二页,共42页。1、赋值运算、赋值运算(yn sun)符符赋值运算赋值运算(yn sun)符就是符就是“=” ,它的作用是将一,它的作用是将一个数据赋给一个变量。如:个数据赋给一个变量。如:“a=3”的作用是执行一次赋的作用是执行一次赋值操作值操作(或称赋值运算或称赋值运算(yn sun)。把常量。把常量3赋给变量赋给变量a。也可以将一个表达式的值赋给一个变量。也可以将一个表达式的值赋给一个变量。(三)(三) 赋值运算符和赋值表达式赋值运算符和赋值表达式2、变量赋初值、变量赋初值程序中常需要对一些变量预先设置初值。程序中常需要对一些变量预先设置初值。C语言允许语言允许(ynx)在定义变量的同时使变量初始化。如:在定义变量的同时使变量初始化。如:int a = 3; / *指定指定a为整型变量,初值为为整型变量,初值为3 */也可以使被定义的变量的一部分赋初值。如也可以使被定义的变量的一部分赋初值。如 int a, b, c = 5; /*表示指定表示指定a,b,c为整型变量,为整型变量,c的的初值为初值为5*/如果要对几个变量赋予相同的初值,则如果要对几个变量赋予相同的初值,则:int a = 3, b = 3, c = 3 ; ( )int a = b = c = 3 ; ( )或:或:int a,b,c; a=b=c=3;第32页/共42页第三十三页,共42页。3、复合的赋值运算符复合的赋值运算符在赋值符在赋值符“=”之前加上其他运算符,可以构成复合之前加上其他运算符,可以构成复合的运算符。的运算符。例如,可以有:例如,可以有:a+=3 等价于等价于 a=a+3x*=y+8 等价于等价于 x=x*(y+8) (注意:括号的使用注意:括号的使用) x%=3 等价于等价于 x=x%3凡是二元凡是二元(二目二目)运算符,都可以与赋值符一起组合运算符,都可以与赋值符一起组合成复合赋值符。成复合赋值符。C语言规定可以使用语言规定可以使用10种复合赋值运算种复合赋值运算符:符: +=,- =,*=,/=,%=,=,&=,=,|= ,后,后5种是有关位运算的,将在第种是有关位运算的,将在第12章介绍。章介绍。第33页/共42页第三十四页,共42页。(1)将实型数据将实型数据(包括单、双精度包括单、双精度)赋给整型变量时,舍弃实数的小数部分。赋给整型变量时,舍弃实数的小数部分。(2)将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。变量中。(3)将一个将一个double型数据赋给型数据赋给float变量时,截取其前面变量时,截取其前面7位有效数字,存放位有效数字,存放到到float变量的存储单元变量的存储单元(32位位)中。注意:数值范围中。注意:数值范围(fnwi)不能溢出。不能溢出。(4)字符型数据赋给整型变量时,由于字符只占字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为个字节,而整型变量为2个个字节,因此将字符数据字节,因此将字符数据(8位位)放到整型变量低放到整型变量低8位中。有两种情况:位中。有两种情况:(若字符若字符376)11 11 11 100 0 00 00 00 11 11 11 10c=376c=37611 11 11 101 1 11 11 11 11 11 11 10a、如果所用系统将字符处理、如果所用系统将字符处理为为unsigned charb、如果所用系统将字符处如果所用系统将字符处理为理为signed char4、类型转换、类型转换如果赋值运算符两侧的类型不一致如果赋值运算符两侧的类型不一致(yzh),但都,但都是数值型或字符型时,在赋值时系统会自动进行类型是数值型或字符型时,在赋值时系统会自动进行类型转换。转换。第34页/共42页第三十五页,共42页。(5)将一个将一个int、short、long型数据赋给一个型数据赋给一个char型变量时,只型变量时,只将其低将其低8位原封不动地送到位原封不动地送到char型变量。型变量。(6)将带符号的整型数据将带符号的整型数据int型赋给型赋给long型变量时,要进行符号扩型变量时,要进行符号扩展,将整型的展,将整型的16位送到位送到long型低型低16位中,如果位中,如果int型数据为正,型数据为正,则高则高16位补位补0;反之,则高;反之,则高16位补位补1。 若将一个若将一个long型数据赋给一个型数据赋给一个int型变量时,只将型变量时,只将long型数型数据中低据中低16位原封不动地送到整型变量中。位原封不动地送到整型变量中。(7)将将unsigned int型数据赋给型数据赋给long int型变量时,不存在符号扩型变量时,不存在符号扩展问题,只需将高位补展问题,只需将高位补0即可。即可。(8)将非将非unsigned型数据赋给长度相同型数据赋给长度相同(xin tn)的的unsigned型型变量,也是原样照赋变量,也是原样照赋(连原有的符号位也作为数值一起传送连原有的符号位也作为数值一起传送).第35页/共42页第三十六页,共42页。例例 3.7 有符号有符号(fho)数据传送给无符号数据传送给无符号(fho)变量:变量:main( ) unsigned a; int b=-1; a = b ; printf (“ %u ” , a ); 运行结果为:运行结果为:655351 1 11 11 11 11 11 11 1111 11 11 11 11 11 11 11ba赋值情况见下图:如果赋值情况见下图:如果b为为正值,且在正值,且在032767之间,之间,则赋值后数值不变。则赋值后数值不变。总结:不同类型的整型数据间的赋值归根到底就总结:不同类型的整型数据间的赋值归根到底就是一条是一条(y tio):按存储单元中的存储形式直接传:按存储单元中的存储形式直接传送。送。第36页/共42页第三十七页,共42页。5、赋值表达式、赋值表达式 由赋值运算符将一个由赋值运算符将一个(y )变量和一个变量和一个(y )表达表达式连接起来的式子称为式连接起来的式子称为“赋值表达式赋值表达式”。它的一般形式为:它的一般形式为:也可以也可以(ky)是赋值表达式是赋值表达式如:如: a = (b = 5) ; 赋值表达式也可以包含复合的赋值运算符。如:赋值表达式也可以包含复合的赋值运算符。如:a+=a-=a*a 如果如果a的初值为的初值为12,此,此赋值表达式的求解步骤如下:赋值表达式的求解步骤如下:(1)先进行先进行“a-=a*a”的运算,它相当于的运算,它相当于a=a-a*a=12-144=-132。 (2)再进行再进行“a+=-132”的运算,相当于的运算,相当于a=a+(-132)=-132-132=-264。将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且(r qi)可以以表达式形式出现在其它语句可以以表达式形式出现在其它语句(如输出语句、循环语句等如输出语句、循环语句等)中,如:中,如:printf (“ %d ” , a = b ); 如果如果b=3,则输出,则输出a的值也为的值也为3。在一个语句中完成了赋值。在一个语句中完成了赋值和输出双重功能。和输出双重功能。第37页/共42页第三十八页,共42页。(四)强制类型转换运算符(四)强制类型转换运算符 其一般形式为:其一般形式为: (类型名(类型名)(表达式表达式)注:表达式应该用括号括起来。如果写成:注:表达式应该用括号括起来。如果写成:(int)x+y则只将则只将x转换成整型,然后与转换成整型,然后与y相加相加。正确写法是:正确写法是:(int)(x+y) /*将将x+y的值转的值转换成整型换成整型*/需要需要(xyo)说明的是:在强制类型转换时说明的是:在强制类型转换时,得到一个所需类型的中间变量,原来变量,得到一个所需类型的中间变量,原来变量的类型未发生变化。的类型未发生变化。例例 3.8 强制类型转换。强制类型转换。main ( ) float x ; int i; x = 3.6; i = (int)x; printf (“ x = %f , i = %d ” , x, i ); 运行结果运行结果(ji gu):x = 3.600000 , i = 3x类型仍为类型仍为float型,值仍等于型,值仍等于3.6。从上可知,有两种类从上可知,有两种类型转换,一种是在运算时型转换,一种是在运算时不必用户指定,系统自动不必用户指定,系统自动进行进行(jnxng)的类型转换,的类型转换,如如3+6.5。另一种是强制类。另一种是强制类型转换。型转换。第38页/共42页第三十九页,共42页。(五)逗号运算符和逗号表达式(五)逗号运算符和逗号表达式C语言提供一种特殊的运算符语言提供一种特殊的运算符逗号运逗号运算符。用它将两个表达式连接起来。如:算符。用它将两个表达式连接起来。如: 3+5,6+8 称为称为“逗号表达式逗号表达式”,又称为,又称为“顺序顺序(shnx)求值运算符求值运算符”。逗号表达式一般形式为:逗号表达式一般形式为: 表达式表达式1,表达式表达式2,表达式表达式n逗号表达式的求解过程:先求解表达式逗号表达式的求解过程:先求解表达式1,再,再求解表达式求解表达式2,再求解表达式,再求解表达式n,整个逗号,整个逗号表达式的值是表达式表达式的值是表达式n的值。的值。如:如: “3+5,6+8”的值为的值为14。一个逗号表达式又可以与另一个表达式组成一一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如:个新的逗号表达式,如: (a=3*5,a*4),a+5 第39页/共42页第四十页,共42页。逗号运算符是所有运算符中级别逗号运算符是所有运算符中级别(jbi)最低的。因此最低的。因此,下面两个表达式中的,下面两个表达式中的x值是不同的:值是不同的: 1、x=(a=3,6*3) 赋值表达式赋值表达式2、x=a=3,6*a 逗号表达式逗号表达式注意:注意:1、逗号表达式最常用于循环语句、逗号表达式最常用于循环语句(for语句语句)中。中。2、并不是任何地方出现的逗号都是作为逗号运算符。、并不是任何地方出现的逗号都是作为逗号运算符。如:如:printf (“%d,%d,%d”,a,b,c); “a,b,c”并不是一个逗号表达式。并不是一个逗号表达式。第40页/共42页第四十一页,共42页。本章本章(bn zhn)小小结结 在本章在本章(bn zhn)中我们主要介绍了两个大问中我们主要介绍了两个大问题:数据类型和运算符与表达式题:数据类型和运算符与表达式1C语言中有丰富的数据类型,本章主要介绍了基本类型中的语言中有丰富的数据类型,本章主要介绍了基本类型中的整型、实型和字符型,以及这三种整型、实型和字符型,以及这三种(sn zhn)类型的常量与变量类型的常量与变量的定义与应用。的定义与应用。2C语言中有丰富的运算符,本章主要介绍了算术运算语言中有丰富的运算符,本章主要介绍了算术运算符、赋值运算符、强制类型转换运算符以及逗号运算符符、赋值运算符、强制类型转换运算符以及逗号运算符,要求同学们在正确使用上述运算符的同时,要求同学们在正确使用上述运算符的同时,要注意运要注意运算符的优先级与结合方向,这也是本章的重点与难点算符的优先级与结合方向,这也是本章的重点与难点。第41页/共42页第四十二页,共42页。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!