资源预览内容
第1页 / 共65页
第2页 / 共65页
第3页 / 共65页
第4页 / 共65页
第5页 / 共65页
第6页 / 共65页
第7页 / 共65页
第8页 / 共65页
第9页 / 共65页
第10页 / 共65页
亲,该文档总共65页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第第第2 2 2 2章章章章 数据数据数据数据类型、运算符与类型、运算符与类型、运算符与类型、运算符与表达式表达式表达式表达式林淑玲林淑玲 lin.sl163.com2024/9/242 知识目标知识目标:掌握C语言的数据类型;深刻理解常量与变量;深刻理解整型、实型和字符型数据常量和变量的表示方法;掌握赋值运算符和赋值表达式、变量的赋值方法;理解各种数据类型之间的混合运算。 能力目标能力目标:能正确定义“班级学生成绩管理系统”中的相关数据的类型。第第2 2章章 数据数据类型、运算符与表达式类型、运算符与表达式2024/9/243内容提要内容提要内容提要内容提要 基本数据类型;基本数据类型;基本数据类型;基本数据类型; 常量和变量;常量和变量;常量和变量;常量和变量; 标识符命名;标识符命名;标识符命名;标识符命名; 常用运算符和表达式;常用运算符和表达式;常用运算符和表达式;常用运算符和表达式; 运算符的优先级与结合性运算符的优先级与结合性运算符的优先级与结合性运算符的优先级与结合性 2024/9/244一个简单的一个简单的一个简单的一个简单的C C程序例子程序例子程序例子程序例子 # #includeinclude /*/*函数功能函数功能函数功能函数功能:计算两个整数相加之和计算两个整数相加之和计算两个整数相加之和计算两个整数相加之和 入口参数入口参数入口参数入口参数:整型数据整型数据整型数据整型数据a a和和和和b b 返回值:返回值:返回值:返回值: 整型数整型数整型数整型数a a和和和和b b之和之和之和之和* */ /intint AddAdd( (intint a, a, intint b) b) returnreturn (a + b); (a + b); /*/*主函数主函数主函数主函数* */ /mainmain()() intint x, y, sum = 0; x, y, sum = 0;printf(Input two integers:);printf(Input two integers:);scanf(%d%d, &x, &y); /*scanf(%d%d, &x, &y); /*输入两个整型数输入两个整型数输入两个整型数输入两个整型数x x和和和和y*/y*/sum = sum = AddAdd(x, y); /*(x, y); /*调用函数调用函数调用函数调用函数AddAdd计算计算计算计算x x和和和和y y相加之和相加之和相加之和相加之和* */ /printf(sum = %dn, sum); /*printf(sum = %dn, sum); /*输出输出输出输出x x和和和和y y相加之和相加之和相加之和相加之和* */ / 2024/9/245简单的简单的C语言程序总结语言程序总结总结总结总结总结C C C C程序:程序:程序:程序:(1) C(1) C(1) C(1) C程序是由函数构成的。程序是由函数构成的。程序是由函数构成的。程序是由函数构成的。 这这使得程序容易使得程序容易使得程序容易使得程序容易实现实现模模模模块块化。化。化。化。 (2) (2) (2) (2) 一个函数由两部分一个函数由两部分一个函数由两部分一个函数由两部分组组成成成成: : : : 函数的首部:函数的首部:函数的首部:函数的首部:例例例例2.12.12.12.1中的中的中的中的AddAdd函数首部函数首部函数首部函数首部 intint AddAdd( (intint a, a, intint b) b) 函数体:函数体:函数体:函数体:花括号内的部分。若一个函数有多个花括号花括号内的部分。若一个函数有多个花括号花括号内的部分。若一个函数有多个花括号花括号内的部分。若一个函数有多个花括号, , , ,则则最最最最外外外外层层的一的一的一的一对对花括号花括号花括号花括号为为函数体的范函数体的范函数体的范函数体的范围围。 函数体包括两部分函数体包括两部分函数体包括两部分函数体包括两部分 :声明部分:声明部分:声明部分:声明部分: intint x, y, sum = 0; x, y, sum = 0;可缺省可缺省可缺省可缺省执执行部分:由若干个行部分:由若干个行部分:由若干个行部分:由若干个语语句句句句组组成。成。成。成。可缺省可缺省可缺省可缺省2024/9/246简单的简单的C语言程序语言程序总结总结 (3) C(3) C(3) C(3) C程序是由函数构成的。总是程序是由函数构成的。总是程序是由函数构成的。总是程序是由函数构成的。总是从从从从mainmainmainmain函数开始函数开始函数开始函数开始执执执执行的行的行的行的, , , ,与与与与mainmainmainmain函数的位置无关。函数的位置无关。函数的位置无关。函数的位置无关。(4) C(4) C(4) C(4) C程序书写格式自由程序书写格式自由程序书写格式自由程序书写格式自由, , , ,一行内可以写几个语句一行内可以写几个语句一行内可以写几个语句一行内可以写几个语句, , , , 一个语句可以分写在多行上,一个语句可以分写在多行上,一个语句可以分写在多行上,一个语句可以分写在多行上,C C C C程序没有行号。程序没有行号。程序没有行号。程序没有行号。(5) (5) (5) (5) 每个语句和数据声明的最后必须有一个每个语句和数据声明的最后必须有一个每个语句和数据声明的最后必须有一个每个语句和数据声明的最后必须有一个分号分号分号分号。(6) C(6) C(6) C(6) C语言本身没有输入输出语句。输入和输出的操语言本身没有输入输出语句。输入和输出的操语言本身没有输入输出语句。输入和输出的操语言本身没有输入输出语句。输入和输出的操作是由库函数作是由库函数作是由库函数作是由库函数scanfscanfscanfscanf和和和和printfprintfprintfprintf等函数来完成的。等函数来完成的。等函数来完成的。等函数来完成的。(7)(7)(7)(7)可以用可以用可以用可以用/*/*/*/* */*/*/*/进行注释。进行注释。进行注释。进行注释。2024/9/247源程序的结构特点源程序的结构特点源程序的结构特点源程序的结构特点1 1. .一个语言源程序可以由一个或多个源文件组成。一个语言源程序可以由一个或多个源文件组成。2 2. .每个源文件可由一个或多个函数组成。每个源文件可由一个或多个函数组成。3 3. .一个源程序不论由多少个文件组成,都有一个且只能有一一个源程序不论由多少个文件组成,都有一个且只能有一个个mainmain函数,即主函数。函数,即主函数。4 4. .源程序中可以有预处理命令源程序中可以有预处理命令(include (include 命令仅为其中的一种命令仅为其中的一种) ),预处理命令通常应放在源文件或源程序的最前面。,预处理命令通常应放在源文件或源程序的最前面。5 5. .每一个说明,每一个语句都必须以分号结尾。但预处理命每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号令,函数头和花括号“ ”之后不能加分号。之后不能加分号。6.6.标识符,关键字之间必须至少加一个空格以示间隔。若已标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。有明显的间隔符,也可不再加空格来间隔。7.C7.C语言程序中可加任意多的注释。通常情况下,语言程序中可加任意多的注释。通常情况下,“/”注释注释一行,一行,“/* /* */ */”注释中间的所有内容。注释不参加编注释中间的所有内容。注释不参加编译,因此不进行错误查找处理。译,因此不进行错误查找处理。8.8.用户定义的变量或函数等其他的量必须先定义后使用。用户定义的变量或函数等其他的量必须先定义后使用。2024/9/248书写程序时应遵循的规则书写程序时应遵循的规则书写程序时应遵循的规则书写程序时应遵循的规则C C语语言程序言程序言程序言程序书书写中写中写中写中应应当注意的当注意的当注意的当注意的问题问题(1 1) 用分号作用分号作用分号作用分号作为语为语句的句的句的句的结结束符,不可省略束符,不可省略束符,不可省略束符,不可省略( (即便是最后即便是最后即便是最后即便是最后一个一个一个一个语语句也不能省略句也不能省略句也不能省略句也不能省略) )。 3 3种不能加分号的情况:种不能加分号的情况:种不能加分号的情况:种不能加分号的情况:预处预处理命令后、定理命令后、定理命令后、定理命令后、定义义函数名称函数名称函数名称函数名称(函数(函数(函数(函数头头)后、花括号()后、花括号()后、花括号()后、花括号( )之后。)之后。)之后。)之后。(2 2) 第一行是第一行是第一行是第一行是预处预处理命令行理命令行理命令行理命令行, ,其中的指令必其中的指令必其中的指令必其中的指令必须须以符号以符号以符号以符号“ “#”#”开始,所指定的开始,所指定的开始,所指定的开始,所指定的头头文件也必文件也必文件也必文件也必须须用引号或尖括号用引号或尖括号用引号或尖括号用引号或尖括号标识标识。 例如,例如,例如,例如,#include stdio.h #include stdio.h 或或或或 #include #include 。(3 3) 主函数主函数主函数主函数mainmain()后的括号不能缺省。()后的括号不能缺省。()后的括号不能缺省。()后的括号不能缺省。2024/9/249书写程序时应遵循的规则书写程序时应遵循的规则书写程序时应遵循的规则书写程序时应遵循的规则编码风格格1)1)源程序通常使用小写字母,只有符号常量或其他特殊源程序通常使用小写字母,只有符号常量或其他特殊源程序通常使用小写字母,只有符号常量或其他特殊源程序通常使用小写字母,只有符号常量或其他特殊用途的符号才大写。用途的符号才大写。用途的符号才大写。用途的符号才大写。2)C2)C语语言可以一个言可以一个言可以一个言可以一个语语句占一行,也可多个句占一行,也可多个句占一行,也可多个句占一行,也可多个语语句占一行。句占一行。句占一行。句占一行。但后者不但后者不但后者不但后者不规规范,所以并不提倡。范,所以并不提倡。范,所以并不提倡。范,所以并不提倡。3)3)程序代程序代程序代程序代码码采用采用采用采用缩进缩进格式。格式。格式。格式。4)4)建建建建议议同一同一同一同一层层次的次的次的次的语语句句句句应应左左左左对齐对齐。5)5)用花括号用花括号用花括号用花括号对对()表示各个)表示各个)表示各个)表示各个结结构构构构层层次的范次的范次的范次的范围围。它可以。它可以。它可以。它可以表示函数,也可以表示循表示函数,也可以表示循表示函数,也可以表示循表示函数,也可以表示循环环体等体等体等体等2024/9/2410书写程序时应遵循的规则书写程序时应遵循的规则书写程序时应遵循的规则书写程序时应遵循的规则6)6)6)6)一个语句中不同成分之间应使用空格隔开。标识符、关一个语句中不同成分之间应使用空格隔开。标识符、关一个语句中不同成分之间应使用空格隔开。标识符、关一个语句中不同成分之间应使用空格隔开。标识符、关键字之间必须至少加一个空格以示间隔。若已有明显的键字之间必须至少加一个空格以示间隔。若已有明显的键字之间必须至少加一个空格以示间隔。若已有明显的键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可以不再加空格来间隔。间隔符,也可以不再加空格来间隔。间隔符,也可以不再加空格来间隔。间隔符,也可以不再加空格来间隔。7)7)7)7)程序中的空白行不影响程序的执行。可以为使程序清晰程序中的空白行不影响程序的执行。可以为使程序清晰程序中的空白行不影响程序的执行。可以为使程序清晰程序中的空白行不影响程序的执行。可以为使程序清晰而添加空行,但不要在一个语句中间加空行。而添加空行,但不要在一个语句中间加空行。而添加空行,但不要在一个语句中间加空行。而添加空行,但不要在一个语句中间加空行。8)8)8)8)建议使用注释语句,以增加程序的可读性。建议使用注释语句,以增加程序的可读性。建议使用注释语句,以增加程序的可读性。建议使用注释语句,以增加程序的可读性。9)9)9)9)程序块的分界符(即花括号程序块的分界符(即花括号程序块的分界符(即花括号程序块的分界符(即花括号“ ”和和和和“ ”)应各独占一)应各独占一)应各独占一)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。行并且位于同一列,同时与引用它们的语句左对齐。行并且位于同一列,同时与引用它们的语句左对齐。行并且位于同一列,同时与引用它们的语句左对齐。2024/9/2411C C程序常见符号分类程序常见符号分类程序常见符号分类程序常见符号分类 关键字(关键字(关键字(关键字(KeywordKeyword) 又称为保留字,又称为保留字,又称为保留字,又称为保留字,C C语言中预先规定的具有固定含义的一些单词语言中预先规定的具有固定含义的一些单词语言中预先规定的具有固定含义的一些单词语言中预先规定的具有固定含义的一些单词 标识符(标识符(标识符(标识符(IdentifierIdentifier) 系统预定义标识符系统预定义标识符系统预定义标识符系统预定义标识符 用户自定义标识符用户自定义标识符用户自定义标识符用户自定义标识符 运算符(运算符(运算符(运算符(OperatorOperator) 3434种,详见附录种,详见附录种,详见附录种,详见附录2 2 分隔符(分隔符(分隔符(分隔符(SeparatorSeparator) 空格、回车空格、回车空格、回车空格、回车/ /换行、逗号等换行、逗号等换行、逗号等换行、逗号等 其它符号其它符号其它符号其它符号 大花括号大花括号大花括号大花括号“ “”和和和和“ “”通常用于标识函数体或者一个语句块通常用于标识函数体或者一个语句块通常用于标识函数体或者一个语句块通常用于标识函数体或者一个语句块 “ “/*”/*”和和和和“*“*/”/”是程序注释所需的定界符是程序注释所需的定界符是程序注释所需的定界符是程序注释所需的定界符 数据(数据(数据(数据(DataData) 变量(变量(变量(变量(VariableVariable) 常量(常量(常量(常量(ConstantConstant) 2024/9/2412任务任务1 “1 “学生成绩管理系统学生成绩管理系统” ”中相关数据设计中相关数据设计1 1任务情境任务情境 “学生成绩管理系统”中的数据有常量与变量、简单类型数据和复杂类型数据。这些变量有简单类型变量,还有一些复杂类型变量,如数组、结构体、共用体、指针类型等变量。 在这里我们只对“学生成绩管理系统”中的数据做一些简单的分析。“学生成绩管理系统”中的学生信息主要有:学号、性别、年龄、三门功课成绩、总成绩和平均成绩,再加上一些与计算全班成绩有关的最高成绩、最低成绩等。如学号、性别这类数据只是起到描述一些基本信息的作用,通常情况下不进行算术运算;而年龄、三门功课成绩、总成绩和平均成绩以及最高成绩、最低成绩等这类数据有可能进行算术运算。所以针对这二类数据我们在定义数据类型时,要根据实际情况选择不同的数据类型。 下面我们通过相关理论的学习,掌握如何将“学生成绩管理系统”中的数据定义成C语言能够处理的数据。2024/9/24132 2知识必备知识必备知识必备知识必备 数据类型数据类型数据类型数据类型 常量常量常量常量 变量变量变量变量2024/9/2414数据类型(数据类型(数据类型(数据类型(Data TypeData Type) 数据为什么要区分类型?数据为什么要区分类型?数据为什么要区分类型?数据为什么要区分类型? 不同类型的数据代表不同的不同类型的数据代表不同的不同类型的数据代表不同的不同类型的数据代表不同的数据表示形式数据表示形式数据表示形式数据表示形式合法的取值范围合法的取值范围合法的取值范围合法的取值范围占用内存空间大小占用内存空间大小占用内存空间大小占用内存空间大小可参与的运算种类可参与的运算种类可参与的运算种类可参与的运算种类 从基本数据类型到抽象数据类型从基本数据类型到抽象数据类型从基本数据类型到抽象数据类型从基本数据类型到抽象数据类型无数据类型无数据类型无数据类型无数据类型基本数据类型基本数据类型基本数据类型基本数据类型 构造数据类型构造数据类型构造数据类型构造数据类型 抽象数据类型抽象数据类型抽象数据类型抽象数据类型 2024/9/2415数据类型(数据类型(数据类型(数据类型(Data TypeData Type)数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型整型整型实型(浮点型)实型(浮点型)字符型字符型枚举类型枚举类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型单精度实型双精度实型基本整型长整型短整型无符号整型2024/9/2416标识符命名标识符命名标识符命名标识符命名 变量名变量名变量名变量名 函数名函数名函数名函数名 由英文字母、数字和下划线组成,大小写敏感由英文字母、数字和下划线组成,大小写敏感由英文字母、数字和下划线组成,大小写敏感由英文字母、数字和下划线组成,大小写敏感 不可以不可以不可以不可以是数字开头是数字开头是数字开头是数字开头 直观,见名知意,便于记忆和阅读直观,见名知意,便于记忆和阅读直观,见名知意,便于记忆和阅读直观,见名知意,便于记忆和阅读 最好使用英文单词或其组合最好使用英文单词或其组合最好使用英文单词或其组合最好使用英文单词或其组合 切忌使用汉语拼音切忌使用汉语拼音切忌使用汉语拼音切忌使用汉语拼音 下划线和大小写通常用来增强可读性下划线和大小写通常用来增强可读性下划线和大小写通常用来增强可读性下划线和大小写通常用来增强可读性 variablenamevariablename variable_namevariable_name VariableNameVariableName, , variableNamevariableName 不允许使用关键字作为标识符的名字不允许使用关键字作为标识符的名字不允许使用关键字作为标识符的名字不允许使用关键字作为标识符的名字 intint, , floatfloat, , forfor, , whilewhile, , ifif等等等等 某些功能的变量采用习惯命名某些功能的变量采用习惯命名某些功能的变量采用习惯命名某些功能的变量采用习惯命名 如:如:如:如:forfor语句所采用的循环变量习惯用语句所采用的循环变量习惯用语句所采用的循环变量习惯用语句所采用的循环变量习惯用i, j, ki, j, kWindows Windows 风格风格UNIX UNIX 风格风格2024/9/2417b, B, KB, MB, GB, TBb, B, KB, MB, GB, TB Megabyte(MBMegabyte(MB) ),中文叫法:中文叫法:中文叫法:中文叫法:兆兆兆兆 Kilobyte(KBKilobyte(KB) ),中文叫法:中文叫法:中文叫法:中文叫法: KK ByteByte,中文叫法:中文叫法:中文叫法:中文叫法:字节字节字节字节 bitbit,中文叫法:中文叫法:中文叫法:中文叫法:位位位位 Gigabyte(GBGigabyte(GB) ),中文叫法:中文叫法:中文叫法:中文叫法:GG Terabyte(TBTerabyte(TB) ),中文叫法:中文叫法:中文叫法:中文叫法:T T1 TB 1 TB = 1,024 GB1,024 GB1 GB1 GB = 1,024 MB1,024 MB1 MB1 MB = 1,024 KB1,024 KB1 KB1 KB = 1,024 B1,024 B1 B 1 B = 8 b8 b2024/9/2418b, B, KB, MB, GB, TBb, B, KB, MB, GB, TB 一个位有多大?一个位有多大?一个位有多大?一个位有多大?只能是只能是只能是只能是“ “0”0”或者或者或者或者“ “1”1”,这叫二进制,这叫二进制,这叫二进制,这叫二进制 一个字节有多大?一个字节有多大?一个字节有多大?一个字节有多大?保存一个字符(英文字母、数字、符号)保存一个字符(英文字母、数字、符号)保存一个字符(英文字母、数字、符号)保存一个字符(英文字母、数字、符号) ASCIIASCII(美国标准信息交换码)编码(美国标准信息交换码)编码(美国标准信息交换码)编码(美国标准信息交换码)编码两个字节保存一个汉字两个字节保存一个汉字两个字节保存一个汉字两个字节保存一个汉字 GBGB编码编码编码编码可以表示数字可以表示数字可以表示数字可以表示数字025502552024/9/2419基本数据类型基本数据类型基本数据类型基本数据类型 intint整数,在目前绝大多数机器上占整数,在目前绝大多数机器上占整数,在目前绝大多数机器上占整数,在目前绝大多数机器上占4 4个字节。个字节。个字节。个字节。TC2TC2中中中中是是是是2 2个字节个字节个字节个字节 floatfloat单精度浮点数,一般是单精度浮点数,一般是单精度浮点数,一般是单精度浮点数,一般是4 4个字节长个字节长个字节长个字节长 doubledouble双精度浮点数,一般是双精度浮点数,一般是双精度浮点数,一般是双精度浮点数,一般是8 8个字节长个字节长个字节长个字节长 charchar字符,一般是字符,一般是字符,一般是字符,一般是1 1个字节长个字节长个字节长个字节长用来表示用来表示用来表示用来表示256256个个个个ASCIIASCII字符,或者字符,或者字符,或者字符,或者02550255的整数的整数的整数的整数2024/9/2420数据类型修饰符数据类型修饰符数据类型修饰符数据类型修饰符 shortshort shortshort intint,短整数,一般,短整数,一般,短整数,一般,短整数,一般2 2个字节长。通常简写为个字节长。通常简写为个字节长。通常简写为个字节长。通常简写为shortshort longlong longlong intint,长整数,一般是,长整数,一般是,长整数,一般是,长整数,一般是4 4个字节长。通常简写为个字节长。通常简写为个字节长。通常简写为个字节长。通常简写为longlong longlong doubledouble,长双精度(高精度)浮点数,一般是,长双精度(高精度)浮点数,一般是,长双精度(高精度)浮点数,一般是,长双精度(高精度)浮点数,一般是1010个字节长。个字节长。个字节长。个字节长。 signedsigned 用来修饰用来修饰用来修饰用来修饰charchar、intint、shortshort和和和和longlong,说明他们是,说明他们是,说明他们是,说明他们是有符号有符号有符号有符号的整数的整数的整数的整数(正整数、(正整数、(正整数、(正整数、0 0和负整数)。一般缺省都是有符号的,所以这个修饰符和负整数)。一般缺省都是有符号的,所以这个修饰符和负整数)。一般缺省都是有符号的,所以这个修饰符和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略通常省略通常省略通常省略 unsignedunsigned 用来修饰用来修饰用来修饰用来修饰charchar、intint、shortshort和和和和longlong,说明他们是,说明他们是,说明他们是,说明他们是无符号无符号无符号无符号的整数的整数的整数的整数(正整数和(正整数和(正整数和(正整数和0 0)2024/9/24210 01 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1最高位最高位 假设编译系统为假设编译系统为 int 型整数分配型整数分配 2 个字节的存储空间,即个字节的存储空间,即 16 个二个二进制位中最高位是符号位,以进制位中最高位是符号位,以 32767 为例,其在内存中的存储形式为例,其在内存中的存储形式为:为:有符号数与无符号数有符号数与无符号数1 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1最高位最高位 若是无符号数,若是无符号数,该数是该数是 65535 ,若是有符号数,该若是有符号数,该数是数是 -1 。1 10 00 00 00 00 00 00 00 00 00 00 00 00 00 01 1最高位最高位1 11 11 11 11 11 11 11 11 11 11 11 11 11 11 10 0最高位最高位1 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1最高位最高位1 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1最高位最高位-1 的原码的原码-1 的反码的反码-1 的反码加的反码加 1 后的结果后的结果-1 的补码的补码2024/9/2422uuTC2TC2中中intint的范围是的范围是-3276832767-3276832767uu如果我们给它一个小于如果我们给它一个小于-32768-32768或者大于或者大于3276732767的数的数会如何呢?会如何呢?uu现场演示现场演示小蛇能吞小蛇能吞小蛇能吞小蛇能吞下大象吗下大象吗下大象吗下大象吗?超出取值范围会怎样?超出取值范围会怎样?2024/9/2423uu一台安装了一台安装了Windows 95/98Windows 95/98的机器,如果连续运行的机器,如果连续运行49.749.7天没有重新启动,可能死机天没有重新启动,可能死机 uu原因:原因:WindowsWindows自启动时刻起,有一个计数器,记录系统已经自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。这个计数器是个运行了多少毫秒。这个计数器是个unsignedunsigned longlong 类型的变量类型的变量unsignedunsigned long long 的最大值是:的最大值是:42949672954294967295一天有一天有 24*60*24*60*6060*1000 = 86400000*1000 = 86400000毫秒毫秒4294967295 / 86400000 = 49.710269618054294967295 / 86400000 = 49.71026961805当当49.749.7天的时候,此计数器会溢出,引起死机天的时候,此计数器会溢出,引起死机溢出(溢出(Overflow)造成的危害)造成的危害2024/9/2424如何选择恰当的数据类型如何选择恰当的数据类型?u 具体问题具体分析具体问题具体分析 1 + 2 + 3 + 4 + 1! + 2! + 3! + 4! + . 13 + 23 + 33 + 43 + .2024/9/2425使用变量要注意使用变量要注意使用变量要注意使用变量要注意 不要对类型或变量所占的内存空间字节数想当然不要对类型或变量所占的内存空间字节数想当然不要对类型或变量所占的内存空间字节数想当然不要对类型或变量所占的内存空间字节数想当然用用用用sizeofsizeof获得变量或者数据类型的长度获得变量或者数据类型的长度获得变量或者数据类型的长度获得变量或者数据类型的长度现场演示程序在现场演示程序在现场演示程序在现场演示程序在Turbo C2.0Turbo C2.0和和和和Visual CVisual C下的运行结果下的运行结果下的运行结果下的运行结果注意!注意!注意!注意!#include #include mainmain()() printfprintf(Data(Data type Number of bytesn); type Number of bytesn);printfprintf(- -n);(- -n);printfprintf(char(char % %dndn, , sizeof(charsizeof(char););printfprintf(int(int % %dndn, , sizeof(intsizeof(int););printfprintf(short(short intint % %dndn, , sizeof(shortsizeof(short););printfprintf(long(long intint % %dndn, , sizeof(longsizeof(long););printfprintf(float(float % %dndn, , sizeof(floatsizeof(float););printfprintf(double %dn, sizeof(double);(double %dn, sizeof(double); 2024/9/2426变量变量变量变量 变量定义语句:变量定义语句:变量定义语句:变量定义语句:类型关键字类型关键字类型关键字类型关键字 变量名变量名变量名变量名1111,变量名,变量名,变量名,变量名2 2 2 2,变量名,变量名,变量名,变量名3,3,3,3, 定义变量时初始化方式:定义变量时初始化方式:定义变量时初始化方式:定义变量时初始化方式:类型关键字类型关键字类型关键字类型关键字 变量名变量名变量名变量名1=1=1=1=常量常量常量常量1111,变量名,变量名,变量名,变量名2 =2 =2 =2 =常量常量常量常量2 2 2 2 , 2024/9/2427变量声明变量声明变量声明变量声明 使用变量的基本原则使用变量的基本原则使用变量的基本原则使用变量的基本原则变量必须先定义,后使用变量必须先定义,后使用变量必须先定义,后使用变量必须先定义,后使用所有变量必须在第一条可执行语句前定义所有变量必须在第一条可执行语句前定义所有变量必须在第一条可执行语句前定义所有变量必须在第一条可执行语句前定义 声明的顺序无关紧要声明的顺序无关紧要声明的顺序无关紧要声明的顺序无关紧要 一条声明语句可声明若干个同类型的变量一条声明语句可声明若干个同类型的变量一条声明语句可声明若干个同类型的变量一条声明语句可声明若干个同类型的变量 声明变量,是初始化变量的最好时机声明变量,是初始化变量的最好时机声明变量,是初始化变量的最好时机声明变量,是初始化变量的最好时机不被初始化的变量,其值为危险的随机数不被初始化的变量,其值为危险的随机数不被初始化的变量,其值为危险的随机数不被初始化的变量,其值为危险的随机数charchar esc = a; esc = a;intint i = 1; i = 1;intint sum = 0; sum = 0;floatfloat epseps = 1.0e-5; = 1.0e-5;2024/9/2428阶码符号阶码符号阶码的数值阶码的数值尾数符号尾数符号尾数的数值尾数的数值阶码阶码j尾数尾数S实型数据在内存中的存储实型数据在内存中的存储1234.56=0.123456X104 =1.23456X103 =12345.6x10-1N=S X r j有效位数有效位数(精度)(精度)取值范围取值范围2024/9/2429实型数据提供的有效数字位数实型数据提供的有效数字位数实型数据提供的有效数字位数实型数据提供的有效数字位数 floatfloat型数据提供型数据提供型数据提供型数据提供7 7位有效数字位有效数字位有效数字位有效数字 doubledouble型数据提供型数据提供型数据提供型数据提供1616位有效数字位有效数字位有效数字位有效数字 使用不当导致舍入误差使用不当导致舍入误差使用不当导致舍入误差使用不当导致舍入误差#include #include mainmain()() floatfloat a; a;doubledouble b; b;a = 123456.789e4;a = 123456.789e4;b = 123456.789e4;b = 123456.789e4;printfprintf(%fn%fn,a,b);(%fn%fn,a,b); 2024/9/2430#include#include main()main() floatfloat f; f;f = 123.456;f = 123.456;ifif (f = 123.456) (f = 123.456)printf(fprintf(f is equal to 123.456 indeed.); is equal to 123.456 indeed.);elseelseprintf(Inprintf(In fact, f is equal to % fact, f is equal to %fnfn, f);, f); 运行结果会是什么?运行结果会是什么?运行结果会是什么?运行结果会是什么?float.cfloat.c浮点数的陷阱浮点数的陷阱2024/9/2431uufloatfloat的精度低,较易发生精度带来的相的精度低,较易发生精度带来的相的精度低,较易发生精度带来的相的精度低,较易发生精度带来的相等性判断问题等性判断问题等性判断问题等性判断问题uudoubledouble精度高,这个问题发生的概率小一精度高,这个问题发生的概率小一精度高,这个问题发生的概率小一精度高,这个问题发生的概率小一些,但也存在些,但也存在些,但也存在些,但也存在uu解决办法:解决办法:解决办法:解决办法:ifif ( (fabs(ffabs(f 123.456) 1E-5) 123.456) 1E-5)根据精度要求设定根据精度要求设定根据精度要求设定根据精度要求设定浮点数的陷阱浮点数的陷阱2024/9/2432charchar型与型与型与型与intint型之间的关系型之间的关系型之间的关系型之间的关系 小写字母转换为大写字母小写字母转换为大写字母小写字母转换为大写字母小写字母转换为大写字母 #include #include mainmain()() charchar chch = b; = b; chch = b - 32; = b - 32; printfprintf(%c, %dn, ch, ch);(%c, %dn, ch, ch); #include #include mainmain()() charchar chch = b; = b; chch = b - (a - A) = b - (a - A) ; ; printfprintf(%c, %dn, ch, ch);(%c, %dn, ch, ch); 2024/9/2433常数(常数(常数(常数(ConstantConstant) 整型常数整型常数整型常数整型常数1818、- -3131长整型常量长整型常量长整型常量长整型常量 123l123l、123L123L、123456l123456l、123456L123456L无符号型常量无符号型常量无符号型常量无符号型常量 123u123u、 123U123U 浮点常数浮点常数浮点常数浮点常数十进制小数形式十进制小数形式十进制小数形式十进制小数形式 123.45123.45、456.78456.78指数形式指数形式指数形式指数形式 1e-21e-2、4.5e34.5e3单精度实型常量单精度实型常量单精度实型常量单精度实型常量 123.45f123.45f、 456.78F456.78F、1e-2f1e-2f、4.5e3F4.5e3F长双精度型常量长双精度型常量长双精度型常量长双精度型常量 123.45l123.45l、 456.78L456.78L、1e-2l1e-2l、4.5e3L4.5e3L2024/9/2434八进制与十六进制常数八进制与十六进制常数八进制与十六进制常数八进制与十六进制常数 以数字以数字以数字以数字“ “0 0” ”开始的整型常数是八进制数开始的整型常数是八进制数开始的整型常数是八进制数开始的整型常数是八进制数022022、-037-037010010和和和和1010大小不一样大小不一样大小不一样大小不一样因为八进制并不常用,所以此种表示法比较少见因为八进制并不常用,所以此种表示法比较少见因为八进制并不常用,所以此种表示法比较少见因为八进制并不常用,所以此种表示法比较少见 以以以以“ “0x0x” ”或者或者或者或者“ “0X0X” ”开始的整型常数是十六进开始的整型常数是十六进开始的整型常数是十六进开始的整型常数是十六进制制制制AFAF和和和和afaf用来表示十进制的用来表示十进制的用来表示十进制的用来表示十进制的10151015十六进制的形式比较常用,尤其在进行位一级的控十六进制的形式比较常用,尤其在进行位一级的控十六进制的形式比较常用,尤其在进行位一级的控十六进制的形式比较常用,尤其在进行位一级的控制的时候制的时候制的时候制的时候0x120x12、-0x1F, -0x1f-0x1F, -0x1f2024/9/2435字符(字符(字符(字符(CharacterCharacter)常数)常数)常数)常数 字符常数的表示方法字符常数的表示方法字符常数的表示方法字符常数的表示方法aa,AA,55,%,$单引号内只能有一个字符,除非用单引号内只能有一个字符,除非用单引号内只能有一个字符,除非用单引号内只能有一个字符,除非用“ “ ” ”开头开头开头开头 就是一个普通整数,也可以参与各种数学运算就是一个普通整数,也可以参与各种数学运算就是一个普通整数,也可以参与各种数学运算就是一个普通整数,也可以参与各种数学运算每个字符具有一个每个字符具有一个每个字符具有一个每个字符具有一个02550255之间的数值,可从之间的数值,可从之间的数值,可从之间的数值,可从ASCIIASCII表表表表查出查出查出查出注意:注意:注意:注意:55和整数和整数和整数和整数5 5的区别的区别的区别的区别字符的数学运算在密码学内用得比较多字符的数学运算在密码学内用得比较多字符的数学运算在密码学内用得比较多字符的数学运算在密码学内用得比较多2024/9/2436字符常数字符常数字符常数字符常数 转义字符转义字符转义字符转义字符一些特殊字符(无法从键盘输入或者另有它用)用转义字一些特殊字符(无法从键盘输入或者另有它用)用转义字一些特殊字符(无法从键盘输入或者另有它用)用转义字一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示符表示符表示符表示2024/9/2437字符串(字符串(字符串(字符串(StringString)常数)常数)常数)常数 用双引号括住的由用双引号括住的由用双引号括住的由用双引号括住的由0 0个或多个字符组成的字符序列个或多个字符组成的字符序列个或多个字符组成的字符序列个或多个字符组成的字符序列I am a stringI am a string表示空字符串表示空字符串表示空字符串表示空字符串转义字符也可以在字符串中使用转义字符也可以在字符串中使用转义字符也可以在字符串中使用转义字符也可以在字符串中使用引号只作为字符串开始和结束的标志引号只作为字符串开始和结束的标志引号只作为字符串开始和结束的标志引号只作为字符串开始和结束的标志C C语言内部用语言内部用语言内部用语言内部用00表示字符串的结束表示字符串的结束表示字符串的结束表示字符串的结束除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地方 xx和和和和xx是不同的是不同的是不同的是不同的 里定义了一系列专门的字符串处理函数里定义了一系列专门的字符串处理函数里定义了一系列专门的字符串处理函数里定义了一系列专门的字符串处理函数2024/9/2438枚举(枚举(枚举(枚举(EnumerationEnumeration)常量)常量)常量)常量 一个被遗忘的角色一个被遗忘的角色一个被遗忘的角色一个被遗忘的角色 从程序来窥其一斑从程序来窥其一斑从程序来窥其一斑从程序来窥其一斑 enumenum weeks MON, TUE, WED, THU, FRI, SAT, SUN; weeks MON, TUE, WED, THU, FRI, SAT, SUN; enumenum weeks today; weeks today; enumenum response no, yes, none; response no, yes, none; enumenum response answer; response answer; today = TUE; today = TUE; answer = yes; answer = yes; ifif ( (answer answer = yes)= yes) printf(Todayprintf(Today is Tuesday.n); is Tuesday.n); elseelse printf(Todayprintf(Today is NOT Tuesday.n); is NOT Tuesday.n);2024/9/2439宏常量宏常量宏常量宏常量 宏常量宏常量宏常量宏常量也称符号常量也称符号常量也称符号常量也称符号常量一般采用大写字母表示一般采用大写字母表示一般采用大写字母表示一般采用大写字母表示 #define #define 标识符标识符标识符标识符 字符串字符串字符串字符串不是语句,而是一种编译预处理命令不是语句,而是一种编译预处理命令不是语句,而是一种编译预处理命令不是语句,而是一种编译预处理命令 宏替换(宏替换(宏替换(宏替换(Macro Macro SubstitulitionSubstitulition) #include #include #define PI 3.14159#define PI 3.14159#define R 5.3#define R 5.3mainmain()() printfprintf(area(area = % = %fnfn, PI * R * R);, PI * R * R);printfprintf(circumference(circumference = % = %fnfn, 2 * PI * R);, 2 * PI * R); 2024/9/2440宏常量宏常量宏常量宏常量 宏常量宏常量宏常量宏常量也称符号常量也称符号常量也称符号常量也称符号常量一般采用大写字母表示一般采用大写字母表示一般采用大写字母表示一般采用大写字母表示 #define #define 标识符标识符标识符标识符 字符串字符串字符串字符串不是语句,而是一种编译预处理命令不是语句,而是一种编译预处理命令不是语句,而是一种编译预处理命令不是语句,而是一种编译预处理命令 宏替换(宏替换(宏替换(宏替换(Macro Macro SubstitulitionSubstitulition) #include #include #define PI 3.14159#define PI 3.14159#define R 5.3#define R 5.3mainmain()() printfprintf(PI(PI*R*R = %*R*R = %fnfn, PI * R * R);, PI * R * R);printfprintf(2*PI*R = %(2*PI*R = %fnfn, 2 * PI * R);, 2 * PI * R); 2024/9/2441constconst常量常量常量常量 用用用用constconst修饰定义的变量为常量修饰定义的变量为常量修饰定义的变量为常量修饰定义的变量为常量constconst float pi = 3.1425926;float pi = 3.1425926; 常量只能在定义时赋值,然后常量只能在定义时赋值,然后常量只能在定义时赋值,然后常量只能在定义时赋值,然后不能不能不能不能再改变其值再改变其值再改变其值再改变其值 常数、常数、常数、常数、 constconst常量常量常量常量、宏常量和枚举常量,都可宏常量和枚举常量,都可宏常量和枚举常量,都可宏常量和枚举常量,都可以用来表示一个永远不会改变的数以用来表示一个永远不会改变的数以用来表示一个永远不会改变的数以用来表示一个永远不会改变的数前者不建议直接使用,而用后三者代替前者不建议直接使用,而用后三者代替前者不建议直接使用,而用后三者代替前者不建议直接使用,而用后三者代替2024/9/2442通过相关理论学习后,我们可以对通过相关理论学习后,我们可以对“学生成绩管理系统学生成绩管理系统”中相关数据进行分析及定义了。将现实中的数据处理成中相关数据进行分析及定义了。将现实中的数据处理成C C语言语言能够理解的数据。能够理解的数据。1.1.常量定义常量定义在在“学生成绩管理系统学生成绩管理系统”中我们假定本系统能处理一个班中我们假定本系统能处理一个班4040个学生的数据。通常情况下,学生人数这个数据在程序的个学生的数据。通常情况下,学生人数这个数据在程序的运行过程中是不变的。因此,要把表示一个班学生总人数的运行过程中是不变的。因此,要把表示一个班学生总人数的数据定义成符号常量。数据定义成符号常量。定义符号常量的格式如下:定义符号常量的格式如下:#define STUNUM 40#define STUNUM 40说明:符号常量(说明:符号常量(STUNUMSTUNUM)必须用大写字母。)必须用大写字母。 3 3 任务实施任务实施2024/9/24432. 2.简单类型简单类型简单类型简单类型 “ “学生成绩管理系统学生成绩管理系统学生成绩管理系统学生成绩管理系统” ”中的学生信息主要包括中的学生信息主要包括中的学生信息主要包括中的学生信息主要包括: :学号、学号、学号、学号、姓名、性别、年龄、三门功课成绩、总成绩和平姓名、性别、年龄、三门功课成绩、总成绩和平姓名、性别、年龄、三门功课成绩、总成绩和平姓名、性别、年龄、三门功课成绩、总成绩和平均成绩,另外还有一些与计算全班成绩有关的最均成绩,另外还有一些与计算全班成绩有关的最均成绩,另外还有一些与计算全班成绩有关的最均成绩,另外还有一些与计算全班成绩有关的最高成绩、最低成绩等。这些数据在程序运行过程高成绩、最低成绩等。这些数据在程序运行过程高成绩、最低成绩等。这些数据在程序运行过程高成绩、最低成绩等。这些数据在程序运行过程中是可能改变的,这里只对部分表示学生信息的中是可能改变的,这里只对部分表示学生信息的中是可能改变的,这里只对部分表示学生信息的中是可能改变的,这里只对部分表示学生信息的简单数据定义,我们在定义变量时最好能做到简单数据定义,我们在定义变量时最好能做到简单数据定义,我们在定义变量时最好能做到简单数据定义,我们在定义变量时最好能做到“ “见名知义见名知义见名知义见名知义” ”。 int stunum;/int stunum;/整数类型的学号整数类型的学号整数类型的学号整数类型的学号 char stusex;/char stusex;/字符类型的性别字符类型的性别字符类型的性别字符类型的性别 int stuage;/int stuage;/整数类型的年龄整数类型的年龄整数类型的年龄整数类型的年龄 float score1;/float score1;/单精度类型的成绩单精度类型的成绩单精度类型的成绩单精度类型的成绩1 12024/9/2444 float score2;/float score2;/单精度类型的成绩单精度类型的成绩2 2 float score3;/ float score3;/单精度类型的成绩单精度类型的成绩3 3 float float avescoreavescore;/;/单精度类型的平均成绩单精度类型的平均成绩 float float maxscoremaxscore;/;/单精度类型的最高分单精度类型的最高分 float float minscoreminscore;/;/单精度类型的最低分单精度类型的最低分 由于性别这类数据只是起到描述一些基本信息的作用,由于性别这类数据只是起到描述一些基本信息的作用,通常情况下不进行算术运算,所以我们定义为字符型;而通常情况下不进行算术运算,所以我们定义为字符型;而年龄、三门功课成绩、总成绩和平均成绩以及最高成绩、年龄、三门功课成绩、总成绩和平均成绩以及最高成绩、最低成绩等这类数据有可能进行算术运算最低成绩等这类数据有可能进行算术运算, , 所以我们定义所以我们定义为数值型。为数值型。 另外,在编程实践中还会遇到一些这里不能一一列举另外,在编程实践中还会遇到一些这里不能一一列举出来的变量、数组变量和指针变量,我们将在后续的学习出来的变量、数组变量和指针变量,我们将在后续的学习逐渐认识与掌握。逐渐认识与掌握。 在在“班级学生成绩管理系统班级学生成绩管理系统”中变量定义完成以后,中变量定义完成以后,接下来我们还要在知识扩展环节里进一步学习如何给变量接下来我们还要在知识扩展环节里进一步学习如何给变量赋值。赋值。2024/9/24454 4知识扩展知识扩展知识扩展知识扩展 常用运算符及表达式常用运算符及表达式常用运算符及表达式常用运算符及表达式 赋值和表达式中的类型转换赋值和表达式中的类型转换赋值和表达式中的类型转换赋值和表达式中的类型转换2024/9/2446算术运算符算术运算符算术运算符算术运算符 + +,- -,* *,/ /加、减、乘、除运算加、减、乘、除运算加、减、乘、除运算加、减、乘、除运算四则混合运算中,先算乘除,后算加减,四则混合运算中,先算乘除,后算加减,四则混合运算中,先算乘除,后算加减,四则混合运算中,先算乘除,后算加减,按从左向右的顺序计算,左结合按从左向右的顺序计算,左结合按从左向右的顺序计算,左结合按从左向右的顺序计算,左结合 % %求余运算求余运算求余运算求余运算常用的标准数学函数函数名函数名功功 能能函数名函数名功功 能能sqrt(x)计算计算x的平方根,的平方根,x应大于等于应大于等于0 exp(x)计算计算ex的值的值fabs(x)计算计算x的绝对值的绝对值pow(x,y)计算计算xy的值的值log(x)计算计算lnx的值的值sin(x)计算计算sinx的值,的值,x为弧度值为弧度值log10(x)计算计算lgx的值的值cos(x)计算计算cosx的值,的值,x为弧度值为弧度值2024/9/2447关系运算符关系运算符关系运算符关系运算符 ,=, ,= b & b c)( a b & b c);a a大于大于大于大于b b,并且,并且,并且,并且b b大于大于大于大于c c |或运算或运算或运算或运算( a b | b c)( a b | b c); a a大于大于大于大于b b,或者,或者,或者,或者b b大于大于大于大于c c ! !求反求反求反求反( !a )( !a );如果;如果;如果;如果a a是是是是0 0,结果非,结果非,结果非,结果非0 0;如果;如果;如果;如果a a是非是非是非是非0 0,结果是,结果是,结果是,结果是0 0并不改变并不改变并不改变并不改变a a的值的值的值的值2024/9/2449实例实例实例实例 chch是英文大写字母是英文大写字母是英文大写字母是英文大写字母 (ch = A) & (ch = A) & (ch = Z) 判断某一年判断某一年判断某一年判断某一年yearyear是否是闰年的条件是满足下列两个条是否是闰年的条件是满足下列两个条是否是闰年的条件是满足下列两个条是否是闰年的条件是满足下列两个条件之一:件之一:件之一:件之一:能被能被能被能被4 4整除,但不能被整除,但不能被整除,但不能被整除,但不能被100100整除;整除;整除;整除;能被能被能被能被400400整除;整除;整除;整除; (year % 4 = 0) & (year % 100 != 0) | (year % 400 = 0) (year % 4 = 0) & (year % 100 != 0) | (year % 400 = 0)2024/9/2450增一和减一运算符增一和减一运算符增一和减一运算符增一和减一运算符 n+n+,n n-,+n+n,-n-n+让参与运算的变量加让参与运算的变量加让参与运算的变量加让参与运算的变量加1 1,-让参与运算的变量减让参与运算的变量减让参与运算的变量减让参与运算的变量减1 1作为后缀运算符时,先取作为后缀运算符时,先取作为后缀运算符时,先取作为后缀运算符时,先取n n的值,然后加的值,然后加的值,然后加的值,然后加/ /减减减减1 1作为前缀运算符时,先加作为前缀运算符时,先加作为前缀运算符时,先加作为前缀运算符时,先加/ /减减减减1 1,然后取,然后取,然后取,然后取n n的值的值的值的值 m = n+;m = n+; 等价于等价于等价于等价于m=n;m=n;n+;n+; m = +n;m = +n; 等价于等价于等价于等价于n+; n+; m=n;m=n;2024/9/2451增一和减一运算符增一和减一运算符增一和减一运算符增一和减一运算符 良好的程序设计风格提倡:在一行语句中,一个变良好的程序设计风格提倡:在一行语句中,一个变良好的程序设计风格提倡:在一行语句中,一个变良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次加量只能出现一次加量只能出现一次加量只能出现一次加1 1或者减或者减或者减或者减1 1运算运算运算运算过多的加过多的加过多的加过多的加1 1和减和减和减和减1 1运算混合,不仅可读性差,而且因为编运算混合,不仅可读性差,而且因为编运算混合,不仅可读性差,而且因为编运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行译器实现的方法不同,导致不同编译器产生不同的运行译器实现的方法不同,导致不同编译器产生不同的运行译器实现的方法不同,导致不同编译器产生不同的运行结果结果结果结果2024/9/2452位操作运算符位操作运算符位操作运算符位操作运算符 & &按位与运算按位与运算按位与运算按位与运算 | |按位或运算按位或运算按位或运算按位或运算 按位异或运算按位异或运算按位异或运算按位异或运算 按位右移运算按位右移运算按位右移运算按位右移运算 按位求反按位求反按位求反按位求反2024/9/2453赋值运算符赋值运算符赋值运算符赋值运算符 下面两个语句是等价的下面两个语句是等价的下面两个语句是等价的下面两个语句是等价的i = i + 2;i = i + 2;i += 2;i += 2; + +、- -、* *、/ /、% %、& &、 、| |运算符都运算符都运算符都运算符都可以按此种方式处理可以按此种方式处理可以按此种方式处理可以按此种方式处理 这种形式看起来更直观,而且执行效率一般也这种形式看起来更直观,而且执行效率一般也这种形式看起来更直观,而且执行效率一般也这种形式看起来更直观,而且执行效率一般也能更高一些能更高一些能更高一些能更高一些2024/9/2454逗号运算符逗号运算符逗号运算符逗号运算符 表达式表达式表达式表达式1, 1, 表达式表达式表达式表达式2, ., 2, ., 表达式表达式表达式表达式n n 多数情况下,并不使用整个逗号表达式的值,更多数情况下,并不使用整个逗号表达式的值,更多数情况下,并不使用整个逗号表达式的值,更多数情况下,并不使用整个逗号表达式的值,更常见的情况是要分别得到各表达式的值常见的情况是要分别得到各表达式的值常见的情况是要分别得到各表达式的值常见的情况是要分别得到各表达式的值 主要用在循环语句中,同时对多个变量赋初值等主要用在循环语句中,同时对多个变量赋初值等主要用在循环语句中,同时对多个变量赋初值等主要用在循环语句中,同时对多个变量赋初值等 forfor (i = 0 , j = 0; i j; i+, j+) (i = 0 , j = 0; i b) (a b) z = a; z = a;elseelse z = b; z = b;z = (a b) ? a : b;z = (a b) ? a : b; 此种表达式切忌用得过于繁杂此种表达式切忌用得过于繁杂此种表达式切忌用得过于繁杂此种表达式切忌用得过于繁杂2024/9/2456优先级优先级优先级优先级 ( ) - .( ) - . ! + - + - * & (! + - + - * & (类型类型类型类型) ) sizeofsizeof * / %* / % + -+ - = = = != != & & | | & | ? :? : = += -= *= /= %= &= = |= = += -= *= /= %= &= = |= = , ,2024/9/2457优先级优先级优先级优先级 能背下优先级表的人凤毛麟角能背下优先级表的人凤毛麟角能背下优先级表的人凤毛麟角能背下优先级表的人凤毛麟角 用括号来控制运算顺序更直观、方便,并减少用括号来控制运算顺序更直观、方便,并减少用括号来控制运算顺序更直观、方便,并减少用括号来控制运算顺序更直观、方便,并减少出错的概率出错的概率出错的概率出错的概率2024/9/2458结合性结合性结合性结合性 多数运算符为左结合多数运算符为左结合多数运算符为左结合多数运算符为左结合 少数为右结合:少数为右结合:少数为右结合:少数为右结合:一元运算符一元运算符一元运算符一元运算符赋值运算符赋值运算符赋值运算符赋值运算符条件运算符条件运算符条件运算符条件运算符2024/9/2459类型转换类型转换类型转换类型转换 在进行赋值操作时,会发生类型转换在进行赋值操作时,会发生类型转换在进行赋值操作时,会发生类型转换在进行赋值操作时,会发生类型转换 将取值范围将取值范围将取值范围将取值范围小小小小的类型的类型的类型的类型转为转为转为转为取值范围取值范围取值范围取值范围大大大大的类型是的类型是的类型是的类型是安全安全安全安全的的的的 反之是不安全的反之是不安全的反之是不安全的反之是不安全的如果如果如果如果大大大大类型的值在类型的值在类型的值在类型的值在小小小小类型能容纳的范围之内,则平类型能容纳的范围之内,则平类型能容纳的范围之内,则平类型能容纳的范围之内,则平安无事安无事安无事安无事但是,浮点数转为整数,会丢失小数部分,非四舍但是,浮点数转为整数,会丢失小数部分,非四舍但是,浮点数转为整数,会丢失小数部分,非四舍但是,浮点数转为整数,会丢失小数部分,非四舍五入五入五入五入反之,转换后的结果必然是错误的,具体结果与机反之,转换后的结果必然是错误的,具体结果与机反之,转换后的结果必然是错误的,具体结果与机反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用器和实现方式有关。避免如此使用器和实现方式有关。避免如此使用器和实现方式有关。避免如此使用2024/9/2460字符串与数值类型之间的转换字符串与数值类型之间的转换字符串与数值类型之间的转换字符串与数值类型之间的转换 intint i = 123 i = 123这样用是不行地这样用是不行地这样用是不行地这样用是不行地 atofatof()(),atoiatoi()(),atolatol()()把字符串转为把字符串转为把字符串转为把字符串转为doubledouble,intint和和和和longlong定义在定义在定义在定义在stdlib.hstdlib.h中中中中 sprintfsprintf()()可以用来把各种类型的数值转为字符串可以用来把各种类型的数值转为字符串可以用来把各种类型的数值转为字符串可以用来把各种类型的数值转为字符串定义在定义在定义在定义在stdio.hstdio.h中中中中2024/9/2461自动类型转换自动类型转换自动类型转换自动类型转换 同种数据类型的运算结果,还是该类型同种数据类型的运算结果,还是该类型同种数据类型的运算结果,还是该类型同种数据类型的运算结果,还是该类型 不同种数据类型的运算结果,是两种类型中取值不同种数据类型的运算结果,是两种类型中取值不同种数据类型的运算结果,是两种类型中取值不同种数据类型的运算结果,是两种类型中取值范围更大的那种范围更大的那种范围更大的那种范围更大的那种longlong doubledouble doubledouble floatfloat longlong intint shortshort charchar 把数据赋值给另外一种类型变量也会发生自动类把数据赋值给另外一种类型变量也会发生自动类把数据赋值给另外一种类型变量也会发生自动类把数据赋值给另外一种类型变量也会发生自动类型转换型转换型转换型转换从小到大,顺利转换从小到大,顺利转换从小到大,顺利转换从小到大,顺利转换从大到小,可能丢失信息(好的编译器会发出警告)从大到小,可能丢失信息(好的编译器会发出警告)从大到小,可能丢失信息(好的编译器会发出警告)从大到小,可能丢失信息(好的编译器会发出警告)2024/9/2462类型强转(类型强转(类型强转(类型强转(CastingCasting) 消除从大到小的警告消除从大到小的警告消除从大到小的警告消除从大到小的警告l = (l = (longlong)i)i; ; 可以通过可以通过可以通过可以通过“ “( (类型类型类型类型) )表达式表达式表达式表达式” ”的方式把表达式的的方式把表达式的的方式把表达式的的方式把表达式的值转为任意类型值转为任意类型值转为任意类型值转为任意类型强转时,你必须知道你在做什么强转时,你必须知道你在做什么强转时,你必须知道你在做什么强转时,你必须知道你在做什么强转与指针,并称强转与指针,并称强转与指针,并称强转与指针,并称C C语言两大神器,用好了可以呼语言两大神器,用好了可以呼语言两大神器,用好了可以呼语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将风唤雨,用坏了就损兵折将风唤雨,用坏了就损兵折将风唤雨,用坏了就损兵折将#include #include mainmain()() intint m = 5; m = 5;printfprintf(m / 2=%dn, m/2);(m / 2=%dn, m/2);printfprintf(float) (m / 2) = %fn, (float) (m / 2);(float) (m / 2) = %fn, (float) (m / 2);printfprintf(float) m / 2 = %fn, (float) m / 2);(float) m / 2 = %fn, (float) m / 2);printfprintf(m = %dn, m);(m = %dn, m); 2024/9/2463类型强转类型强转类型强转类型强转强转与指针,并称强转与指针,并称C语言两大神器,用好语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将了可以呼风唤雨,用坏了就损兵折将屠屠龙龙刀刀倚倚天天剑剑2024/9/2464这一章我们学到了这一章我们学到了这一章我们学到了这一章我们学到了 变量的命名规则变量的命名规则变量的命名规则变量的命名规则 数据类型数据类型数据类型数据类型 charchar,shortshort,intint,longlong,floatfloat,doubledouble,longlong doubledouble signedsigned,unsignedunsigned enumenum 常数、转义字符常数、转义字符常数、转义字符常数、转义字符 运算符运算符运算符运算符 算术运算符、关系运算符、逻辑运算符、增一算术运算符、关系运算符、逻辑运算符、增一算术运算符、关系运算符、逻辑运算符、增一算术运算符、关系运算符、逻辑运算符、增一/ /减一运算符、位运减一运算符、位运减一运算符、位运减一运算符、位运算符、赋值运算符、类型强转运算符、逗号运算符、条件运算符(算符、赋值运算符、类型强转运算符、逗号运算符、条件运算符(算符、赋值运算符、类型强转运算符、逗号运算符、条件运算符(算符、赋值运算符、类型强转运算符、逗号运算符、条件运算符(? : :)、)、)、)、 sizeofsizeof 类型转换类型转换类型转换类型转换 优先级和结合性优先级和结合性优先级和结合性优先级和结合性2024/9/2465ASCIIASCII字符表字符表字符表字符表1 1
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号