1、C语言程序设计语言程序设计教材分析 本书内容共有11章,可分为三部分。第1、2章为第一部分,为初学者的入门知识,使读者对c语言编写程序的步骤、方法和程序结构及算法描述有一个大致的了解。第3第5章为第二部分,是程序设计的基础部分,使读者详细了解c语言的基本数据类型和表达式以及c语言的控制结构。掌握了第一、二部分的内容,读者可以完成简单的程序设计。第6章第11章为第三部分,讲述了模块化程序设计的概念和实现的方法,为程序设计提供了更多、更方便的途径,为进行综合程序设计奠定了基础。每一个章节里都有详细的程序范例来说明程序的设计思想、语句的概念、作用、含义和使用方法,使学生能够由浅入深系统地学习c语言的
2、知识,同时掌握一定的编程方法。成绩考核成绩考核 成绩考核方法:成绩考核方法:期末成绩期末成绩=平时成绩平时成绩20%+期末考试期末考试80%;注:平时成绩包括:上课情况、作业情况、上机作业完注:平时成绩包括:上课情况、作业情况、上机作业完成情况等。成情况等。学习学习C的忠告的忠告上机实践上机实践(编程编程)!(Try!)C语言程序设计教程语言程序设计教程 第第1章章 引言引言 第第2章章 程序的简单算法制定程序的简单算法制定 第第3章章 基本程序语句基本程序语句 第第4章章 选择结构选择结构 第第5章章 循环结构循环结构 第第6章章 函数与编译预处理函数与编译预处理 第第7章章 数组数组 第第
3、8章章 指针指针 第第9章章 构造数据类型构造数据类型 第第10章章 文件文件 第第11章章 位运算位运算C语言程序设计课程的任务 1.指导学生掌握 C 程序设计语言的基础知识;2.培养学生综合分析并编制程序解决实际应用问题的能力;3.培养学生契而不舍的解决问题的精神以及认真的学习态度。通常我们把设计、书写及检查调试程序的过程称为程序设计。应当指出,简单的程序设计应包括以下几个部分:确定数据结构确定算法编写代码调试并运行整理并写出文档资料 第一章 引 言 1.1 C语言的特点 1.2 简单的C语言程序介绍 1.3 C语言程序的结构 1.4 C程序设计语言的执行1.1 C语言的特点 C语言有9种
4、控制语句,32个关键字。运算符丰富。共有34种运算符 数据结构类型丰富。具有结构化的控制语句 语法限制不太严格,程序设计自由度大。C语言允许直接访问物理地址,能进行位操作,可以直接对硬件进行操作。生成目标代码质量高,程序执行效率高。C语言编写的程序可移植性好。1.2 简单的C语言程序介绍注释注释 C程序中的“/*/”之间的内容称为注释,是程序编写者给程序阅读者留下的一些说明(注释),以帮助阅读者理解程序。编译器不对注释进行编译,只将它们当作空白看待。本程序的第1行中的注释为“ex101.c”,是说明本书编写时将这个程序保存在文件ex101.c中。库函数与文件包含命令includen 库函数库函
5、数:系统提供的标准函数,程序可直接使用;n 使用库函数必须将其有关说明信息写入程序使用库函数必须将其有关说明信息写入程序。为了用户方便,系统定义库函数时,把一类相关库函数的说明信息,分别写在一些文件中。本例中使用了库函数printf,其有关说明信息写在文件stdio.h中。所以在程序的开始加入了n 使用使用C语言的语言的要在程序前面加上要在程序前面加上类似类似 main函数任何任何C程序都程序都,它是程序的入口,它是程序的入口,也是程序的出口。其中,也是程序的出口。其中,main是是,()内可以包含一些内可以包含一些;的内容称为的内容称为其包含若干条其包含若干条;不同语句之间;不同语句之间用用
6、分隔;一般情况下,每个程序都由一至多个函数组成;分隔;一般情况下,每个程序都由一至多个函数组成;表示表示main函数函数没有返回值没有返回值函数名函数名函数体函数体语句语句演示ex101语句 C语言的主函数体由一些语句组成。每个语句由一个分号结束。如本例中,主函数的一个语句:printf(“This is a C program.n”);说明:说明:n函数printf是系统系统提供的一个库函数,printf函数的功能是向函数的功能是向显示器显示器输出一段信息输出一段信息,具体内容括在双引号内具体内容括在双引号内;n参数中的“n”代表一个命令:输出完这行字符后换行,不是要求显示的文字。例例2 写
7、出以下程序的运行结果写出以下程序的运行结果 演示 ex102例例3 四则运算编程四则运算编程#include int add(int x,int y);main()int a,b,c;scanf(%d%d,&a,&b);c=add(a,b);/*函数调用语句*/printf(c=%d,c);int add(int x,int y)return(x+y);演示ex103演示ex104讨论减、乘、除的编程输入函数Scanf()函数说明函数定义1.4 C程序设计语言的执行程序设计语言的执行 对于对于C语言程序来说,这一过程一般分为语言程序来说,这一过程一般分为4步:步:第第1步:编辑源程序;步:编辑
8、源程序;第第2步:编译;步:编译;第第3步:链接;步:链接;第第4步:执行;步:执行;编编 译译 编译就是把用编译就是把用C语言描述的程序翻译成计算机可以直接理语言描述的程序翻译成计算机可以直接理解并执行的机器语言命令组成的程序。解并执行的机器语言命令组成的程序。C语言的编译过程语言的编译过程分为分为两个阶段两个阶段:首先首先是编译预处理,系统要先扫描程序,是编译预处理,系统要先扫描程序,处理所有预处理命令,如把文件包含命令要求的文件包含处理所有预处理命令,如把文件包含命令要求的文件包含(嵌入)到程序中。(嵌入)到程序中。然后然后才开始编译。编译后得到的文件才开始编译。编译后得到的文件称为目标
9、文件。目标文件就是用机器语言描述的文件。称为目标文件。目标文件就是用机器语言描述的文件。C语言的目标文件的后缀为语言的目标文件的后缀为.obj。目标文件的主文件名,一。目标文件的主文件名,一般与源程序文件名相同。般与源程序文件名相同。在编译过程中,还要对源程序中的语法和逻辑结构进行检在编译过程中,还要对源程序中的语法和逻辑结构进行检查。编译任务是由称做编译器(查。编译任务是由称做编译器(compiler)的软件完成的。)的软件完成的。程序在编译过程中,也可能发现错误。这时要重新进入编程序在编译过程中,也可能发现错误。这时要重新进入编辑器进行编辑。辑器进行编辑。链链 接接 链接是将与当前程序有关
10、的、已经有的几个目标模块链接链接是将与当前程序有关的、已经有的几个目标模块链接在一起,形成一个完整的程序代码文件。这些已经有的目在一起,形成一个完整的程序代码文件。这些已经有的目标模块有:标模块有:库函数:如前面使用的库函数:如前面使用的printf;对于大的程序,常常分成几个模块,分别编写、编辑和对于大的程序,常常分成几个模块,分别编写、编辑和编译,形成不同的目标模块。编译,形成不同的目标模块。经正确链接所生成的文件才是可执行文件。可执行文件的经正确链接所生成的文件才是可执行文件。可执行文件的文件名后缀为文件名后缀为.exe(有的系统为(有的系统为.out)。完成链接过程的)。完成链接过程的
11、软件称为链接器(软件称为链接器(linker)。)。程序在连接过程中,也可能发现错误。这时也要重新进入程序在连接过程中,也可能发现错误。这时也要重新进入编辑器进行编辑。编辑器进行编辑。执执 行行 链接后得到的可执行文件名,对操作系统链接后得到的可执行文件名,对操作系统来说,相当于一条命令。在操作系统提供来说,相当于一条命令。在操作系统提供的命令界面上打入这个命令,就可以开始的命令界面上打入这个命令,就可以开始执行这个程序。执行这个程序。C语言的集成开发环境语言的集成开发环境 Turbo c 2.0 Turbo c+(选用)Vc+等(1)打开Turbo c+运行环境。界面如图:从图可以看到在集成
12、环境的上部,有一行“主菜单”,其中包括下面10个菜单项:File Edit Search Run Compile Project Options Debug Window Help 分别代表:文件操作、编辑、查找、运行、编译、项目文件、选项、调试、窗口、帮助等功能。用户可通过以上菜单项来选择使用Turbo C集成环境所提供的各项主要功能。(2)编辑源程序。在File菜单下选择NEW子菜单项命令,系统的光标处于等待输入C源程序状态。输入完源程序后,选择File菜单下选择Save as子菜单项命令进行保存,在随后弹出的保存文件对话框中,输入文件名*.c后按“”(3)编译源程序 选择Compile主
13、菜单项并在其下拉子菜单中选择Compile 命令,则进行编译。若源程序无语错误,生成可执行文件EXE;若源程序有语法错误,在Message窗口显示错误信息,此时没有生成可执行文件,应回到第2步,修改程序的错误,直到无语法错误、生成可执行文件。返回(4)连接程序 在Compile菜单中,选择Link子菜单项命令,程序将被连接成可执行程序。注:按F9键,可一次完成编译和连接。(5)执行程序。选择Run子菜单命令,或按快捷键Ctrl+F9。(6)看结果。程序运行后看结果必须选择File菜单下的DOS Shell命令 或者按快捷键Alt+F5,才能看到运行的结果。如程序未得到预期的结果,应回到第2步,
14、修改程序的错误。(7)退出Turbo C+,File-Quit菜单命令或按Alt+X。复习本讲内容复习本讲内容(第一章),预习教材第二章。(第一章),预习教材第二章。第二章 程序的简单算法制定 2.1 结构化程序的算法制定 2.2 结构化程序的算法描述 2.3 算法制定的范例2.1 结构化程序的算法制定 利用计算机处理问题简述2.1 结构化程序的算法制定结构化程序的算法制定 例2.1 从键盘输入3个数,找出其中最小的那个数。分析:1、需变量的个数-3个 2、先比较a,b的值,把小的存在min中。3、再用min与c比较,把数值小的存放在min中。如果 ab 则 min=a,否则min=b;如果c
15、0-4ac0(双实根)双实根)X1=X1=X2=X2=如果如果 b b2 2-4ac=0-4ac=0(单实根)单实根)X1=X2=X1=X2=如果如果 b b2 2-4ac0-4ac=60)printf(“Passed!”);else printf(“Failed”);算法可采用自然语言、流程图、N-S图、PAD图、伪代码等方法来描述。示例:根据学生成绩输出评定结果。一、算法(algorithm)二、算法与流程图二、算法与流程图传统流程图 特点:直观形象;使用流线。缺点:占面积大,使用流线任意转移,易出现“乱麻”现象,造成编程与阅读程序困难。二、算法与流程图二、算法与流程图N-S结构化流程图
16、77年美学者I.Nassi和B.Scheiderman提出。特点 取消流线 不允许流程任意转移,只能从上而下顺序执行 规定三种基本结构的流程图单元,由这些基本结构象搭积木似的组成各种算法(结构化设计)。优点 算法清晰,流程不会无规律乱转移。二、算法与流程图二、算法与流程图三种基本结构 通常情况下,程序中的语句是以所编写的顺序一句接一句通常情况下,程序中的语句是以所编写的顺序一句接一句地执行,这种执行方法称为地执行,这种执行方法称为“顺序执行顺序执行”。许多。许多C C语句能够语句能够让程序员指定不按编写顺序执行下一条执行语句,这种执让程序员指定不按编写顺序执行下一条执行语句,这种执行方法称为行
17、方法称为“控制转移控制转移”。BohmBohm和和JacopiniJacopini的研究证实,所有的程序都能够只用三种的研究证实,所有的程序都能够只用三种控制结构编写,即控制结构编写,即 顺序结构顺序结构 选择结构(选择结构(selection structureselection structure)循环结构(循环结构(repetition structurerepetition structure)顺序结构是顺序结构是C C语言的基本结构,除非指示转移,否则计算语言的基本结构,除非指示转移,否则计算机自动以语句编写的顺序一句一句地执行机自动以语句编写的顺序一句一句地执行C C语句。语句。任
18、何任何C C语言程序都是由七种控制结构(顺序结构、三种选择语言程序都是由七种控制结构(顺序结构、三种选择结构和三种循环结构)构成的。结构和三种循环结构)构成的。二、算法与流程图二、算法与流程图三种基本结构 顺序结构 A块、B块顺序执行(每块代表一个或一组操作)二、算法与流程图二、算法与流程图三种基本结构 选择结构 条件p成立时执行a块(否则执行b块)uif 选择结构选择结构 条件为真时执行某个指定的操作,条件为假时跳过该操作(单路选择)uififelseelse选择结构选择结构 条件为真时执行某个指定的操作,为假时执行另一个指定的操作(双路选择)uswitchswitch选择结构选择结构 根据
19、表达式的值执行众多不同操作中的某个指定的操作(多路选择)二、算法与流程图二、算法与流程图三种基本结构 循环结构 分当型和直到型两类。当型 先判断,只要条件为真就反复执行A块,为假则结束循环。直到型 先执行A块,再判断条件是否为真,为真则继续执行循环体,为假则结束循环。C语言提供了三种循环结构,即while循环结构,dowhile循环结构和for循环结构。2.2.3 PAD图PAD(Problem Analysis Diagram)另一种被广泛使用的一种算法的图形表示法。PAD图可以看成是二维的,它能展现算法的层次结构。(顺序结构很简单,在此未画图。)2.3 算法制定范例 例例2.4 把从键盘输
20、入的大写字母转换成小写把从键盘输入的大写字母转换成小写字母,输出结果。字母,输出结果。问题:问题:1、描述算法、描述算法 2、根据算法编写、根据算法编写C程序程序 3、运行检查程序是否正确。、运行检查程序是否正确。演示演示ex2022.3 算法制定范例 例2.5 已知实数a和b,计算u的值:u=(r+s)2。其中,当ab时,r=a2-b2,s=a/b;当ab时,r=b2-a2,s=a/b+4。算法(算法(自然语言描述自然语言描述):):从键盘输入实数从键盘输入实数a和和b。如果如果ab,则,则r=a2-b2,s=a/b;否则,否则,r=b2-a2,s=a/b+4。计算计算u的值:的值:u=(r
21、+s)2。输出输出u的值。的值。开始输入a,babTFr=a*a-b*bs=a/br=b*b-a*as=a/b+4结束u=(r+s)*(r+s)输出u的值流程图输入实数a,babFTr=a*a-b*bs=a/br=b*b-a*as=a/b+4计算的值:u=(r+s)*(r+s)输出u的值N-S图输入实数a,babr=a*a-b*bs=a/br=b*b-a*as=a/b+4计算u=(r+s)*(r+s)输出u的值PAD图/*例例2.5*/#includemain()float a,b,r,s,u;printf(请输入变量请输入变量a、b的值的值:);scanf(%f%f,&a,&b);if(ab
22、)r=a*a-b*b;s=a/b;elser=b*b-a*a;s=a/b+4;u=(r+s)*(r+s);printf(所计算的所计算的u的值为:的值为:%f,u);C语言描述 小结:小结:本章主要介绍了程序算法的制定方法:自然语本章主要介绍了程序算法的制定方法:自然语言、流程图、言、流程图、N-SN-S图和图和PADPAD图。通过用这些方法表示图。通过用这些方法表示解题思路。解题思路。作业:作业:用流程图、用流程图、N-SN-S图和图和PADPAD图描述问题的算法:图描述问题的算法:从键盘输入从键盘输入3 3个整数个整数a,b,c,a,b,c,输出其中的最大的数。输出其中的最大的数。第三章
23、基本程序语句C C语言的数据类型简介语言的数据类型简介几个基本概念几个基本概念 C C语言的三种基本数据类型语言的三种基本数据类型基本运算符和表达式基本运算符和表达式C C基本语句基本语句数据的输出数据的输出数据的输入数据的输入 简单程序设计举例简单程序设计举例3.1 C3.1 C语言的数据类型简介语言的数据类型简介 字符型(字符型(charchar)整型(整型(short,int,long,unsignedshort,int,long,unsigned)单精度型(单精度型(floatfloat)实型实型 双精度型(双精度型(doubledouble)枚举类型(枚举类型(enumenum)数组
24、类型(数组类型()构造类型构造类型 结构体类型(结构体类型(structstruct)共用体类型(共用体类型(unionunion)指针类型(指针类型(*)空类型(空类型(voidvoid)基本类型基本类型数据类型数据类型C语言的数据结构3.23.2几个基本概念几个基本概念3.2.1 3.2.1 标识符标识符 1标识符概念标识符概念:是用来标识名称标识名称的,可以用来标识变量名、符号常量名、函数名、类型名、数组名、文件名等。C语言规定标识符只能由字母、数字和下划线组成,且第一个字符必须是字母或下划线。如:Day,month,student,name_1,s2,_12,_t13 注意注意:1)1
25、)C C语言中大写字母和小写字母被认为是两个不语言中大写字母和小写字母被认为是两个不同的字符,大写字母同的字符,大写字母AA与小写字母与小写字母aa则则表示不同的标识符。表示不同的标识符。2)2)采用采用“见名知义见名知义”的原则的原则3.23.2几个基本概念几个基本概念 3.2.1 3.2.1 标识符标识符 2标识符的分类 关键字关键字(代表固定含义,不能另做他用。书代表固定含义,不能另做他用。书P P2121)分为三类分为三类 预定义标识符预定义标识符(有特定含义,包括有特定含义,包括C C语言库函数名语言库函数名 和变异预处理命令允许另做他用,但标识符失去原义和变异预处理命令允许另做他用
26、,但标识符失去原义)用户标识符用户标识符(用户自己定义,不能使用关键字,可用户自己定义,不能使用关键字,可 以使用预定义标识符,建议不要使用预定义标识符以使用预定义标识符,建议不要使用预定义标识符)3.23.2几个基本概念几个基本概念 3.2.2 3.2.2 常量常量在程序运行中在程序运行中,其数值不能被改变的量其数值不能被改变的量 1 1直接常量:直接常量:是在程序中直接引用的数据是在程序中直接引用的数据 2 2符号常量:符号常量:符号常量是用标识符来代表一个数据符号常量是用标识符来代表一个数据 符号常量的定义形式符号常量的定义形式:#define#define 符号常量标识符符号常量标识符
27、 常量数据常量数据 例如例如:#define PI 3.14159:#define PI 3.141593.23.2几个基本概念几个基本概念3.2.3 3.2.3 变量变量变量是指以标识符为名字,其值可以改变的量。变量是指以标识符为名字,其值可以改变的量。1、定义形式:类型标识符 变量名1,变量名2,变量名3.;例如:int a,b,c;float x,y;char c1,c2;或 int c1,c2;自己设定,满足标自己设定,满足标识符的规定。识符的规定。如:如:intint,float,charfloat,char;不可省;不可省变量分为整型、实型、字符型等。变量分为整型、实型、字符型等。
28、3.23.2几个基本概念几个基本概念 3.2.3 3.2.3 变量变量 2、变量初始化 在说明变量的同时给变量一个初始值。int a=5,b=3;int a,b,c;a=b=c=3;int a=b=c=3;例如例如在同一程序块中,变量不能被重复定义;使用变量时必须“先定义,后使用”。3.33.3 C C语言的三种基本数据类型语言的三种基本数据类型3.3.1 3.3.1 整型数据整型数据1 1、整型常量:、整型常量:(1)(1)十进制形式十进制形式:与数学上的整数表示相同;与数学上的整数表示相同;例如例如:12,-100,0:12,-100,0(2)(2)八进制形式八进制形式:在数码前加数字在数
29、码前加数字0 0;例如例如:012=1:012=1*8 81 1+2+2*8 80 0=10(=10(十进制)十进制)(3)(3)十六进制形式十六进制形式:在数码前加在数码前加0X0X(数字数字0和字母和字母X)。)。例如例如:0 x12=1:0 x12=1*16161 1+2+2*16160 0=18(=18(十进制)十进制)*八进制的数码范围为八进制的数码范围为07;018 *十六进制的十六进制的数码除了数字数码除了数字0 09 9外外,还使用英文字母还使用英文字母a f(或或A F)表示表示1015。如:如:0 x1e 3.33.3 C C语言的三种基本数据类型语言的三种基本数据类型 2
30、、整型变量()整型变量分类()整型变量分类 根据数据所占的二进制位数分为:int、short、long;同样存储长度的数据又分unsigned、signed;故可组合出六种类型。()整型数据的存储方式()整型数据的存储方式 数据在内存中是以二进制形式存储的。C语言中,一个int型数据通常用两个字节存放,其中最高位用来存放整数的符号,若最高位为0则表示该数为正数,若最高位为1则表示该数为负数。如:int i=-1;则存放形式为:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 13.33.3 C C语言的三种基本数据类型语言的三种基本数据类型 3、值域:变量允许存放的数值范围 由机器中
31、数据的存储长度决定。VC 6.0 所支持的整型数据 类型名称所占位数数值范围signed int8*4-21474836482147483647signed short int 8*2-3276832767signed long int8*4-21474836482147483647unsigned int8*404294967295unsigned shortint8*2065535unsigned long int8*4042949672953.33.3 C C语言的三种基本数据类型语言的三种基本数据类型 例例3.1:P24 思考:运行结果是否正确,说明理由!思考:运行结果是否正确,说明理
32、由!#includemain()int a,b,c,d;unsigned u,v;a=1;b=3;c=6;d=-7;u=a+b;v=c+d;printf(u=%d,v=%un,u,v);3.33.3 C C语言的三种基本数据类型语言的三种基本数据类型3.3.2 实型数据实型数据1 1、实型常量:、实型常量:(1)(1)十进制小数形式:十进制小数形式:由数字和小数点组成;由数字和小数点组成;例如例如:3.4 ,4.,.3 :3.4 ,4.,.3 (2)(2)指数形式指数形式:“十进制小数十进制小数”+“e(+“e(或或E)”+“E)”+“十进制数整十进制数整数数”。例如例如:12.5e-6:12
33、.5e-6 表示表示12.512.51010-6 。规范化指数形式:规范化指数形式:小数点不能单独出现;小数点不能单独出现;0.0.0 .0 .e e或或E E的两边必须有数,且其后面必须为整数;的两边必须有数,且其后面必须为整数;如:如:6E0.2 6E0.2 e5e5 2、实型变量(分类和值域):、实型变量(分类和值域):关键字关键字 字节数字节数 取值范围取值范围 精度精度(位位)float 4 3.4 float 4 3.41010-38 3.43.4101038 7 7 double 8 1.7 double 8 1.71010-308 1.71.71010308 1515注意注意3
34、.33.3 C C语言的三种基本数据类型语言的三种基本数据类型3.3.3字符型数据字符型数据1 1、常量:、常量:(1)(1)用单引号括起来的一个字符;如:用单引号括起来的一个字符;如:A、1、?等等。(2)(2)用单引号括起来的由反斜杠用单引号括起来的由反斜杠()引导的转义字符。引导的转义字符。字符形式字符形式 功能功能 n n 换行换行 t t 横向跳格横向跳格 b b 退格退格 r r 回车回车 反斜杠字符反斜杠字符 单引号字符单引号字符 dddddd 8 8进制数表示的进制数表示的ASCIIASCII码对应的字符码对应的字符 xhhxhh 16 16进制数表示的进制数表示的ASCIIA
35、SCII码对应的字符码对应的字符例如:字符例如:字符A A的的ASCIIASCII码为:码为:65D65D(十进制)(十进制)=41H=41H(十六进制)(十六进制)=101Q=101Q(八进制)(八进制)字符字符A A可以表示为可以表示为AA、x41x41、101101。#include main()char c1=a,c2=b,c3=c,c4=101,c5=116;printf(a%c b%ctc%ctabcn,c1,c2,c3);printf(tb%c%c,c4,c5);转义字符的应用转义字符的应用演示ex3043.33.3 C C语言的三种基本数据类型语言的三种基本数据类型2、变量的分
36、类和值域:分类:char 和 unsigned char;值域:每个字符型数据在内存中占一个字节;包括ASCII字符表中的所有字符(可显示字符和非显示字符)。3、字符串常量:是用一对双引号括起来的字符序列。如:“SHANGHAI”,“FGHijk”,“CHINA”。字符串常量的存放:每个字符均以其ASCII码存放,且在最后加一个“空字符”a与与“a”的区别。的区别。注意注意3.43.4 基本运算符和表达式基本运算符和表达式 3.4.1 C运算符简介按操作功能运算符大致可分为算术运算符、关系运算符、逻辑运算符、按位运算符以及其它运算符如赋值运算符、条件运算符、逗号运算符等。表达式是由操作数和运算
37、符组成的序列。算术运算符+-*/%关系运算符 =!=逻辑运算符!&位运算符|&赋值运算符=条件运算符?:逗号运算符,指针运算符*和&求字节数运算符 sizeof强制类型转换运算符分量运算符 下标运算符 其它运算符号 3.43.4 基本运算符和表达式基本运算符和表达式 3.4.2算术运算符和算术表达式 1、基本的算术运算符 +(加):3+4、+3 -(减):3-5、-5 *(乘):3*5 /(除):5/2的值为2;5.0/2的值为2.5;%(取余):5%3的值为2;-5%3的值为-2;5%(-3)的值为2;-5%(-3)的值为-2;12.3%3 若a能被b整除,则有:a%b=0 整型数据相除,结
38、果整型。5/3为1求余运算两侧为整型数据参与运算的数有一个是实型,则结果为实型3.43.4 基本运算符和表达式基本运算符和表达式 2.算术表达式 用算术运算符和括符将操作数连接起来的式子。优先级:()*、/、%+、-结合性:从左至右;表达式的值:数值型(int、long、unsigned、double);例如:例如:已知:已知:float a=2.0;int b=6,c=3;求解:求解:a*b/c-1.5+a+(b-5)=?double float long unsigned int char,short float a=2.0;float a=2.0;intint b=6,c=3;b=6,c
39、=3;a a*b/c-1.5+a+(b-5)b/c-1.5+a+(b-5)12.012.0/3/314.0 4.0-1.5-1.52.5 2.5 +97(int)+97(int)99.5 99.5 +1+1100.5100.5(double)(double)3.43.4 基本运算符和表达式基本运算符和表达式 3.4.3 赋值运算符和赋值表达式1 1、赋值运算符、赋值运算符 =2 2、赋值表达式:、赋值表达式:用赋值运算符将变量和表达式连接起来的式用赋值运算符将变量和表达式连接起来的式子子 一般形式为:一般形式为:赋值运算符赋值运算符 优先级:优先级:赋值运算符的优先级比算术运算符低。赋值运算符
40、的优先级比算术运算符低。结合性:自右至左(右结合性)。结合性:自右至左(右结合性)。求值规则:求值规则:先计算先计算“=”=”右边表达式的值,再将其值赋给左边右边表达式的值,再将其值赋给左边的的变量变量。表达式的值:赋值号左边变量的值即为赋值表达式的值。表达式的值:赋值号左边变量的值即为赋值表达式的值。例如例如:(1)x=(y=12)/4 y值为12,x值为3,表达式的值为3 (2)x=y=12/4 y值为3,x值为3,表达式的值为3 (3)x=(y=12/4)y值为3,x值为3,表达式的值为3 (4)(x=y)=12/4 3.43.4 基本运算符和表达式基本运算符和表达式 3、复合赋值运算符
41、 *=、/=、%=、+=、-=等 注意:复合运算符是一个运算符,但功能上,是两个运算符功能的组合。例如:(1)a+=b 相当于 a=a+b a*=b 相当于 a=a*b a*=b+c 相当于 a=a*(b+c)而不是 a=a*b+c (2)设a=12,计算表达式a+=a-=a*12和a+=a-=a*=12的值3.43.4 基本运算符和表达式基本运算符和表达式 4赋值时的类型转换赋值时的类型转换实型数据赋给整型(字符型)变量:去掉小数部分;实型数据赋给整型(字符型)变量:去掉小数部分;如如:int f=23.457;变量变量f的值为的值为23。整型(字符型)数据赋给实型变量:整型(字符型)数据赋
42、给实型变量:补足有效位补足有效位。字符型数据赋给整型变量:将字符数据(字符型数据赋给整型变量:将字符数据(8位)放到整型变量的低位)放到整型变量的低8位中,高位中,高8位进行位进行“符号扩展符号扩展”。一个int、short、long、unsigned型数据赋给一个char 型变量:截取低8位赋给字符型变量。带符号的整型数据(int型)赋给long型变量:进行符号扩展。带符号的long型数据赋给int型变量时,只截取低16位赋给int变量。unsigned int 型数据赋给long int变量:高位补0。int 型数据赋给unsigned int变量:内存情况不变,但若是负数,其符号位也作为
43、数值赋给unsigned 型变量。3.43.4 基本运算符和表达式基本运算符和表达式 5 5、自增与自减运算符、自增与自减运算符 单目运算符,运算对象是变量,不是表达式或者常量+i,-i:先使变量i的值增1(或减1),再使用变量i的值作为整个表达式的值来参加其它的运算;i+,i-:先使用变量i的值进行其它运算,再使变量i的值增1(或减1)。(1)i+;+i;(2)i=3;j=i+;(3)i=3;j=+i;等价于等价于 i=i+1;i=i+1;j=i;i+;j=i;i+;所以所以i i的值为的值为4 4,j j的值为的值为3 3。i+;j=i;i+;j=i;所以所以i i的值为的值为4 4,j
44、j的值为的值为4 4。例如:例如:3.43.4 基本运算符和表达式基本运算符和表达式 5、自增与自减运算符自增与自减运算符 结合性:自右至左。如:i=2;j=-i+;等价于:j=-(i+);即:j=-i;i+;“+”与”-“是同优先级 所以i的值为3,j的值为-2。注意“+”或“-”自增与自减运算符的使用。设i=3,k=(i+)+(i+)+(i+),k=?设i=3,k=(i+)+(+i)+(+i),k=?设i=3,j=4,k=i+j,k=?设i=3;printf(“%d%d”,i,-i+);结果为?3.43.4 基本运算符和表达式基本运算符和表达式 3.4.4 关系运算符和关系表达式关系运算符
45、和关系表达式1.6种关系运算符:=!=2.关系表达式:用关系运算符将表达式连接起来的式子 优先级:(=)(=!=)结合性:自左至右;表达式的值:若为真,则结果为1;若为假,则结果为0。35 的值为 0;32 的值为 0;3+(43)*4的值为 3;3+43 的值为1;a&|结合性:自左至右;结合性:自左至右;表达式的值:表达式的值:若为真,则结果为若为真,则结果为1 1;若为假,则结果为若为假,则结果为0 0。3.43.4 基本运算符和表达式基本运算符和表达式 int a=5;float b=3.5;!a (0)!(a b)(1)a&b (1)!a&b(0)!a&!b (0)!(a&b)(0)
46、a|b (1)!a|b (1)!a|!b (0)!(a|b)(0)(a 0)(0)(a 0)(1)例如例如结论:结论:&:只要有一个为假,结果则为假;只要有一个为假,结果则为假;|:只要有一个为真,结果则为真;只要有一个为真,结果则为真;!高高 算术运算符算术运算符 关系运算符关系运算符&和和|赋值运算符赋值运算符 低低 4-04-01&21&28 48 3&2|8 3&2|8 4-!53.43.4 基本运算符和表达式基本运算符和表达式 注意:注意:在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。例如:例如:(1)a=0
47、;b=1;c=a+&(b=3);结果:a为1,b为1,c为0。(2)a=1;b=1;c=0;d=-a|b-|(c=b+3);结果:a为0,b为0,c为0,d为1。3.43.4 基本运算符和表达式基本运算符和表达式 逻辑表达式一般用于控制语句中的条件:例如:(1)n是小于m的偶数:(2)year是闰年:(能被4整除但不能被100整除或能被400整除)nm&n%2=0(year%4=0&year%100!=0)|year%400=03.43.4 基本运算符和表达式基本运算符和表达式 3.4.6 条件运算符 1 1、条件运算符、条件运算符?和和:,它们与三个操作数组成三目运算。它们与三个操作数组成三
48、目运算。2 2、形式为、形式为:?:33 3、求值规则和表达式的值求值规则和表达式的值:真真(非非0),0),求解表达式求解表达式2 2 求解表达式求解表达式1 1 条件表达式的值条件表达式的值 假假(0),(0),求解表达式求解表达式3 3例如例如:int max,a=5,b=3;max=ab?a:b a条件赋值 验证:printf(%d%dn,-a=b+?a+:b+,b);运行结果:4 53.43.4 基本运算符和表达式基本运算符和表达式 5、结合性:自右至左;y=x10?x/10:x0?x:-x;等价于:y=x10?x/10:(x0?x:-x);思考:当x的值为15时,表达式的结果为:当
49、x的值为5时,表达式的结果为:153.43.4 基本运算符和表达式基本运算符和表达式 3.4.7逗号运算符:,形式形式:逗号表达式逗号表达式1 1,逗号表达式,逗号表达式2 2,逗号,逗号表达式表达式n n 求值规则求值规则:从左至右依次计算各表达式的值从左至右依次计算各表达式的值;优先级:优先级:最低;最低;结合性:自左至右;结合性:自左至右;表达式的值表达式的值:最后一个表达式的值最后一个表达式的值。3.43.4 基本运算符和表达式基本运算符和表达式 例如:a b y 表达式 y=a=4,b=5,a+b;4 5 4 9 y=(a=4,b=5,a+b);4 5 9 9 y=(a=4,b=5)
50、,a+b;4 5 5 9 y=a=(4,b=5),a+b;5 5 5 10 注意:C语言常用逗号作为分隔符,例如:int a=3,b=4,c=5;printf(“%d,%d,%d”,(a,b,c);printf(“%d,%d,%d”,a,(a,b,c),c);结果为3,5,53.43.4 基本运算符和表达式基本运算符和表达式 3.4.8 强制类型转换运算符强制类型转换:指将表达式的类型强制转换为指定的类型,其一般形式为:(类型名)表达式其作用:将表达式的结果的类型强制转换为类型名所指的类型。例如例如(int)(3.4+2.8)的值为6 强制类型转换时,得到所需类型的中间变量,而原来变量的类型不