c语言教材第一章

上传人:M****1 文档编号:571317849 上传时间:2024-08-10 格式:PPT 页数:91 大小:502.50KB
返回 下载 相关 举报
c语言教材第一章_第1页
第1页 / 共91页
c语言教材第一章_第2页
第2页 / 共91页
c语言教材第一章_第3页
第3页 / 共91页
c语言教材第一章_第4页
第4页 / 共91页
c语言教材第一章_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《c语言教材第一章》由会员分享,可在线阅读,更多相关《c语言教材第一章(91页珍藏版)》请在金锄头文库上搜索。

1、1 1 开篇开篇n本课程讲述如何使用本课程讲述如何使用C语言进行真正的编程语言进行真正的编程 为什么学习为什么学习c语言?语言? nC语言是目前实际程序设计工作中使用最广泛的语言之一语言是目前实际程序设计工作中使用最广泛的语言之一 它包含了程序设计需要理解和使用的基本程序机理和主要机制它包含了程序设计需要理解和使用的基本程序机理和主要机制 掌握这些机制就可以理解程序与程序设计的主要问题。掌握这些机制就可以理解程序与程序设计的主要问题。 n目前有许多软件系统是用目前有许多软件系统是用C编写的,或基本上是用编写的,或基本上是用C编写的编写的 学习程序设计的同时也能掌握一种实用的程序设计工具学习程序

2、设计的同时也能掌握一种实用的程序设计工具 nC语言是一种很灵活的语言语言是一种很灵活的语言 既可以在较高层次上做,也可以在较低级的层次上做既可以在较高层次上做,也可以在较低级的层次上做 n很多新型的语言都是衍生自很多新型的语言都是衍生自C语言语言 有些本身就是有些本身就是C语言的扩充和发展语言的扩充和发展 n程序设计是计算机领域的基础课程程序设计是计算机领域的基础课程 C语言适合作为计算机领域许多后续课程的教学语言语言适合作为计算机领域许多后续课程的教学语言2 2 开篇开篇n本课程讲述如何使用本课程讲述如何使用 C语言进行真正的编程语言进行真正的编程 授课重点授课重点 n侧重学习一个具体问题的

3、算法化的过程侧重学习一个具体问题的算法化的过程 n学习应该掌握的基本编程技巧以及学习应该掌握的基本编程技巧以及C编程的风格和艺术编程的风格和艺术 n讨论讨论 怎样编写出一个好的程序?怎样编写出一个好的程序? 简单、实用的原则简单、实用的原则3 3 开篇开篇n本课程的组织本课程的组织第一部分第一部分 基基 础础第二部分第二部分 简单程序设计简单程序设计第三部分第三部分 高级程序设计高级程序设计算法概念、编程原理、编程风格、算法概念、编程原理、编程风格、 基本数据类型定义、算术运算符及基本数据类型定义、算术运算符及 表达式表达式顺序结构、选择结构、循环结构、顺序结构、选择结构、循环结构、 数组的定

4、义及应用、程序设计过程数组的定义及应用、程序设计过程函数、变量的存储类别、指针、结函数、变量的存储类别、指针、结 构体与共用体、文件构体与共用体、文件4 4 1.程序与程序设计语言程序与程序设计语言n什么是程序?什么是程序? 什么是计算机?什么是计算机? n计算机是一种具有内部存储能力的自动、高效的电计算机是一种具有内部存储能力的自动、高效的电子设备,子设备, 计算机怎样完成工作?计算机怎样完成工作? n执行存放在计算机的内部存储器中的指令执行存放在计算机的内部存储器中的指令 程序是计算机指令的序列程序是计算机指令的序列 n可以被连续执行的一条条指令的集合称为计算机的可以被连续执行的一条条指令

5、的集合称为计算机的程序程序5 5 1.程序与程序设计语言程序与程序设计语言n什么是计算机语言?什么是计算机语言? 是与计算机交流的工具是与计算机交流的工具 n人和人交流用的是双方都能听懂和读懂的自然语言人和人交流用的是双方都能听懂和读懂的自然语言 n人和计算机交流也要用人和计算机都容易接受和理人和计算机交流也要用人和计算机都容易接受和理解的语言解的语言 计算机语言是根据计算机的特点而编制的计算机语言是根据计算机的特点而编制的 n有限规则的集合有限规则的集合 n什么是程序设计语言?什么是程序设计语言? 计算机语言又称为计算机语言又称为“程序语言程序语言“ n一个计算机程序总是用某种程序语言来编写

6、一个计算机程序总是用某种程序语言来编写6 6 1.程序与程序设计语言程序与程序设计语言n程序设计语言的发展程序设计语言的发展 问题?问题? n怎样从功能和使用方式上来划分程序设计语言?他怎样从功能和使用方式上来划分程序设计语言?他们各有什么特点?举例。们各有什么特点?举例。7 7 2.程序设计程序设计n什么是程序设计?什么是程序设计? 使用某种程序语言编写程序的过程使用某种程序语言编写程序的过程 n是用计算机语言对所要解决的问题中的数据以及是用计算机语言对所要解决的问题中的数据以及处理问题的方法和步骤所做的完整而准确的描述处理问题的方法和步骤所做的完整而准确的描述的过程的过程 n怎样进行程序设

7、计?怎样进行程序设计? 分析问题分析问题 确定算法确定算法 编制程序编制程序 调试程序调试程序8 8 2.程序设计程序设计n一个完整的程序一个完整的程序 n数据结构、算法、编程语言和程序设计方法数据结构、算法、编程语言和程序设计方法 对数据的描述(数据流)对数据的描述(数据流) 指定数据的类型和数据的结构指定数据的类型和数据的结构 对操作的描述(控制流)对操作的描述(控制流) 指定操作的步骤,既算法指定操作的步骤,既算法 程序程序= =数据结构数据结构+ +算法算法9 9 3.算法算法n输入三个数,然后输出最大的数输入三个数,然后输出最大的数 n算法的两个要素算法的两个要素 基本功能操作基本功

8、能操作 n数据运算和传输数据运算和传输 控制结构控制结构 n顺序、选择和循环三种基本控制流程顺序、选择和循环三种基本控制流程 算法可以写成:算法可以写成: (1)输入)输入A,B,C; (2)若)若AB,则,则A-MAX;若;若AMAX。 (3)若)若CMAX,则,则C-MAX。 (4)输出)输出MAX,MAX既是最大数。既是最大数。 1010 3.算法算法n算法的特性算法的特性 有穷性有穷性 n应含有有限的操作步骤,不能是无限的。有穷性指在应含有有限的操作步骤,不能是无限的。有穷性指在 “合理合理的限度之内的限度之内” 唯一性唯一性 n每一个步骤都是确定的,只有一个涵义,不可以为二义性每一个

9、步骤都是确定的,只有一个涵义,不可以为二义性 有零个或多个输入有零个或多个输入 n在执行算法时需要从外界获取必要的信息在执行算法时需要从外界获取必要的信息 有一个或多个输出有一个或多个输出 n算法执行的目的就是为了求解,算法执行的目的就是为了求解,“解解”就是输出的信息就是输出的信息 n没有输出的算法是没有意义的没有输出的算法是没有意义的 正确性正确性 n每一个步骤应当被有效的执行,并得到确定的结果每一个步骤应当被有效的执行,并得到确定的结果1111 3.算法算法n算法的表示算法的表示 流程图流程图 端点:表示程序的转向,常用来表示端点:表示程序的转向,常用来表示程序的开始和结束。程序的开始和

10、结束。处理:操作的功能处理:操作的功能判断:单入口判断:单入口 多出口,表明判断的条件多出口,表明判断的条件流线:表示程序流线:表示程序 的执行方向和顺序。的执行方向和顺序。输入输入/ /输出:表示数据的名称、类型和用途等。输出:表示数据的名称、类型和用途等。1212 3.算法算法n算法的表示算法的表示 流程图流程图开始开始输入输入A,B,CAB?TN MAX=AMAX=B CMAX?NTMAX=C输出输出MAX结束结束1313 3.算法算法n算法的表示算法的表示 N-S图图 n是适合结构化程序设是适合结构化程序设计方法的图形工具计方法的图形工具 nN-S流程图无法表示流程图无法表示非结构化的

