第二章+数据类型、运算符和表达式ppt课件_第1页
第二章+数据类型、运算符和表达式ppt课件_第2页
第二章+数据类型、运算符和表达式ppt课件_第3页
第二章+数据类型、运算符和表达式ppt课件_第4页
第二章+数据类型、运算符和表达式ppt课件_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2.1 基本概念和基本数据类型基本概念和基本数据类型段注释:从段注释:从“/*”起到起到“*/”止,中间为注止,中间为注释内容,可以跨行,也可以夹在程序语释内容,可以跨行,也可以夹在程序语句中间,但是不可以出现一对段注释符。句中间,但是不可以出现一对段注释符。如:如:/*The error /*comment*/show.*/实例实例 example201标识符是程序员声明的单词,它命名程标识符是程序员声明的单词,它命名程序正文中的一些实体,如函数名、变量序正文中的一些实体,如函数名、变量名等。名等。C语言用户标识符的构成规则如下:语言用户标识符的构成规则如下:(1以大写字母、小写字母或下划线

2、以大写字母、小写字母或下划线“_开场;开场;(2可以由大、小写字母,下划线可以由大、小写字母,下划线_或数字或数字09组成;组成;(3大写字母和小写字母代替不同的标识符;大写字母和小写字母代替不同的标识符;(4标识符的长度不能超过标识符的长度不能超过32个字符,而在个字符,而在TC系系统中,只取前统中,只取前8个字符作为有效字符;个字符作为有效字符;(4不能是不能是C语言中的关键字。语言中的关键字。关键字:具有特殊意义的标识符。关键字:具有特殊意义的标识符。P8预定义标识符:预定义标识符:C语言系统提供的库函数名和编译语言系统提供的库函数名和编译预处理命令等。预处理命令等。练习:练习: tes

3、t hello 2mn _st -print ptr-st ptr_dsl hi!there字符类型字符类型char):用于不是):用于不是ASCII码字码字符,每个字符为符,每个字符为8位,即位,即1B。 字符值可以用字符集中的字符加字符值可以用字符集中的字符加上单引号表示,也可以直接用值域范围上单引号表示,也可以直接用值域范围那数字来表示即那数字来表示即ASCII码值)。码值)。整型整型int):用于表示整数值。整数的):用于表示整数值。整数的值域范围与系统的字长有关。如:值域范围与系统的字长有关。如:16位位的操作系统,一个整数一般用两个字节的操作系统,一个整数一般用两个字节表示;表示;

4、32位操作系统,则由四个字节表位操作系统,则由四个字节表示。示。单精度实型单精度实型float):又称浮点型,表):又称浮点型,表示一个实数,占用四个字节。示一个实数,占用四个字节。双精度实型双精度实型double):也表示实数,):也表示实数,占用占用8个字节。个字节。空类型空类型void):无值型,一是用于表):无值型,一是用于表示一个函数不返回任何值;二是产生一示一个函数不返回任何值;二是产生一个同类型的指针。个同类型的指针。类型修饰符:关键字类型修饰符:关键字signed和和unsigned,short和和long被称为类型修饰符被称为类型修饰符C数据类型数据类型基本类型基本类型整型整

5、型int)短整型短整型short int)长整型长整型long int)无符号整型无符号整型unsigned int)无符号短整型无符号短整型unsigned short int)无符号长整型无符号长整型unsigned long int)整型整型字符型字符型字符型字符型(char)无符号字符型无符号字符型(unsigned char)实型实型单精度单精度float)双精度双精度double)长双精度长双精度long double)空型空型void)构造类型构造类型数组(数组()指针类型(指针类型(*)结构体结构体struct)枚举枚举enum)用户定义类型用户定义类型typedef)所谓常量

6、是指在程序运行的整个过程中所谓常量是指在程序运行的整个过程中其值始终不可改变的量。也就是直接使其值始终不可改变的量。也就是直接使用符号文字表示的值。用符号文字表示的值。整型常量:可以用十进制、八进制和十整型常量:可以用十进制、八进制和十六进制来表示。六进制来表示。 a.十进制整数:十进制整数: 若干各若干各09的数字。的数字。如如12, 0 ,-234等等 b.八进制整数: 0若干各07的数字如0110, 077等 c.十六进制整数: 0 x或0X若干个09的数字及AF字母或小写) 如0 xAF,0X23等实型常量 a. 十进制小数形式:如: 0.25, -75.36, 0.01等 b. 十进

