《c语言第二章数据类型、运算符及表达式.ppt》由会员分享,可在线阅读,更多相关《c语言第二章数据类型、运算符及表达式.ppt(95页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第第第2 2 2 2章章章章 数据类型、数据类型、数据类型、数据类型、运算符与表达式运算符与表达式运算符与表达式运算符与表达式C语言程序设计12023/1/162/96C ProgrammingC Programming本章学习内容本章学习内容 标识符命名;标识符命名;标识符命名;标识符命名;变量和常量;变量和常量;变量和常量;变量和常量;数据类型;数据类型;数据类型;数据类型;常用运算符和表达式;常用运算符和表达式;常用运算符和表达式;常用运算符和表达式;运算符的优先级与结合性运算符的优先级与结合性运算符的优先级与结合性运算符的优先级与结合性 2023/1/163/96C Programm
2、ingC ProgrammingC Program StructurePreprocessor Instructionmain()StatementGlobal DeclarationLocal Declaration2023/1/164/96C ProgrammingC Programming例例2.1:一个简单的:一个简单的C程序例子程序例子#includeinclude /*/*函数功能函数功能函数功能函数功能:计算两个整数相加之和计算两个整数相加之和计算两个整数相加之和计算两个整数相加之和 入口参数入口参数入口参数入口参数:整型数据整型数据整型数据整型数据a a和和和和b b 返回值:
3、返回值:返回值:返回值:整型数整型数整型数整型数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;printfprintf(Input two integers:);(Input two integers:);scanfscanf(%d%d,&x,&y);/*(%d%d,&x,&y);/*输入两个整型数输入两个整型数输入两个整型数输入两个整型数x x和和和和y*/y*/su
4、m=sum=AddAdd(x,y);/*(x,y);/*调用函数调用函数调用函数调用函数AddAdd计算计算计算计算x x和和和和y y相加之和相加之和相加之和相加之和*/printfprintf(sum=%dn,sum);/*(sum=%dn,sum);/*输出输出输出输出x x和和和和y y相加之和相加之和相加之和相加之和*/并列的两个函数并列的两个函数并列的两个函数并列的两个函数其中一个是其中一个是其中一个是其中一个是程序的入口程序的入口程序的入口程序的入口程序注释程序注释程序注释程序注释编译预处理命令编译预处理命令编译预处理命令编译预处理命令2023/1/165/96C Program
5、mingC ProgrammingC程序常见符号分类程序常见符号分类 关键字(关键字(关键字(关键字(KeywordKeyword)又称保留字(又称保留字(又称保留字(又称保留字(C C Reserved WordReserved Word ),),),),C C语语语语言中言中言中言中预预预预先先先先规规规规定的具有固定含定的具有固定含定的具有固定含定的具有固定含义义义义的一的一的一的一些些些些单词单词单词单词(if if,whilewhile,),)标识符(标识符(标识符(标识符(IdentifierIdentifier)C Standard IdentifierC Standard Id
6、entifier(系统预定义标系统预定义标系统预定义标系统预定义标识符)识符)识符)识符)用户自定义标识符用户自定义标识符用户自定义标识符用户自定义标识符 变量,函数名,变量,函数名,变量,函数名,变量,函数名,2023/1/166/96C ProgrammingC ProgrammingC程序常见符号分类程序常见符号分类 运算符(运算符(运算符(运算符(OperatorOperator)3434种,详见附录种,详见附录种,详见附录种,详见附录2 2 分隔符(分隔符(分隔符(分隔符(SeparatorSeparator)空格、回车空格、回车空格、回车空格、回车/换行、逗号等换行、逗号等换行、逗
7、号等换行、逗号等 其它符号其它符号其它符号其它符号 “”和和和和“”标识函数体或语句标识函数体或语句标识函数体或语句标识函数体或语句块块块块 “/*”/*”和和和和“*“*/”/”程序注释的定界程序注释的定界程序注释的定界程序注释的定界符符符符 常量(常量(常量(常量(ConstantConstant)2023/1/167/96C ProgrammingC Programming标识符命名标识符命名 变量名,函数名变量名,函数名变量名,函数名变量名,函数名 由英文字母、数字和下划线组成,大小写敏感由英文字母、数字和下划线组成,大小写敏感由英文字母、数字和下划线组成,大小写敏感由英文字母、数字和
8、下划线组成,大小写敏感 不可以不可以不可以不可以是数字开头是数字开头是数字开头是数字开头 直观,见名知意,便于记忆和阅读直观,见名知意,便于记忆和阅读直观,见名知意,便于记忆和阅读直观,见名知意,便于记忆和阅读 最好使用英文单词或其组合最好使用英文单词或其组合最好使用英文单词或其组合最好使用英文单词或其组合 切忌使用汉语拼音切忌使用汉语拼音切忌使用汉语拼音切忌使用汉语拼音 下划线和大小写通常用来增强可读性下划线和大小写通常用来增强可读性下划线和大小写通常用来增强可读性下划线和大小写通常用来增强可读性 variablenamevariablename variable_namevariable_
9、name variableNamevariableName 不允许使用关键字作为标识符的名字不允许使用关键字作为标识符的名字不允许使用关键字作为标识符的名字不允许使用关键字作为标识符的名字 int,float,for,while,ifint,float,for,while,if等等等等 某些功能的变量采用习惯命名某些功能的变量采用习惯命名某些功能的变量采用习惯命名某些功能的变量采用习惯命名 如:如:如:如:forfor语句所采用的循环变量习惯用语句所采用的循环变量习惯用语句所采用的循环变量习惯用语句所采用的循环变量习惯用i,j,ki,j,kWindows Windows 风格风格UNIX UN
10、IX 风格风格P45,2.1P45,2.12023/1/168/96C ProgrammingC Programming何谓变量何谓变量(Variable)?)?2023/1/169/96C ProgrammingC Programming如何衡量变量所占空间大小?如何衡量变量所占空间大小?bitbit,中文叫法:中文叫法:中文叫法:中文叫法:位位位位 ByteByte,中文叫法:中文叫法:中文叫法:中文叫法:字节字节字节字节 Kilobyte(KB)Kilobyte(KB),中文叫法:中文叫法:中文叫法:中文叫法:KK Megabyte(MB)Megabyte(MB),中文叫法:中文叫法:中
11、文叫法:中文叫法:兆兆兆兆 Gigabyte(GB)Gigabyte(GB),中文叫法:中文叫法:中文叫法:中文叫法:GG Terabyte(TB)Terabyte(TB),中文叫法:中文叫法:中文叫法:中文叫法:T T1 TB 1 TB=1024 GB1024 GB1 GB1 GB =1024 MB1024 MB1 MB1 MB =1024 KB1024 KB1 KB1 KB =1024 B1024 B1 B 1 B=8 b8 b2023/1/1610/96C ProgrammingC Programming 一个位有多大?一个位有多大?一个位有多大?一个位有多大?只能是只能是只能是只能是“
12、0”0”或者或者或者或者“1”1”,二,二,二,二进制进制进制进制 一个字节有多大?一个字节有多大?一个字节有多大?一个字节有多大?可以表示数字可以表示数字可以表示数字可以表示数字02550255之间的之间的之间的之间的整数整数整数整数保存一个字符(英文字母、保存一个字符(英文字母、保存一个字符(英文字母、保存一个字符(英文字母、数字、符号)数字、符号)数字、符号)数字、符号)ASCIIASCII(美国标准信息交换(美国标准信息交换(美国标准信息交换(美国标准信息交换码)编码码)编码码)编码码)编码如何衡量变量所占空间大小?如何衡量变量所占空间大小?如何衡量变量所占空间大小?如何衡量变量所占空
13、间大小?2023/1/1611/96C ProgrammingC Programming Needs to be declared:变量类型变量类型 变量名变量名;Example:int sum;int sum;int x,y,sum=0;int x,y,sum=0;变量声明变量声明变量声明变量声明(Variable Declaration)(Variable Declaration)2023/1/1612/96C ProgrammingC Programming变量声明变量声明(Variable Declaration)使用变量的基本原则使用变量的基本原则使用变量的基本原则使用变量的基本原则
14、 变量必须先定义,后使用变量必须先定义,后使用变量必须先定义,后使用变量必须先定义,后使用 所有变量必须在第一条可执行语句前所有变量必须在第一条可执行语句前所有变量必须在第一条可执行语句前所有变量必须在第一条可执行语句前定义定义定义定义 声明的顺序无关紧要声明的顺序无关紧要声明的顺序无关紧要声明的顺序无关紧要 一条声明语句可声明若干个同类型一条声明语句可声明若干个同类型一条声明语句可声明若干个同类型一条声明语句可声明若干个同类型的变量的变量的变量的变量 声明变量是初始化变量的最好时机声明变量是初始化变量的最好时机声明变量是初始化变量的最好时机声明变量是初始化变量的最好时机 不被初始化的变量,其
15、值为随机数不被初始化的变量,其值为随机数不被初始化的变量,其值为随机数不被初始化的变量,其值为随机数结果会是什么?结果会是什么?结果会是什么?结果会是什么?2023/1/1613/96C ProgrammingC ProgrammingExample:int number1,number2;int number1,number2;number1=25;number1=25;number2=23;number2=23;number1=number2;number1=number2;number1?number2?252323变量赋值变量赋值变量赋值变量赋值(Variable Assignment
16、Variable Assignment)2023/1/1614/96C ProgrammingC ProgrammingAlgorithm 变量变量变量变量 表达式表达式表达式表达式 Syntax 变量变量变量变量 =表达式表达式表达式表达式 ;Rules:类型一致类型一致Valid Example:Invalid Example:int x;int x;int y;int y;x=12;x=12;y=5.75;y=5.75;变量赋值变量赋值变量赋值变量赋值(Variable AssignmentVariable Assignment)2023/1/1615/96C ProgrammingC
17、ProgrammingExample:Input:quantityquantity and pricePerkgpricePerkgOutput:pricepriceProcess:priceprice=quantityquantity*pricePerkgpricePerkg变量赋值变量赋值变量赋值变量赋值(Variable AssignmentVariable Assignment)2023/1/1616/96C ProgrammingC ProgrammingExample:int quantity;int quantity;float pricePerkg,price;float pr
18、icePerkg,price;quantity=5;quantity=5;pricePerkg=4.50;pricePerkg=4.50;price=quantity*pricePerkg;price=quantity*pricePerkg;How does this program work?变量赋值变量赋值变量赋值变量赋值(Variable AssignmentVariable Assignment)2023/1/1617/96C ProgrammingC ProgrammingExample:int quantity;int quantity;float pricePerkg,price
19、;float pricePerkg,price;quantity=2;quantity=2;pricePerkg=4.50;pricePerkg=4.50;price=quantity*pricePerkg;price=quantity*pricePerkg;quantity?pricePerkg?price?4.509.002变量赋值变量赋值变量赋值变量赋值(Variable AssignmentVariable Assignment)2023/1/1618/96C ProgrammingC ProgrammingExample:int quantity;int quantity;float
20、 pricePerkg;float pricePerkg;float price;float price;Why did we declare Why did we declare it as it as intint?Why did we Why did we declare them as declare them as floatfloat?变量类型变量类型变量类型变量类型(Variable Type)(Variable Type)2023/1/1619/96C ProgrammingC Programming数据类型(数据类型(Data Type)为什么要区分类型?为什么要区分类型?为
21、什么要区分类型?为什么要区分类型?不同类型有什么不同?不同类型有什么不同?不同类型有什么不同?不同类型有什么不同?数据表示形式数据表示形式数据表示形式数据表示形式合法的取值范围合法的取值范围合法的取值范围合法的取值范围占用内存空间大小占用内存空间大小占用内存空间大小占用内存空间大小可参与的运算种类可参与的运算种类可参与的运算种类可参与的运算种类 2023/1/1620/96C ProgrammingC Programming数据类型(数据类型(Data Type)数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型整型整型实型(浮点型)实型(浮点型)字符型字符型枚举类型
22、枚举类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型单精度实型双精度实型基本整型长整型短整型无符号整型2023/1/1621/96C ProgrammingC Programming基本数据类型基本数据类型 intint整数,在目前绝大多数机器上占整数,在目前绝大多数机器上占整数,在目前绝大多数机器上占整数,在目前绝大多数机器上占4 4个字节个字节个字节个字节TC2.0TC2.0,2 2个字节个字节个字节个字节 floatfloat单精度浮点数,单精度浮点数,单精度浮点数,单精度浮点数,4 4个字节个字节个字节个字节 doubledouble双精度浮点数,双精度浮点数,双精度浮点数
23、,双精度浮点数,8 8个字节个字节个字节个字节 charchar字符,字符,字符,字符,1 1个字节个字节个字节个字节表示表示表示表示256256个个个个ASCIIASCII字符,或字符,或字符,或字符,或02550255的整数的整数的整数的整数2023/1/1622/96C ProgrammingC Programming数据类型修饰符数据类型修饰符 shortshortshortshort intint,简写为,简写为,简写为,简写为shortshort,短整数,短整数,短整数,短整数,2 2个字节个字节个字节个字节 longlonglonglong intint,简写为,简写为,简写为,
24、简写为longlong,长整数,长整数,长整数,长整数,4 4个字节个字节个字节个字节longlong doubledouble,长双精度(高精度)浮点数,长双精度(高精度)浮点数,长双精度(高精度)浮点数,长双精度(高精度)浮点数,1010个字节个字节个字节个字节 unsignedunsigned用来修饰用来修饰用来修饰用来修饰charchar、intint、shortshort和和和和longlong无符号无符号无符号无符号整数(正整数和整数(正整数和整数(正整数和整数(正整数和0 0)2023/1/1623/96C ProgrammingC Programming不同类型取值范围不同不同
25、类型取值范围不同 C C语言直接提供的任何类型都有取值范围。语言直接提供的任何类型都有取值范围。语言直接提供的任何类型都有取值范围。语言直接提供的任何类型都有取值范围。2023/1/1624/96C ProgrammingC Programming整型类型的取值范围整型类型的取值范围2023/1/1625/96C ProgrammingC Programming浮点类型的取值范围浮点类型的取值范围2023/1/1626/96C ProgrammingC Programming不同类型取值范围不同不同类型取值范围不同 C C语言直接提供的任何类型都有取值范围。语言直接提供的任何类型都有取值范围。
26、语言直接提供的任何类型都有取值范围。语言直接提供的任何类型都有取值范围。当向其赋超过此范围的数值时,结果会怎样呢?当向其赋超过此范围的数值时,结果会怎样呢?当向其赋超过此范围的数值时,结果会怎样呢?当向其赋超过此范围的数值时,结果会怎样呢?产生数值类型溢出,得到一个不正确的结果。产生数值类型溢出,得到一个不正确的结果。产生数值类型溢出,得到一个不正确的结果。产生数值类型溢出,得到一个不正确的结果。小蛇能吞小蛇能吞小蛇能吞小蛇能吞下大象吗下大象吗下大象吗下大象吗?typeoverflow.ctypeoverflow.c2023/1/1627/96C ProgrammingC Programmin
27、g何谓类型溢出何谓类型溢出(Overflow)?)?生活中的例子:生活中的例子:生活中的例子:生活中的例子:身份证号码中的出生年身份证号码中的出生年身份证号码中的出生年身份证号码中的出生年阿利亚娜号火箭发射失败阿利亚娜号火箭发射失败阿利亚娜号火箭发射失败阿利亚娜号火箭发射失败 现象与危害:现象与危害:现象与危害:现象与危害:溢出后的数值是可预料的,但不同平台会有所不同溢出后的数值是可预料的,但不同平台会有所不同溢出后的数值是可预料的,但不同平台会有所不同溢出后的数值是可预料的,但不同平台会有所不同当程序从高位计算机向低位计算机移植(比如从当程序从高位计算机向低位计算机移植(比如从当程序从高位计
28、算机向低位计算机移植(比如从当程序从高位计算机向低位计算机移植(比如从6464位位位位系统移植到系统移植到系统移植到系统移植到3232位系统)时,以前从不出现的溢出问题位系统)时,以前从不出现的溢出问题位系统)时,以前从不出现的溢出问题位系统)时,以前从不出现的溢出问题可能出现可能出现可能出现可能出现2023/1/1628/96C ProgrammingC Programming解决方案解决方案?预先估算运算结果的可能范围,采用取值范围更预先估算运算结果的可能范围,采用取值范围更预先估算运算结果的可能范围,采用取值范围更预先估算运算结果的可能范围,采用取值范围更大的类型。大的类型。大的类型。大
29、的类型。1+2+3+1+2+3+1!+2!+3!+1!+2!+3!+1 13 3+2+23 3+3+33 3+在运算还没开始之前就判断运算数是否在合理的取值在运算还没开始之前就判断运算数是否在合理的取值在运算还没开始之前就判断运算数是否在合理的取值在运算还没开始之前就判断运算数是否在合理的取值范围内。如果超出,则停止运算,转错误处理。范围内。如果超出,则停止运算,转错误处理。范围内。如果超出,则停止运算,转错误处理。范围内。如果超出,则停止运算,转错误处理。2023/1/1629/96C ProgrammingC Programming不同类型占用的内存字节数不同不同类型占用的内存字节数不同
30、因为因为因为因为同种类型在不同的平台其占字节数不尽相同。如同种类型在不同的平台其占字节数不尽相同。如同种类型在不同的平台其占字节数不尽相同。如同种类型在不同的平台其占字节数不尽相同。如intint在在在在1616位、位、位、位、3232位和位和位和位和6464位系统分别占位系统分别占位系统分别占位系统分别占2 2、4 4和和和和8 8个字节。个字节。个字节。个字节。不要对变量所占的内存空间字节数想当然不要对变量所占的内存空间字节数想当然不要对变量所占的内存空间字节数想当然不要对变量所占的内存空间字节数想当然用用用用sizeofsizeof获得变量或者数据类型的长度获得变量或者数据类型的长度获得
31、变量或者数据类型的长度获得变量或者数据类型的长度 现象与危害:现象与危害:现象与危害:现象与危害:在平台间移植时会出现问题,导致数据丢失或者溢出在平台间移植时会出现问题,导致数据丢失或者溢出在平台间移植时会出现问题,导致数据丢失或者溢出在平台间移植时会出现问题,导致数据丢失或者溢出注意!注意!注意!注意!2023/1/1630/96C ProgrammingC Programmingsizeof到底是什么?到底是什么?C C语言的关键字,并非函数语言的关键字,并非函数语言的关键字,并非函数语言的关键字,并非函数计算计算计算计算类型类型类型类型占用的字节数占用的字节数占用的字节数占用的字节数 两
32、种语法形式两种语法形式两种语法形式两种语法形式 sizeof(sizeof(类型类型类型类型)结果为结果为结果为结果为类型类型类型类型占用的字节数占用的字节数占用的字节数占用的字节数 sizeof(sizeof(表达式表达式表达式表达式)结果为结果为结果为结果为表达式值所属类型表达式值所属类型表达式值所属类型表达式值所属类型占用的字节数占用的字节数占用的字节数占用的字节数 一般都使用一般都使用一般都使用一般都使用sizeofsizeof(变量名变量名变量名变量名)2023/1/1631/96C ProgrammingC Programming现场演示例现场演示例2.3在在TC和和VC、CB下的
33、运行结果下的运行结果#include main()printf(Data type Number of bytesn);printf(-n);printf(char%dn,sizeof(char);printf(int%dn,sizeof(int);printf(short int%dn,sizeof(short);printf(long int%dn,sizeof(long);printf(float%dn,sizeof(float);printf(double%dn,sizeof(double);P27,P27,例例例例2.32.32023/1/1632/96C ProgrammingC
34、Programming不同类型数据不同类型数据在内存中的存储形式不同在内存中的存储形式不同 字符型字符型字符型字符型 整型整型整型整型 实型实型实型实型N=SN=S2222j j j j阶码符号阶码符号阶码的数值阶码的数值尾数符号尾数符号尾数的数值尾数的数值阶码阶码j尾数尾数S所占位数决定所占位数决定所占位数决定所占位数决定实数的取值范围实数的取值范围实数的取值范围实数的取值范围所占位数决定所占位数决定所占位数决定所占位数决定实数的精度实数的精度实数的精度实数的精度2023/1/1633/96C ProgrammingC Programming常量常量(Constant)Consists of
35、:Consists of:整型整型整型整型(e.g.(e.g.0 67-20 67-2 123123L L 123 123u u 0 022 22 0 x0 x1212)缺省为缺省为缺省为缺省为intint实型实型实型实型(e.g.(e.g.2.3 1.2e-5 2.732.3 1.2e-5 2.73F F 2.73 2.73L L)缺省为缺省为缺省为缺省为doubledouble字符型字符型字符型字符型(e.g.(e.g.z 3$nz 3$n)用用用用 开头的字符为转义字符开头的字符为转义字符开头的字符为转义字符开头的字符为转义字符,代表代表代表代表1 1个字符个字符个字符个字符字符串字符串
36、字符串字符串(e.g.(e.g.UKM 1 5aUKM 1 5a)2023/1/1634/96C ProgrammingC Programming字符常量字符常量 转义字符转义字符转义字符转义字符一些特殊字符(无法从键盘输入或者另有它用)用一些特殊字符(无法从键盘输入或者另有它用)用一些特殊字符(无法从键盘输入或者另有它用)用一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示转义字符表示转义字符表示转义字符表示2023/1/1635/96C ProgrammingC Programming字符常量字符常量 字符常数就是一个普通整数,也可参与各种数学运算字符常数就是一个普通整数,也可参与各
37、种数学运算字符常数就是一个普通整数,也可参与各种数学运算字符常数就是一个普通整数,也可参与各种数学运算每个字符具有一个每个字符具有一个每个字符具有一个每个字符具有一个02550255之间的数值,可从之间的数值,可从之间的数值,可从之间的数值,可从ASCIIASCII表表表表查出查出查出查出注意:注意:注意:注意:55和整数和整数和整数和整数5 5的区别的区别的区别的区别 55的的的的ASCIIASCII码值是码值是码值是码值是5353 字符的数学运算在密码学内字符的数学运算在密码学内字符的数学运算在密码学内字符的数学运算在密码学内 用得比较多用得比较多用得比较多用得比较多2023/1/1636
38、/96C ProgrammingC Programming例例例例2.52.5:小写字母转换为大写字母:小写字母转换为大写字母:小写字母转换为大写字母:小写字母转换为大写字母#includeinclude mainmain()()charchar ch=b;ch=b;printf printf(%c,%dn,ch,ch);(%c,%dn,ch,ch);ch=b-ch=b-3232;printfprintf(%c,%dn,ch,ch);(%c,%dn,ch,ch);#includeinclude mainmain()()charchar ch=b;ch=b;printf printf(%c,%d
39、n,ch,ch);(%c,%dn,ch,ch);ch=b-ch=b-(a-A)(a-A);printfprintf(%c,%dn,ch,ch);(%c,%dn,ch,ch);b,98B,66 b,98B,66 相当于相当于相当于相当于97-6597-652023/1/1637/96C ProgrammingC Programming字符串常量字符串常量 用双引号括住的由用双引号括住的由用双引号括住的由用双引号括住的由0 0个或多个字符组成的字符序列个或多个字符组成的字符序列个或多个字符组成的字符序列个或多个字符组成的字符序列 I am a stringI am a string 表示空字符串表
40、示空字符串表示空字符串表示空字符串 除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地方 C C语言内部用语言内部用语言内部用语言内部用00表示字符串的结束表示字符串的结束表示字符串的结束表示字符串的结束 xx和和和和xx是不同的是不同的是不同的是不同的 里定义了一系列专门的字符串处理函数里定义了一系列专门的字符串处理函数里定义了一系列专门的字符串处理函数里定义了一系列专门的字符串处理函数 转义字符也可在字符串中使用转义字符也可在字符串中使用转义字符也可在字符串中使用转义字符也可在字符串中使用 习题习题习题习题
41、2.2(4)2.2(4)字符串字符串字符串字符串tNameAddressntNameAddressn的长度?的长度?的长度?的长度?15152023/1/1638/96C ProgrammingC Programming宏常量宏常量#define#define 标识符标识符标识符标识符 字符串字符串字符串字符串 宏常量宏常量宏常量宏常量也称符号常量也称符号常量也称符号常量也称符号常量一般采用全大写字母表示一般采用全大写字母表示一般采用全大写字母表示一般采用全大写字母表示 宏定义不是语句,而是一种编译预处理命令宏定义不是语句,而是一种编译预处理命令宏定义不是语句,而是一种编译预处理命令宏定义不是
42、语句,而是一种编译预处理命令2023/1/1639/96C ProgrammingC Programming例例2.2:计算圆的周长和面积:计算圆的周长和面积#includeinclude#definedefine PI 3.14159 PI 3.14159#definedefine R 5.3 R 5.3mainmain()()printfprintf(area=%fn,PI*R*R);(area=%fn,PI*R*R);printfprintf(circumference=%fn,2*PI*R);(circumference=%fn,2*PI*R);area=88.247263circum
43、ference=33.300854相当于执行相当于执行相当于执行相当于执行#includeinclude mainmain()()printfprintf(area=%fn,3.14159*5.3*5.3);(area=%fn,3.14159*5.3*5.3);printfprintf(circumference=%fn,2*3.14159(circumference=%fn,2*3.14159 *5.3);5.3);宏替换宏替换宏替换宏替换2023/1/1640/96C ProgrammingC Programming例例2.2:计算圆的周长和面积:计算圆的周长和面积#includeincl
44、ude#definedefine PI 3.14159 PI 3.14159;#definedefine R 5.3 R 5.3;mainmain()()printfprintf(area=%fn,PI*R*R);(area=%fn,PI*R*R);printfprintf(circumference=%fn,2*PI*R);(circumference=%fn,2*PI*R);相当于执行相当于执行相当于执行相当于执行#includeinclude mainmain()()printfprintf(area=%fn,3.14159(area=%fn,3.14159;*5.3*5.3;*5.3*
45、5.3;););printfprintf(circumference=%fn,2*3.14159(circumference=%fn,2*3.14159;*5.35.3;););语法错语法错语法错语法错误误误误2023/1/1641/96C ProgrammingC Programming例例2.2:计算圆的周长和面积:计算圆的周长和面积#includeinclude mainmain()()const floatconst float pi=3.14259;pi=3.14259;const floatconst float r=5.3;r=5.3;printfprintf(area=%fn,
46、pi*r*r);(area=%fn,pi*r*r);printfprintf(circumference=%fn,2*pi*r);(circumference=%fn,2*pi*r);用用用用constconst修饰定义的修饰定义的修饰定义的修饰定义的constconst常量常量常量常量 constconst常量与宏常量相比的优点是什么?常量与宏常量相比的优点是什么?常量与宏常量相比的优点是什么?常量与宏常量相比的优点是什么?constconst常量有常量有常量有常量有数据类型数据类型数据类型数据类型 某些集成化调试工具可以对某些集成化调试工具可以对某些集成化调试工具可以对某些集成化调试工具可
47、以对constconst常量进行调试常量进行调试常量进行调试常量进行调试2023/1/1642/96C ProgrammingC Programming枚举(枚举(Enumeration)常量)常量 一个被遗忘的角色,从程序来窥其一斑一个被遗忘的角色,从程序来窥其一斑一个被遗忘的角色,从程序来窥其一斑一个被遗忘的角色,从程序来窥其一斑 enumenum weeks SUN,MON,TUE,WED,THU,FRI,SAT;weeks SUN,MON,TUE,WED,THU,FRI,SAT;enumenum weeks weeks todaytoday;enum enum response no,
48、yes,none;response no,yes,none;enum enum response response answeranswer;todaytoday =TUE;=TUE;answeranswer=yes;=yes;enum enum response no=-1,yes=1,none=0;response no=-1,yes=1,none=0;其值为其值为其值为其值为2 2其值为其值为其值为其值为1 12023/1/1643/96C ProgrammingC Programming为什么需要常量?为什么需要常量?假如不使用常量,直接使用常数,会有什么影响?假如不使用常量,直接使用
49、常数,会有什么影响?假如不使用常量,直接使用常数,会有什么影响?假如不使用常量,直接使用常数,会有什么影响?程序的可读性变差程序的可读性变差程序的可读性变差程序的可读性变差容易发生书写错误容易发生书写错误容易发生书写错误容易发生书写错误当常数需要改变时,要修改所有使用它的代码,工作量当常数需要改变时,要修改所有使用它的代码,工作量当常数需要改变时,要修改所有使用它的代码,工作量当常数需要改变时,要修改所有使用它的代码,工作量大,还可能有遗漏大,还可能有遗漏大,还可能有遗漏大,还可能有遗漏 解决方案:解决方案:解决方案:解决方案:避免使用幻数(直接使用的常数)避免使用幻数(直接使用的常数)避免使
50、用幻数(直接使用的常数)避免使用幻数(直接使用的常数)把幻数定义为宏常量、把幻数定义为宏常量、把幻数定义为宏常量、把幻数定义为宏常量、constconst常量,或枚举常量常量,或枚举常量常量,或枚举常量常量,或枚举常量 建议使用后两者建议使用后两者建议使用后两者建议使用后两者2023/1/1644/96C ProgrammingC Programming运算符(运算符(Operator)3434种,详见附录种,详见附录种,详见附录种,详见附录2 2 常见的运算符常见的运算符常见的运算符常见的运算符算术运算符算术运算符算术运算符算术运算符赋值运算符赋值运算符赋值运算符赋值运算符类型强转类型强转类