11、程序非结构化的程序 T TN N当当条件条件满足满足 A1=1A1=1i=9i=9当当i=1i=1时,循环时,循环a0=2*a0=2*(a1+1a1+1)a1=a0a1=a0i=i-1i=i-1输出输出a0a01414 3.算法算法(练习练习)n算法的表示算法的表示 其它其它 n典型算法典型算法 1515 4.结构化的程序设计方法结构化的程序设计方法n程序的三种基本结构程序的三种基本结构 问题的提出问题的提出 结构化程序设计必须采用的结构结构化程序设计必须采用的结构 n顺序结构、选择结构和循环结构顺序结构、选择结构和循环结构 被称为程序设计的三种基本结构被称为程序设计的三种基本结构 n算法的实

12、现过程是由一系列操作组成的,这些操作算法的实现过程是由一系列操作组成的,这些操作之间的执行次序就是程序的控制结构之间的执行次序就是程序的控制结构 n总体结构流程都是自上而下顺序执行的。总体结构流程都是自上而下顺序执行的。 1616 4.结构化的程序设计方法结构化的程序设计方法n程序的三种基本结构程序的三种基本结构 顺序结构顺序结构 n顺序结构表示程序中的各操作是顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的按照它们出现的先后顺序执行的 选择结构选择结构 n表示程序的处理出现了分支,它表示程序的处理出现了分支,它需要根据某一特定的条件选择其需要根据某一特定的条件选择其中的一个分支执行中

13、的一个分支执行 循环结构循环结构 n程序反复执行某个或某些操作,程序反复执行某个或某些操作,直到某条件为假(或为真)时才直到某条件为假(或为真)时才可终止循环可终止循环 1717 4.结构化的程序设计方法结构化的程序设计方法n结构化程序设计方法结构化程序设计方法 公认的面向过程编程应遵循的基本方法和原则公认的面向过程编程应遵循的基本方法和原则 结构化程序设计特征结构化程序设计特征 n采用模块化结构采用模块化结构 自顶而下的设计方法自顶而下的设计方法 便于对问题的分解和模块的划分便于对问题的分解和模块的划分 程序由三种基本控制结构组成程序由三种基本控制结构组成 有限制地使用转移语句有限制地使用转

14、移语句 n采用结构化程序设计语言书写程序采用结构化程序设计语言书写程序 结构化程序设计语言书写程序结构化程序设计语言书写程序 n注意书写风格注意书写风格1818 5.什么是什么是C语言?语言?n1973年由美国贝尔实验室设计发布的年由美国贝尔实验室设计发布的 目前是计算机程序设计语言的主流语种目前是计算机程序设计语言的主流语种 是世界上最为广泛使用的语言之一是世界上最为广泛使用的语言之一 nC语言的流行归功于两个主要因素语言的流行归功于两个主要因素 使用正确的使用正确的C语言指令几乎可以完成任何任务语言指令几乎可以完成任何任务 是可移植的是可移植的C编译系统的广泛采用编译系统的广泛采用 nC语

15、言是一种能够让软件工程师与计算机进行有效对话的语言是一种能够让软件工程师与计算机进行有效对话的介于汇编语言和高级语言之间的编程语言介于汇编语言和高级语言之间的编程语言 nC语言标准语言标准 1978年,正式出版的年,正式出版的The C Programming Language书中书中介绍的介绍的C语言,称为标准语言,称为标准C语言语言 1983年,美国国家标准化协会(年,美国国家标准化协会(ANSI)根据各种)根据各种C语言版本对语言版本对C的扩充和发展,颁布了的扩充和发展,颁布了C语言的新标准语言的新标准ANSI C nANSI C比标准比标准C有了很大的扩充和发展有了很大的扩充和发展 1

16、987年,美国国家标准化协会又颁布新标准,称为年,美国国家标准化协会又颁布新标准,称为87 ANSI C 1990年,国际标准化组织年,国际标准化组织ISO接受了接受了87 ANSI C作为作为ISO C的标准的标准 n目前功能最完善、性能最优良的目前功能最完善、性能最优良的C新版本新版本 n目前流行的目前流行的C编译系统都是以它为基础的编译系统都是以它为基础的1919 5.什么是什么是C语言?语言?nC语言的特点语言的特点 适合开发系统软件适合开发系统软件 结构化的程序设计语言结构化的程序设计语言 丰富的数据类型和数据结构丰富的数据类型和数据结构 运算符多样化运算符多样化 可移植性好可移植性

17、好 语句简洁紧凑语句简洁紧凑 编程风格灵活,语法限制少,使用灵活编程风格灵活,语法限制少,使用灵活 具有预处理功能具有预处理功能 面向对象程序设计的基础面向对象程序设计的基础2020 编写一个加法运算程序编写一个加法运算程序#includestdio.h main()() int a,b;/*/*定义两个整形变量定义两个整形变量* */ / a=1;b=5;/*/*给两个两个变量量赋值* */ / printf(“%d+%d=%dn”,a,b,a+b); /*/*打印打印a a和和b b之和之和* */ / C C语言言严格区分大、小写格区分大、小写 英文字母。英文字母。C C语言程序言程序习

18、惯上使用小写英文字母上使用小写英文字母,而大写英文字母通常作为常量的宏定而大写英文字母通常作为常量的宏定义和其他特殊的用途。义和其他特殊的用途。5.什么是什么是C C语言?语言?2121 #includestdio.h main()() int a,b;/*/*定定义两个整形两个整形变量量* */ / a=1;b=5;/*/*给两个两个变量量赋值* */ / printf(“%d+%d=%dn”,a,b,a+b); ; /* /*打印打印a a和和b b之和之和* */ / C C语言言严格区分大、小写格区分大、小写 英文字母。英文字母。例:例:编写一个加法运算程序如下:编写一个加法运算程序如

19、下:5.什么是什么是C C语言?语言? C C语言程序是由一个个的言程序是由一个个的 语句句组成。成。每个语句都具有规定的语法格式每个语句都具有规定的语法格式和特定的功能。和特定的功能。编写一个加法运算程序编写一个加法运算程序2222 #includestdio.h main()() int a,b;/*/*定定义两个整形两个整形变量量* */ / a=1;b=5;/*/*给两个两个变量量赋值* */ / printf(“%d+%d=%dn”,a,b,a+b); /* /*打印打印a a和和b b之和之和* */ / C C语言言严格区分大、小写格区分大、小写 英文字母。英文字母。例:例:编写

20、一个加法运算程序如下:编写一个加法运算程序如下:5.什么是什么是C C语言?语言?&C C语言程序是由一个个的言程序是由一个个的 语句句组成。成。 C C语言程序使用语言程序使用“; ;”作为作为 语句的句的终止符和分隔符。止符和分隔符。可以任意书写,即一行中可以书写多个语可以任意书写,即一行中可以书写多个语句,一个语句也可以占用任意多行,语句句,一个语句也可以占用任意多行,语句之间必须用之间必须用“;”分隔。初学时建议在一分隔。初学时建议在一行内书写一条语句。行内书写一条语句。编写一个加法运算程序编写一个加法运算程序2323 #includestdio.h main( ) int a,b;/

21、*/*定定义两个整形两个整形变量量* */ / a=1;b=5;/*/*给两个两个变量量赋值* */ / printf(“%d+%d=%dn”,a,b,a+b); /* /*打印打印a a和和b b之和之和* */ / C C语言言严格区分大、小写格区分大、小写 英文字母。英文字母。例:例:编写一个加法运算程序如下:编写一个加法运算程序如下:5.什么是什么是C C语言?语言? C C语言程序是由一个个的言程序是由一个个的 语句句组成。成。 C C语言程序使用语言程序使用“;”作为作为 语句的句的终止符和分隔符。止符和分隔符。 C C语言程序中用大括号言程序中用大括号对 “ ”表示程序的结构层表