7、制指数形式:如:1.5e-8 , -0.02E 15 , 19.56E+5 其中字母E或e后面必须跟整型常量,表示10的整数次方。如:万分之一,可以写成 1e-4 , 0.1e-3 , 10e-5 等形式字符常量:用一对单引号括起来的单个字字符常量:用一对单引号括起来的单个字符符. 如:如:A, B, 0 , 5, $等等 有一些字符是不可显字符,也无法有一些字符是不可显字符,也无法通过键盘输入,通过键盘输入,C预定义了转义序列来表预定义了转义序列来表示它们,见书示它们,见书P12。 无论是一般字符还是不可显字符,无论是一般字符还是不可显字符,都可以用都可以用16进制或进制或8进制进制ASCI

8、I码来表示。码来表示。表示的形式为:表示的形式为: xnnn 十六进制数十六进制数ASCII码对应的码对应的字符,字符, 如:如: x42表示字符表示字符B nnn 八进制数八进制数ASCII码对应的字符码对应的字符 如:如: 102 同样表示字符同样表示字符B 大写的字母对应大写的字母对应ASCII值比小写字母大值比小写字母大32。 在在C语言中,字符型数据与整数等价,语言中,字符型数据与整数等价,等价整数值为该字符对应的等价整数值为该字符对应的ASCII码。常用码。常用字符的字符的ASCII码如下需记住):码如下需记住): AZ 6590 a z 97122 09 4857 (空格(空格)

9、 32 n (换行符换行符) 10 r (回车符回车符) 13 即即A 就是整数就是整数65,二者可互换使用,二者可互换使用,其余字符以此类推。其余字符以此类推。 特别注意特别注意: 字符字符0 等于整数等于整数48 , 字符字符0 等于整数等于整数0 。 实例:实例:c03 c04 字符串常量:字符串常量简称字符串,是用字符串常量:字符串常量简称字符串,是用一双引号括起来的字符序列,一双引号括起来的字符序列, 如:如:“ABCD” , “Wel come you!” , “”(空(空串)串) 字符串中也可以使用换码符,字符串中也可以使用换码符, 如:如:printf(“Hello!n”);

10、/*打印打印Hello!后换行后换行*/ printf(“nn”); /*换两行换两行*/ 一个字符串可在连续的几行中书写,一个字符串可在连续的几行中书写,行末加上反斜线。行末加上反斜线。 如:如:“This is a string” 注意:注意:“A与与A完全不同,前者是字完全不同,前者是字符串,后者是字符,它们在内存中的存符串,后者是字符,它们在内存中的存贮空间并不相同。贮空间并不相同。 在字符串中使用双引号必须以在字符串中使用双引号必须以“”表示。表示。 实例实例 example22符号常量:用标识符命名的常量,可代替符号常量:用标识符命名的常量,可代替常量常量 在程序中直接使用。在程序

11、中直接使用。使用使用C语言中的一个预编译指令语言中的一个预编译指令#define定定义符号常量。义符号常量。 如:如:#define PI 3.1415926 #define ID “102343-3852396-y3v4x5a” 实例实例 c02 利用利用“const来定义符号常量,同时定义来定义符号常量,同时定义了该常量的数据类型。格式如:了该常量的数据类型。格式如: const 数据类型关键字数据类型关键字 符号常量符号常量1=常常量量1,符号常量,符号常量2=常量常量2,; 如:如: const int MAXINT=32767; const double PI=3.1415926;

12、实例实例 c05概念:在程序执行中,值为可变的量。概念:在程序执行中,值为可变的量。三个特征三个特征每个变量都有一个变量名,用标识符表每个变量都有一个变量名,用标识符表示;示;每个变量具有一个特定的数据类型;每个变量具有一个特定的数据类型;变量可以存放值,它的值在程序运行中变量可以存放值,它的值在程序运行中可能随时被改变。可能随时被改变。变量的定义变量的定义 格式为:格式为: 类型类型 变量列表;变量列表; 可同时定义多个同类型的变量,之间可同时定义多个同类型的变量,之间用逗号分隔。用逗号分隔。变量的初始化变量的初始化变量定义时:格式为变量定义时:格式为 类型类型 变量名变量名=常数;常数;变

13、量定义后:通过赋值语句实现变量定义后:通过赋值语句实现变量的作用域:变量能够起作用或者变量的作用域:变量能够起作用或者可以被使用的程序范围。由定义的位可以被使用的程序范围。由定义的位置决定置决定局部变量:在函数内部定义的变量,局部变量:在函数内部定义的变量,只在其定义的某个函数或复合语句范只在其定义的某个函数或复合语句范围内有效。围内有效。全局变量:在函数外部定义的变量,全局变量:在函数外部定义的变量,整个程序任何一段都可以使用。整个程序任何一段都可以使用。 实例实例 example23存储类型说明符存储类型说明符格式:存储类型说明符格式:存储类型说明符 数据类型数据类型 变量变量名;名;自动

14、变量:程序运行时由系统在动态内自动变量:程序运行时由系统在动态内存分配区分配临时存储单元的变量。说存分配区分配临时存储单元的变量。说明符为:明符为:auto 实例分析实例分析 example24静态变量:在程序运行时有系统在静态静态变量:在程序运行时有系统在静态内存分配区分配存储单元的变量。说明内存分配区分配存储单元的变量。说明符为符为“static”。静态局部变量:分配的是一个永久存储静态局部变量:分配的是一个永久存储单元,类似全局变量,但是它的作用域单元,类似全局变量,但是它的作用域仍然是在定义它的函数内部或复合语句仍然是在定义它的函数内部或复合语句中,其他函数不能访问。中,其他函数不能访

15、问。静态全局变量:该变量的作用域仅限于静态全局变量:该变量的作用域仅限于定义该变量的文件中,其他文件不可使定义该变量的文件中,其他文件不可使用。用。例题分析:例题分析:example25寄存器变量:程序运行时存储在寄存器变量:程序运行时存储在CPU寄寄存器中的变量,只用于局部变量,要求存器中的变量,只用于局部变量,要求是整型和字符型变量。说明符是整型和字符型变量。说明符“register”外部变量:表示该变量可以在程序中的外部变量:表示该变量可以在程序中的任何地方使用,包括定义此变量的源文任何地方使用,包括定义此变量的源文件之外,作用域为整个工程。只能用于件之外,作用域为整个工程。只能用于全局

16、变量。说明符为全局变量。说明符为“extern”。 实例实例 example26计算机内存是由一片连续的存储单元组计算机内存是由一片连续的存储单元组成,操作系统给每个单元一个编号,这成,操作系统给每个单元一个编号,这个编号成为内存单元的地址简称地个编号成为内存单元的地址简称地址)。址)。地址编号通常由一组连续的整数组地址编号通常由一组连续的整数组成,编号小的称内存低地址,编号大的成,编号小的称内存低地址,编号大的称内存高地址。称内存高地址。每个单元占每个单元占1个字节个字节byte大小。大小。如: int i=25,j=0 x1af,k=-25; long int s=-25;250 x1af

