【文档说明】c语言教材第一章课件.ppt,共(91)页,434.500 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-7155.html
以下为本文档部分文字说明:
1开篇本课程讲述如何使用C语言进行真正的编程为什么学习c语言?C语言是目前实际程序设计工作中使用最广泛的语言之一它包含了程序设计需要理解和使用的基本程序机理和主要机制掌握这些机制就可以理解程序与程
序设计的主要问题。目前有许多软件系统是用C编写的,或基本上是用C编写的学习程序设计的同时也能掌握一种实用的程序设计工具C语言是一种很灵活的语言既可以在较高层次上做,也可以在较低级的层次上做很多新型的语言都是衍生自C语言有些本身就是C语言
的扩充和发展程序设计是计算机领域的基础课程C语言适合作为计算机领域许多后续课程的教学语言2开篇本课程讲述如何使用C语言进行真正的编程授课重点侧重学习一个具体问题的算法化的过程学习应该掌握的基本编程技巧以及C
编程的风格和艺术讨论怎样编写出一个好的程序?简单、实用的原则3开篇本课程的组织第一部分基础第二部分简单程序设计第三部分高级程序设计算法概念、编程原理、编程风格、基本数据类型定义、算术运算符及表达式顺序结构、选择结构、循环结构、数组的定义
及应用、程序设计过程函数、变量的存储类别、指针、结构体与共用体、文件41.程序与程序设计语言什么是程序?什么是计算机?计算机是一种具有内部存储能力的自动、高效的电子设备,计算机怎样完成工作?执行存放在计算机
的内部存储器中的指令程序是计算机指令的序列可以被连续执行的一条条指令的集合称为计算机的程序51.程序与程序设计语言什么是计算机语言?是与计算机交流的工具人和人交流用的是双方都能听懂和读懂的自然语言人和
计算机交流也要用人和计算机都容易接受和理解的语言计算机语言是根据计算机的特点而编制的有限规则的集合什么是程序设计语言?计算机语言又称为“程序语言“一个计算机程序总是用某种程序语言来编写61.程序与程序设计语
言程序设计语言的发展问题?怎样从功能和使用方式上来划分程序设计语言?他们各有什么特点?举例。72.程序设计什么是程序设计?使用某种程序语言编写程序的过程是用计算机语言对所要解决的问题中的数据以
及处理问题的方法和步骤所做的完整而准确的描述的过程怎样进行程序设计?分析问题确定算法编制程序调试程序82.程序设计一个完整的程序数据结构、算法、编程语言和程序设计方法对数据的描述(数据流)»指定数据的类型和数据的结构
对操作的描述(控制流)»指定操作的步骤,既算法程序=数据结构+算法93.算法输入三个数,然后输出最大的数算法的两个要素基本功能操作数据运算和传输控制结构顺序、选择和循环三种基本控制流程算法可以写成:
(1)输入A,B,C;(2)若A>B,则A->MAX;若A<B,则B->MAX。(3)若C>MAX,则C->MAX。(4)输出MAX,MAX既是最大数。103.算法算法的特性有穷性应含有有限的操作步骤,不能是无限的。有穷性指在“合理的限度之内”唯一性每一个步骤
都是确定的,只有一个涵义,不可以为二义性有零个或多个输入在执行算法时需要从外界获取必要的信息有一个或多个输出算法执行的目的就是为了求解,“解”就是输出的信息没有输出的算法是没有意义的正确性每一个步骤应当被有效的执行,并得到确定的结果113
.算法算法的表示流程图端点:表示程序的转向,常用来表示程序的开始和结束。处理:操作的功能判断:单入口多出口,表明判断的条件流线:表示程序的执行方向和顺序。输入/输出:表示数据的名称、类型和用途等。123.算法算法的表示流程图开始输入A,B,CA>B?TNMAX=AMAX=
BC>MAX?NTMAX=C输出MAX结束133.算法算法的表示N-S图是适合结构化程序设计方法的图形工具N-S流程图无法表示非结构化的程序TN当〈条件〉满足A1=1i=9当i>=1时,循环a0=2*(a1+1)a1=a0i=i-1输出a0143.算法(练习)算法的表示其它典型算法
154.结构化的程序设计方法程序的三种基本结构问题的提出结构化程序设计必须采用的结构顺序结构、选择结构和循环结构被称为程序设计的三种基本结构算法的实现过程是由一系列操作组成的,这些操作之间的执行次序就是程序的控制结构总体结构流程都是自上而下顺序执行的。164.结构化的程序设计方法
程序的三种基本结构顺序结构顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的选择结构表示程序的处理出现了分支,它需要根据某一特定的条件选择其中的一个分支执行循环结构程序反复执行某个或某些操作,直到某条件为
假(或为真)时才可终止循环174.结构化的程序设计方法结构化程序设计方法公认的面向过程编程应遵循的基本方法和原则结构化程序设计特征采用模块化结构自顶而下的设计方法»便于对问题的分解和模块的划分程序由三种基本控制结构组成有限制地使用转移
语句采用结构化程序设计语言书写程序结构化程序设计语言书写程序注意书写风格185.什么是C语言?1973年由美国贝尔实验室设计发布的目前是计算机程序设计语言的主流语种是世界上最为广泛使用的语言之一C语言的流行归功于两个主要因素使用正
确的C语言指令几乎可以完成任何任务是可移植的C编译系统的广泛采用C语言是一种能够让软件工程师与计算机进行有效对话的介于汇编语言和高级语言之间的编程语言C语言标准1978年,正式出版的《TheCProgrammingLanguage》书中介绍的C语言,称
为标准C语言1983年,美国国家标准化协会(ANSI)根据各种C语言版本对C的扩充和发展,颁布了C语言的新标准ANSICANSIC比标准C有了很大的扩充和发展1987年,美国国家标准化协会又颁布新标准,称为87ANSIC1990年,国际标准化组织ISO接受了87ANSIC作为
ISOC的标准目前功能最完善、性能最优良的C新版本目前流行的C编译系统都是以它为基础的195.什么是C语言?C语言的特点适合开发系统软件结构化的程序设计语言丰富的数据类型和数据结构运算符多样化可移植性好语句简洁紧凑编
程风格灵活,语法限制少,使用灵活具有预处理功能面向对象程序设计的基础20编写一个加法运算程序#include〈stdio.h〉main(){inta,b;/*定义两个整形变量*/a=1;b=5;/*给两个变量赋值*/printf(“%d+%d=%d\n”,a,
b,a+b);/*打印a和b之和*/}C语言严格区分大、小写英文字母。C语言程序习惯上使用小写英文字母,而大写英文字母通常作为常量的宏定义和其他特殊的用途。5.什么是C语言?21#include〈stdio.h〉main(){in
ta,b;/*定义两个整形变量*/a=1;b=5;/*给两个变量赋值*/printf(“%d+%d=%d\n”,a,b,a+b);/*打印a和b之和*/}C语言严格区分大、小写英文字母。例:编写一个加法运算
程序如下:5.什么是C语言?C语言程序是由一个个的语句组成。每个语句都具有规定的语法格式和特定的功能。编写一个加法运算程序22#include〈stdio.h〉main(){inta,b;/*定义两个整形变量*/a=1;b=5;/*给两个变量赋值*/printf(“%d+%d=%d\n”,
a,b,a+b);/*打印a和b之和*/}C语言严格区分大、小写英文字母。例:编写一个加法运算程序如下:5.什么是C语言?C语言程序是由一个个的语句组成。C语言程序使用“;”作为语句的终止符和分隔符。可以任意书写,即一行中可以书写多个语
句,一个语句也可以占用任意多行,语句之间必须用“;”分隔。初学时建议在一行内书写一条语句。编写一个加法运算程序23#include〈stdio.h〉main(){inta,b;/*定义两个整形变量*/a=1;b=5;/*给两个变量赋值*/pri
ntf(“%d+%d=%d\n”,a,b,a+b);/*打印a和b之和*/}C语言严格区分大、小写英文字母。例:编写一个加法运算程序如下:5.什么是C语言?C语言程序是由一个个的语句组成。C语言程序使用“;”作为语句的终止符和分隔符。C语言程序中用大括号对“{}”表示程序的结
构层次范围。一个完整的程序模块要用一对花括号括起来,用以表示模块的范围。为了清晰地表现出程序的结构,建议使用右缩进锯齿型程序书写格式。编写一个加法运算程序24#include〈stdio.h〉main(){inta,b;/*定义两个整形变量*/a=1;b=5;/*给两个变量
赋值*/printf(“%d+%d=%d\n”,a,b,a+b);/*打印a和b之和*/}C语言严格区分大、小写英文字母。例:编写一个加法运算程序如下:5.什么是C语言?C语言程序是由一个个的语句组成。
C语言程序使用“;”作为语句的终止符和分隔符。C语言程序中用大括号对“{}”表示程序的结构层次范围。C语言程序可以使用注释。注释部分的格式是:/*注释内容*/注释部分不参与程序的执行,对程序的运行结果没有影响,只是
用来提示或助记。编写一个加法运算程序255.什么是C语言?C程序结构组成C程序为函数模块结构,整个程序都是由一个或多个函数组成函数是由函数说明和函数体两部分组成一个C程序总是从main()函数开始执行被调用的函数可以是系统提供的库函数
,也可以是用户根据需要自己编制设计的函数(用户自定义函数)一个C程序可以由一个文件组成,也可以由若干个文件组成分析下面程序:#include<stdio.h>main(){inta=1,b=5,c;c=add(a,b);printf(“c=%d\
n”,c);}intadd(intx,inty){return(x+y);}26C程序源程序文件1源程序文件i源程序文件n预编译命令函数1函数n函数体函数首部C程序结构组成5.什么是C语言?注意一个函数名后面必须跟一对(),函数参数可以没有,但这一对()不能省略
,如main()在函数定义中第一行的函数名后没有分号“;”275.什么是C语言?"标识符"每种程序语言都规定了在程序里描述名字的规则这些名字包括:变量名、常数名、数组名、函数名、文件名、类型名等,被统称为"标识符"C语言标识符C语言的标识符是
满足如下条件的字符序列只能由英文字母、数字和下划线组成必须以英文字母或下划线开头注意标识符的使用很多,使用时要注意语言规则»C语言对大、小写字母严格区分»根据ANSI标准,只有前31个字符是有意义,但一般系统使用的标识符,其有效长度不超
过8个字符»标识符不要与关键字同名285.什么是C语言?关键字具有特定含义的,用作专用的标识符C语言中关键字绝大多数是由小写字母构成的字符序列注意:这些特定的关键字不允许用户作为自定义的标识符使用例:指出合法的标识符与关键字“ABA”S05fi
le.c10pageprintfyellow_reda&b-113_ACGAbc295.什么是C语言?语句语句是组成程序的基本单位它能完成特定操作所有程序设计语言都提供了满足编写程序
要求的一系列语句有确定的形式和功能C语言中的语句306.C语言的开发与运行开发一个C程序,一般过程编辑:使用一个文本编辑器将编写好的C程序输入计算机,并以文本文件的形式保存C语言源程序,其文件扩展名为“.C”编译:使用一个C语言编译系统(如TurboC2.0)对C语言源程序进行语法检
查和翻译,生成同名的“.OBJ”目标文件链接:将目标文件和系统提供的标准库函数等连接在一起,生成一个同名的“.EXE”可执行文件执行:脱离C语言编译系统,可在操作系统下键入文件名直接运行316.C语言的开发与运行安装tc2.0下载Cd
思考题C语言程序执行过程是如何进行的?应注意什么问题?327.小测验根据C语言标识符的命名规则,以下全部合法的标识符是:A)2xy,x+y,10xy,xy2B)main(),printf,int,floatC)int,char,p
rintf,scanfD)add,x10,_count,x_y一个C语言程序总是从____A)主过程开始执行B)主函数开始执行C)子程序开始执行D)主程序开始执行33数据数据是程序设计中所要涉及和描述的主要内容数据是程序加工、处理的对象数据同样是加工的结果数据类型数据类型
的概念数据类型是一类数据的抽象表示,这类数据具有相同的形式,遵从相同的运算规则程序处理的基本数据按性质划分属于同一类的各个数据都具有同样的性质同样的操作同样的编码方式把程序语言中具有这样性质的数据集合称为数据类型。8.什么是数据和数据类型349.C语言的数据类型数据类型
的分类数据类型空类型指针类型构造类型结构体类型数组类型共用体类型基本类型整型实型字符型标准类型用户定义类型枚举型单精度型双精度型指针类型用于存放地址(指针),用来解决动态数据的建立、删除和使用空类型用于数据类型的转换基本类型构造简单,已由
系统定义好构造类型由其它数据类型按一定规则构造而成。359.C语言的数据类型数据类型的分类提示每个数据类型都有固定的表示方式这个表示方式确定了可能表示的数据范围以及数据在内存中的存放形式C程序中所出现的所有数据都必须明确指定其数据
类型数据类型的体现常量和变量是在计算机中数据类型的表现形式不再是抽象的概念而是实在的数据,这些数据符合对数据类型的规定(形式和运算规则两方面)常量和变量之间的区别在于程序执行过程中的变化情况常量是一成不变的变量则可以不断改变369.C语言的数据类型数
据类型的长度在计算机中,由于软硬件的各种原因,数据类型必须有一个长度的限制这个长度是指数据存储在计算机中需要占用多少个字节数不同类型的数据在内存中占用的字节数是不同的溢出处理不同的数据类型规定了不同的机内表示
长度,也决定了对应数据量的变化范围,当某一数据超出该数据类型所规定的范围时,计算机会拒绝接受,而将之转换成范围内的另外某个数,这种情况称之为溢出处理。3710.常量常量在程序运行过程中其值不能被改变的量值例1:1,2003.1,-4
.0„A‟,‘b‟“abc”,“AB\n”提示在程序中使用常量时,一般不需要具体指出它属于哪一种类型C语言编译系统会自动根据常量的数据大小和直观形式来确定它的数据类型例2:3,3.0,‘3‟,“3”3810.常量C语言提供的常量数值常量整
型实型字符常量字符常量字符串常量这些类型决定了各种常量所占存储空间的大小和数的表示范围特殊形式常量符号常量3910.常量整型常量一个整数常用的整数类型(IBMPC机及其兼容机上对C语言整型数的规定)整型2字节:-32768~32767长整型4字节:-214
7483648~2147483647无符号整型2字节:0~65535无符号长整型4字节:0~4294967295提示:整型常量只区别整型和长整型两种形式,而没有无符号值型常量4010.常量整型常量三种形式十进制有效的十进制数字串
例:100,32767,-120八进制以数字“0”开头的八进制数字串例:0100,0123,-012十六进制以数字0x或0X开头的十六进制字符串例:0x123,0x100,-0x12长整型常量可表示为:
十进制、八进制、十六进制在常数之后加上字母"l"或"L"35555是否为十进制常量?0358是否为八进制常量?4110.常量实型常量实数,又称浮点数类型单精度型4字节:±10-38~1038双精度型8字节:±10-308~10308长双精度型16字节:10-4931~1
04932有效位数单精度有效数字位数为十进制数的6~7位双精度有效数字位数为十进制数的15~16位长双精度型有效数字位数为十进制数的18~19位提示:在C语言中,实型常量一般都作为双精度来处理,并且只用十进制数表示
4210.常量实型常量两种形式小数形式由正负符号、整数部分、小数点及小数部分组成例:3.0,5.123,-120.1,0.0指数形式由尾数、字母e或E及指数部分组成例:123.0E-1,-1.23e3标准的指数形式是:小数点的左侧只有一位数字43提示注意指数必须是不超过数
据表示范围的正负整数,并且在e或E前必须有数字对于超过有效数字位的数位,系统存储时自动舍去问题:合法的长双精度实型常量的表示形式?44C语言中字符型数据和整型数据可以通用字符型数据在计算机中存储的是字符的ASCII码ASC
II码形式上就是0到255之间的整数例如»字符"A"的ASCII码值用是65»„A‟+32;/*执行结果65+32=97,是a的ASCII码值*/4510.常量字符常量包括可以全部在计算机上显示的符号ASCII码表上的全部字符一个字符的存储占用一个字节表示方法用单
引号‘’括起来的一个字符‘A‟,‘1‟用单引号‘’括起来的以‘\‟字符开始的字符‘\n‟,‘\t‟4610.常量字符串常量是用一对双引号括起来的字符序列双引号仅做定界符使用,本身不算入字符串常量例如“ABC”,“”(有空格),“a
”,“HappynewYear”,“abc\n”,“”(无空格)等C语言规定字符串的最后必须以空字符‘\0‟结尾编译程序总是自动地在字符串的结尾加上一个转义字符‘\0‟ASCII码是0,所对应的字符是空空字符并不计算在字符串的长度里,但是存储时,空
字符将会额外的占用一个字节空间4710.常量字符串常量字符串常量与字符常量的区别形式字符常量是用单引号括起的单个字符字符串常量是用双引号括起的一串字符存储方式字符常量在内存中占一个字节字符串常量除了每个字符
各占一个字节外,其字符串结束符‘\0‟也要占一个字节例如字符常量‘a‟占一个字节字符串常量"a"占2个字节01100001……0110000100000000„a‟→“a”→(97)10(97)10(0)104810.常量符号
常量在C语言中允许程序中的常量定义为一个标识符,这个标识符称为符号常量带有名字的常量定义格式#define<符号常量><常量>例如:#defineAGE35#defineM1.9734067e9提示简化书写格式、减少出错率定义符号常量
可以提高程序的可读性,便于程序的调试和修改符号常量不同于变量,在其作用域内不能被改变和重新赋值习惯上人们把符号常量名用大写字母表示10.常量练习定义常量并输出5011.变量变量在程序运行过程中其值发生改变(可以被改变)的量值C语言规定所有用到的变量都必须在程序中指定其数据类型,必须“先
定义后使用”一个变量应该有一个名字(标识符)定义变量时要给其命名一个变量应该有一种数据类型编译系统根据定义变量的数据类型为其分配存储单元并在该存储单元中存放变量的值5111.变量每个变量都由一个变量名来标识在C语言中,变量名作为变量的标识,其命名规则符合标识符的所有规定语言规定标识符
只能由字母、数字和下划线组成且第一个字符必须是字母或下划线提示大、小写字母被认为是不同的变量名例:Sun、sun、SUN是三个不同的变量为了避免混淆,变量命名应取不同的名字而不是用大小写区分尽量取与变量含义接近的名称变量
的命名5211.变量变量的定义变量定义的目的定义变量名定义变量的数据类型变量的类型决定变量的存贮结构,使C语言的编译程序为所定义的变量分配存储空间变量的定义说明了变量叫什么以及用来做什么定义一个变量的过程,实际上就是向内存申请一个变量的
数据类型大小的空间的过程变量实质上就是内存某一单元的标识符号,对这个符号的引用就是对相应的内存单元的存取操作5311.变量变量的定义用类型说明语句对变量进行定义定义格式typenamelist;类型说明符Type是C语言中的一个有效的数据类型变量表nam
elist的形式是:变量名1,变量名2,……,变量名n,用逗号分隔的变量名的集合例inta,b23,C_123;floatsum;charmax_ch;变量的基本数据类型整型、实型、字符型5411.变量整型变量不同类型的差别在于占用不同的存储空间采用不同位数的二进制编码方式计
算机内部总是采用二进制补码形式表示一个数值型数据例如:»整型的最高位为符号位:“1”表示负数,“0”表示正数,其余15位表示数值»无符号整型数全部16位表示数值5511.变量整型变量一个整型变量可以保存一个整数整型类型的基本标
志是int基本型(int)短整型(shortint、short)长整型(longint、long)无符号整型(unsignedint、unsignedlong、unsignedshort)例inta;longb;unsignedintc;提示
使用某种类型的变量时,一定要注意该类型变量的取值范围5611.变量实型变量存储实型数据ANSIC允许的定义三种实型变量float单精度型Double双精度型longdouble长双精度型例
floata,b;doublex;longdoubley;提示运用实数运算时要合理使用不同的类型,尽可能减少误差一个实型常量可以赋给float或double型变量,根据变量的类型截取实型常量的相应有效位数5711.变量字符变量
用来存放一个字符常量即一个字节存放一个字符标示:char例:charc1,a2;提示不能将一个字符串常量赋给一个字符变量例:charc1,c2;c1=„a‟;c2=„b‟;——合法c1=“a”;c2=“b”;——非法5811.变量变量赋值
初始化赋值方式(声明语句)C语言允许在定义一个变量的同时对变量进行初始化例:inti=0;/*表示定义一个整型变量i的同时将i赋值为0*/inti,j,k=10;/*表示i,j,k为整型,只有k被赋值为10*/提
示如果对几个变量同时赋一个初始值,则可以写成floata=3.0,b=3.0,c=3.0;表示a、b、c的初始值均为3.0,但并不表示整个程序中三个变量值一直不变或一直相等先说明后赋值方式(赋值语句)在程序运行过
程中用赋值语句给变量赋一个值例如a=10;5911.变量变量在使用中应注意的问题变量要先定义后使用常量与变量的类型要匹配例题:编写求两数和的C程序并上机运行。main(){inta,b;a=32767;b=10;c=a+b
;printf("c=%d\n",c);/*输出变量c的值*/}会出现什么问题?如何解决?6012.运算符与表达式运算符C语言用于描述对数据进行运算的特殊符号C语言具有丰富而繁多的运算符由运算符构成了各种表达式分类C语言的运算符按其在表
达式中与运算对象的关系单目运算一个运算符连接一个运算对象双目运算一个运算符连接两个运算对象三目运算一个运算符连接三个运算对象6112.运算符与表达式运算符分类C语言的运算符按其在表达式中的作用算术(自增/自减)运算符:(+,—,*,/,%、++、--)关系
运算符:(>,<,>=,<=,!=,==)逻辑运算符:(!,&&,||)位运算符:(<<、>>、~、|、^、&)赋值运算符:(=)条件运算符:(?:)逗号运算符:(,)指针运算符:(*,&)强制类型转换运算符
:(type)分量运算符:(.和)下标运算符:([])函数调用运算符:(())6212.运算符与表达式运算符对运算符的掌握应从三个方面着手和操作符相关的数据类型(包括操作数和操作结果的数据类型)运算符的优先级运算符的结合次序631
2.运算符与表达式表达式用运算符将运算对象连接而成的符合C语言规则的算式特别地:一个常量、一个变量、一个函数都可以看成是一个表达式表达式的分类按照运算符与运算对象的关系单目表达式双目表达式三目表达式6412.运算符与表达式表
达式表达式的分类按照运算符在表达式中的作用算术表达式,例:3+4*5赋值表达式,例:a=3关系表达式,例:5<6,a>b逻辑表达式,例:3>5&&a>=b条件表达式,例:a>b?a:b逗号表达式,例:a=3,b=4,c=5指针表达式,例:p-2,&a651
2.运算符与表达式表达式的求值过程C语言规定了运算符的优先级和结合性优先级指同一个表达式中不同运算符进行计算时的先后次序结合性结合性是指同一个表达式中相同优先级的多个运算应遵循的运算顺序C语言规定:单目运算符是自右向左结合,双目运算符是自左向右结合66表达式的求值过程按C规定的原
则求值表达式代表了一个具体的值实际上是一个数据加工的过程在表达式求值时,先按运算符的优先级级别的高低次序执行如果运算符两侧的优先级级别相同,则按规定的“结合方向”处理提示运算符的优先级制约着表达式的计算次序可以通过括号()来改变表达式求值的顺序表达式
求值过程中存在某种类型数据的类型转换6712.运算符与表达式算术表达式由算术运算符连接数值型运算对象构成其结果可以是整数、单精度实数和双精度实数例:inta=2;floatb=4.5;表达式2*a+b的结
果为8.5优先给与结合性68提示两个整数相除其结果仍为整数(即舍去小数部分)例如:13/10的结果为1“%”为求余运算符,参与运算的两个数均为整数例如:10%3=1-10%3=-1除以0在计算机系统中是没有意义的双
目运算符两侧运算对象的类型必须一致,所得结果的类型将与运算对象的类型一致用括号可以改变表达式的运算顺序6912.运算符与表达式算术表达式例1:设intb=7;floata=2.5,c=4.7;表达式a+(int)(b/3*(int)(a+c)/2)%4的值?例2:tdd
bfa24127012.运算符与表达式自增/自减“++”与“--”的作用是使变量的值增1或减1C语言提供两种形式的++/--运算符++a,--a(前缀运算:先进行增量运算后使用)a++,a--(后缀运算:先使用后进行增量运算)提示:增和自减只能作用于变量,不允
许对常量、表达式或其它进行操作当自增/自减变量值本身就单独构成一条语句时,前缀和后缀的效果是一样的对于“++”和“--”的使用要避免二义性7112.运算符与表达式自增/自减计算过程例1:设x=5y=++x;/*先计算x=x
+1,再执行y=x,结果x=5,y=6*/y=x++;/*先执行y=x,再计算x=x+1,结果y=5,x=6*/问题:如何理解A+++B?C规定:自左向右取尽可能多的符号组成运算符例2:设x=5y=x++*x++;/*先取x的值进行“*”运算,再进行两次x
++。y=25,x=7*/y=++x*++x;/*先进行两次x自增1,使x的值为7,再进行相乘运算。y=49,x=7*/7212.运算符与表达式赋值表达式由赋值运算符“=”连接表达式(右侧)和变量(左侧)形式:变量名=表达式赋值运算
符完成两类操作计算赋值例inta=2,floatb=5.2,c;c=a*b;赋值运算符具有右结合性例如:a=b=3*5;/*先计算3*5,后将15赋给b,再将b的值15赋给a*/7312.运算符与表达式赋值表达式组合赋值表达式组合赋
值运算符将一个变量和一个表达式连接起来的式子称为组合赋值表达式形式:变量名<组合赋值运算符>表达式例:x%=y/3;/*x=x%(y/3)*/a*=b+c/*a=a*(b+c)*/注意:“a*=b+c”与“a=a*b+c”是不等
价的提示“=”不是数学中的“等号”,它表示一个动作右侧的值送与左侧的变量中(左侧只允许是变量,不能是表达式或其他)赋值运算符两侧的类型要求一致,否则要进行类型转换赋值运算符‘=‟,相等运算符‘==‟,和一般习惯有所不同7412.运算符与表达式关
系表达式关系运算符中的“关系”二字的含义是指一个值与另一个值之间的关系关系由关系运算符(>,<,>=,<=,!=,==)连接表达式构成形式:<表达式>OP<表达式>表达式可以是常量、变量和表达式结果为整型值0:逻辑假1:逻辑真优先级:(>,<,>=,<=)高
于(!=,==)结合方向:自左向右7512.运算符与表达式关系表达式例:inta=2;floatb=3.4;a>b、a+b>b,a>b>b的结果分别是多少?(0、1、0)提示进行关系运算时,先计
算表达式的值,然后再进行关系比较运算例如:inta=1,b=2,c=3;(1)a+b>3*c的结果为0/*3>9关系不成立*/(2)(a+=b)<(b*=11%c)结果值为1/*3<4关系成立*/在表达式中连续使用关系运算符时,
要注意正确表达含义例如:设x的取值范围为“-10≤x≤10”时,不能写成“-10<=x<=10”,应写成“-10<=x&&x<=10"——为什么?7612.运算符与表达式逻辑表达式“逻辑”是指连接关系的方式由逻辑运算符(&&、
||、!)连接的表达式构成形式:<表达式>OP<表达式>表达式可以是常量、变量、或其他表达式其结果为整数值0(逻辑假)或1(逻辑真)优先级“!”最高,“&&”次之,“||”最低逻辑运算优先级低
于所有关系运算“!”优先级高于所有算术运算(单目运算)结合性&&、||自左向右例如:a<b&&b<d!自右向左(例如:!a)7712.运算符与表达式逻辑表达式逻辑运算规则提示设计逻辑“与”运算,将最可能为“假”的表达式放在最
左侧设计逻辑“或”运算,将最可能为“真”的表达式放在最左侧ab!aa&&ba||b001000非0101非00001非0非00117812.运算符与表达式逻辑表达式例题:设inta=3,b=1,x=2,
y=0;则(y||b)&&(y||a)的运算结果为1。问题:(1)y||b&&y||a的运算结果是多少?(2)两个表达式在运算次序是否一致?7912.运算符与表达式条件表达式由条件运算符连接它的三个运算对象构成的表达式称之为条件
表达式形式:<表达式1>?<表达式2>:<表达式3>条件运算符的“?”个“:”总是成对出现表达式可以是任何类型,结果也可以是任何类型运算过程计算表达式1的值»为真,计算表达式2的值,并将表达式2的值作为整个条件表达式的结果,不再计算表达式3的值»为假,计算表达式3的值,并将表达式3
的值作为整个条件表达式的结果,不计算表达式2的值8012.运算符与表达式条件表达式优先级高于赋值运算,但低于所有关系运算、逻辑运算和算术运算结合性自右向左结合提示当多个条件表达式嵌套使用时,每个后续的“:”总与前面最近的、没有配对的“?”相
联系»例如:x>y?x:z>w?z:w等同于x>y?x:(z>w?z:w)三个运算对象的类型可以不相同»例如:x?‟a‟:0.58112.运算符与表达式条件表达式例题:设intx=10,y=9;inta,b,c;a=(--x==y++)?x:--y;b=x++;c
=y;执行上述程序段后a,b,c的结果是?分别为8,8,108212.运算符与表达式逗号表达式由逗号连接符(,)与表达式构成形式:<表达式1>,<表达式2>,····<表达式n><表达式1>,<表达式2>,····<表达式n>可以是任何类型逗号表达
式的结果为最后一个表达式的结果值执行过程先求解表达式1的值,再求解表达式2的值,…最后求解表达式n的值,并将表达式n的值作为整个表达式的结果值优先级级别最低(最后进行逗号运算)结合方向自左向右8312.运算符与表达式逗号表达式提示
不是出现逗号的地方都是逗号表达式,逗号在C语言中用于语句之中的参数分隔符在多数情况下,使用逗号表达式的目的是要分别求出每个表达式的结果值在循环结构中经常使用例题设intx,a;表达式x=(a=4,6*2)的x值?表达式x=a=4,
6*2的x值?x为12x为48412.运算符与表达式混合运算指在一个表达式中参与运算的对象不是相同的数据类型例如:设:inta=3;floatb=3.0;charc=„3‟;则表达式(a*c+b)/4+(int)b%2的结果?进
行混合运算的首要的问题是对参与运算的数据进行类型转换类型转换由一种数据类型到另一种数据类型的转换被称为类型转换8512.运算符与表达式类型转换“隐式的”自动类型转换如果同一个表达式中含有不同类型的常量和变量,C语言则在计算该表达式时会自动转换为同一种数
据类型以便进行运算86转换原则运算中将所有char型数据转换成int型,float转换成double型“类型提升”:低类型向高类型转换»例如:1.5+2*„a‟-1.2345678/*运算次序为:2*„a‟:先将‘a
‟转换成整型数97,得乘1941.5+194:1.5和194都转换成double型,为95.5195.5-1.2345678:1.2345678本身应是double型的,所以最后结果也为double型*/87intchar,shortunsignedlo
ngdoublefloat低高12.运算符和表达式类型转换“隐式的”自动类型转换“类型提升”示意图8812.运算符与表达式类型转换“隐式的”自动类型转换转换原则在数据输出时发生的类型转换同样要遵守“类型提升”的原则赋值运算中最终结果的类型,以赋值运算符左
边变量的类型为准要将赋值符号右边表达式的值按左边变量的数据类型转换之后再赋值当左边变量的类型长度较右边值的长度短时,就可能产生误差,甚至完全错误提示由C语言的编译系统自动完成不会体现在C语言源程序中程序设计人员必须了解这种自动转换的规则及其结果8912.运
算符与表达式类型转换“显式的”类型转换通过用强制类型转换运算符(type)进行数据类型转换其含义是将右边表达式的值转换成括号中指定的数据类型转换形式如下:(type)表达式type表示一个强制数据类型名表达式是任何一种类型的表达式例(int)(x
+y)/*注意与(int)x+y不同*/提示通过强制类型转换,只得到了一个所需类型的中间变量,原变量或表达式的值并没有变化例设:inta;floatx;如果:x=8.57;a=(int)x;/*结果a=8,x仍为float型,其值仍为8.57*/9013
.简单表达式的运算【例1】执行下面程序段后,inta=1,b=1,c=1;a=a+++b+++c++;printf(“%d,%d,%d”,a,++b,c++);输出结果为:A.4,3,2;B.3,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+1B)a=b=c+2C)int18.5%3D)a=a+7=c+
b【例4】若a为int类型,且值为3,则执行完表达式a+=a-=a*a后,a的值是多少?A)-3B)9C)-12D)69113.简单表达式的运算【例5】分析下列运算的结果。#defineprintt(x,y,z)printf("x=%d,y=%d,z=%d\n",x,y,z)m
ain(){intx,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后不为0,不再执行||后的++z输出
结果:x=3,y=3,z=2*/??/*输出:x=-1,y=-2,z=-2*/