22、示程序的结构层 次范次范围。一个完整的程序模块要用一对花括号括起一个完整的程序模块要用一对花括号括起来,用以表示模块的范围。为了清晰地表来,用以表示模块的范围。为了清晰地表现出程序的结构,建议使用右缩进锯齿型现出程序的结构,建议使用右缩进锯齿型程序书写格式。程序书写格式。 编写一个加法运算程序编写一个加法运算程序2424 #includestdio.h main( ) int a,b;/*/*定定义两个整形两个整形变量量* */ / a=1;b=5;/*/*给两个两个变量量赋值* */ / printf(“%d+%d=%dn”,a,b,a+b); /* /*打印打印a a和和b b之和之和*

23、*/ / C C语言言严格区分大、小写格区分大、小写 英文字母。英文字母。例:例:编写一个加法运算程序如下:编写一个加法运算程序如下:5.什么是什么是C C语言?语言? C C语言程序是由一个个的言程序是由一个个的 语句句组成。成。 C C语言程序使用语言程序使用“;”作为作为 语句的句的终止符和分隔符。止符和分隔符。 C C语言程序中用大括号言程序中用大括号对 “ ”表示程序的结构层表示程序的结构层 次范次范围。语言程序可以使用注释。语言程序可以使用注释。 注释部分的格式是:注释部分的格式是: 注释内容注释部分不参与注释内容注释部分不参与程序的执行,对程序的运行结果没程序的执行,对程序的运行

24、结果没有影响,只是用来提示或助记。有影响,只是用来提示或助记。编写一个加法运算程序编写一个加法运算程序2525 5.什么是什么是C语言?语言?n nC C程序结构组成程序结构组成程序结构组成程序结构组成 C程序为函数模块结构,整个程序程序为函数模块结构,整个程序都是由一个或多个函数组成都是由一个或多个函数组成 函数是由函数说明和函数体两部函数是由函数说明和函数体两部分组成分组成 一个一个C程序总是从程序总是从main()函数开始函数开始执行执行 被调用的函数可以是系统提供的被调用的函数可以是系统提供的库函数,也可以是用户根据需要库函数,也可以是用户根据需要自己编制设计的函数(用户自定自己编制设

25、计的函数(用户自定义函数)义函数) 一个一个C 程序可以由一个文件组成,程序可以由一个文件组成,也可以由也可以由若干个文件若干个文件组成组成分析下面程序:分析下面程序: #include main( ) int a=1,b=5,c; c=add(a,b); printf(“c=%dn”,c); int add(int x,int y) return(x+y); 2626 C C程序程序源程序文件源程序文件1 1源程序文件源程序文件i i源程序文件源程序文件n n预编译命令预编译命令函数函数1 1函数函数n n函数体函数体函数首部函数首部n nC C程序结构组成程序结构组成程序结构组成程序结构组

26、成5.什么是什么是C C语言?语言? 注意注意注意注意 一个函数名后面必一个函数名后面必须跟一跟一对()(),函数参数可以没有,但这,函数参数可以没有,但这 一一对()不能省略,如()不能省略,如mainmain()() 在函数定义中第一行的函数名后没有分号在函数定义中第一行的函数名后没有分号“;” 2727 5.什么是什么是C语言?语言?n标识符标识符 每种程序语言都规定了在程序里描述名字的规则每种程序语言都规定了在程序里描述名字的规则 n这些名字包括:变量名、常数名、数组名、函数名、文件名、这些名字包括:变量名、常数名、数组名、函数名、文件名、类型名等,被统称为类型名等,被统称为标识符标识

27、符 n nC C语言标识符语言标识符语言标识符语言标识符 C语言的标识符是满足如下条件的语言的标识符是满足如下条件的字符序列字符序列字符序列字符序列 n只能由英文字母、数字和下划线组成只能由英文字母、数字和下划线组成 n必须以英文字母或下划线开头必须以英文字母或下划线开头 n注意注意 标识符的使用很多,使用时要注意语言规则标识符的使用很多,使用时要注意语言规则 C语言对大、小写字母严格区分语言对大、小写字母严格区分 根据根据ANSI标准,只有前标准,只有前31个字符是有意义,个字符是有意义,但一般系统使但一般系统使用的标识符,其有效长度不超过用的标识符,其有效长度不超过8个字符个字符 标识符不

28、要与关键字同名标识符不要与关键字同名2828 5.什么是什么是C语言?语言?n关键字关键字 具有特定含义的,用作专用的标识符具有特定含义的,用作专用的标识符 n语言中关键字绝大多数是由小写字母构成的字符语言中关键字绝大多数是由小写字母构成的字符序列序列 注意:注意: n这些特定的关键字不允许用户作为自定义的标识符这些特定的关键字不允许用户作为自定义的标识符使用使用 n 例:指出合法的例:指出合法的标识符与关键字标识符与关键字 “ABAABA” S05 S05 file.cfile.c 10page printf 10page printf yellow_redyellow_red a&ba&b

29、 -113 _ACG -113 _ACG AbcAbc 2929 5.什么是什么是C语言?语言?n语句语句 语句是组成程序的基本单位语句是组成程序的基本单位 n它能完成特定操作它能完成特定操作 所有程序设计语言都提供了满足编写程序要求所有程序设计语言都提供了满足编写程序要求的一系列语句的一系列语句 n有确定的形式和功能有确定的形式和功能 C语言中的语句语言中的语句3030 6. C语言的开发与运行n开发一个开发一个C程序,一般过程程序,一般过程编辑:使用一个文本编辑器将编写好的编辑:使用一个文本编辑器将编写好的C C程序输入计算机,并以程序输入计算机,并以 文本文件的形式保存文本文件的形式保存

30、C C语言源程序,其文件扩展名为语言源程序,其文件扩展名为“.C.C” 编译:使用一个编译:使用一个C C语言编译系统(如语言编译系统(如TurboCTurboC 2.0 2.0)对)对C C语言源程序语言源程序 进行语法检查和翻译,生成同名的进行语法检查和翻译,生成同名的“.OBJ.OBJ”目标文件目标文件链接:将目标文件和系统提供的标准库函数等连接在一起,生成链接:将目标文件和系统提供的标准库函数等连接在一起,生成 一个同名的一个同名的“.EXE.EXE”可执行文件可执行文件 执行:脱离执行:脱离C C语言编译系统,可在操作系统下键入文件名直接运行语言编译系统,可在操作系统下键入文件名直接

31、运行3131 6. C语言的开发与运行n安装安装tc2.0 下载下载 Cd n思考题思考题 C语言程序执行过程是如何进行的?应注意什么问题?语言程序执行过程是如何进行的?应注意什么问题? n 3232 7. 小测验小测验 n根据语言标识符的命名规则,以下全部合法的标识符是根据语言标识符的命名规则,以下全部合法的标识符是: A)2xy, x+y, 10xy, xy2 B)main(), printf, int, float C)int, char, printf , scanf D)add, x10, _count, x_y n一个语言程序总是从一个语言程序总是从 A)主过程开始执行主过程开始执

32、行B)主函数开始执行主函数开始执行 C)子程序开始执行子程序开始执行D)主程序开始执行主程序开始执行 3333 n数据数据 数据是程序设计中所要涉及和描述的主要内容数据是程序设计中所要涉及和描述的主要内容 n数据是程序加工、处理的对象数据是程序加工、处理的对象 n数据同样是加工的结果数据同样是加工的结果 n数据类型数据类型 数据类型的概念数据类型的概念 n数据类型是一类数据的抽象表示,这类数据具有相数据类型是一类数据的抽象表示,这类数据具有相同的形式,遵从相同的运算规则同的形式,遵从相同的运算规则 程序处理的基本数据按性质划分程序处理的基本数据按性质划分 属于同一类的各个数据都具有同样的性质属

33、于同一类的各个数据都具有同样的性质 同样的操作同样的操作 同样的编码方式同样的编码方式 把程序语言中具有这样性质的数据集合称为数据类型。把程序语言中具有这样性质的数据集合称为数据类型。 .什么是数据和数据类型什么是数据和数据类型 3434 .C语言的数据类型语言的数据类型n数据类型的分类数据类型的分类数据类型数据类型空类型空类型指针类型指针类型构造类型构造类型结结 构构 体体 类类 型型数数 组组 类类 型型共共 用用 体体 类类 型型基本类型基本类型整型整型实型实型字符型字符型标准类型标准类型用户定义类型用户定义类型枚举型枚举型单精度型单精度型 双精度型双精度型指针类型指针类型指针类型指针类