17、2525内存低地址内存低地址内存高地址内存高地址3009 3008 3007 3006 3005 3004 3003 3002 3001 3000变量变量i占占2字节字节变量变量j占占2字节字节变量变量k占占2字节字节变量变量s占占4字节字节00000000 0001100100000001 10101111变量变量i占占2字节,值为字节,值为25变量变量j占占2字节,值为字节,值为0 x1af11111111 11100111变量变量k占占2字节,值为字节,值为-2511111111 11100111变量变量s占占4字节,值为字节,值为-251111111111111111 C语言的头文件语

18、言的头文件stdio.h中含有系统提供中含有系统提供的标准输入输出函数,用户使用预编译命的标准输入输出函数,用户使用预编译命令令#include,(,(standard input and output的缩写。标准输入设备为键盘,标的缩写。标准输入设备为键盘,标准输出设备为显示器。准输出设备为显示器。格式输出函数格式输出函数printf():用来将一个或多个类:用来将一个或多个类型相同或不同的数据,依次按照指定的格式型相同或不同的数据,依次按照指定的格式输出。输出。该函数通常作为一条语句调用,其一般格式该函数通常作为一条语句调用,其一般格式为:为: printf(格式控制串,输出项序列格式控制

19、串,输出项序列); 其中,其中,“输出项序列列出本语句所要输输出项序列列出本语句所要输出的出的0到多个数据项,各数据项用逗号隔开,到多个数据项,各数据项用逗号隔开,没想时一个表达式,表示要将该表达式的值没想时一个表达式,表示要将该表达式的值写出去。输出时,每一项占一个输出域。写出去。输出时,每一项占一个输出域。格式控制串:是用格式控制串:是用“”“”括起来的一个特殊括起来的一个特殊字符串,称为转换控制字符串,串中含有字符串,称为转换控制字符串,串中含有各输出项所要求的格式信息,指出每个数各输出项所要求的格式信息,指出每个数据项是以什么形式输出,要占多少字符宽据项是以什么形式输出,要占多少字符宽

