程序设计基础课件第2章(NXPowerLite)

上传人:沈*** 文档编号:241635777 上传时间:2024-07-11 格式:PPT 页数:91 大小:545KB
返回 下载 相关 举报
程序设计基础课件第2章(NXPowerLite)_第1页
第1页 / 共91页
程序设计基础课件第2章(NXPowerLite)_第2页
第2页 / 共91页
程序设计基础课件第2章(NXPowerLite)_第3页
第3页 / 共91页
点击查看更多>>
资源描述
第第2 2章章 C C语言基础语言基础北京科技大学北京科技大学 信息学院信息学院C C 语言程序设计语言程序设计2024/7/11本章主要内容本章主要内容l l本章介绍本章介绍C语言基础,包括:语言基础,包括:C语言的字符集和标识符语言的字符集和标识符 数据类型数据类型 常量和变量常量和变量 运算符和表达式运算符和表达式 数据类型转换数据类型转换 C语言的语句类型语言的语句类型l l均是程序设计的基础知识均是程序设计的基础知识22024/7/11应该建立的概念应该建立的概念l l程序是用来处理数据的程序是用来处理数据的l l程序用计算机语言来描述程序用计算机语言来描述l l计算机语言应该具有计算机语言应该具有表达数据表达数据、处理处理数据数据和和程序控制程序控制的功能的功能l l数据有类型,有常量变量数据有类型,有常量变量l l通过运算符和表达式处理数据通过运算符和表达式处理数据32024/7/11C程序的符号系统程序的符号系统l主要内容:主要内容:基本字符基本字符标识符标识符42024/7/11基本字符基本字符 l l大写英文字母大写英文字母:A B C X Y Z l l小写英文字母小写英文字母:a b c x y z l l数字数字:0 1 2 9 l l空白符空白符:空格符、换行符、制表符:空格符、换行符、制表符 l l特殊字符特殊字符:+-*/()_ =!#%.,;:“|&?$52024/7/11 标识符标识符 l l由由字母字母、下划线下划线和和数字数字组成的字符序列组成的字符序列l l用于程序中的变量、符号常量、数组、函用于程序中的变量、符号常量、数组、函数、数据类型等操作对象的数、数据类型等操作对象的名字名字1 1系统定义标识符系统定义标识符具有固定名字和特定含义的标识符具有固定名字和特定含义的标识符分为分为关键字关键字和和预定义标识符预定义标识符 2 2用户定义标识符用户定义标识符 用于对用户使用的变量、数组、函数用于对用户使用的变量、数组、函数等操作对象进行命名等操作对象进行命名 62024/7/11关键字关键字 l l数据类型:数据类型:数据类型:数据类型:intint、charchar、floatfloat、doubledouble、shortshort、longlong、voidvoid、signedsigned、unsignedunsigned、enumenum、structstruct、unionunion、constconst、typedeftypedef、volatilevolatile l l存储类别:存储类别:存储类别:存储类别:autoauto、staticstatic、registerregister、extern extern l l语句命令字:语句命令字:语句命令字:语句命令字:breakbreak、casecase、continuecontinue、defaultdefault、dodo、elseelse、forfor、gotogoto、if if、returnreturn、switchswitch、whilewhile l l运算符:运算符:运算符:运算符:sizeofsizeof 72024/7/11预定义标识符预定义标识符l l系统标准库函数系统标准库函数scanf、printf、putchar、getchar、strcpy、strcmp、sqrt等等l l编译预备处理命令编译预备处理命令include、define等等82024/7/11对标识符的规定对标识符的规定 l l用户定义标识符用户定义标识符必须以必须以字母字母或或下划线下划线“_”“_”开头开头不能含有除字母、数字和下划线不能含有除字母、数字和下划线“_”“_”外的其他字符外的其他字符标识符中大小写字母含义不同标识符中大小写字母含义不同l l关键字关键字必须用小写字母。不允许使用关键必须用小写字母。不允许使用关键字为变量、数组、函数等操作对象命名字为变量、数组、函数等操作对象命名l l预定义标识符预定义标识符允许用户对它们重新定义,允许用户对它们重新定义,当重新定义后将改变它们原来的含义当重新定义后将改变它们原来的含义92024/7/11正确区分标识符正确区分标识符l l正正确确区区分分哪哪些些是是合合法法标标识识符符,哪哪些些是是不不合合法法标标识识符符。其其中中合合法法标标识识符符中中哪哪些些是是关关键键字字,哪哪些些是是预预定定义义标标识识符符,哪哪些些是是用用户户定定义标识符。义标识符。Abc define 2x double studentm+y a#b-4 _1 Whileint let x%y name do w tm Ctrl swicth include 102024/7/11例如:例如:【例【例2.1】计算圆的面积,半径为】计算圆的面积,半径为 5 cm。程序如下:程序如下:void main()float r r,areaarea;r r=5 5;areaarea=3.143.14*r r*r r;printf(%fn,areaarea);运算结果是输出运算结果是输出运算结果是输出运算结果是输出圆的面积:圆的面积:圆的面积:圆的面积:78.50000078.500000程序中用到的数据:程序中用到的数据:r、area、5、3.14对数据进行的运算:对数据进行的运算:*、=112024/7/11分析:分析:计算机操作处理时,首先要解决数据的存放:计算机操作处理时,首先要解决数据的存放:l l事先要在内存中给半径事先要在内存中给半径 r 和运算结果和运算结果 area 开辟存储空间,存放它们的值。开辟存储空间,存放它们的值。应该留多应该留多大的地方来存放它们的值?大的地方来存放它们的值?l l数据数据 5 和和 3.14 与与 r、area 不同,它们是在不同,它们是在编写程序时就给出确定的值,在运算过程编写程序时就给出确定的值,在运算过程中不会改变。中不会改变。这样的数计算机怎么处理?这样的数计算机怎么处理?l l对对整数整数 5 和和小数小数3.14,计算机,计算机存放时是否存放时是否有区别?有区别?涉及数据类型涉及数据类型的基本知识的基本知识122024/7/11C语言的数据类型语言的数据类型 C数据类型数据类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型枚举类型枚举类型整型整型整型整型 字符型字符型字符型字符型 实实实实型型型型(浮浮浮浮点点点点型型型型)空类型空类型空类型空类型单精度型单精度型单精度型单精度型 双精度型双精度型双精度型双精度型 基本类型基本类型基本类型基本类型指针类型指针类型构造类型构造类型本章讨论本章讨论本章讨论本章讨论基本类型数据基本类型数据基本类型数据基本类型数据132024/7/112.1.1 整型数据整型数据 1整型数据的类型整型数据的类型 基本整型数据基本整型数据 int,分配分配 4 Byte 短整型数据短整型数据 short int,分配分配 2 Byte 长整型数据长整型数据 long int,分配分配 4 Byte整型数据均以整型数据均以二进制补码二进制补码形式存储形式存储问题:问题:为什么要采用补码?为什么要采用补码?如何表示?如何表示?142024/7/11计算机中正、负数的表示计算机中正、负数的表示 例如:例如:109(1101101)2要区别:要区别:109 和和 109 方法是:方法是:将符号也数码化将符号也数码化即:即:正的符号正的符号 用用 0 表示表示 负的符号负的符号 用用 1 表示表示 计算机中的数表示方法是:计算机中的数表示方法是:符号位符号位二进制数值二进制数值(以以 8bit 为例为例)109 110 1101 0110 1101109 110 1101 1110 1101152024/7/11问题:计算机计算复杂化问题:计算机计算复杂化例如计算:例如计算:(-19)+(+22)1001 0011+0001 0110解决的方法是:解决的方法是:使用使用反码反码或或补码补码的表示方法(按前述的表示方法(按前述表示的编码称为表示的编码称为原码原码),即能将减法一律),即能将减法一律转换为加法。转换为加法。需要判断符号是否相同:需要判断符号是否相同:如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进行绝对值相减行绝对值相减行绝对值相减行绝对值相减162024/7/11原码、反码和补码原码、反码和补码l l正数正数:原码、反码、补码相同原码、反码、补码相同 符号位为符号位为0,数值为对应的二进制数。,数值为对应的二进制数。109 01101101原原=01101101反反=01101101补补l l负数负数:原码原码符号位为符号位为1 1,数值为绝对值的二进制,数值为绝对值的二进制数。数。10911101101原原反码反码符号位为符号位为1 1,数值为绝对值的二进制,数值为绝对值的二进制数各位变反。数各位变反。10910010010反反 补码补码符号位为符号位为1 1,数值为绝对值的二进制,数值为绝对值的二进制数各位变反加数各位变反加1 1。10910010011补补172024/7/11整型数据类型(整型数据类型(Turbo C编译环境)编译环境)l l方括号表示可选项方括号表示可选项l lint 分配分配2 Byte,long分配分配4 Byte类型名称类型名称类型名称类型名称类型符类型符类型符类型符bitbit取值范围取值范围取值范围取值范围整型整型整型整型(短整型短整型短整型短整型)signed signed intint signed signed shortshort intint 1616-2 215152 21515-1-1(-32768(-3276832767)32767)无符号整型无符号整型无符号整型无符号整型unsignedunsigned intint 16160 0 2 21616-1-1(0(065535)65535)长整型长整型长整型长整型 signed signed longlong intint 3232-2-231312 23131-1-1无符号长整型无符号长整型无符号长整型无符号长整型 unsigned longunsigned long intint 32320 0 2 23232-1-1182024/7/11说明说明1:有符号和无符号整型数据:有符号和无符号整型数据 有符号的整型数据有符号的整型数据 signed int 无符号的整型数据无符号的整型数据 unsigned int区别是将区别是将最高位最高位看作符号位还是数据位看作符号位还是数据位例如:例如:1111 1111 1010 1000作为作为有符号数有符号数使用时,最高为符号位使用时,最高为符号位为负数,值是:为负数,值是:-88(再求一次补)(再求一次补)作为作为无符号数无符号数使用时,最高为数据位使用时,最高为数据位为无符号的数,值是:为无符号的数,值是:65448192024/7/11例如:例如:main()unsigned int m;m=-1-1;printf(nm=%d%dn,m);printf(m=%u%un,m);输出结果:输出结果:m=-1m=4294967295按有符号数输出按有符号数输出按无符号数输出按无符号数输出202024/7/11说明说明2:整数溢出问题:超出范围:整数溢出问题:超出范围系统为系统为系统为系统为 shortshort 型数型数型数型数分配的存储空间为分配的存储空间为分配的存储空间为分配的存储空间为:16 16 bit bit(2Byte)(2Byte)=2=21515-1=32767-1=327670 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0=-2=-21515=-32768=-32768表示范围:表示范围:-32768-32768 3276732767使用中注意数的范围使用中注意数的范围有符号有符号有符号有符号intint型整数的最型整数的最型整数的最型整数的最大大值值值值有符号有符号有符号有符号intint型整数的最型整数的最型整数的最型整数的最小小值值值值212024/7/1122例如:例如:void main()void main()short short intint a,b;a,b;a=a=3276732767;b=a+1;b=a+1;printf(printf(“a a=%=%dnbdnb=%dn=%dn“,a,b);,a,b);输出结果:输出结果:a=b=32767-32768222024/7/112.1.2 实型数据实型数据 1实型数据的类型实型数据的类型 单精度实型数据单精度实型数据 float,分配分配4 Byte 双精度实型数据双精度实型数据double,分配,分配 8 Byte2实型数据的存储实型数据的存储 单精度实型单精度实型单精度实型单精度实型指数部分指数部分指数部分指数部分小数部分小数部分小数部分小数部分 小数的符号位小数的符号位指数的符号位指数的符号位232024/7/11实型数据的类型及规定实型数据的类型及规定 l lC C标准并未具体规定各种实型数据所占字节数,也不规标准并未具体规定各种实型数据所占字节数,也不规标准并未具体规定各种实型数据所占字节数,也不规标准并未具体规定各种实型数据所占字节数,也不规定具体小数和指数部分的位数。定具体小数和指数部分的位数。定具体小数和指数部分的位数。定具体小数和指数部分的位数。l l一般而言,小数部分位数多,数据表示的有效数字多,一般而言,小数部分位数多,数据表示的有效数字多,一般而言,小数部分位数多,数据表示的有效数字多,一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。精度就高;而指数部分位数多,则表示的数据范围更大。精度就高;而指数部分位数多,则表示的数据范围更大。精度就高;而指数部分位数多,则表示的数据范围更大。有效数字的意义?有效数字的意义?类型类型类型类型类型符类型符类型符类型符 ByteByte取值范围取值范围取值范围取值范围有效数字有效数字有效数字有效数字单精度型单精度型单精度型单精度型 floatfloat4 4-3.4*10-3.4*1038 38 3.4*103.4*1038387 78 8 位位位位双精度型双精度型双精度型双精度型 doubledouble8 8-1.7*10-1.7*10308 308 1.7*101.7*1030830815151616位位位位242024/7/1125例如:例如:void main()float x=12345.54321;double y=445566778899.987654321;printf(“x=%fny=%fn“,a,b);输出结果:输出结果:x=y=有效数字的具体含义有效数字的具体含义12345.54296912345.542969445566778899.987670445566778899.987670252024/7/112.1.3 字符型数据字符型数据 l l字符型数据字符型数据char,分配分配 1 Byte l l字符型数据是指字母、数字、各种符号等字符型数据是指字母、数字、各种符号等用用ASCII值表示的字符值表示的字符l l例如例如 a 是一个是一个char类型数据,称作字符类型数据,称作字符常量,存储:常量,存储:0 1 1 0 0 0 0 12.1.4 2.1.4 空类型空类型l l空类型空类型voidl l通常与指针或函数结合使用通常与指针或函数结合使用 262024/7/11练习题练习题l l下面标识符中不合法下面标识符中不合法下面标识符中不合法下面标识符中不合法的用户标识符是的用户标识符是的用户标识符是的用户标识符是_A A、float float B B、_123 _123 C C、Sun Sun D D、XYZXYZ272024/7/11练习题练习题数据类型数据类型数据类型数据类型数据长度数据长度数据长度数据长度intintshortshortlonglongcharcharfloatfloatdoubledouble4 42 24 41 14 48 8282024/7/11常量、变量与标准函数常量、变量与标准函数 l主要内容:主要内容:常量常量 变量变量 标准库函数标准库函数292024/7/11 常量常量 l l在运行程序的过程中值保持不变的量在运行程序的过程中值保持不变的量1整型常量整型常量 十进制十进制十进制十进制:0909 八进制八进制八进制八进制:0707,以,以,以,以 0 0开头开头开头开头 十六进制十六进制十六进制十六进制:0909,AF/afAF/af,以以以以 0 0 x x或或或或 0 0X X 开头开头开头开头例如:例如:100 -8 0 +123100 -8 0 +123010 024 0100 073010 024 0100 0730 0 x38 0 x10 0X10 0XFF 0 x0ax38 0 x10 0X10 0XFF 0 x0a302024/7/111.整型常量整型常量l l整型常量的类型:整型常量的类型:根据值大小默认类型。根据值大小默认类型。整型常量后面加整型常量后面加l或或L,则认为是则认为是long int型型 例如:例如:123L、0L、432l、0 x100l注意:注意:l l十六进制常量中可以使用大写字母十六进制常量中可以使用大写字母AF,也可以使用小写字母也可以使用小写字母af。l l八进制常量中不能出现数字八进制常量中不能出现数字 8 或或 9例如:例如:018、0921非法非法312024/7/112.实型常量实型常量 十进制形式十进制形式十进制形式十进制形式 1.0 1.+12.0 -12.0 0.01.0 1.+12.0 -12.0 0.0 指数形式指数形式指数形式指数形式 1 1e3 1.8e-3 -123E-6 -.1E-3e3 1.8e-3 -123E-6 -.1E-3等价于:等价于:等价于:等价于:1101103 3 1.810 1.810-3-3 -1231012310-6-6 -0.1100.110-3-3指数只能是整数,而尾数则可以是整数也可以是指数只能是整数,而尾数则可以是整数也可以是小数小数,无论指数或尾数均不能省略,无论指数或尾数均不能省略例如:例如:1 1e e、E.5E.5、E-3E-3 非法非法实型常量的类型:默认为实型常量的类型:默认为doubledouble型,后面加型,后面加F F(或或f f),),则强调表示该数是则强调表示该数是float类型类型例如:例如:3.5f f、1e2F F 322024/7/113.字符型常量字符型常量 l l可视字符常量可视字符常量可视字符常量可视字符常量 单引号括起来的单个可视字符单引号括起来的单个可视字符单引号括起来的单个可视字符单引号括起来的单个可视字符例如:例如:例如:例如:aa、A A、+、33、等等等等 l l转义字符常量(表转义字符常量(表转义字符常量(表转义字符常量(表2-22-2)单引号括起来的单引号括起来的单引号括起来的单引号括起来的 与与与与可视字符可视字符可视字符可视字符组合,例如:组合,例如:组合,例如:组合,例如:0000字符串结束标志字符串结束标志字符串结束标志字符串结束标志 n n回车换行回车换行回车换行回车换行 t t跳到下一个输出位置跳到下一个输出位置跳到下一个输出位置跳到下一个输出位置 双引号字符双引号字符双引号字符双引号字符 dddddd dddddd为为为为1 1到到到到3 3位八进制数所代表的字符位八进制数所代表的字符位八进制数所代表的字符位八进制数所代表的字符 xhhxhh hhhh为为为为1 1到到到到2 2位十六进制数所代表的字符位十六进制数所代表的字符位十六进制数所代表的字符位十六进制数所代表的字符332024/7/114.字符串常量字符串常量 l l用双引号括起的一个字符序列用双引号括起的一个字符序列 例如:例如:ABC、123、a、nt nGood morningl l字符串常量的长度字符串常量的长度:所包含的字符个数所包含的字符个数 l l字符串常量的存储方式:字符串常量的存储方式:n nGG o o o o d dmm o o r rn ni i n n g g 00a a00所占存储单元数:所占存储单元数:串长度串长度1例如:例如:字符串字符串结束标记结束标记342024/7/1135说明说明 字符串常量与字符常量字符串常量与字符常量 字符串字符串字符串字符串字符字符字符字符标志标志标志标志 长度长度长度长度多个字符多个字符多个字符多个字符单个字符单个字符单个字符单个字符内存内存内存内存字符个数字符个数字符个数字符个数+1+11 1个字节个字节个字节个字节变量变量变量变量无字符串变量无字符串变量无字符串变量无字符串变量有字符变量有字符变量有字符变量有字符变量转义字符转义字符转义字符转义字符 支持支持支持支持,特别特别特别特别 支持支持支持支持,特别特别特别特别 352024/7/115.符号常量符号常量 l l以标识符来代表的常量以标识符来代表的常量以标识符来代表的常量以标识符来代表的常量l l事先编译预处理命令事先编译预处理命令事先编译预处理命令事先编译预处理命令definedefine定义定义定义定义l l编译时先由系统替换为它所代表的常量,再进行编译时先由系统替换为它所代表的常量,再进行编译时先由系统替换为它所代表的常量,再进行编译时先由系统替换为它所代表的常量,再进行编译编译编译编译例如:例如:例如:例如:#define define LENLEN 2.52.5main()main()float a,b;float a,b;a=2*3.14*a=2*3.14*LENLEN;b=3.14*b=3.14*LENLEN*LENLEN;printf(aprintf(a=%f,b=%fn,a,b);=%f,b=%fn,a,b);定义符号常量定义符号常量定义符号常量定义符号常量使用符号常量使用符号常量使用符号常量使用符号常量编译前系统进行替换编译前系统进行替换编译前系统进行替换编译前系统进行替换362024/7/115.符号常量符号常量main()float a,b;a=2*3.14*2.5;b=3.14*2.5*2.5;printf(a=%f,b=%fn,a,b);define是编译预处理命令,必须以是编译预处理命令,必须以“#”开开头头编译预处理命令在第编译预处理命令在第7章讨论。章讨论。替换为替换为替换为替换为372024/7/11变量变量 1.变量的有关概念变量的有关概念l l在程序运行过程中,其值改变的数据,称为变量,在程序运行过程中,其值改变的数据,称为变量,在程序运行过程中,其值改变的数据,称为变量,在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为变量用标识符表示,称为变量用标识符表示,称为变量用标识符表示,称为变量名变量名变量名变量名。l l变量必须变量必须变量必须变量必须“先定义后使用先定义后使用先定义后使用先定义后使用”l l系统为变量分配存储单元,存储变量的值。系统为变量分配存储单元,存储变量的值。系统为变量分配存储单元,存储变量的值。系统为变量分配存储单元,存储变量的值。l l编写程序时通过变量名来存、取编写程序时通过变量名来存、取编写程序时通过变量名来存、取编写程序时通过变量名来存、取变量值变量值变量值变量值。a a510510变量值变量值变量值变量值为变量分配的为变量分配的为变量分配的为变量分配的存储单元存储单元存储单元存储单元变量名变量名变量名变量名例如:例如:intint a a;a=a=5 510;10;382024/7/112.变量定义变量定义变量定义的一般格式:变量定义的一般格式:数据类型说明符数据类型说明符 变量列表变量列表;例如:例如:int i,j;long k,m;float x,y;char ch1,ch2;必须使用合法的标识符作变量名必须使用合法的标识符作变量名不能使用关键字为变量命名不能使用关键字为变量命名392024/7/113.变量的初始化:变量的初始化:允许在说明变量的时候对变量赋初值。允许在说明变量的时候对变量赋初值。例如:例如:int a=5,b=10+2;double x=23.568,y;char ch1=a,ch2=66,ch3=142;表示定义变量并对变量存储单元赋值。表示定义变量并对变量存储单元赋值。错误的初始化:错误的初始化:int a=3+b,b=5;float m=n=23.16;修改后就对了:修改后就对了:float n,m=n=23.16;402024/7/11标准库函数标准库函数l l由由C编编译译系系统统定定义义的的一一种种函函数数,存存放放在在系系统函数库中,用户可以根据需要随时调用统函数库中,用户可以根据需要随时调用l l常用函数常用函数如:如:如:如:printfprintf、scanfscanf、fabsfabs、sqrtsqrt、sinsin、(常用数学函数参见教材常用数学函数参见教材常用数学函数参见教材常用数学函数参见教材 P100 P100 表表表表4-14-1)l l函数调用形式函数调用形式:函数名(参数表)函数名(参数表)例如:例如:putchar(a)sqrt(x)412024/7/11 运算符和表达式运算符和表达式l l主要内容:主要内容:算术运算符和算术表达式算术运算符和算术表达式 赋值运算符和赋值表达式赋值运算符和赋值表达式 关系运算符和关系表达式关系运算符和关系表达式 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 位运算符和位运算表达式位运算符和位运算表达式 条件运算符和条件表达式条件运算符和条件表达式 逗号运算符和逗号表达式逗号运算符和逗号表达式 其他运算符及其运算其他运算符及其运算422024/7/11运算符的有关概念运算符的有关概念l l作用:作用:对运算对象完成规定的操作运算对运算对象完成规定的操作运算l l类型:类型:按运算对象分:按运算对象分:l l单目、双目、三目单目、双目、三目单目、双目、三目单目、双目、三目 按功能分:按功能分:l l算术、赋值、关系、逻辑算术、赋值、关系、逻辑算术、赋值、关系、逻辑算术、赋值、关系、逻辑l l条件、逗号、位、其他条件、逗号、位、其他条件、逗号、位、其他条件、逗号、位、其他432024/7/11运算符的优先级和结合性运算符的优先级和结合性l l优先级优先级 指各种运算符号的运算优先顺序指各种运算符号的运算优先顺序指各种运算符号的运算优先顺序指各种运算符号的运算优先顺序例如:例如:例如:例如:算术运算优先于关系运算算术运算优先于关系运算算术运算优先于关系运算算术运算优先于关系运算 算术运算中先算术运算中先算术运算中先算术运算中先*/*/*/*/后后后后+-+-+-+-l l结合性结合性 指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向 分为:从左向右分为:从左向右分为:从左向右分为:从左向右(左结合左结合左结合左结合)和从右向左和从右向左和从右向左和从右向左(右结合右结合右结合右结合)例如:例如:例如:例如:算术运算符为算术运算符为算术运算符为算术运算符为左结合左结合左结合左结合 a-ba-b+4 4 赋值运算符为赋值运算符为赋值运算符为赋值运算符为右结合右结合右结合右结合 a=b=5a=b=5(C C语言规定见教材语言规定见教材语言规定见教材语言规定见教材 P280 P280 附录附录附录附录A A)442024/7/11本章涉及的运算符本章涉及的运算符+-*/%+-*/%+-*/%+-*/%+-+-+-+-+-+-+-+-=+=-=*=/=%=+=-=*=/=%=+=-=*=/=%=+=-=*=/=%=&=|=!=&|&|&|&|!&|&|&|&|?:?:?:?:,&sizeofsizeofsizeofsizeof(数据类型标识符数据类型标识符数据类型标识符数据类型标识符)类型类型类型类型种类种类种类种类算术运算符算术运算符算术运算符算术运算符赋值运算符赋值运算符赋值运算符赋值运算符关系运算符关系运算符关系运算符关系运算符逻辑运算符逻辑运算符逻辑运算符逻辑运算符位运算符位运算符位运算符位运算符条件运算符条件运算符条件运算符条件运算符逗号运算符逗号运算符逗号运算符逗号运算符其他运算符其他运算符其他运算符其他运算符452024/7/11462024/7/11表达式的有关概念表达式的有关概念l l什么是表达式什么是表达式由由运算符运算符将运算对象连接成的式子,它将运算对象连接成的式子,它描述了一个具体的求值运算过程描述了一个具体的求值运算过程l l计算表达式的值计算表达式的值按照运算符的运算规则求值按照运算符的运算规则求值求值时注意运算符的优先级和结合性求值时注意运算符的优先级和结合性l l表达式值的类型表达式值的类型自动转换自动转换强制转换强制转换 472024/7/11例如:例如:l l表达式:表达式:150+b*2-12.456 b=(+a)-2a/=a*=(a=2)f=abc-a|+b&c+max=ab?a:b a=3,a+=3,a*a 1/(float)a+6 482024/7/11算术运算算术运算l l算术运算符的优先级算术运算符的优先级()+-+-*/%+-同级 同级 同级 单目单目 双目双目 高高高高 低低低低l l没有乘方运算符没有乘方运算符没有乘方运算符没有乘方运算符,要计算,要计算,要计算,要计算a a3 3要写作要写作要写作要写作 a*a*a a*a*a 的连乘,或用标的连乘,或用标的连乘,或用标的连乘,或用标准库函数准库函数准库函数准库函数 pow(apow(a,3),3)l l“/”的运算对象可为各种类型数据,但是当进行两个整型数的运算对象可为各种类型数据,但是当进行两个整型数的运算对象可为各种类型数据,但是当进行两个整型数的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据据相除时,运算结果也是整型数据据相除时,运算结果也是整型数据据相除时,运算结果也是整型数据 l l“%”要求运算对象必须是整型数据,功能是求两数相除的要求运算对象必须是整型数据,功能是求两数相除的要求运算对象必须是整型数据,功能是求两数相除的要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除数的符号相同。余数,余数的符号与被除数的符号相同。余数,余数的符号与被除数的符号相同。余数,余数的符号与被除数的符号相同。例如:例如:5/2=25%2=1492024/7/11编程练习编程练习l l编程将华氏温度转换成摄氏温度。换算公编程将华氏温度转换成摄氏温度。换算公式式:c=5/9(f-32),其中,其中c为摄氏温度,为摄氏温度,f为为华氏温度。华氏温度。l lfloat c,f;f=100;c=(float)5/9(f-32);502024/7/11自增自减运算自增自减运算l l+-是是单目运算符单目运算符l l有前缀和后缀有前缀和后缀两种形式两种形式 前缀形式前缀形式:先自增先自增(自减自减)再引用;再引用;后缀形式后缀形式:先引用再自增先引用再自增(自减自减);l l功能:功能:前缀形式前缀形式 +a a 等价于等价于 a=a+1a=a+1 -a a 等价于等价于 a=a a=a 1 1 后缀形式后缀形式 a+a+等价于等价于 a=a+1a=a+1 a a-等价于等价于 a=a a=a 1 1表达式的值会不同表达式的值会不同512024/7/11例如:例如:当当 a5 时时 +a 表达式的值为表达式的值为 6,且且 a6 a+表达式的值为表达式的值为5,且且 a6 b=+a 等价于等价于 a=a+1;b=a 表达式的值为表达式的值为6,且,且 a=6,b=6 b=a+等价于等价于 b=a;a=a+1 表达式的值为表达式的值为5,且,且 a=6,b=5 522024/7/11说明:说明:l l+和和和和 -的运算对象只能是变量(或运算结果是的运算对象只能是变量(或运算结果是的运算对象只能是变量(或运算结果是的运算对象只能是变量(或运算结果是变量的表达式)变量的表达式)变量的表达式)变量的表达式),不能是常量(或运算结果是数不能是常量(或运算结果是数不能是常量(或运算结果是数不能是常量(或运算结果是数值的表达式)。值的表达式)。值的表达式)。值的表达式)。例如:例如:例如:例如:5+5+、(a+2)+a+2)+不合法。不合法。不合法。不合法。l l具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。例如:例如:例如:例如:a+a+等价于等价于等价于等价于 -(-(a+)a+)l l如果有多个运算符连续出现时,如果有多个运算符连续出现时,如果有多个运算符连续出现时,如果有多个运算符连续出现时,C C系统尽可能多系统尽可能多系统尽可能多系统尽可能多的从左到右将字符组合成一个运算符的从左到右将字符组合成一个运算符的从左到右将字符组合成一个运算符的从左到右将字符组合成一个运算符例如:例如:例如:例如:i+ji+j 等价于等价于等价于等价于 (i+)+ji+)+j -i+-j-i+-j 等价于等价于等价于等价于 -(-(i+)+(-j)i+)+(-j)532024/7/11main()int a=5;printf(%d%dn,a,a+);说明(续):说明(续):l l对函数参数的求值顺序:对函数参数的求值顺序:Turbo C系统先计算最右边的参数值,系统先计算最右边的参数值,再依次计算左面的参数值。再依次计算左面的参数值。【例【例2.5】有多个函数参数且为同一变量自增】有多个函数参数且为同一变量自增的运算处理。的运算处理。输出结果:输出结果:6 5542024/7/11说明(续):说明(续):【例【例2.6】有多个函数参数且为同一变量多次】有多个函数参数且为同一变量多次自增的运算处理。自增的运算处理。main()int a=5;printf(%d%dn,a,(a+)+(a+);输出结果:输出结果:7 11552024/7/11赋值运算赋值运算l l赋值运算符赋值运算符(右结合)右结合)=+=-=*=/=%=&=|=l l赋值表达式赋值表达式 将将表达式的值表达式的值存入存入变量变量对应的内存单元中对应的内存单元中m=12b=(+a)-2 m%=3+n 等价于等价于 m=m%(3+n)x*=(x=5)562024/7/11说明:说明:l l赋值号左边必须是变量,右边可以是赋值号左边必须是变量,右边可以是C语言语言任意合法的表达式任意合法的表达式例如:例如:n=t+210 等价于:等价于:a=(b=(b*c)10)l l赋值号与数学中的等号含义不同赋值号与数学中的等号含义不同例如:例如:数学中数学中 a=b 等价于等价于 b=a C语言中语言中 a=b 不等价于不等价于 b=al l赋值表达式的值:就是左边变量的值赋值表达式的值:就是左边变量的值572024/7/11关系运算关系运算l l关系运算符关系运算符关系运算符关系运算符 (左结合)左结合)左结合)左结合)=!=!=较高较高较高较高 较低较低较低较低l l关系表达式关系表达式关系表达式关系表达式 用关系运算符将运算对象连接成的式子用关系运算符将运算对象连接成的式子用关系运算符将运算对象连接成的式子用关系运算符将运算对象连接成的式子 例如:例如:例如:例如:1212=c c 等价于等价于等价于等价于 a=(b=c)a=(b=c)与与与与 (a=b)=c a=b)=c 不等价不等价不等价不等价l l关系运算符优先于赋值,低于算术关系运算符优先于赋值,低于算术关系运算符优先于赋值,低于算术关系运算符优先于赋值,低于算术582024/7/11说明:说明:l l关系运算的结果应该是关系运算的结果应该是逻辑值逻辑值。C语言用语言用数值数值 1 表示表示逻辑真逻辑真,0 表示表示逻辑假逻辑假例如:例如:75 的值是的值是 1,57 的值是的值是 0 ab的值是的值是 0,ab 的值的值是是1即关系表达式的值:即关系表达式的值:0 或或1 l l实型数实型数可进行大于或小于比较,但通常不可进行大于或小于比较,但通常不进行进行=或或!=的关系运算的关系运算592024/7/11例例#include void main()float a=0.1,b=0.0;int i;for(i=0;i10;i+)b=b+0.01;printf(b=%fn,b);if(a=b)printf(相等相等n);else printf(不相等不相等n);602024/7/11#include#include void main()float a=0.1,b=0.0;int i;for(i=0;i10;i+)b=b+0.01;printf(b=%fn,b);if(fabs(a-b)=z l l逻辑运算符的优先级逻辑运算符的优先级 和结合性:和结合性:!是单目运算符,是单目运算符,右结合右结合,高于算术,高于算术&和和|是双目运算符,是双目运算符,左结合左结合,高于,高于赋值运算符,低于关系运算符赋值运算符,低于关系运算符632024/7/11逻辑运算规则逻辑运算规则l l从左到右依次进行逻辑计算从左到右依次进行逻辑计算运算对象为运算对象为非非0 0表示表示逻辑真逻辑真运算对象为运算对象为 0 0 表示表示逻辑假逻辑假l l逻辑运算的结果为逻辑运算的结果为 0 0 或或 1 1例如设:例如设:a=15,b=0,c=-2 a&b&c 结果为结果为0 a|b|c 结果为结果为1 (a+c)|b&c 结果为结果为1642024/7/11逻辑运算规则(续)逻辑运算规则(续)l l运算按照运算按照从左至右从左至右的顺序进行,一旦能够的顺序进行,一旦能够确定逻辑表达式的值,就立即结束运算确定逻辑表达式的值,就立即结束运算逻辑运算的短路性质逻辑运算的短路性质例如例如设:设:a=1,b=0,c=-2a&b&c(a+)|+b&-c为为 0,运算终止,表达式,运算终止,表达式值值为为 0为非为非0,运算终止,表达式值为,运算终止,表达式值为 1且且a为为2,b为为0,c为为-2(b,c保持原值保持原值)652024/7/11关系与逻辑运算的应用关系与逻辑运算的应用l l表示数学公式表示数学公式abc l l判断判断a,b,c三条线段能否组成一个三角形三条线段能否组成一个三角形 l la,b不同时为负不同时为负 a+bc&a+cb&b+caa=0|b=0!(a0&b0)(a=0)|(a=0&b=0&b=0)a=0)|(a=0&b=0&b=0)ab&bc662024/7/11判断闰年判断闰年#include#include void main()void main()intint year,leap;year,leap;scanf(%d,&year);if if(year%4=0&year%100!=0)|(year%400=0)(year%4=0&year%100!=0)|(year%400=0)printfprintf (%d is a leap year.n,year);year);else else printfprintf (%d is a leap year.n,year);year);672024/7/11位运算位运算l l有兴趣自学有兴趣自学l l不要求不要求682024/7/11条件表达式运算条件表达式运算l l条件运算符:条件运算符:?:l l条件表达式的一般形式条件表达式的一般形式 表达式表达式1?表达式表达式2:表达式表达式3例如:例如:m=10&b-20?a:b x=3+a5?100:200 l lC语言中唯一的语言中唯一的三目运算符三目运算符,要正确区分用,要正确区分用?和和:分隔的表达式分隔的表达式l l涉及条件运算符的优先级与结合性涉及条件运算符的优先级与结合性692024/7/11条件运算符优先级条件运算符优先级l l条件运算符优先级高于赋值、逗号运算符,条件运算符优先级高于赋值、逗号运算符,低于其他运算符低于其他运算符 例如:例如:m=10&b-20?a:b x=3+a5?100:200等价于:等价于:(m=10&b-20)?a:b等价于:等价于:x=(3+a5)?100:200)702024/7/11条件运算符的结合性条件运算符的结合性 l l条件运算符具有条件运算符具有右结合性右结合性l l当一个表达式中出现多个条件运算符时,当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒应该将位于最右边的问号与离它最近的冒号号配对配对,并按这一原则正确区分各条件运,并按这一原则正确区分各条件运算符的运算对象。算符的运算对象。例如:例如:wx?x+w:xy?x:y 与与 wx?x+w:(xy?x:y)等价等价 与与(wx?x+w:xy)?x:y 不等价不等价 712024/7/11逗号表达式运算逗号表达式运算l l逗号表达式的一般形式逗号表达式的一般形式 表达式表达式1,表达式,表达式2,表达式,表达式nl l 逗号表达式的值逗号表达式的值 从左向右,依次对表达式求值,最后得到从左向右,依次对表达式求值,最后得到从左向右,依次对表达式求值,最后得到从左向右,依次对表达式求值,最后得到表表表表达式达式达式达式n n 的值就是逗号表达式的值的值就是逗号表达式的值的值就是逗号表达式的值的值就是逗号表达式的值例如:例如:例如:例如:a=5,a+,a*3 表达式表达式表达式表达式值为值为值为值为 18 18,且,且,且,且a=6 a=6 t=1,t+5,t+表达式表达式表达式表达式值为值为值为值为 1 1,且,且,且,且t=2 t=2 x=(a=3*5,a*4)赋值表达式赋值表达式赋值表达式赋值表达式的值为的值为的值为的值为6060,且,且,且,且x=60,a=15x=60,a=15722024/7/11取地址运算符取地址运算符&为单目运算符为单目运算符 运算对象只能是变量运算对象只能是变量 运算结果是变量的存储地址运算结果是变量的存储地址 例如有定义例如有定义:int a,student;char ch;可以对变量可以对变量a、ch、student 进行进行&运算:运算:&a&ch&student732024/7/11长度运算符长度运算符 sizeof 为单目运算符为单目运算符 运算对象只能是运算对象只能是变量名变量名或或数据类型标识符数据类型标识符 运算结果为该变量或该数据类型的长度运算结果为该变量或该数据类型的长度 main()int a=5;double x;printf(%d%d ,sizeof(intint),sizeof(a a);printf(%d%d ,sizeof(doubledouble),sizeof(x x);printf(%d%dn,sizeof(floatfloat),sizeof(charchar);输出结果:输出结果:4 4 4 4 8 88 8 4 4 1 1742024/7/112.5 运算中数据类型的转换运算中数据类型的转换l l在在C语言中,不同类型的数据可以进行混语言中,不同类型的数据可以进行混合运算。如:合运算。如:25+48.5*A-3.5e+3l l但这些数据首先要转换成相同类型,然后但这些数据首先要转换成相同类型,然后再进行运算再进行运算l l数据类型转换包括数据类型转换包括自动转换自动转换和和强制转换强制转换l l自动转换由自动转换由C语言编译系统自动完成,强语言编译系统自动完成,强制转换则通过特定的运算完成制转换则通过特定的运算完成752024/7/112.5 运算中数据类型的转换运算中数据类型的转换2.5.1 数据类型的自动转换数据类型的自动转换l l转换原则:转换原则:自动将精度低、表示范围小的自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算运算对象类型向精度高、表示范围大的运算对象类型转换对象类型转换 char,shortchar,shortdoubledoublelonglongfloatfloatunsignedunsignedintint高精度高精度高精度高精度低精度低精度低精度低精度例如有定义:例如有定义:int a;char ch;float x,y;表达式:表达式:a-ch*2+35La-ch*2+35.0 x+y水平方向的转换水平方向的转换是一定要进行的,是一定要进行的,如果类型还不一如果类型还不一致再进行垂直方致再进行垂直方向的转换向的转换762024/7/11赋值运算中的类型转换赋值运算中的类型转换 l l=小数部分自动补小数部分自动补小数部分自动补小数部分自动补0 0 l l=自动舍去实型表达式的小数部分(自动舍去实型表达式的小数部分(自动舍去实型表达式的小数部分(自动舍去实型表达式的小数部分(注意不进行注意不进行注意不进行注意不进行四舍五入四舍五入四舍五入四舍五入)l l=l l=自动截取表达式值的低字节赋值,舍去高字节自动截取表达式值的低字节赋值,舍去高字节自动截取表达式值的低字节赋值,舍去高字节自动截取表达式值的低字节赋值,舍去高字节l l=l l=自动给高字节补自动给高字节补自动给高字节补自动给高字节补0 0 或或或或补补补补1 1772024/7/112.5.2 数据类型的强制转换数据类型的强制转换 l l强制转换的一般形式强制转换的一般形式 (类型名类型名)表达式表达式例如:例如:(int)(b+3*x)%3 1/(float)a+6l l注意:注意:(float)22/5 与与 (float)(22/5)不同不同l l错误的类型转换:错误的类型转换:(int)b=a+5 b=int(3*a)782024/7/11l l强制类型转换运算符是单目运算符,其运算对象是紧随其后的操作数,如果要对整个表达式的值进行类型转换,必须给表达式加圆括号l l强制类型转换时,类型名一定要用圆括号括起来,否则就是非法的表示形式l l无论是自动还是强制类型转换,都只是为了本次运算的需要,对数据的类型进行的临时性转换,而不改变变量原来的类型792024/7/11例例2-12强制类型转换强制类型转换#includevoid main()int n=25;float f=46.5;printf(float)n=%fn,(float)n);printf(int)f=%dn,(int)f);printf(n=%d,f=%fn,n,f);运行结果:运行结果:可以看出,仍为其原来的类型。可以看出,仍为其原来的类型。802024/7/112.6 C语言的语句类型语言的语句类型l主要内容:主要内容:说明性语句说明性语句表达式语句表达式语句控制语句控制语句复合语句复合语句812024/7/11说明性语句说明性语句l l对程序中使用的变量、数组、函数等操作对象进对程序中使用的变量、数组、函数等操作对象进对程序中使用的变量、数组、函数等操作对象进对程序中使用的变量、数组、函数等操作对象进行定义、声明的描述语句行定义、声明的描述语句行定义、声明的描述语句行定义、声明的描述语句l l只起说明作用,不产生可执行的机器指令代码。只起说明作用,不产生可执行的机器指令代码。只起说明作用,不产生可执行的机器指令代码。只起说明作用,不产生可执行的机器指令代码。例如:例如:例如:例如:int a,b;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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