34、型 n n用于存放地址(指针),用用于存放地址(指针),用用于存放地址(指针),用用于存放地址(指针),用来解决动态数据的建立、删来解决动态数据的建立、删来解决动态数据的建立、删来解决动态数据的建立、删除和使用除和使用除和使用除和使用 空类型空类型空类型空类型 n n用于数据类型的转换用于数据类型的转换用于数据类型的转换用于数据类型的转换 基本类型基本类型基本类型基本类型 n n构造简单,已由系统定义好构造简单,已由系统定义好构造简单,已由系统定义好构造简单,已由系统定义好 构造类型构造类型构造类型构造类型 n n由其它数据类型按一定规则由其它数据类型按一定规则由其它数据类型按一定规则由其它数

35、据类型按一定规则构造而成。构造而成。构造而成。构造而成。 3535 .C语言的数据类型语言的数据类型n数据类型的分类数据类型的分类 提示提示 n每个数据类型都有固定的表示方式每个数据类型都有固定的表示方式 这个表示方式确定了可能表示的数据范围以及数据在内存中的这个表示方式确定了可能表示的数据范围以及数据在内存中的存放形式存放形式 C程序中所出现的程序中所出现的所有数据所有数据都必须明确指定其数据类型都必须明确指定其数据类型 n数据类型的体现数据类型的体现 常量和变量是在计算机中数据类型的表现形式常量和变量是在计算机中数据类型的表现形式 n不再是抽象的概念而是实在的数据,这些数据符合对数不再是抽

36、象的概念而是实在的数据,这些数据符合对数据类型的规定(形式和运算规则两方面)据类型的规定(形式和运算规则两方面) n常量和变量之间的区别在于程序执行过程中的变化情况常量和变量之间的区别在于程序执行过程中的变化情况 常量是一成不变的常量是一成不变的 变量则可以不断改变变量则可以不断改变3636 .C语言的数据类型语言的数据类型n数据类型的长度数据类型的长度 在计算机中,由于软硬件的各种原因,数据类在计算机中,由于软硬件的各种原因,数据类型必须有一个长度的限制型必须有一个长度的限制 n这个长度是指数据存储在计算机中需要占用多少个这个长度是指数据存储在计算机中需要占用多少个字节数字节数 n 不同类型

37、的数据在内存中占用的字节数是不同的不同类型的数据在内存中占用的字节数是不同的 n溢出处理溢出处理 不同的数据类型规定了不同的机内表示长度,不同的数据类型规定了不同的机内表示长度,也决定了对应数据量的变化范围,当某一数据也决定了对应数据量的变化范围,当某一数据超出该数据类型所规定的范围时,计算机会拒超出该数据类型所规定的范围时,计算机会拒绝接受,而将之转换成范围内的另外某个数,绝接受,而将之转换成范围内的另外某个数,这种情况称之为溢出处理。这种情况称之为溢出处理。3737 10.常量常量n n常量常量 在程序运行过程中其值不能被改变的量值在程序运行过程中其值不能被改变的量值 n例例1: 1,20

38、0 3.1,-4.0 A,b “abc”,“ABn” 提示提示 n在程序中使用常量时,一般不需要具体指出它属于在程序中使用常量时,一般不需要具体指出它属于哪一种类型哪一种类型C语言编译系统会自动根据常量的数据语言编译系统会自动根据常量的数据大小和直观形式来确定它的数据类型大小和直观形式来确定它的数据类型 n例例2: 3,3.0,3,“3” 3838 10.常量常量n n语言提供的常量语言提供的常量 数值常量数值常量数值常量数值常量 n n整型整型整型整型 n n实型实型实型实型 字符常量字符常量字符常量字符常量 n n字符常量字符常量字符常量字符常量 n n字符串常量字符串常量字符串常量字符串

39、常量 这些类型决定了各种常量所占存储空间的大小这些类型决定了各种常量所占存储空间的大小这些类型决定了各种常量所占存储空间的大小这些类型决定了各种常量所占存储空间的大小和数的表示范围和数的表示范围和数的表示范围和数的表示范围 特殊形式常量特殊形式常量特殊形式常量特殊形式常量 n n符号常量符号常量符号常量符号常量 3939 10.常量常量n整型常量整型常量 一个整数一个整数 常用的整数类型常用的整数类型(IBM PC机及其兼容机上对机及其兼容机上对C语言整型数的规定语言整型数的规定 ) n整型整型 2字节:字节: -3276832767 n长整型长整型 4字节:字节:-2147483648214

40、7483647 n无符号整型无符号整型 2字节:字节: 065535 n无符号长整型无符号长整型 4字节字节 :04294967295 提示:提示: n整型常量只区别整型和长整型两种形式,而没有无符号整型常量只区别整型和长整型两种形式,而没有无符号值型常量值型常量4040 10.常量常量n整型常量整型常量 三种形式三种形式 n十进制十进制 有效的十进制数字串有效的十进制数字串 例:例:100,32767,-120 n八进制八进制 以数字以数字“0”开头的八进制数字串开头的八进制数字串 例:例:0100,0123,-012 n十六进制十六进制 以数字以数字0x或或0X开头的十六进制字符串开头的十

41、六进制字符串 例:例:0x123 ,0x100,-0x12 n长整型常量长整型常量 n可表示为:十进制、八进制、十六进制可表示为:十进制、八进制、十六进制 n在常数之后加上字母在常数之后加上字母或或 35555是否为十进制常量?是否为十进制常量?0358是否为八进制常量?是否为八进制常量?4141 10.常量常量n实型常量实型常量 实数,又称浮点数实数,又称浮点数 类型类型 n单精度型单精度型 4字节:字节: 10-38 1038 n双精度型双精度型 8字节:字节: 10-30810308 n长双精度型长双精度型 16字节:字节: 10-4931 104932 有效位数有效位数 n单精度有效数

42、字位数为十进制数的单精度有效数字位数为十进制数的67位位 n双精度有效数字位数为十进制数的双精度有效数字位数为十进制数的1516位位 n长双精度型有效数字位数为十进制数的长双精度型有效数字位数为十进制数的1819位位 提示:提示: n在语言中,实型常量一般都作为双精度来处理,并且只用十在语言中,实型常量一般都作为双精度来处理,并且只用十进制数表示进制数表示4242 10.常量常量n实型常量实型常量 两种形式两种形式 n小数形式小数形式 由正负符号、整数部分、小数点及小数部分组成由正负符号、整数部分、小数点及小数部分组成 例:例:3.0,5.123,-120.1,0.0 n指数形式指数形式 由尾

43、数、字母由尾数、字母e或或E及指数部分组成及指数部分组成 例:例: 123.0E-1,-1.23e3 标准的指数形式是:小数点的左侧只有一位数字标准的指数形式是:小数点的左侧只有一位数字 4343 提示提示 n注意指数必须是不超过数据表示范围的正负整数,注意指数必须是不超过数据表示范围的正负整数,并且在并且在e或或E前必须有数字前必须有数字 n对于超过有效数字位的数位,系统存储时自动舍去对于超过有效数字位的数位,系统存储时自动舍去 问题:问题: n合法的长双精度实型常量的表示形式?合法的长双精度实型常量的表示形式? 4444 C语言中字符型数据和整型数据可以通用语言中字符型数据和整型数据可以通

44、用 n字符型数据在计算机中存储的是字符的字符型数据在计算机中存储的是字符的ASCII码码 ASCII码形式上就是码形式上就是0 到到255之间的整数之间的整数 例如例如 字符字符A的的ASCII码值用是码值用是65 A+32; /*执行结果执行结果65+32=97,是,是a的的ASCII码值码值*/ 4545 10.常量常量n字符常量字符常量 包括可以全部在计算机上显示的符号包括可以全部在计算机上显示的符号 nASCII码表上的全部字符码表上的全部字符 n一个字符的存储占用一个字节一个字符的存储占用一个字节 表示方法表示方法 n用单引号用单引号 括起来的一个字符括起来的一个字符 A,1 n用单