20、度即域宽)。度即域宽)。格式控制串中含有两类字符:格式控制串中含有两类字符:需要按照原样相对位置输出的普通字符,需要按照原样相对位置输出的普通字符,即字符常量;即字符常量;最主要的一类,格式说明,称为格式项。最主要的一类,格式说明,称为格式项。每个输出项必须单独对应一个格式项,并每个输出项必须单独对应一个格式项,并且都以且都以%开头,后面跟着表示域宽要求的开头,后面跟着表示域宽要求的附加格式。再跟一个格式控制符,其中附附加格式。再跟一个格式控制符,其中附加格式可以省略。加格式可以省略。格式项的一般形式为:格式项的一般形式为: %附加格式附加格式 格式控制符格式控制符 方括号中的内容可以缺省。方

21、括号中的内容可以缺省。附加格式控制附加格式控制含义说明含义说明l(小写字母小写字母)m数据最小输出宽度数据最小输出宽度(一个具体正整数一个具体正整数).n(一个具体(一个具体正整数)正整数)对实数,表示输出几位小数;对字对实数,表示输出几位小数;对字符串,表示截取的字符个数符串,表示截取的字符个数(负号)(负号)输出的数据域内向左对齐输出的数据域内向左对齐(正号)(正号)要求正数和要求正数和0带正号输出,负数带符带正号输出,负数带符号输出号输出格式控制字符格式控制字符含义说明含义说明d以十进制带符号的形式输出整数(正数和以十进制带符号的形式输出整数(正数和0不不输出正号,负数要输出符号)。输出

22、正号,负数要输出符号)。o以八进制无符号的形式输出整数(不输出前以八进制无符号的形式输出整数(不输出前导符导符0)x以十六进制无符号的形式输出整数(不输出以十六进制无符号的形式输出整数(不输出前导符前导符0)u以十进制无符号的形式输出整数以十进制无符号的形式输出整数c以字符形式输出,只输出一个字符以字符形式输出,只输出一个字符s输出一个字符串输出一个字符串f以小数形式输出单、双精度实数,隐含输出以小数形式输出单、双精度实数,隐含输出6位小数位小数e以标准指数形式输出单、双精度实数,数字以标准指数形式输出单、双精度实数,数字部分小数位数位部分小数位数位6位位g选用选用%f或或%e格式中输出宽度较

23、短的一直格式,格式中输出宽度较短的一直格式,且不输出无意义的且不输出无意义的0p输出变量的内存地址输出变量的内存地址本卷须知:本卷须知:每种输出项的类型都要求一定的格式控制字每种输出项的类型都要求一定的格式控制字符,必须匹配。符,必须匹配。附加格式附加格式m用于指定数据所占的域宽。如果不用于指定数据所占的域宽。如果不指定域宽或虽指定域宽,但数据的实际宽指定域宽或虽指定域宽,但数据的实际宽度大于度大于m,则按数据的实际宽度输出,以,则按数据的实际宽度输出,以保证数据的正确性。保证数据的正确性。如果数据的实际宽度小于如果数据的实际宽度小于m,则按,则按m只是的宽只是的宽度输出。若本格式项没带附加格

24、式度输出。若本格式项没带附加格式“-”,输出时输出时“右对齐,左补空格右对齐,左补空格”;若带附加;若带附加格式符格式符“-”,则输出时,则输出时“左对齐,右补空左对齐,右补空格格”。“%m.nf用于实数输出,表示数据项共占用于实数输出,表示数据项共占m列,含小数点和正负号。若不含有附加格列,含小数点和正负号。若不含有附加格式控制式控制“+”,那么正数和,那么正数和0不输出正负号,不输出正负号,反之则带正或负号输出,其中小数点后有反之则带正或负号输出,其中小数点后有n位数字。位数字。“%m.ns用于字符串输出,表示共占用于字符串输出,表示共占m列列,但只取字符串左端的,但只取字符串左端的n个字

25、符,这个字符,这n个字符个字符输出在输出在m列的右侧,左边补空格。列的右侧,左边补空格。 上述两条中,一般要求上述两条中,一般要求mn,若,若mn,则在保证,则在保证n的前提下,突破域宽,按实长的前提下,突破域宽,按实长输出。输出。l以以o或或x以及以及u格式输出整数时,则认为数格式输出整数时,则认为数值不带符号位,而将符号位看作数值的一值不带符号位,而将符号位看作数值的一部分。因此若输出负的整数值时,将导致部分。因此若输出负的整数值时,将导致错误输出的数值不代表该数的真实值)。错误输出的数值不代表该数的真实值)。l如果想输出如果想输出“”,需要在格式控制串中,需要在格式控制串中连续写两个,即

