C语言程序设计2第3章-数据类型、运算与表达式.ppt

上传人:max****ui 文档编号:10963522 上传时间:2020-04-16 格式:PPT 页数:70 大小:855KB
返回 下载 相关 举报
C语言程序设计2第3章-数据类型、运算与表达式.ppt_第1页
第1页 / 共70页
C语言程序设计2第3章-数据类型、运算与表达式.ppt_第2页
第2页 / 共70页
C语言程序设计2第3章-数据类型、运算与表达式.ppt_第3页
第3页 / 共70页
点击查看更多>>
资源描述
1 第三章数据类型 运算符和表达式ChapterThreeVariables DataTypes andArithmeticExpressions 2 3 1C语言数据类型 单精度型float singleprecision 双精度型 doubleprecision 基本类型BasicType 构造类型conformation 指针类型 Pointer 空类型 Dummy 数据类型DataType 整型 integer 字符型 character 实型 浮点型 Real 枚举类型 enumeration 数组 Array 结构体类型 Structure 共用体类型 Union 3 C字符集 4 C字符集 续 5 C字符集 续 6 3 2 1常量 Constant 1 定义 在程序执行期间 其值不发生变化的量称为常量2 类型 直接常量 Direct 又称字面常量 分为整型常量 123 321 0 654321 78实型常量 2 68 3 14 2 718 1 38e12单字符常量 a C z 字符串常量 china student classnumber 3 2常量与变量 ConstantandVariable 7 3 2常量与变量 ConstantandVariable 符号常量 Symbol 即用一个符号代表一个常量例如 definePI3 1415926 预处理命令main floatr l s r 2 l 2 PI r s PI r r printf l d s d l s 编译器编译后 程序中的有关代码变成了 obj文件 不可见 l 2 3 1415926 r s 3 1415926 r r 8 说明 符号常量必须先定义后才能用它表示一个数值 符号常量的值在其作用域内不能改变 也不能被再赋值 符号常量名习惯用大写字母表示 9 3 2 2变量 1 定义 程序执行期间值可以改变的量 2 命名规则 变量名由标识符表示 只能由字母 数字和下划线三种字符组成 且第一个字符不得为数字 例如 下列标识符中 不合法的变量名有 M D John 12 gf 1add age 每个双精度变量分配8字节存储单元 3 a 10 在C语言中 变量之所以要强制定义 其目的 1 避免在使用时输错 intstudent stadent 30 2 每一个变量被指定为一确定的类型 在编译时就能为其分配相应的存储单元 3 指定每一个变量为一确定的类型 在编译时据此检查该变量所进行的运算是否合法 例如 如果有doublex y intz 对于运算 z x y 在编译时系统就会提示该运算类型不匹配 warningC4244 conversionfrom double to int possiblelossofdata 11 选变量名时 要做到 见名知意 例如 namestudent nummaxclasssum大小写字母是两种不同的字符 C变量名习惯用小写字母表示 变量名的长度因系统而异 当用TC编译系统时 不要超过8个字符 而用VisualC 编译系统时 几乎无限制 请注意 12 3 3整型数据 3 3 1整型常量的表示法十进制整数 由数字 0 9 和正负号表示例如 123 456 0等八进制整数 以0开头例如 037 0 0435 0551 0123即 123 8 83 10 123 8 1 82 2 81 3 80 83 10十六进制整数 以0 x或0X开头例如 0X2 0 x9F 0Xbcd 0X0 x123即 123 16 291 10 0 x12即 12 16 18 10 13 3 3 2整型变量整型数据在内存中的存放形式 补码表示法 便于加减运算 inti i 10 10 1010 2 余数 首位 0000000000001010 1111111111110101 1111111111110110 10的原码 取反 再加1 得 10的补码 10的表示法 正数的补码等于它的原码 10的表示 2 10 2 5 2 2 1 0 201 210 221 23 14 计算10 10 10 10 10 10 0 10 10 15 2整型变量的分类 基本型 16位 以int表示 32768 32767 短整型 16位 以shortint或short表示1 类型长整型 32位 以longint或long表示 2 1E9L 2 1E9L 无符号基本型 unsignedint 无符号型无符号短整型 unsignedshort 无符号长整型 unsignedlong 一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍 unsignedintb 变量b的数值范围 0 65535 整型变量的字长short型 2个字节byte 字长16位bit int型 一般是2个字节long型 4个字节 字长32位 C要求short型数据长度短于int型 int型短于long型 short int long long型可以得到大范围的数据 20亿 20亿 但同时会降低运算速度 因此除非不得已 不要大量使用long型变量 16 17 整型数据的溢出 main inta b a 32767 b a 1 printf d d a b 运行结果 32767 32768改进 将变量a和b改成long型 并按 ld格式输出 但有时 系统 例如VisualC 自动将int型变量 16位 扩展为long型变量 32位 18 整型数据的数据范围请看 ANSI标准定义的整数类型 P43表 注意 1 在一个整数常量后面加一个字母l或L 则认为是long型常量 例如123456789l 9876543L2 在一个整数常量后面加一个字母u或U 则认为是unsignedint型常量 例如56789U 56789u 19 3 4实型数据 RealData 3 4 1实型常量表示形式有如下两种 十进制数形式 由数字和小数点及正负号组成 注意 必须有小数点 例如 23 678 0 0083 0 75 435 36 247 00也可能忽略小数点前面或者后面的数字215 95 71 5 67823 指数形式 由数字 小数点 字母e或E及正负号组成 注 e或E之前必须有数字 其后指数必须为整数 例如 3 5E 5 3 5 10 5 2e3 2 103 错误 E2 3 6e3 5 e6 e 20 3 4 2实型变量实型变量可分为 单精度 float型 如 floatx y 双精度型 double型 如 doublea b c 说明 1 float型变量用于存储单精度实数 在内存中占4个字节 bytes 或32位 bits 提供6 7位有效数字 2 double型变量用于存储双精度实数 在内存中占8个字节 bytes 或64位 bits 提供15 16位有效数字 21 实数的存储方式与整形数据不同 符号小数部分指数部分3 14159 10255对于float型10进制数 一些编译系统以24位表示小数部分 8位表示指数部分 3 一个实型常量不分float和double型 一个实型常量可以赋给一个float型或double型变量 并根据变量的类型截取实型常量中相应的有效位数字 31415901111111 22 例如 main floata c doubleb a 123456789012345 6789 b 123456789012345 6789 c a 20 printf a f nb f nc f n a b c 输出结果 a 123456788103168 000000b 123456789012345 670000c 123456788103188 000000 避免将一个很大的数与一个很小的数相加减 以免出现舍入误差 23 3 5字符型数据 CharacterData 3 5 1字符常量 CharacterConstant 1 用单引号括起来的一个字符如 T 7 2 转义字符 是一种特殊的字符常量 由反斜杠 和一个字符组成 其作用是用 将后面的字符转变为另外的意义 如 n 中的 n 不表示字母n 而表示 换行 的意思 这是一种控制字符 24 例如 字符含义 n 换行 t 横向跳格 水平制表符 b 退格 v 竖向跳格 垂直制表符 r 回车 f 走纸换页 a 报警声 0 空字符 反斜线 单引号 双引号 25 说明 1 ddd 与 xhh 分别表示用八进制数或十六进制数表示一个字符 例 101 代表ASCII码 十进制 为65的字符 A 系统中所有字符都有ASCII值 见374页 2 由于 在C语言中都有了特殊的意义 故要想在字符串中使用它们 须在其前面再加上一个反斜线 例如 Tomsaidtothewaiter I dlikeacupofcoffee printf Tomsaidtothewaiter I dlikeacupofcoffee 3 除了前面介绍的特殊转义字符外 字母 代表字母本身 如 c 代表字母c 26 3 5 2字符变量 CharacterVariable 定义形式 char标识符1 标识符2 标识符n例如 charc1 c2 c3 ch c1 a c2 b c3 c ch d 说明 1 字符变量只能存储一个字符 在内存中占一个字节 2 在内存中 是把字符对应的ASCII码值放到存储单元中 0 255 3 字符型数据与整型数据之间可以通用 27 main charc1 c2 c1 97 数字赋值给字符变量c2 98 printf c c n c1 c2 printf d d n c1 c2 输出结果 ab9798 main inti charc i a 字符赋值给整型变量c 97 数字赋值给字符变量printf c d n c c printf c d n i i 输出结果 a 97a 97 28 3 5 4字符串常量 Characterstringconstant 1 定义 括在一对双引号 之内的字符序列或转义字符序列称为字符串常量 例如 Howareyou a abc n t 2 存储 字符串中的字符依次存储在内存中一块连续的区域内 并且把空操作字符 0 自动附加到字符串的尾部作为字符串的结束标志 故字符个数为n的字符串在内存中应占n 1个字节 例 charc 6 china char s china 29 b 与 B 是否相同 b 与 b 是否相同 b为98 B为66 b 是字符常量 占据个1字节 b 是字符串常量 占据个2字节 98 980 b 0 30 3 6变量赋初值 Variableinitialization 1 初始化 在定义变量的同时为变量赋初值2 形式 类型标识符变量名 常量或常量表达式例如 intx 10 doublesum 0 charch a 变量赋初值允许使用符号常量例如 definePI3 1415926 floatx PI 可对被定义的变量的一部分赋初值例如 inta b c 1 d 2 floatr 2 l s 可对几个变量赋以同一个初值例如 inta 6 b 6 c 6 或可写为 inta b c 6 31 数据类型的尺寸和范围 3 7各类数值型数据间的混合运算 32 double 8bytes float 4bytes longint 4bytes unsignedint 4bytes int 2bytes char short 1bytes 形式 隐式转换 由系统自动进行 显式转换 强制类型转换 隐式转换的转换规则 先自动转换成同类型数据 再进行运算 规则是低字长类型转换成高字长类型 33 3 7各类数值型数据间的混合运算 1 箭头表示当运算对象类型不同时的转换方向 一般是从低精度的类型转换到高精度的类型 2 向左的横向箭头表示即使在同一种数据类型间进行运算时也要进行转换 用于提高精度 即 同为float型数据的运算 一律转换成double型数据后进行 同为char和shortint型数据的运算 一律转换成int型的数据后进行 double 8bytes float 4bytes longint 4bytes unsignedint 4bytes int 2bytes char short 1bytes 34 34 3 7各类数值型数据间的混合运算 3 当运算对象具有相同类型时 向上的箭头不再起作用 即 int型与int型数据运算的结果仍为int型 unsigned型与unsigned型数据运算的结果仍为unsigned型 long型与long型数据运算的结果仍为long型 double 8bytes float 4bytes longint 4bytes unsignedint 4bytes int 2bytes char short 1bytes 35 char char int int char d a 100 97 003 float float double double doubleint float float float floatfloata a 1 3 0 1 0 3 0 0 3333333doublec c 1 0 3 0 0 3333333333333333intb b 1 3 0 1 0 3 0 0 3333333 0int int intfloata a 1 3 0 0 intb b 1 3 0 Decisionloss 36 例 若有 inti floatf doubled longe 试判断表达式3 b i f d e的类型intfloatfloatdoubledouble例 如果inta 5 b 2 doublex x a b printf x f x 输出结果是什么 X 2 000000 37 C语言使用的基本表达式有 赋值表达式 如 a 3 算术表达式 如 3 4 2 关系表达式 如 3 2 a b c 0 逻辑表达式 如 3 5 a b 条件表达式 如 a b a b 逗号表达式 如 a 3 b 4 c 5 38 3 8算术运算符和算术表达式 ArithmeticOperatorsandExpressions 1 基本的算术运算符 整型数运算inta 14 b 4 a b 10a b 18a b 56a b 3 decimalparttruncated a b 2 reminderofdivision 14 3 2 39 实型数运算floatx y z x 6 0 7 0 0 857143y 1 0 3 0 0 333333z 2 0 3 0 0 666667 operatorcannotbeusedhere混合运算15 10 0 1 515 10 1 40 说明 上述运算符均为双目运算符 即有两个操作数twooperands 2 运算中 若操作数均为整数 则执行整除运算 舍去小数部分 例如 5 3 1 3 要求两侧均为整数 运算不能用于float和double型数据例如 2 41 2 算术表达式和运算符的优先级与结合性 PriorityandCombination 附录III 1 算术表达式 用算术运算符和括号将操作数连接起来的 符合 语法规则的式子 例如 a b a b c 2 8 2 优先级 高于 3 结合性 自左至右的结合方向 例如 a b c 42 说明 表达式应用括号括起例如 int x y 在强制类型转换时 得到一个所需类型的中间变量 原来变量类型未发生变化 3 用途 完成某种运算 如 int 5 5 3 在函数调用时使实参与形参一致 3 强制类型转换 Forcedtypetransformation 形式 类型名 表达式 例如 double a b 43 举例作用x int 7 57 5通过截尾转换为整数a int 21 3 int 4 5转换为21 4 结果为5b double sum n以浮点数 实型数 模式计算除法y int a b 将表达式a b转换为整数z int a b将a转换为整数然后与b相加p cos double x 在使用x之前 将其转换为实型数 44 44 main floatx inti x 3 6 i int x printf x f i d x i 输出结果 x 3 600000 i 3 注意 强制类型转换后并不改变原来变量的类型请看下面程序段 45 4 自增 自减运算符 作用 使变量的值增 或减 如 i i等于i i 1i i等于i i 1 i i先执行i i 1 i i 1 再使用i的值i i 先使用i的值 再执行i i 1 i i 1 举例 intj i 3 j i j的值为4 i为4 j i j的值为3 然后i的值变为4 j i j的值 3 然后i的值变为4 46 说明 1 为单目运算符 2 只能用于变量 而不能用于常量或表达式 例如 x y a b 中合法的为 3 自增 自减运算符为右结合性 即自右至左 例如 a a 错误的结合 a y x y x 错误的结合 y x 4 自增 自减运算符 47 练习题 设a 2 则执行语句k a a 后的k值为多少 k 6 a 4 inti 3 a i i i inti 3 printf d d i i P58最好写成i 3 j i printf d d i j 请避免这种写法 48 3 9赋值运算符和赋值表达式AssignmentOperatorandExpressions 1 赋值运算符 形式 变量名 常量或表达式作用 将右边常量或表达式的值赋给左边的变量例如 b c d 要求 如果表达式类型与左边的变量的类型不匹配 自动进行类型转换 49 2 类型转换的原则 1 将实型数据赋给整型变量时 舍弃实数的小数部分 如 若a为int型变量 执行a 3 56后 则a 3 2 将整型数据赋给实型数据时 数值不变 但以浮点形式存储到变量中 如 若b为float型变量 执行b 35后 则b为35 00000 3 整型数据赋给字符型变量时 只将低8位原封不动地送到字符变量中 即截断 00100001 0000000100100001 如 i 289 256 33 c 33c 50 4 字符型数据赋给整型变量时 将字符数据 8位 放到整型变量低8位中 高8位则需要依据 符号扩展 来决定 51 5 将带符号数据赋给长度相同的无符号型变量 原样照赋 6 double赋给float时 截取前面7位有效数字 52 53 54 P66 3 11 写出下面赋值的结果 格中写了数值的是要将它赋给其它类型的变量 将所有空格添上赋值后的数值 int9910076536842 1 char c d L 5 D X unsignedint991007653684265535 float99 000000100 00000076 00000053 6568 00000042 00000065535 000000 longint991007653684265535 55 总的结论 低精度的数据赋值给高精度的变量 其精度将保持 高精度的数据赋值给低精度的变量 其精度将降低 有时甚至可能出错 56 3 复合赋值运算符 Compoundassignmentoperators 复合赋值运算符 在赋值符 之前加上其它运算符共有10种复合赋值运算符 位运算 例如 a 3a a 3x y 3x x y 3 x yx x y 57 普通赋值运算符简洁赋值运算符a a 3a 3a a 3a 3a a n 1 a n 1a a n 1 a n 1a a ba ba b c 6a b 4 c 6 a b 4 c 6 58 4 赋值表达式 Assignmentexpressions 定义 由赋值运算符将一个变量和一个表达式连接起来的式子 形式 变量 表达式结合方向 由右向左说明 赋值表达式的值为被赋值的变量的值 其中 表达式 又可以是一个赋值表达式 例如 a b c 6a b 4 c 6 a b 4 c 6 x b 2 a y1 x dt sqrt b b 4 a c y2 x dt 59 练习 写出顺序执行下列表达式运算后的x值 1 x a b 102 x 25 c 3 X 10 X 1 赋值表达式中可以包含复合赋值运算符例如 若a 12 计算表达式a a a a运算后a的值第一步 a a aa a a a 12 12 12 132第二步 a 132a a 132 264错误理解 a a a a a a a a a 120 60 3 10逗号运算符和逗号表达式 1 逗号运算符 即 优先级 为所有运算符中级别最低的 2 逗号表达式形式 表达式1 表达式2 表达式n求解过程 顺次求解表达式1 表达式2 最后求解表达式n 逗号表达式的值为表达式n的值 例如 a 3 5 a 4a 3 5 a 4 a 5x a 4 3 a 1 a 10 a 2 b 3 c 4 602010 61 例如 v x 10 y 5 x y Thevalueofvis15 应用 1 在for循环中 for n 1 m 10 n m n m 2 在while循环中 while c getchar c 0 3 数值交换 t x x y y t 要牢记 不要使用关键词或者系统库函数的名字作为标识符 变量名或函数名 不要使用只差一 两个字符的变量名 每个变量要在程序或函数开始处声明其类型 在程序中被使用前 所有变量必须赋值 不要在 define命令的结尾处加 不要在 和define之间加空格 C对于数据的溢出不给任何警告或指示 只会给出错误的结果 必须小心定义数据的类型 62 要牢记 小心使用自增和自减运算符 在使用前了解前置 如 i 和后置 如i 的差别 在计算顺序混乱的地方 小括号的使用可使它们变清晰 在赋值以前 表达式的类型被转换成与等号左边的变量类型一致 注意转换时可能的数据损失 所有的数学函数的参数 自变量 和返回值 计算值 均为double类型 例如y sin x 中的x和y 不要对浮点数变量使用自增和自减运算符 63 64 第三章作业 所有程序均需上机调试 正确后方能提交 3 1判断以下程序段有否错误 写出正确的程序段 并上机调试验证你的程序 提交修改后的源程序 include voidmain floatx 3 1415 inty z student num 196 PRINTF Hello n printf thestudent numberis d n num printf thestudent numberis D n student num printf x d n x printf y f n y z 3 2 printf z d n z 说明 d 是输入 输出整形数据的格式 f 是输入 输出实形数据的格式 n 是换行的格式 65 3 2在计算机屏幕上输出一段文字 Johnsaidtohisbrother 换行 空两格 Let shavearest 并在此段文字前后各空两行 提交源程序 3 3习题3 9 先写出运行结果 然后编制程序验证之 提交源程序 3 4习题3 10 先写出运行结果 然后编制程序验证之 3 5习题3 12 先写出运行结果 然后编制程序验证之 提交源程序 注意每次计算之前 将a的值复原为12 66 3 6 判断下列陈述是对还是错 所有运算符具有相同的优先级 求模运算符 只能用于整型数运算符 和 具有相同的优先级 在C中 如果一个数据项为零 它就被认为是逻辑假 表达式 xy等效一个一元表达式由一个没有运算符的操作数组成 结合性被用来决定具有几个表达式的运算哪个优先执行 表达式语句用句点 结尾对于混合表达式运算 隐式类型转换是自动进行的强制类型转换可以用于改变表达式小括号可以用于改变表达式 以下为自我测试题 做完之后自己对答案 67 3 7 下列哪些表达式是有效的 如果有效 给出表达式的值 否则说明原因 a 25 3 2b 9 4 5c 7 5 3d 14 3 7 2e 14 3f 15 25 5 0g 5 3 3 5 3h 21 int 4 5 68 3 8 假设有 inta 10 b 20 c 判断下列表达式是对还是错 a 语句a 10 是有效的 b 表达式a 4 6 6 2的值为11 c 表达式b 3 2 2 3的值为20 d 语句a b 将30赋给a 将20赋给b e 语句 a 运算的结果为a 12 f 语句a b 将值0 5赋给a 3 9 找出下列运算式中不必要的小括号 给出其精炼的表达式 x y 5 z 8 25 x y p q m n x y x 3 y 69 答案 3 1ErrorCorrectSentence1 nosemicolonsign Sentence4 PRINTFprintfSentence5 d dSentence6 D dSentence7 实型数用整型格式输出 错误Sentence8 整型数用实型格式输出 错误Sentence9 两个整数相除得到整数 小数部分被截尾Sentence10 实数的小数部分被截尾 精度降低3 6 a Falseb Truec Trued Truee Truef Falseg Trueh Falsei Truej Truek True 70 3 7 a 0b 7c 无效 实数不能用 运算d 3e 2f 无效 5 0应该有小括号g 5h 13 8 a Trueb Falsec Trued Falsee Truef False3 9 a x y 5 z 8 25b x y p qc m n x yd x 3 y
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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