45、引号用单引号 括起来的以括起来的以 字符开始的字符字符开始的字符 n,t 4646 10.常量常量n字符串常量字符串常量 是用一对双引号括起来的字符序列是用一对双引号括起来的字符序列 n双引号仅做定界符使用,本身不算入字符串常量双引号仅做定界符使用,本身不算入字符串常量 n例如例如 “ABC”,“ ”(有空格有空格),“a” , “Happy new Year”, “abcn” ,“”(无空格(无空格)等等 C语言规定字符串的最后必须以空字符语言规定字符串的最后必须以空字符0结尾结尾 n编译程序总是自动地在字符串的结尾加上一个转义编译程序总是自动地在字符串的结尾加上一个转义字符字符0 ASCI

46、I码是码是0,所对应的字符是空,所对应的字符是空 空字符并不计算在字符串的长度里,但是存储时,空字符空字符并不计算在字符串的长度里,但是存储时,空字符将会额外的占用一个字节空间将会额外的占用一个字节空间 4747 10.常量常量n n字符串常量字符串常量 字符串常量与字符常量的区别字符串常量与字符常量的区别字符串常量与字符常量的区别字符串常量与字符常量的区别 n n形式形式形式形式 字符常量是用单引号括起的单个字符字符常量是用单引号括起的单个字符字符常量是用单引号括起的单个字符字符常量是用单引号括起的单个字符 字符串常量是用双引号括起的一串字符字符串常量是用双引号括起的一串字符字符串常量是用双

47、引号括起的一串字符字符串常量是用双引号括起的一串字符 n n存储方式存储方式存储方式存储方式 字符常量在内存中占一个字节字符常量在内存中占一个字节字符常量在内存中占一个字节字符常量在内存中占一个字节 字符串常量除了每个字符各占一个字节外,其字符串结束字符串常量除了每个字符各占一个字节外,其字符串结束字符串常量除了每个字符各占一个字节外,其字符串结束字符串常量除了每个字符各占一个字节外,其字符串结束符符符符 00也要占一个字节也要占一个字节也要占一个字节也要占一个字节 n n例如例如例如例如 字符常量字符常量字符常量字符常量 aa占一个字节占一个字节占一个字节占一个字节 字符串常量字符串常量字符

48、串常量字符串常量a a 占占占占2 2个字节个字节个字节个字节0110 0001 0110 00010000 0000 a a “ “a” a” (97)10 (97)10 (0)10 4848 10.常量常量n符号常量符号常量 在在C语言中允许程序中的常量定义为一个标识符,这个语言中允许程序中的常量定义为一个标识符,这个标识符称为符号常量标识符称为符号常量 n带有名字的常量带有名字的常量 定义格式定义格式 n #define n例如:例如: #define AGE 35 #define M 1.9734067e9 提示提示 n简化书写格式、减少出错率简化书写格式、减少出错率 n定义符号常量可

49、以提高程序的可读性,便于程序的调试和修改定义符号常量可以提高程序的可读性,便于程序的调试和修改 n符号常量不同于变量,在其作用域内不能被改变和重新赋值符号常量不同于变量,在其作用域内不能被改变和重新赋值 n习惯上人们把符号常量名用大写字母表示习惯上人们把符号常量名用大写字母表示 10.常量练习常量练习定义常量并输出5050 11.变量变量n变量变量 在程序运行过程中其值发生改变(可以被改变)在程序运行过程中其值发生改变(可以被改变)的量值的量值 C语言规定所有用到的变量都必须在程序中指定语言规定所有用到的变量都必须在程序中指定其数据类型,必须其数据类型,必须“先定义后使用先定义后使用” n一个

50、变量应该有一个名字(标识符)一个变量应该有一个名字(标识符) 定义变量时要给其命名定义变量时要给其命名 n一个变量应该有一种数据类型一个变量应该有一种数据类型 编译系统根据定义变量的数据类型为其分配存储编译系统根据定义变量的数据类型为其分配存储单元并在该存储单元中存放变量的值单元并在该存储单元中存放变量的值 5151 11.变量变量每个变量都由一个变量名来标识每个变量都由一个变量名来标识 在在C语言中,变量名作为变量的标识,其命名语言中,变量名作为变量的标识,其命名规则符合标识符的所有规定规则符合标识符的所有规定 n语言规定标识符只能由字母、数字和下划线组成且语言规定标识符只能由字母、数字和下

51、划线组成且第一个字符必须是字母或下划线第一个字符必须是字母或下划线 提示提示 n大、小写字母被认为是不同的变量名大、小写字母被认为是不同的变量名 例:例:Sun、sun、SUN是三个不同的变量是三个不同的变量 为了避免混淆,变量命名应取不同的名字而不是用大小写为了避免混淆,变量命名应取不同的名字而不是用大小写区分区分 n尽量取与变量含义接近的名称尽量取与变量含义接近的名称n变量的命名变量的命名5252 11.变量变量n变量的定义变量的定义 变量定义的目的变量定义的目的 n定义变量名定义变量名 n定义变量的数据类型定义变量的数据类型 变量的类型决定变量的存贮结构,使变量的类型决定变量的存贮结构,

52、使C语言的编译程序为语言的编译程序为所定义的变量分配存储空间所定义的变量分配存储空间 n变量的定义说明了变量叫什么以及用来做什么变量的定义说明了变量叫什么以及用来做什么 定义一个变量的过程,实际上就是向内存申请一个变量的定义一个变量的过程,实际上就是向内存申请一个变量的数据类型大小的空间的过程数据类型大小的空间的过程 变量实质上就是内存某一单元的标识符号,对这个符号的变量实质上就是内存某一单元的标识符号,对这个符号的引用就是对相应的内存单元的存取操作引用就是对相应的内存单元的存取操作5353 11.变量变量n变量的定义变量的定义 用类型说明语句对变量进行定义用类型说明语句对变量进行定义 定义格

53、式定义格式 type namelist; 类型说明符类型说明符Type是语言中的一个有效的数据类型是语言中的一个有效的数据类型 变量表变量表namelist的形式是:变量名的形式是:变量名1,变量名,变量名2,变,变量名量名n,用逗号分隔的变量名的集合,用逗号分隔的变量名的集合 n例例 int a,b23,C_123; float sum; char max_ch; 变量的基本数据类型变量的基本数据类型 n整型、实型、字符型整型、实型、字符型5454 11.变量变量n整型变量整型变量 不同类型的差别在于占用不同的存储空间不同类型的差别在于占用不同的存储空间 n采用不同位数的二进制编码方式采用不

54、同位数的二进制编码方式 计算机内部总是采用二进制补码形式表示一个数值型数据计算机内部总是采用二进制补码形式表示一个数值型数据 例如:例如: 整型的最高位为符号位:整型的最高位为符号位:“1”表示负数,表示负数,“0”表示表示正数,其余正数,其余15位表示数值位表示数值 无符号整型数全部无符号整型数全部16位表示数值位表示数值 n 5555 11.变量变量n整型变量整型变量 一个整型变量可以保存一个整数一个整型变量可以保存一个整数 整型类型的基本标志是整型类型的基本标志是int 基本型(基本型(int) 短整型(短整型(short int 、short) 长整型(长整型(long int 、lo

55、ng ) 无符号整型(无符号整型(unsigned int、unsigned long 、unsigned short) 例例 nint a; long b; unsigned int c; 提示提示 n使用某种类型的变量时,一定要注意该类型变量的使用某种类型的变量时,一定要注意该类型变量的取值范围取值范围5656 11.变量变量n实型变量实型变量 存储实型数据存储实型数据 ANSI C允许的定义三种实型变量允许的定义三种实型变量 nfloat 单精度型单精度型 nDouble 双精度型双精度型 nlong double 长双精度型长双精度型 n例例 float a, b; double x;

56、 long double y; n提示提示 运用实数运算时要运用实数运算时要合理使用不同的类型,尽可能减少误差合理使用不同的类型,尽可能减少误差 一个实型常量可以赋给一个实型常量可以赋给float或或 double型变量,根据变量型变量,根据变量的类型截取实型常量的相应有效位数的类型截取实型常量的相应有效位数5757 11.变量变量n字符变量字符变量 用来存放用来存放一个一个字符常量字符常量 n即一个字节存放一个字符即一个字节存放一个字符 标示:标示:char n例:例:char c1,a2; 提示提示 n不能将一个字符串常量赋给一个字符变量不能将一个字符串常量赋给一个字符变量 例:例:cha

57、r c1,c2; c1=a ; c2=b ;合法合法 c1=“a” ; c2=“b”;非法非法5858 11.变量变量n变量赋值变量赋值 初始化赋值方式(声明语句)初始化赋值方式(声明语句) nC语言允许在定义一个变量的同时对变量进行初始化语言允许在定义一个变量的同时对变量进行初始化 例:例: int i=0;/*表示定义一个整型变量表示定义一个整型变量i的同时将的同时将i赋值为赋值为0*/ int i,j,k=10;/*表示表示i,j,k为整型,只有为整型,只有k被赋值为被赋值为10 */ n提示提示 如果对几个变量同时赋一个初始值,则可以写成如果对几个变量同时赋一个初始值,则可以写成 fl

58、oat a=3.0,b=3.0,c=3.0;表示;表示a、b、c的初始值均为的初始值均为3.0,但并不表示整个程序中三个变量值一直不变或一直相等但并不表示整个程序中三个变量值一直不变或一直相等 先说明后赋值方式先说明后赋值方式(赋值语句)赋值语句) n在程序运行过程中用赋值语句给变量赋一个值在程序运行过程中用赋值语句给变量赋一个值 例如例如 a=10;5959 11.变量变量n变量在使用中应注意的问题变量在使用中应注意的问题 变量要先定义后使用变量要先定义后使用 常量与变量的类型要匹配常量与变量的类型要匹配例题:编写求两数和的例题:编写求两数和的C程序并上机运行。程序并上机运行。 main()

59、 int a,b; a=32767; b=10; c=a+b; printf(c=%dn,c); /* 输出变量输出变量c的值的值 */ 会出现什么问题?如何解决?会出现什么问题?如何解决?6060 12.运算符与表达式运算符与表达式n运算符运算符 C语言用于描述对数据进行运算的特殊符号语言用于描述对数据进行运算的特殊符号 n语言具有丰富而繁多的运算符语言具有丰富而繁多的运算符 n由运算符构成了各种表达式由运算符构成了各种表达式 分类分类 n语言的运算符按其在表达式中与运算对象的关系语言的运算符按其在表达式中与运算对象的关系 单目运算单目运算 一个运算符连接一个运算对象一个运算符连接一个运算对

60、象 双目运算双目运算 一个运算符连接两个运算对象一个运算符连接两个运算对象 三目运算三目运算 一个运算符连接三个运算对象一个运算符连接三个运算对象6161 12.运算符与表达式运算符与表达式n运算符运算符 分类分类 n语言的运算符按其在表达式中的作用语言的运算符按其在表达式中的作用 算术(自增算术(自增/自减)运算符:(自减)运算符:(+,*,/,%、+、-) 关系运算符:(关系运算符:(,=,=,!=,=) 逻辑运算符:(逻辑运算符:(!,&,|) 位运算符:(位运算符:(、|、&) 赋值运算符:(赋值运算符:(=) 条件运算符:(条件运算符:(?:) 逗号运算符:(,)逗号运算符:(,)

61、指针运算符:(指针运算符:(*,&) 强制类型转换运算符:(强制类型转换运算符:(type) 分量运算符:(和分量运算符:(和 ) 下标运算符:(下标运算符:( ) 函数调用运算符:(函数调用运算符:(( )) 6262 12.运算符与表达式运算符与表达式n运算符运算符 对运算符的掌握应从三个方面着手对运算符的掌握应从三个方面着手 n和操作符相关的数据类型(包括操作数和操作结果和操作符相关的数据类型(包括操作数和操作结果的数据类型)的数据类型) n运算符的优先级运算符的优先级 n运算符的结合次序运算符的结合次序6363 12.运算符与表达式运算符与表达式n表达式表达式 用运算符将运算对象连接而

62、成的符合语言规用运算符将运算对象连接而成的符合语言规则的算式则的算式 n特别地:一个常量、一个变量、一个函数都可以看特别地:一个常量、一个变量、一个函数都可以看成是一个表达式成是一个表达式 表达式的分类表达式的分类 n按照运算符与运算对象的关系按照运算符与运算对象的关系 单目表达式单目表达式 双目表达式双目表达式 三目表达式三目表达式 n 6464 12.运算符与表达式运算符与表达式n表达式表达式 表达式的分类表达式的分类 n按照运算符在表达式中的作用按照运算符在表达式中的作用 算术算术表达式,例:表达式,例:3+4*5 赋值赋值表达式,例:表达式,例:a=3 关系关系表达式,例表达式,例:

63、5b 逻辑逻辑表达式,例:表达式,例:35&a=b 条件条件表达式,例:表达式,例:ab?a:b 逗号逗号表达式,例:表达式,例:a=3,b=4,c=5 指针表达式,例:指针表达式,例:p-2,&a 6565 12.运算符与表达式运算符与表达式n表达式的求值过程表达式的求值过程 C语言规定了运算符的优先级和结合性语言规定了运算符的优先级和结合性 n优先级优先级 指同一个表达式中不同运算符进行计算时的先后次序指同一个表达式中不同运算符进行计算时的先后次序 n结合性结合性 结合性是指同一个表达式中相同优先级的多个运算应遵循的运结合性是指同一个表达式中相同优先级的多个运算应遵循的运算顺序算顺序 语言

64、规定:单目运算符是自右向左结合,双目运算符是自左语言规定:单目运算符是自右向左结合,双目运算符是自左向右结合向右结合6666 表达式的求值过程按表达式的求值过程按C规定的规定的原则原则求值求值 n表达式代表了一个具体的值表达式代表了一个具体的值 实际上是一个数据加工的过程实际上是一个数据加工的过程 n在表达式求值时,在表达式求值时,先按运算符的优先级级别的高低先按运算符的优先级级别的高低次序执行次序执行 n如果运算符两侧的优先级级别相同,则按规定的如果运算符两侧的优先级级别相同,则按规定的“结合方向结合方向”处理处理 提示提示 n运算符的优先级制约着表达式的计算次序运算符的优先级制约着表达式的

65、计算次序 可以通过可以通过括号()来改变表达式求值的顺序括号()来改变表达式求值的顺序 n表达式求值过程中存在某种类型数据的类型转换表达式求值过程中存在某种类型数据的类型转换 6767 12.运算符与表达式运算符与表达式n算术表达式算术表达式 由算术运算符连接数值型运算对象构成由算术运算符连接数值型运算对象构成 n其结果可以是整数、单精度实数和双精度实数其结果可以是整数、单精度实数和双精度实数 n例:例:int a=2; float b=4.5;表达式表达式 2*a+b 的结果为的结果为8.5 n优先给与结合性优先给与结合性 6868 提示提示 n两个整数相除其结果仍为整数(即舍去小数部分)两

66、个整数相除其结果仍为整数(即舍去小数部分) 例如:例如:13/10的结果为的结果为1 n“%”为求余运算符,参与运算的两个数均为整数为求余运算符,参与运算的两个数均为整数 例如:例如:10%31 -10%3-1 n除以除以0在计算机系统中是没有意义的在计算机系统中是没有意义的 n双目运算符两侧运算对象的类型必须一致,所得结双目运算符两侧运算对象的类型必须一致,所得结果的类型将与运算对象的类型一致果的类型将与运算对象的类型一致 n 用括号可以改变表达式的运算顺序用括号可以改变表达式的运算顺序 6969 12.运算符与表达式运算符与表达式n算术表达式算术表达式 例例1: 设设 int b=7;fl

67、oat a=2.5,c=4.7; 表达式表达式a+(int)()(b/3*(int)()(a+c)/2)%4的值?的值? 例例2: 7070 12.运算符与表达式运算符与表达式n自增自增/自减自减 “+”与与“-”的作用是使的作用是使变量的值变量的值增增1或减或减1 C语言提供两种形式的语言提供两种形式的 +/-运算符运算符 n+a,-a(前缀运算:先进行增量运算后使用)(前缀运算:先进行增量运算后使用) na+, a-(后缀运算:先使用后进行增量运算)(后缀运算:先使用后进行增量运算) 提示:提示: n增和自减只能作用于变量,不允许对常量、表达式增和自减只能作用于变量,不允许对常量、表达式或

68、其它进行操作或其它进行操作 n当自增当自增/自减变量值本身就单独构成一条语句时,前自减变量值本身就单独构成一条语句时,前缀和后缀的效果是一样的缀和后缀的效果是一样的 n对于对于“+”和和“-”的使用要避免二义性的使用要避免二义性7171 12.运算符与表达式运算符与表达式n自增自增/自减自减 计算过程计算过程 n例例1:设:设x=5 y=+x;/*先计算先计算x=x+1,再执行,再执行y=x,结果,结果x=5 ,y=6*/ y=x+;/*先执行先执行y=x,再计算,再计算x=x+1,结果,结果y=5,x=6*/ 问题:问题:如何理解如何理解A+B ? nC规定规定:自左向右取尽可能多的符号组成

69、运算符自左向右取尽可能多的符号组成运算符 n例例2:设设x=5 y=x+*x+;/*先取先取x的值进行的值进行“*”运算,再进行两次运算,再进行两次 x+。 y=25,x=7*/ y=+x*+x;/*先进行两次先进行两次x自增,使自增,使x的值为的值为7,再进,再进行相乘运算。行相乘运算。y=49,x=7*/7272 12.运算符与表达式运算符与表达式n赋值表达式赋值表达式 由赋值运算符由赋值运算符“=”连接表达式(右侧)和变连接表达式(右侧)和变量(左侧)量(左侧) 形式:形式:变量名表达式变量名表达式 赋值运算符完成两类操作赋值运算符完成两类操作 n计算计算 n赋值赋值 n例例 int a

70、=2,float b=5.2,c; c=a*b; 赋值运算符具有右结合性赋值运算符具有右结合性 n例如:例如:a=b=3*5;/*先计算先计算3*5,后将,后将15赋给赋给b,再,再将将b的值的值15赋给赋给a*/ 7373 12.运算符与表达式运算符与表达式n赋值表达式赋值表达式 组合赋值表达式组合赋值表达式 n组合赋值运算符将一个变量和一个表达式连接起来的式子称为组合赋值运算符将一个变量和一个表达式连接起来的式子称为组合赋值表达式组合赋值表达式 n形式:变量名形式:变量名 表达式表达式 n例例: x%=y/3;/*x=x%(y/3)*/ a*=b+c /* a=a*(b+c)*/ 注意:注

71、意:“a*=b+c”与与“a=a*b+c”是不等价的是不等价的 提示提示 n“=”不是数学中的不是数学中的“等号等号”,它表示一个动作,它表示一个动作 右侧的值送与左侧的变量中(左侧只允许是变量,不能是表达式右侧的值送与左侧的变量中(左侧只允许是变量,不能是表达式或其他)或其他) n赋值运算符两侧的类型要求一致,否则要进行类型转换赋值运算符两侧的类型要求一致,否则要进行类型转换 n赋值运算符赋值运算符=,相等运算符,相等运算符= =,和一般习惯有所不同,和一般习惯有所不同7474 12.运算符与表达式运算符与表达式n关系表达式关系表达式 关系运算符中的关系运算符中的“关系关系”二字的含义是指一

72、个二字的含义是指一个值与另一个值之间的关系值与另一个值之间的关系 n关系由关系运算符(关系由关系运算符(,=,=,!=,=)连)连接表达式构成接表达式构成 形式:形式:形式:形式: OP OP n表达式可以是常量、变量和表达式表达式可以是常量、变量和表达式 n结果为整型值结果为整型值 0:逻辑假:逻辑假 1:逻辑真:逻辑真 n优先级:(优先级:(,=,b、a+bb,abb的的结果分别是多少?(结果分别是多少?(0、1、0) 提示提示 n进行关系运算时,先计算表达式的值,然后再进行进行关系运算时,先计算表达式的值,然后再进行关系比较运算关系比较运算 例如:例如:int a=1,b=2,c=3;

73、(1)a+b3*c 的结果为的结果为0 /*39关系不成立关系不成立*/ (2)(a+=b)(b*=11%c)结果值为结果值为1 /*34关系成立关系成立 */ n在表达式中连续使用关系运算符时,要注意正确表在表达式中连续使用关系运算符时,要注意正确表达含义达含义 例如:设的取值范围为例如:设的取值范围为“-1010”时,不能写成时,不能写成“-10=x=10”,应写成,应写成“-10=x & x=10 为什么为什么?7676 12.运算符与表达式运算符与表达式n逻辑表达式逻辑表达式 “逻辑逻辑”是指连接关系的方式是指连接关系的方式 n由逻辑运算符(由逻辑运算符(&、|、! )连接的表达式构成

74、)连接的表达式构成 形式:形式:形式:形式: OP OP n n表达式可以表达式可以表达式可以表达式可以是常量、变量、或其他表达式是常量、变量、或其他表达式 n其结果为整数值其结果为整数值 0 (逻辑假)(逻辑假) 或或1(逻辑真)(逻辑真) n优先级优先级 “!”最高,最高,“&”次之,次之,“|”最低最低 逻辑运算优先级低于所有关系运算逻辑运算优先级低于所有关系运算 “!”优先级高于所有算术运算(单目运算)优先级高于所有算术运算(单目运算) n结合性结合性 & 、| 自左向右自左向右 例如:例如:ab&bd ! 自右向左自右向左 (例如:(例如: !a )7777 12.运算符与表达式运算

75、符与表达式n逻辑表达式逻辑表达式 逻辑运算规则逻辑运算规则逻辑运算规则逻辑运算规则 n n n n n提示提示 设计逻辑设计逻辑“与与” 运算,将最可能为运算,将最可能为“假假”的表达式放在最的表达式放在最左侧左侧 设计逻辑设计逻辑“或或”运算,将最可能为运算,将最可能为“真真”的表达式放在最的表达式放在最左侧左侧 a b !a a&b a|b 0 0 1 0 0 0 非非0 1 0 1 非非0 0 0 0 1非非0 非非0 0 1 17878 12.运算符与表达式运算符与表达式n逻辑表达式逻辑表达式 例题:例题: 设设int a=3,b=1, x=2, y=0; 则则(y|b) & (y|a

76、) 的运算结果为的运算结果为1。 问题:问题: (1)y|b & y|a 的运算结果是多少?的运算结果是多少? (2)两个表达式在运算次序是否一致?)两个表达式在运算次序是否一致?7979 12.运算符与表达式运算符与表达式n条件表达式条件表达式 由条件运算符连接它的三个运算对象构成的表由条件运算符连接它的三个运算对象构成的表达式称之为条件表达式达式称之为条件表达式 形式:形式:形式:形式: ?2: 3 n条件运算符的条件运算符的“?”个个“:”总是成对出现总是成对出现 n表达式可以是任何类型,结果也可以是任何类型表达式可以是任何类型,结果也可以是任何类型 n运算过程运算过程 计算表达式计算表

77、达式1的值的值 为真为真,计算表达式,计算表达式2的值,并将表达式的值,并将表达式2的值作为整个的值作为整个条件表达式的结果,不再计算表达式条件表达式的结果,不再计算表达式3的值的值 为假,计算表达式为假,计算表达式3的值,并将表达式的值,并将表达式3的值作为整个的值作为整个条件表达式的结果,不计算表达式条件表达式的结果,不计算表达式2的值的值 8080 12.运算符与表达式运算符与表达式n条件表达式条件表达式 n优先级优先级 高于赋值运算,但低于所有关系运算、逻辑运算和算术运高于赋值运算,但低于所有关系运算、逻辑运算和算术运算算 n结合性结合性 自右向左结合自右向左结合 n提示提示 当多个条

78、件表达式嵌套使用时,每个后续的当多个条件表达式嵌套使用时,每个后续的“:”总与前总与前面最近的、没有配对的面最近的、没有配对的“?”相联系相联系 例如:例如: xy?x:zw?z:w 等同于等同于xy?x:(zw?z:w) 三个运算对象的类型可以不相同三个运算对象的类型可以不相同 例如:例如:x?a:0.58181 12.运算符与表达式运算符与表达式n条件表达式条件表达式 例题:例题:设设 int x=10,y=9; int a,b,c; a=(-x=y+)?x:-y; b=x+; c=y; 执行上述程序段后执行上述程序段后a,b,c的结果是?的结果是? 分别为分别为8,8,108282 12

79、.运算符与表达式运算符与表达式n逗号表达式逗号表达式 由逗号连接符(,)与表达式构成由逗号连接符(,)与表达式构成 形式:形式:形式:形式: 1, 2, n n n 1, 2,n可以是任何类型可以是任何类型 n逗号表达式的结果为最后一个表达式的结果值逗号表达式的结果为最后一个表达式的结果值 n执行过程执行过程 先求解表达式先求解表达式1的值,再求解表达式的值,再求解表达式2的值,的值,最后求解表最后求解表达式达式n的值,并将表达式的值,并将表达式n的值作为整个表达式的结果值的值作为整个表达式的结果值 n优先级优先级 级别最低(最后进行逗号运算)级别最低(最后进行逗号运算) n结合方向结合方向

80、自左向右自左向右8383 12.运算符与表达式运算符与表达式n逗号表达式逗号表达式 提示提示 n不是出现逗号的地方都是逗号表达式,逗号在不是出现逗号的地方都是逗号表达式,逗号在C语语言中用于语句之中的参数分隔符言中用于语句之中的参数分隔符 n在多数情况下,使用逗号表达式的目的是要分别求在多数情况下,使用逗号表达式的目的是要分别求出每个表达式的结果值出每个表达式的结果值 在循环结构中经常使用在循环结构中经常使用 例题例题 设设int x,a; 表达式表达式x=(a=4,6*2)的的x值?值? 表达式表达式x=a=4,6*2的的x值?值? x为为12x为为48484 12.运算符与表达式运算符与表

81、达式n混合运算混合运算 指在一个表达式中参与运算的对象不是相同的数指在一个表达式中参与运算的对象不是相同的数据类型据类型 n例如:例如: 设:设:int a=3;float b=3.0;char c=3; 则表达式则表达式(a*c+b)/4+(int)b%2的结果?的结果? 进行混合运算的首要的问题是对参与运算的数据进行类型进行混合运算的首要的问题是对参与运算的数据进行类型转换转换 n类型转换类型转换 由一种数据类型到另一种数据类型的转换被称为由一种数据类型到另一种数据类型的转换被称为类型转换类型转换8585 12.运算符与表达式运算符与表达式n类型转换类型转换 “隐式的隐式的”自动类型转换自

82、动类型转换 n如果同一个表达式中含有不同类型的常量和变量,如果同一个表达式中含有不同类型的常量和变量,C语言则在计算该表达式时会自动转换为同一种数语言则在计算该表达式时会自动转换为同一种数据类型以便进行运算据类型以便进行运算8686 n转换原则转换原则 运算中将所有运算中将所有char型数据转换成型数据转换成int型,型,float型型转换成转换成double型型 “类型提升类型提升” :低类型向高类型转换:低类型向高类型转换 例如:例如:1.5+2*a-1.2345678 /*运算次序为:运算次序为: 2*a:先将:先将a转换成整型数转换成整型数97,得乘,得乘积积194 1.5+194:1

83、.5和和194都转换成都转换成double型,和型,和为为95.5 195.5-1.2345678:1.2345678本身应是本身应是double型的,所以最后结果也为型的,所以最后结果也为double型型 */ 8787 intchar,shortunsignedlongdoublefloat 低低高高12.12.运算符和表达式运算符和表达式n类型转换类型转换 “隐式的隐式的”自动类型转换自动类型转换 n“类型提升类型提升” 示意图示意图8888 12.运算符与表达式运算符与表达式n类型转换类型转换 “隐式的隐式的”自动类型转换自动类型转换 n转换原则转换原则 在数据输出时发生的类型转换在数

84、据输出时发生的类型转换 同样要遵守同样要遵守“类型提升类型提升”的原则的原则 赋值运算中最终结果的类型,以赋值运算符左边变量的类赋值运算中最终结果的类型,以赋值运算符左边变量的类型为准型为准 要将赋值符号右边表达式的值按左边变量的数据类型要将赋值符号右边表达式的值按左边变量的数据类型转换之后再赋值转换之后再赋值 当左边变量的类型长度较右边值的长度短时,就可能当左边变量的类型长度较右边值的长度短时,就可能产生误差,甚至完全错误产生误差,甚至完全错误 n提示提示 由语言的编译系统自动完成由语言的编译系统自动完成 不会体现在语言源程序中不会体现在语言源程序中 程序设计人员必须了解这种自动转换的规则及

85、其结果程序设计人员必须了解这种自动转换的规则及其结果8989 12.运算符与表达式运算符与表达式n类型转换类型转换 “显式的显式的”类型转换类型转换 n通过用强制类型转换运算符通过用强制类型转换运算符(type) 进行数据类型转换进行数据类型转换 n其含义是将右边表达式的值转换成括号中指定的数据类型其含义是将右边表达式的值转换成括号中指定的数据类型 转换形式如下:转换形式如下:(type) 表达式表达式 ntype表示一个强制数据类型名表示一个强制数据类型名 n表达式是任何一种类型的表达式表达式是任何一种类型的表达式 n例例 (int )(x+y) /*注意与注意与(int ) x+y不同不同

86、*/ 提示提示 n通过强制类型转换,只得到了一个所需类型的中间变量,原变通过强制类型转换,只得到了一个所需类型的中间变量,原变量或表达式的值并没有变化量或表达式的值并没有变化 例例 设设 :int a;float x; 如果:如果:x=8.57;a=(int)x; /*结果结果a=8,x仍为仍为float型,其值仍为型,其值仍为8.57*/9090 13.简单表达式的运算简单表达式的运算【例例1】执行下面程序段后,执行下面程序段后, int a=1,b=1,c=1; a=a+b+c+; printf(“%d,%d,%d”,a,+b,c+);); 输出结果为:输出结果为: A.4,3,2;B.3

87、,3,2;C.3,3,3;D.3,2,2; 【例例2】若定义若定义x,y为为double型,型, 则表达式则表达式x=1,y=x+3/2的值是?的值是? 【例例3】若变量已经定义并赋值,下面符合若变量已经定义并赋值,下面符合C语言语法的表达式是:语言语法的表达式是: A)a:=b+1 B)a=b=c+2 C)int 18.5%3 D)a=a+7=c+b【例例4】若若a为为int类型,且值为类型,且值为3,则执行完表达式,则执行完表达式a+=a-=a*a后,后, a的值是多少?的值是多少? A)-3 B)9 C)-12 D)69191 13.简单表达式的运算简单表达式的运算【例例5】分析下列运算

88、的结果。分析下列运算的结果。#define printt(x,y,z) printf(x=%d, y=%d, z=%dn,x,y,z) main( ) int x,y,z; x=y=z=2; +x|+y&+z; printt(x,y,z); x=y=z=2; +x&+y|+z; printt(x,y,z) ; x=y=z=2; +x&+y&+z; printt(x,y,z); x=y=z=-2; +x|+y&+z; printt(x,y,z); x=y=z=-2; +x&+y|+z; printt(x,y,z); /* 定义宏替换定义宏替换 */* 输出:输出:x=3, y=2, z=2 */* +x&+y后不为,不再执行后不为,不再执行|后的后的+z 输出结果:输出结果:x=3, y=3, z=2 */? /* 输出:输出:x=-1, y=-2, z=-2 */

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号