26、连续两个,算作一个连续写两个,即连续两个,算作一个普通字符。普通字符。l格式控制串中的格式项数目应当与输出项格式控制串中的格式项数目应当与输出项表中的数据项数相等,若不等会出错。表中的数据项数相等,若不等会出错。l如果前面某个格式说明出错,则会出错。如果前面某个格式说明出错,则会出错。l 实例实例 c230 c231 c232格式输入函数格式输入函数scanf():用来将一个或多个类:用来将一个或多个类型相同或不同的数据,依次按照指定的格式型相同或不同的数据,依次按照指定的格式从键盘读入。从键盘读入。调用该函数的语句一般格式为:调用该函数的语句一般格式为: scanf(格式控制串,地址序列格式

27、控制串,地址序列); 其中,其中,“格式控制串的含义与格式控制串的含义与printf函数相同,函数相同,“地址序列列出需要读地址序列列出需要读取数据的变量的地址,即变量名前加取数据的变量的地址,即变量名前加&符号,符号,或以为字符数组名不加或以为字符数组名不加&表示串的首地表示串的首地址),相互之间用逗号分开。址),相互之间用逗号分开。l格式控制串中的格式项数目必须与地址表格式控制串中的格式项数目必须与地址表中的项数相同,否则将出错。中的项数相同,否则将出错。l输入数值型数据即整数或实数时,系统要输入数值型数据即整数或实数时,系统要将用户键入的将用户键入的“数字串转换成数值,再数字串转换成数值

28、,再赋给相应的变量。在同一行输入两个数据赋给相应的变量。在同一行输入两个数据之间要用一个或多个空格,或之间要用一个或多个空格,或Tab键分开,键分开,转换时,系统会自动滤掉这些分隔符。也转换时,系统会自动滤掉这些分隔符。也可以每行输入一个数据。如果指定输入数可以每行输入一个数据。如果指定输入数据所占列数,系统自动按指定宽度读取数据所占列数,系统自动按指定宽度读取数据,数据之间可不加分隔符据,数据之间可不加分隔符l 如:如:scanf(“%3d%3d”,&a,&b);l 如果输入如果输入 123-456 l 输入结果,输入结果,a=123,b45l格式控制串中不属于格式项的字符是格式控制串中不属

