数据类型、运算符和表达式

上传人:san****019 文档编号:20665596 上传时间:2021-04-11 格式:PPT 页数:76 大小:357.50KB
返回 下载 相关 举报
数据类型、运算符和表达式_第1页
第1页 / 共76页
数据类型、运算符和表达式_第2页
第2页 / 共76页
数据类型、运算符和表达式_第3页
第3页 / 共76页
点击查看更多>>
资源描述
2021/4/11 2.1 基本概念和基本数据类型 2021/4/11 2.1.1 关于注释 段注释 :从“ /*”起到“ */”止,中间为注 释内容,可以跨行,也可以夹在程序语 句中间,但是不可以出现一对段注释符。 如: /*The error /*comment*/show.*/ 实例 example201 2021/4/11 2.1.2 标识符 标识符是程序员声明的单词,它命名程 序正文中的一些实体,如函数名、变量 名等。 C语言用户标识符的 构成规则 如下: ( 1)以大写字母、小写字母或下划线“ _” 开始; ( 2)可以由大、小写字母,下划线( _) 或数字 09组成; 2021/4/11 ( 3)大写字母和小写字母代替不同的标识符; ( 4)标识符的长度不能超过 32个字符,而在 TC系 统中,只取前 8个字符作为有效字符; ( 4)不能是 C语言中的关键字。 关键字 :具有特殊意义的标识符。 P8 预定义标识符 : C语言系统提供的库函数名和编 译预处理命令等。 练习 : test hello 2mn _st -print ptr-st ptr_dsl hi!there 2021/4/11 2.1.3 基本数据类型 2021/4/11 字符类型( char) :用于不是 ASCII码字 符,每个字符为 8位,即 1B。 字符值可以用字符集中的字符加上 单引号表示,也可以直接用值域范围那 数字来表示(即 ASCII码值)。 2021/4/11 整型( int) :用于表示整数值。整数的 值域范围与系统的字长有关。如: 16位 的操作系统,一个整数一般用两个字节 表示; 32位操作系统,则由四个字节表 示。 单精度实型( float) :又称浮点型,表 示一个实数,占用四个字节。 双精度实型( double) :也表示实数, 占用 8个字节。 空类型( void) :无值型,一是用于表 示一个函数不返回任何值;二是产生一 个同类型的指针。 2021/4/11 类型修饰符 :关键字 signed和 unsigned, short和 long被称为类型修饰符 2021/4/11 C数据类型 基本类型 整型( int) 短整型( short int) 长整型( long int) 无符号整型( unsigned int) 无符号短整型( unsigned short int) 无符号长整型( unsigned long int) 整型 字符型 字符型 (char) 无符号字符型 (unsigned char) 实型 单精度( float) 双精度( double) 长双精度( long double) 空型( void) 构造类型 数组( ) 指针类型( *) 结构体( struct) 枚举( enum) 用户定义类型( typedef) 2021/4/11 2.1.4 常量和变量 2021/4/11 常量 所谓 常量 是指在程序运行的整个过程中 其值始终不可改变的量。也就是直接使 用符号(文字)表示的值。 整型常量 :可以用十进制、八进制和十 六进制来表示。 a.十进制整数: 若干各 09的数字。 如 12, 0 ,-234等 2021/4/11 b.八进制整数: 0若干各 07的数字如 0110, 077等 c.十六进制整数: 0 x或 0X若干个 09的 数字及 AF字母(或小写) 如 0 xAF,0X23等 实型常量 a. 十进制小数形式 :如 : 0.25, -75.36, 0.01等 b. 十进制指数形式 :如: 1.5e-8 , -0.02E 15 , 19.56E+5 其中字母 E(或 e)后面必须跟整型常量, 表示 10的整数次方。如:万分之一,可以写 成 1e-4 , 0.1e-3 , 10e-5 等形式 2021/4/11 字符常量 :用一对单引号括起来的单个字 符 . 如: A, B, 0 , 5, $等 有一些字符是不可显字符,也无法 通过键盘输入, C预定义了转义序列来表 示它们,见书 P12。 无论是一般字符还是不可显字符, 都可以用 16进制或 8进制 ASCII码来表示。 表示的形式为: xnnn 十六进制数 ASCII码对应的字 符, 如: x42表示字符 B 2021/4/11 nnn 八进制数 ASCII码对应的字符 如: 102 同样表示字符 B 大写的字母对应 ASCII值比小写字母大 32。 在 C语言中,字符型数据与整数等价, 等价整数值为该字符对应的 ASCII码 。 常用 字符的 ASCII码如下(需记住): AZ 6590 a z 97122 09 4857 (空格 ) 32 n (换行符 ) 10 r (回车符 ) 13 2021/4/11 即 A 就是整数 65,二者可互换使用, 其余字符以此类推。 特别注意 : 字符 0 等于整数 48 , 字符 0 等于整数 0 。 实例: c03 c04 2021/4/11 字符串常量 :字符串常量简称字符串,是用 一双引号括起来的字符序列, 如 :“ ABCD” , “Wel come you!” , “”(空串) 字符串中也可以使用换码符, 如 : printf(“Hello!n”); /*打印 Hello!后换行 */ printf(“nn”); /*换两行 */ 一个字符串可在连续的几行中书写,行 末加上反斜线。 如 :“ This is a string” 2021/4/11 注意 :“ A”与 A完全不同,前者是字 符串,后者是字符,它们在内存中的存 贮空间并不相同。 在字符串中使用双引号必须以“ ” 表示。 实例 example22 符号常量 :用标识符命名的常量,可代 替常量 在程序中直接使用。 1. 使用 C语言中的一个预编译指令 #define 定义符号常量。 2021/4/11 如: #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; 实例 c05 2021/4/11 变量 概念 :在程序执行中,值为可变的量。 三个特征 1) 每个变量都有一个变量名,用标识符表 示; 2) 每个变量具有一个特定的数据类型; 3) 变量可以存放值,它的值在程序运行中 可能随时被改变。 2021/4/11 变量的定义 格式为: 类型 变量列表; 可同时定义多个同类型的变量,之间用逗 号分隔。 变量的初始化 1. 变量定义时:格式为 类型 变量名 =常数; 2. 变量定义后:通过赋值语句实现 2021/4/11 变量的作用域 :变量能够起作用或者 可以被使用的程序范围。由定义的位 置决定 1. 局部变量 :在函数内部定义的变量, 只在其定义的某个函数或复合语句范 围内有效。 2. 全局变量 :在函数外部定义的变量, 整个程序任何一段都可以使用。 实例 example23 2021/4/11 存储类型说明符 1.格式: 存储类型说明符 数据类型 变量 名; 2.自动变量 :程序运行时由系统在动态内 存分配区分配临时存储单元的变量。说 明符为: auto 实例分析 example24 2021/4/11 3. 静态变量 :在程序运行时有系统在静态 内存分配区分配存储单元的变量。说明 符为“ static”。 1) 静态局部变量:分配的是一个永久存储 单元,类似全局变量,但是它的作用域 仍然是在定义它的函数内部或复合语句 中,其他函数不能访问。 2) 静态全局变量:该变量的作用域仅限于 定义该变量的文件中,其他文件不可使 用。 3) 例题分析: example25 2021/4/11 4. 寄存器变量 :程序运行时存储在 CPU寄 存器中的变量,只用于局部变量,要求 是整型和字符型变量。说明符“ register” 5. 外部变量 :表示该变量可以在程序中的 任何地方使用,包括定义此变量的源文 件之外,作用域为整个工程。只能用于 全局变量。说明符为“ extern”。 实例 example26 2021/4/11 2.1.5 内存的概念 计算机内存是由一片连续的存储单元组 成,操作系统给每个单元一个编号,这 个编号成为 内存单元的地址(简称地 址) 。 地址(编号)通常由一组连续的整数组 成,编号小的称内存低地址,编号大的 称内存高地址。 每个单元占 1个字节( byte)大小。 2021/4/11 如: int i=25,j=0 x1af,k=-25; long int s=-25; 25 0 x1a f 25 25 内存低地址 内存高地址 3009 3008 3007 3006 3005 3004 3003 3002 3001 3000 变量 i占 2字节 变量 j占 2字节 变量 k占 2字节 变量 s占 4字节 00000000 00011001 00000001 10101111 变量 i占 2字节,值为 25 变量 j占 2字节,值为 0 x1af 11111111 11100111 变量 k占 2字节,值为 -25 11111111 11100111 变量 s占 4字节,值为 -25 11111111 11111111 2021/4/11 2.2 基本的输入、输出函数 C语言的头文件 stdio.h中含有系统提供 的标准输入输出函数,用户使用预编译命 令 #include,( standard input and output)的缩写。标准输入设备为键盘,标 准输出设备为显示器。 2021/4/11 2.2.1 格式输出函数 printf() 格式输出函数 printf():用来将一个或多个类 型相同或不同的数据,依次按照指定的格式 输出。 该函数通常作为一条语句调用,其 一般格式 为 : printf(格式控制串,输出项序列 ); 其中,“输出项序列”列出本语句所要输出 的 0到多个数据项,各数据项用逗号隔开,没 想时一个表达式,表示要将该表达式的值写 出去。输出时,每一项占一个输出域。 2021/4/11 格式控制串 :是用“”括起来的一个特殊 字符串,称为转换控制字符串,串中含有 各输出项所要求的格式信息,指出每个数 据项是以什么形式输出,要占多少字符宽 度(即域宽)。 格式控制串中含有两类字符 : 1) 需要按照原样相对位置输出的普通字符 , 即字符常量; 2) 最主要的一类, 格式说明,称为格式项 。 每个输出项必须单独对应一个格式项,并 且都以 %开头,后面跟着表示域宽要求的 附加格式。再跟一个格式控制符,其中附 加格式可以省略。 2021/4/11 格式项的一般形式为 : %附加格式 格式控制符 方括号中的内容可以缺省。 附加格式控制 含义说明 l(小写字母 ) m 数据最小输出宽度 (一个具体正整数 ) .n(一个具体 正整数) 对实数,表示输出几位小数;对字 符串,表示截取的字符个数 (负号) 输出的数据域内向左对齐 (正号) 要求正数和 0带正号输出,负数带符 号输出 2021/4/11 格式控制字符 含义说明 d 以十进制带符号的形式输出整数(正数和 0不 输出正号,负数要输出符号)。 o 以八进制无符号的形式输出整数(不输出前 导符 0) x 以十六进制无符号的形式输出整数(不输出 前导符 0) u 以十进制无符号的形式输出整数 c 以字符形式输出,只输出一个字符 s 输出一个字符串 2021/4/11 f 以小数形式输出单、双精度实数,隐 含输出 6位小数 e 以标准指数形式输出单、双精度实数, 数字部分小数位数位 6位 g 选用 %f或 %e格式中输出宽度较短的 一直格式,且不输出无意义的 0 p 输出变量的内存地址 2021/4/11 注意事项: 1. 每种输出项的类型都要求一定的格式控制 字符,必须匹配。 2. 附加格式 m用于指定数据所占的域宽。如 果不指定域宽或虽指定域宽,但数据的实 际宽度大于 m,则按数据的实际宽度输出, 以保证数据的正确性。 3. 如果数据的实际宽度小于 m,则按 m只是的 宽度输出。若本格式项没带附加格式“ -”, 输出时“右对齐,左补空格”;若带附加 格式符“ -”,则输出时“左对齐,右补空 格”。 2021/4/11 4. “%m.nf”用于实数输出,表示数据项共占 m 列,含小数点和正负号。若不含有附加格式 控制“ +”,那么正数和 0不输出正负号,反 之则带正或负号输出,其中小数点后有 n位 数字。 5. “ %m.ns”用于字符串输出,表示共占 m列 ,但只取字符串左端的 n个字符,这 n个字符 输出在 m列的右侧,左边补空格。 上述两条中,一般要求 mn,若 mn, 则在保证 n的前提下,突破域宽,按实长输 出。 2021/4/11 6. 以 o或 x以及 u格式输出整数时,则认为数 值不带符号位,而将符号位看作数值的一 部分。因此若输出负的整数值时,将导致 错误(输出的数值不代表该数的真实值)。 7. 如果想输出“”,需要在格式控制串中 连续写两个,即连续两个,算作一个 普通字符。 8. 格式控制串中的格式项数目应当与输出项 表中的数据项数相等,若不等会出错。 9. 如果前面某个格式说明出错,则会出错。 实例 c230 c231 c232 2021/4/11 2.2.2 格式输入函数 scanf() 格式输入函数 scanf():用来将一个或多个类 型相同或不同的数据,依次按照指定的格式 从键盘读入。 调用该函数的语句一般格式为: scanf(格式控制串,地址序列 ); 其中,“格式控制串”的含义与 printf 函数相同,“地址序列”列出需要读取数据 的变量的地址,即变量名前加 如果输入 123-456 输入结果, a=123, b 45 2021/4/11 3. 格式控制串中不属于格式项的字符是“原 样输入”字符,输入数据时必须在相应的 位置上输入这些字符,否则可能导致读入 错误的数据。 4. 用 f格式输入实数时,不能使用“双域宽” (与输出不同),并且变量的类型必须是 float类型。 5. 地址序列中的变量名前必须加地址运算符 /%*d表示跳过一个整数 若输入: 123 456 789 结果 a=123,b=789 scanf(“%d%*3c%c%d”, /%*3c表示跳过三个字符 若输入: 123 456 789 结果: a=123, c=6, b=789 实例 c233 c02 2021/4/11 2.2.3 非格式化输入、输出函数 putchar()字符输出函数 :把一个字符输 出到标准输出设备(通常指定为显示器) 上,其调用格式为: putchar(ch); 2021/4/11 getchar() 函数 :接收标准输入缓冲区中 的一个字符,并带回显(显示键盘所按 的字符),此函数使用的是缓冲输入方 式,只有当按下回车键后该函数才返回, 函数返回后,从缓冲区读取一个字符颜 其调用格式为: getchar(); 实例 cgetchar 2021/4/11 getch函数 :从标准输入设备(通常指键 盘)上读入一个字符。该函数读入的字 符不会回显在屏幕上,是非缓冲函数, 只要输入一个字符,该字符立即被接收, 程序继续执行下一条语句。其调用形式 为: getch(); 该函数包含在 conio.h头文件中 2021/4/11 getche函数 :从标准输入设备(通常指键 盘)上读入一个字符。该函数将读入的 字符会回显到屏幕上,也是非缓冲函数, 只要输入一个字符,该字符立即被接收, 并回显在输出屏幕上,程序再继续执行 下一条语句。其调用形式为: getche(); 该函数包含在 conio.h头文件中 实例 c234 2021/4/11 2.3 运算符与表达式 2021/4/11 在程序中, 表达式 是计算求值的基本单位。 它由运算符、运算量(也称操作数,可以是 常量、变量等)和括号组成。 表达式可以被 定义为 : ( 1)一个常量或标识对象的标识符是一个 最简单的表达式,其值是常量或对象的值。 ( 2)一个表达式的值可以用来参与其他操 作,即用作其他运算符的操作数,这就形成 了更复杂的表达式。 ( 3)包含在括号中的表达式仍是一个表达 式,其类型和值与未加括号时的表达式相同。 2021/4/11 有些运算符需要两个操作数,使用形式 为:操作数 1 运算符 操作数 2 这样的运算符称为 二元运算符 (或双目 运算符)。只需要一个操作数的称为 一 元运算符 (或单目操作数)。 2021/4/11 2.3.1 算术运算符 2021/4/11 其中“”作负号时是一元运算符,其 余的都是二元运算符。 特别注意 : 5 / 2=2, 5.0 / 2=2.5 即当“ /” 两边都为整数时,进行整除运算,即结 果仍为整数,自动丢失余数。例如:表 达式 1/2*(a+b)的值恒为 0,改进方法:写 成 0.5*(a+b)或 1.0/2*(a+b) 实例 c06 c12 2021/4/11 自增( + +)自减( ) 有前置和后置两种形式 : 前置形式 : + +变量名 ,变量名 后置形式 : 变量名 + , 变量名 运算功能 :对变量的值进行自加 1(自减 1) 运算。 如:语句 +a;或 a+; 相当于执行 a=a+1; 语句 -a; 或 a-; 相当于执行 a=a-1; 2021/4/11 前置形式运算规则: 先对表达式中含有前置自增(减)运算符的 变量进行自加 (减 )1,然后用这些变量的新值参与 表达式运算。 后置形式运算规则: 先用变量原值参与表达式运算,然后对含有 后置自加(减)运算符的变量进行自加(减) 1 运算。 例 1: int a=2,b ; b=a ; 则 a=1, b=2 例 2: int a=2,b=1,c; c=a+ b ; 则 a=3,b=0,c=1 例 3: int x=5,y=1; y+=-x+y; 则 x=4,y=6 2021/4/11 说明: (1) +, -只能对变量或用小括号括起来的 指针对象进行运算 ,不能对常量或表达 式进行。如: 5+; (a+b)+; 等都是错 误的用法 。而 (*p)+;与 *p+; +(*p); 与 +*p;都是正确的表达式 ,但运算的意 义并不相同。 (2) +, -总是与最前面的变量或小括号括 起来的指针对象尽量匹配。 如 : c=a+b; 应理解为 c=a+b; a+; 而不是 +b; c=a+b; (3) +, -与小括号混合使用,运算规则不 变,但 +, -的结合性由小括号指定。 2021/4/11 例 1:已知 int a=1,b=2,c; 3 9 3 18 1) c=a+b; 2) c=(a+)+b; 3) c=a+(+b); 则 a=2,c=3 同 1) 则 b=3,c=4 4) 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; 2021/4/11 ( 4)变量值与表达式值应分别考虑。 如:已知 int a=2; 表达式 a+的值为 2,但变量 a=3; 表达式 +a的值为 3,变量 a=3。 实例 c08 2021/4/11 2.3.2 关系与逻辑运算符和表 达式 任何数值(字符、整数、实数、指针)都可以 表示逻辑意义,数值非 0,表示真; 0表示假; 关系运算符 (按优先级顺序) = = != 小于 小于或等于 大于 大于或等于 等于 不等于 优先级相同(较高) 优先级相同(较低) 2021/4/11 逻辑运算符 : 等效于语句 if(a0) c=1; else c=0; 实例: c208 2021/4/11 2.3.4 位运算符 2021/4/11 求反运算 :对整数的每个二进制位进行非 运算,即 0变成 1, 1变成 0,得到运算结果。 c=a 0000 0000 0000 0011 3 c=(1011)2=11 c=ab; c=(1001)2=9 异或的重要性质: a. 若 ab=c,则有 cb=a ,ca=b (还原性) b. aa=0 (自己与自己异或恒为 0) 2021/4/11 移位运算 an a 整除 2n。 如 :unsigned char a=245 ,b; 1) b=a3; 1111 0101 245 2021/4/11 右移 3位 :0001 1110101 低位移出 3位自 动扔掉,高位填入 3个 0,下划线部分的 8bit为运算结果,对应十进制无符号整数 为 30,故 b=30=245/8 2021/4/11 2.3.5 赋值运算符和表达式 最简单的赋值运算符是“ =”,带有赋值 运算符的表达式称为 赋值表达式 。 普通赋值 :变量名 =表达式; C规定,赋值运算式也是一个表达式, 该表达式的值为等号右边表达式传给等 号左边变量的值。故, C允许连续赋值。 实例 c13 2021/4/11 int a,b,c; a=b=c=0; 连续使用等号时,从右向左 顺序赋值 a=(b=(c=0); C规定,等号左边表达式与右边变量类 型不一致时,表达式自动转换为变量类 型,再赋值。 例: int a; a=3.5;则 a=3 2021/4/11 自反赋值 所有二元运算符,都可以与 =组成自 反赋值运算,其规定即用法同普通 =,但运 算功能有所不同。 a+=2; 等价于 a=a+2; 形如 a=a+1; a+=1; +a; a+; 例: int a=12; a+=a-=a*=a; 求表达式的值与变量 a 的值。 其中表达式的值为: 0, 变量 a=0 2021/4/11 不同类型数据混合运算规则 当运算符两边数据类型不一致时,系统 自动将低类型转换为高类型,运算结果为高 类型数据,转换方法如下所示: 高 double float long unsigned 低 int char,short 2021/4/11 例 1:若有 unsigned a=1; int b=-1,long c; 问:执行语句 c=a*b; 后,变量 c的值 ? 此题,很容易错误地得出 c=-1! 解:由于 a为 unsigned类型, b,为 int 类型, a的类型高于 b,故首先将 b转换为 unsigned 类型,即 b的值变成了 65535,1*65535得 65535,结果仍为 unsigned类型,且 未 溢出, 最后,将 unsigned类型的 65535转换为长 整型,得 65535L,存入变量 c,故 c=65535。 2021/4/11 例 2: char c; int i; float f; double d; 分析表达式: (c/i)+(f*d)-(f+i); ( c / i ) + ( f * d ) - ( f + i ) char int float double float int int int double double float float double double double double 2021/4/11 2.3.6 强制类型转换 (类型名)表达式 将表达式结果变成 ( )中指定的数据类型 例: float a; int x=1000; a=x*x; /* a并不等于 1e6 */ 正确作法: a=(float)x*x; 错误作法: a=(float)(x*x); 实例: c07 2021/4/11 2.3.7 逗号运算符与表达式 格式 : 表达式 1,表达式 2,表达式 表达式 n 功能 :从左向右顺序计算式 1到式 n,以 最后一个算式的值为返回值 例 : a=4; a=a+1, a*=2, a%=3; 最后 a=1, 整个逗号表达式的值为 1 2021/4/11 2.3.8 sizeof运算符 求类型长度 :sizeof(类型名 |表达式) 实例: csizeof 2021/4/11 表达式应用举例 例 1:已知 char型变量 c中,存放着一个大写英文字母, 写出赋值语句,将变量 c中的字符变成对应的小写 英文字母。 解: c+=32; 例 2:已知整型变量 x中,存放着一个三位正整数, 试写出表达式,求 x的十位数字对应的字符 。 如 : x=249 ,则表达式应返回字符 4 解:方法 1: x/10%10+0 方法 2: x%100/10+48 2021/4/11 作 业 1. 下面各小题例举的是 C+的合法注释吗? ( 1) /*This is an attempe/*to next*/a comment*/ ( 2) /This is an attempe to next a comment/ ( 3) /*This is an attempe to next to a comment*/ 2021/4/11 2. 对于语句 int a=2,b=2,c=2; 判断下列表达 式是否正确,并计算正确的表达式的值。 ( 1) a=b+c+ ( 2) a=+b+c ( 3) a=+b+c+ ( 4) a=b-+c- ( 5) a=b-c ( 6) a=-b+c ( 7) a=b+c ( 8) a0时,返回 1; a= = 0时,返回 0;a0则返回 -1。 5. 写一个表达式,求一个实型变量 x的小 数部分。 如 :x= -25.8704,则表达式应返回 -0.8704 x=1.00 ,则表达式返回 0
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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