29、于格式项的字符是“原原样输入字符,输入数据时必须在相应的样输入字符,输入数据时必须在相应的位置上输入这些字符,否则可能导致读入位置上输入这些字符,否则可能导致读入错误的数据。错误的数据。l用用f格式输入实数时,不能使用格式输入实数时,不能使用“双域宽双域宽”(与输出不同),并且变量的类型必须是(与输出不同),并且变量的类型必须是float类型。类型。l地址序列中的变量名前必须加地址运算符地址序列中的变量名前必须加地址运算符&,而不能只写变量名。否则编译通过了,而不能只写变量名。否则编译通过了,也不能正常运行,因为有些编译程序不能也不能正常运行,因为有些编译程序不能指出这种错误。指出这种错误。l

30、在使用在使用“%c格式读字符时,所输入的任何内格式读字符时,所输入的任何内容都算有效字符,包括空格,转义字符,甚至回容都算有效字符,包括空格,转义字符,甚至回车换行符。车换行符。l控制符控制符“*”用于抑制输入,表示读数据时,要跳用于抑制输入,表示读数据时,要跳过相应的列数。过相应的列数。l 如:如:scanf(“%c%*d%d”,&a,&b);l /%*d表示跳过一个整数表示跳过一个整数l若输入:若输入:123 456 789l结果结果a=123,b=789l scanf(“%d%*3c%c%d”,&a,&c,&b);l /%*3c表示跳过三个字符表示跳过三个字符l 若输入:若输入:123

31、456 789l 结果:结果:a=123,c=6,b=789 实例实例 c233 c02putchar()字符输出函数:把一个字符输字符输出函数:把一个字符输出到标准输出设备通常指定为显示器出到标准输出设备通常指定为显示器上,其调用格式为:上,其调用格式为: putchar(ch);getchar() 函数:接收标准输入缓冲区中函数:接收标准输入缓冲区中的一个字符,并带回显显示键盘所按的一个字符,并带回显显示键盘所按的字符),此函数使用的是缓冲输入方的字符),此函数使用的是缓冲输入方式,只有当按下回车键后该函数才返回,式,只有当按下回车键后该函数才返回,函数返回后,从缓冲区读取一个字符颜函数返

32、回后,从缓冲区读取一个字符颜其调用格式为:其调用格式为: getchar();实例实例cgetchargetch函数:从标准输入设备通常指键函数:从标准输入设备通常指键盘上读入一个字符。该函数读入的字盘上读入一个字符。该函数读入的字符不会回显在屏幕上,是非缓冲函数,符不会回显在屏幕上,是非缓冲函数,只要输入一个字符,该字符立即被接收,只要输入一个字符,该字符立即被接收,程序继续执行下一条语句。其调用形式程序继续执行下一条语句。其调用形式为:为: getch();该函数包含在该函数包含在conio.h头文件中头文件中getche函数:从标准输入设备通常指键函数:从标准输入设备通常指键盘上读入一个

33、字符。该函数将读入的盘上读入一个字符。该函数将读入的字符会回显到屏幕上,也是非缓冲函数,字符会回显到屏幕上,也是非缓冲函数,只要输入一个字符,该字符立即被接收,只要输入一个字符,该字符立即被接收,并回显在输出屏幕上,程序再继续执行并回显在输出屏幕上,程序再继续执行下一条语句。其调用形式为:下一条语句。其调用形式为: getche();该函数包含在该函数包含在conio.h头文件中头文件中实例实例c234在程序中,表达式是计算求值的基本单位。在程序中,表达式是计算求值的基本单位。它由运算符、运算量也称操作数,可以是它由运算符、运算量也称操作数,可以是常量、变量等和括号组成。表达式可以被常量、变量

34、等和括号组成。表达式可以被定义为:定义为: (1一个常量或标识对象的标识符是一一个常量或标识对象的标识符是一个最简单的表达式,其值是常量或对象的值。个最简单的表达式,其值是常量或对象的值。 (2一个表达式的值可以用来参与其他一个表达式的值可以用来参与其他操作,即用作其他运算符的操作数,这就形操作,即用作其他运算符的操作数,这就形成了更复杂的表达式。成了更复杂的表达式。 (3包含在括号中的表达式仍是一个表包含在括号中的表达式仍是一个表达式,其类型和值与未加括号时的表达式相达式,其类型和值与未加括号时的表达式相同。同。有些运算符需要两个操作数,使用形式有些运算符需要两个操作数,使用形式为:操作数为

35、:操作数1 运算符运算符 操作数操作数2 这样的运算符称为二元运算符或双这样的运算符称为二元运算符或双目运算符)。只需要一个操作数的称为目运算符)。只需要一个操作数的称为一元运算符或单目操作数)。一元运算符或单目操作数)。其中其中“”作负号时是一元运算符,其作负号时是一元运算符,其余的都是二元运算符。余的都是二元运算符。特别注意:特别注意:5 / 2=2,5.0 / 2=2.5 即当即当“/”两边都为整数时,进行整除运算,即结两边都为整数时,进行整除运算,即结果仍为整数,自动丢失余数。例如:表果仍为整数,自动丢失余数。例如:表达式达式1/2*(a+b)的值恒为的值恒为0,改进方法:写,改进方法

36、:写成成0.5*(a+b)或或1.0/2*(a+b)实例实例c06 c12自增(自增(+ +)自减()自减( ) 有前置和后置两种形式有前置和后置两种形式: 前置形式前置形式: + +变量名变量名 ,变量名,变量名 后置形式后置形式: 变量名变量名+ , 变量名变量名 运算功能:对变量的值进行自加运算功能:对变量的值进行自加1自减自减1) 运算。运算。 如:语句如:语句+a;或或a+; 相当于执行相当于执行a=a+1; 语句语句-a; 或或a-; 相当于执行相当于执行a=a-1;q前置形式运算规则:前置形式运算规则:q 先对表达式中含有前置自增减运算符先对表达式中含有前置自增减运算符的变量进行

37、自加的变量进行自加(减减)1,然后用这些变量的新值参,然后用这些变量的新值参与表达式运算。与表达式运算。q后置形式运算规则:后置形式运算规则:q 先用变量原值参与表达式运算,然后对含先用变量原值参与表达式运算,然后对含有后置自加减运算符的变量进行自加减有后置自加减运算符的变量进行自加减1 运算。运算。q 例例1:int a=2,b ; b=a; q 则则a=1, b=2 q 例例2: int a=2,b=1,c; c=a+b ;q 则则a=3,b=0,c=1q 例例3: int x=5,y=1; y+=-x+y; q 则则x=4,y=6说明:说明:+,-只能对变量或用小括号括起来的指只能对变量

38、或用小括号括起来的指针对象进行运算针对象进行运算,不能对常量或表达式不能对常量或表达式进行。如:进行。如:5+; (a+b)+; 等都是错误等都是错误的用法。而的用法。而(*p)+;与与*p+; +(*p);与与+*p;都是正确的表达式都是正确的表达式,但运算的意义但运算的意义并不相同。并不相同。+,-总是与最前面的变量或小括号括起总是与最前面的变量或小括号括起来的指针对象尽量匹配。来的指针对象尽量匹配。 如如: c=a+b; 应理解为应理解为c=a+b; a+; 而不是而不是+b; c=a+b;+,-与小括号混合使用,运算规则不变,与小括号混合使用,运算规则不变,但但+,-的结合性由小括号指

39、定。的结合性由小括号指定。例例1:已知:已知int a=1,b=2,c;393181) c=a+b; 2) c=(a+)+b; 3) c=a+(+b);则则a=2,c=3 同同1) 则则b=3,c=44) c=+a+b; 5) c=(+a)+b; 则则a=2,c=4 同同4)1) b=a+a+a+; b=(a+)+(a+)+(a+);则则a= ,b=2) b=(+a)+(+a)+(+a);则则a= ,b= 例例2:已知:已知int a=3,b;(4变量值与表达式值应分别考虑。变量值与表达式值应分别考虑。 如:已知如:已知int a=2; 表达式表达式a+的值为的值为2,但变量,但变量a=3;

40、表达式表达式+a的值为的值为3,变量,变量a=3。 实例实例 c08任何数值字符、整数、实数、指针都可以任何数值字符、整数、实数、指针都可以表示逻辑意义,数值非表示逻辑意义,数值非0,表示真;,表示真;0表示假;表示假;关系运算符按优先级顺序)关系运算符按优先级顺序) = = !=小于小于 小于或等于小于或等于 大于大于 大于或等于大于或等于 等于等于 不等于不等于优先级相同较高)优先级相同较高) 优先级相同较低)优先级相同较低)逻辑运算符:逻辑运算符: &并且并且 |或者或者 ! 非非 它们的值只能为它们的值只能为true或或false逻辑运算符的真值表逻辑运算符的真值表 A B !A A&

41、B A|B true true false true true true false false false true false true true false true false false true false false 例例1:写出下列表达式的求值结果:写出下列表达式的求值结果 (1) 35 值为值为1 (2) !256 值为值为0 (3) 3=B 值为值为0 对比对比:(1) (35)&(2=1) 值为值为0 (2) (35)&(2=1) 值为值为0,含义不含义不同同 (3) 35&2=1 与与(1)一样一样 (4) 30?1:0; 等效于语句等效于语句 if(a0) c=1;

42、else c=0; 实例:实例:c208求反运算:对整数的每个二进制位进行非求反运算:对整数的每个二进制位进行非运算,即运算,即0变成变成1,1变成变成0,得到运算结果。,得到运算结果。 & ,| , 位运算规则位运算规则01111110011101000000aba|ba&bba例:例:int a=3,b=10,c; c=a&b; 0000 0000 0000 0011 3 & 0000 0000 0000 1010 10 0000 0000 0000 0010 2 故故c=3&10=2 c=a|b; c=(1011)2=11 c=ab; c=(1001)2=9异或的重要性质:异或的重要性质

43、: a. 若若ab=c,则有则有cb=a ,ca=b (还原性)还原性) b. aa=0 (自己与自己异或恒为(自己与自己异或恒为0)移位运算移位运算an a 整除整除 2n。 如如:unsigned char a=245 ,b; 1) b=a3; 1111 0101 245 右移右移3位位:0001 1110101 低位移出低位移出3位自位自动扔掉,高位填入动扔掉,高位填入3个个0,下划线部分的,下划线部分的8bit为运算结果,对应十进制无符号整数为运算结果,对应十进制无符号整数为为30,故故b=30=245/8最简单的赋值运算符是最简单的赋值运算符是“=”,带有赋值,带有赋值运算符的表达式

44、称为赋值表达式。运算符的表达式称为赋值表达式。普通赋值:变量名普通赋值:变量名=表达式;表达式; C规定,赋值运算式也是一个表达式,规定,赋值运算式也是一个表达式,该表达式的值为等号右边表达式传给等该表达式的值为等号右边表达式传给等号左边变量的值。故,号左边变量的值。故,C允许连续赋值。允许连续赋值。 实例实例 c13 int a,b,c; a=b=c=0; 连续使用等号时,从右向左连续使用等号时,从右向左顺序赋值顺序赋值 a=(b=(c=0); C规定,等号左边表达式与右边变量类规定,等号左边表达式与右边变量类型不一致时,表达式自动转换为变量类型不一致时,表达式自动转换为变量类型,再赋值。型

45、,再赋值。 例:例:int a; a=3.5;则则a=3自反赋值自反赋值 所有二元运算符,都可以与所有二元运算符,都可以与=组成自组成自反赋值运算,其规定即用法同普通反赋值运算,其规定即用法同普通=,但运但运算功能有所不同。算功能有所不同。 a+=2; 等价于等价于a=a+2; 形如形如a=a+1; a+=1; +a; a+; 例:例:int a=12; a+=a-=a*=a; 求表达式的值与变量求表达式的值与变量a 的值。的值。 其中表达式的值为:其中表达式的值为: 0, 变量变量a=0不同类型数据混合运算规则不同类型数据混合运算规则 当运算符两边数据类型不一致时,系当运算符两边数据类型不一致时,系统自动将低类型转换为高类型,运算结果为统自动将低类型转换为高类型,运算结果为高类型数据,转换方法如下所示:高类型数据,转换方法如下所示:高高 double float long unsigned 低 int char,short例例1:若有若有unsigned a=1; int b=-1,long c; 问:执行语句问:执行语句c=a*b; 后,变量后,变量c的值的值? 此题,很容易错

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论