《C语言程序设计全套课件完整版整套ppt最全幻灯片(最新).ppt》由会员分享,可在线阅读,更多相关《C语言程序设计全套课件完整版整套ppt最全幻灯片(最新).ppt(462页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计(第三版)(第三版)20年前的情况:手机是财富拥有着的象征,播放音乐靠硬件实现10年前的情况:从工业发展历程看未来世界:手机是一种通信工具,智能手机出现,播放音乐靠软件实现 10年后的情况:你所看到的任何一个物体,都具有显示功能,见到的所有人,都能知道他叫什么,在什么单位人何种职务制造技术、电子技术的进步信息处理方法和能力的提升今天的情况:智能手机走进千家万户,智能手机正在取代数码相机、摄像机 1、大学理工科类专业的的学生为什么要开设程序设计基础这门课程 2、有很多种程序设计语言,为什么要选择C语言3、怎样才能学好C语言与本课程有关的几个观点4、程序设计及程序设计语言 1、大学理
2、工科类专业的的学生为什么要开设程序设计基础这门课程 (1)是高等学校通识类课程教学实施方案的明确要求。计算机应用基础,程序设计基础和数据库技术及应用。(2)是时代发展的需要(3)是专业背景和应用的需要 2、有很多种程序设计语言,为什么要选择C语言Visual BasicPascalVisual C+CJava 选择C语言作为程序设计基础的理由理由:C语言是当前各种程序设计语言的共同的语言。C语言是各种语言的基础。3、怎样才能学好C语言数据类型:char,int,float,double,void输入输出:scanf,printf,getchar,putchar,getch,getche语句:i
3、f,else,switch,case,default,break,while,for,do,continue,goto,return运算符:sizeof(1)读懂别人书写的程序。(2)模仿别人写好的程序,大胆地编写一些常用的,解决实际问题的程序。(3)无能有多么好的基础,编写的程序一定要上机调试程序设计及程序设计语言程序:程序是能被机器识别并能执行的一系列的指令代码。指令代码是用程序设计语言来描述的。程序设计语言是人与计算机对话的工具。程序设计需要在一定程序设计语言环境下进行。程序设计语言的发展:程序设计语言一般分为程序设计语言一般分为机器语言机器语言、汇编语言汇编语言和和高级语言高级语言三大
4、三大类。类。低级语言低级语言低级语言一般包括低级语言一般包括机器语言机器语言和和汇编语言汇编语言10000000(进行一次加法运算)(进行一次加法运算)10010000(进行一次减法运算)(进行一次减法运算)机器语言机器语言A+B A 或ADD A,BA-B A 或SUB A,B汇编语言汇编语言 用助记符号描述的指令系统称为用助记符号描述的指令系统称为符号语言符号语言或或汇编语言汇编语言高级语言 它以人类易于接受的文字来表达解决问题的全过程。用户它以人类易于接受的文字来表达解决问题的全过程。用户不必费时费力去记忆难以理解的不必费时费力去记忆难以理解的0、1代码,而是可以代码,而是可以把主要精把
5、主要精力集中于解决问题的算法上力集中于解决问题的算法上。高级语言分为:高级语言分为:面向过程的程序设计语言面向过程的程序设计语言和面向对象的程序设面向对象的程序设计语言计语言main()/告诉编译器C程序由此开始执行 /这一段程序开始 float a,b;/定义两个实型变量长a和宽b float area;/定义面积变量area area=a*b;/把计算的面积赋给area printf(%f,area);/输出面积area的值 return 0;面向过程的程序设计语言:面向过程的程序设计语言:面向对象的程序设计语言:面向对象的程序设计是一种面向对象的程序设计是一种结构模拟结构模拟方法,它把方
6、法,它把现实现实世界看成是由许多对象(世界看成是由许多对象(object)所组成)所组成,对象之间通过,对象之间通过相互相互发送和接收消息进行联系发送和接收消息进行联系。消息的发送消息的发送对象本身对象本身运动运动,形成形成对象状态的变化对象状态的变化。从程序结构的角度,每个对象都是。从程序结构的角度,每个对象都是一个数据和方法的封装体一个数据和方法的封装体抽象数据类型抽象数据类型。1.1.2 C语言的发展过程C语言的发展过程可粗略地分为三个阶段:1970年至1973年为诞生阶段之后至1988年为发展阶段1988年以后为成熟阶段1C语言的诞生C语言是为写UNIX操作系统而诞生的。1970年美国
7、AT&T公司贝尔实验室Ken Thompson为实现UNIX操作系统而提出一种仅供自己使用的工作语言,由于该工作语言是基于1967年由英国剑桥大学的Martin Richards提出的BCPL语言设计的,因而被作者命名为B语言,B取自BCPL的第一个字母。B语言被用于在PDP-7计算机上实现了第一个UNIX操作系统。1972年贝尔实验室的Dennis M.Ritchie又在B语言基础上系统地引入了各种数据类型,从而使B语言的数据结构类型化。1973年K.Tompson和D.M.Ritchie用C语言重写了UNIX操作系统,推出UNIX v5。1975年又推出UNIX v6。此时的C语言是附属于
8、UNIX操作系统的。2C语言的发展1977年C语言的作者发表了不依赖于具体机器系统的C语言编译文本可移植C语言编译程序,从而推动了UNIX操作系统在各种机器上的实现以及UNIX操作系统的不断发展。1978年以后相继推出了UNIX v7,UNIX systemV。使人们普遍注意到C语言的突出优点,从而又促进了C语言的迅速推广。1978年Brian W.Kernighan和D.M.Ritchie以UNIX v7中编译程序为基础写了影响深远的名著The C Programming Language,这本书上介绍的C语言是以后各种C语言版本的基础,被称为传统C语言。1978年以后,C语言先后移植到各种
9、大型机、中型机、小型机及微型机上。目前,C语言成为世界上使用最广泛的高级程序设计语言,且不依赖于UNIX操作系统而独立存在。3C语言的成熟1978年以后,C语言的不断发展产生了各种C语言版本,不同的C语言版本对传统C语言都有所扩充和发展。1983年,美国国家标准协会(ANSI)综合了各版本对C的扩充和发展,制定了新标准,称为ANSI C。Kernighan和D.M.Ritchie按ANSI C标准重写了他们的经典著作,于1990年正式发表了国际标准化组织(ISO)公布的C语言标准。1988年以后推出的各种C语言版本与ANSI C是相容的。1999年发布的C99在基本保留C语言特征的基础上,增加
10、了一系列C+中面向对象的新特征,使C99成为C+的一个子集。C99是C89的扩充,C语言也从过程化的语言发展成为面向对象的语言。1.2 C语言的特点语言简洁、紧凑,使用方便、灵活。一共只有32个关键字9种控制语句程序书写形式自由,主要用小写字母表示。C 语言PASCAL语言含义 BEGIN.END复合语句if(e)SIF(e)THEN S条件语句int i;VARi:INTEGER定义i为整型变量int a10;VAR a:ARRAY1.10OF INTEGER定义a为整型一维数组int f();FUNCTION f():INTEGER定义f为返回整型值的函数int*p;VAR p:INTEG
11、ER定义p为指向整型变量的指针变量i+=2;i:=i+2赋值语句,使i+2=ii+,+ii:=i+1i自增值1,i+1=i1.2 C语言的特点运算符丰富。共有34种运算符。数据结构丰富,具有现代化语言的各种数据结构。C语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能实现各种复杂的数据结构(如链表、树、栈等)的运算,尤其是指针类型数据。具有结构化的控制语句if.else语句while语句do.while语句switch语句for语句1.2 C语言的特点语法限制不太严格,程序设计自由度大。对数组下标越界不做检查,由程序编写者自己保证程序的正确。整型数据与字符型数
12、据可以通用。C语言能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。C语言既具有高级语言的特点,又具有低级语言的许多功能,可用来编写系统软件。生成目标代码质量高,程序执行效率高。一般只比汇编程序生成的目标代码效率低10%20%。程序可移植性好(与汇编语言比)。基本上不做修改就能用于各种型号的计算机和各种操作系统。C程序结构程序结构【例【例1.1】C程序程序输出输出。main()printf(This is a C program.n);return 0;作用有两个:一个使main()函数终止(从而结束程序),二是指出main()函数的返回值是0,这个值表明函数正常结束
13、。C程序结构程序结构【例【例1.2】设计一个程序,设计一个程序,计算计算两数之和并输出结果。两数之和并输出结果。main()int a,b,sum;/这是定义三个整型变这是定义三个整型变量量 a,b,suma=123;b=456;/给给a、b赋初值赋初值 sum=a+b;/计算计算a、b之和赋给之和赋给sum printf(sum=%dn,sum);/输出输出sum的值的值 return 0;C程序结构程序结构【例【例1.3】输入两个整数,计算输入两个整数,计算两者较大两者较大的数,并输出。的数,并输出。main()int a,b,c;int max(int x,int y);scanf(%d
14、,%d,&a,&b);c=max(a,b);printf(max=%d,c);return 0;int max(int x,int y)int z;if(xy)z=x;else z=y;return z;1.3.2 C程序结构程序结构(1 1)C C程序由函数构成(函数是程序由函数构成(函数是C C程序的基本单位)程序的基本单位)一个C源程序至少包含一个main函数,也可以包含一个main函数和若干个其他函数。函数是C程序的基本单位。被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己编写设计的函数。C函数库非常丰富,ANSI C提供100多个库函数,Turbo C提供300多个库函数
15、。1.3.2 C程序结构(2)main函数(主函数)是每个程序执行的起始点。函数(主函数)是每个程序执行的起始点。一个C程序总是从main函数开始执行,而不论main函数在程序中的位置。可以将main函数放在整个程序的最前面,也可以放在整个程序的最后,或者放在其他函数之间。1.3.2 C程序结构程序结构(3 3)一个函数由函数首部和函数体两部分组成。)一个函数由函数首部和函数体两部分组成。函数首部:函数首部:一个函数的第一行。返回值类型 函数名(函数参数类型1 函数参数名1,函数参数类型2,函数参数名2)int max(int x,int y)函数体:函数体:函数首部下用一对 括起来的部分。如
16、果函数体内有多个,最外层是函数体的范围。函数体一般包括声明、执行两部分。声明部分:定义本函数所使用的变量。执行部分:由若干条语句组成命令序列(可以在其中调用其他函数)。1.3.2 C程序结构程序结构(4)C C程序书写格式自由。程序书写格式自由。一行可以写几个语句,一个语句也可以写在多行上。C程序没有行号,也没有FORTRAN、COBOL那样严格规定书写格式。每条语句的最后必须有一个分号“;”表示语句的结束。1.3.2 C程序结构程序结构(5)可以使用可以使用“/*/*”和和“*/*/”对对C C程序中的任何部分作注释。程序中的任何部分作注释。如果一开始编程就对程序进行注释,虽然刚开始麻烦一些
17、,但日后可以节省大量的时间。一个实际的系统往往是多人合作开发,程序文档、注释是其中重要的交流工具。行注释行注释“/”块注释块注释“/*/*”和和“*/*/”1.3.2 C程序结构程序结构(6 6)C C语言本身不提供输入语言本身不提供输入/输出语句,输入输出语句,输入/输出的操作是通过调用库函数输出的操作是通过调用库函数(scanfscanf,printfprintf)完成。)完成。输入/输出操作涉及具体计算机硬件,把输入/输出操作放在函数中处理,可以简化C语言和C的编译系统,便于C语言在各种计算机上实现。1.4 源程序的编辑、编译、连接与运行用高级语言编写的程序称为“源程序”,通常简称为程序
18、。高级程序设计语言也必须被转换为机器语言程序才能被机器理解和执行,完成这种转换任务的系统软件称为编译程序。相应的转换过程通常称为编译。C语言采用编译方式将源程序转换为二进制的目标代码。1编辑将源程序逐个字符输入到计算机内存;修改源程序;将修改好的源程序保存在磁盘文件中。编辑的对象是源程序,它是以ASCII代码的形式输入和存储的,不能被计算机执行。编写好一个C程序到完成运行一般经过以下几个步骤:2编译编译就是将已编辑好的源程序(已存储在磁盘文件中)翻译成二进制的目标代码。编译后得到的二进制代码在UNIX下是后缀为.o的文件,在MS-DOS下是后缀为.obj的文件。经编译后得到的二进制代码还不能直
19、接执行,因为第一个模块往往是单独编译的,必须把经过编译的各个模块的目标代码与系统提供的标准模块连接后才能运行。编写好一个C程序到完成运行一般经过以下几个步骤:3连接将各模块的二进制目标代码与系统标准模块经连接处理后,得到具有绝对地址的可执行文件,它是计算机能直接执行的文件。在UNIX下它以.out为后缀,在MS-DOS下以.exe为后缀。编写好一个C程序到完成运行一般经过以下几个步骤:4执行执行一个经过编译和连接的可执行的目标文件。只有在操作系统的支持和管理下才能执行它。编写好一个C程序到完成运行一般经过以下几个步骤:第二章第二章C语言数据类型与基本操作语言数据类型与基本操作34本章主要内容本
20、章主要内容1、常量和变量2、标识符与关键字3、整型数在计算机中的存储方式4、有符号的数据类型和无符号的数据类型5、运算符及表达式6、不同类型数据间的转换数据数据类型类型构造类型构造类型指针类型指针类型空类型空类型char (字符类型字符类型)enum(枚举类型)枚举类型)整型整型实型实型float (单精度单精度)double (双精度双精度)short int(短整型短整型)long int (长整型长整型)int (整型整型)数组类型数组类型结构类型结构类型共同类型共同类型基本类基本类型型数值类型数值类型文件类型文件类型C语言的数据类型 数据类型决定:数据类型决定:1.数据占内存字节数数据
21、占内存字节数2.数据取值范围数据取值范围3.其上可进行的操作其上可进行的操作362.1.1 常量2.1 常量与变量常量与变量在程序运行过程中,其值不改变的量称为常量。在C语言中,常量有不同的类型:整型常量(int)短整型(short int)长整型(long int)无符号型(unsigned int)实型常量(float和double)字符常量(char)字符串常量371整型常量 十进制常量如15,19,123,-345等。八进制常量以数字0 0开头如:05,012,0123 十六进制常量以数字0 0和字母x x(或大写字母X)开头如:0 x10,0Xff,0X8十进制5,10,83十进制数
22、16,255,8382实型常量 用小数形式表示如:345,.345,345.0,3.14159 指数形式表示1.5e5,2.9e-71.5105,2.910-7。注意:指数形式的浮点常量E或e前面必须有数字,E或e后面必须为整数。393字符常量 用一对单撇号括起来的一个字符如a,A,?,#单撇号只是字符与其他部分的分隔符/定界符,不是字符常量的一部分。不能用双引号代替撇号,如a不是字符常量。字符型常量:它是用一对单撇号括起来的一个字符如a,A,?,#等 转义字符 有些字符和命令无法通过键盘直接输入,因而借用一个符号或者数字来表示,C语言用反斜杠“”来表示转义字符的起始符,转义字符的表示有三个方
23、面:用反斜杠开头后面跟一个字母代表一个控制字符;ntrb回车换行 回车不换行 退格 水平跳格 代表字符,用代表字符。用“”后跟1到3个八进制数代表ASCII码为该八进制数的字符;用“x”后跟12个十六进制数代表ASCII码为该十六进制数的字符。101或 x41 表示A363或 xf3 表示 012或 x1A 表示 100或 x40 表示【例1】打印人民币符号¥简称字符printf(Yb=);41例2.2 main()char ch;ch=362;printf(%cn,ch);printf(chinan101tn);运行结果:屏幕显示:china A 425字符串常量hello“Programm
24、ing in C“A”“a”“把用一对双撇号括起来的零个或多个字符序列称为字符串常量。字符串以双撇号为定界符,但双撇号并不属于字符串。要在字符串插入撇号,应借助转义字符。要处理字符串I say:Goodbye!时,可以把它写为I say:Goodbye!。字符串常量 字符串中的字符数称为该字符串的长度。字符串常量在机器内存储时,系统自动在字符串的末尾加一个“字符串结束标志”,它是转义字符“0”。h e l l o 0例 字符串hello在内存中例 空串 01041011081081110注:注:字符与字符串的区别字符与字符串的区别.a a 0例 aa446符号常量【例2.3】符号常量举例#de
25、fine PRICE 30main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);运行结果:total=300 定义定义:用一个标识符代表一个常量#define 标识符 代表的常量使用符号常量的好处是:(1)含义清楚。(2)在需要改变一个常量时能做到“一改全改”。常用大写字母,与变量名区分开来。变量 变量是指在程序的运行过程中,其值可以发生变化的量变量是指在程序的运行过程中,其值可以发生变化的量声明变量的目的:声明变量的目的:(1)存放需要加工的初始值)存放需要加工的初始值(2)存放加工的中间结果)存放加工的中间结果(
26、3)存放加工的最终结果)存放加工的最终结果需要理解的三个概念需要理解的三个概念变量名、变量的存储空间、变量的值变量名、变量的存储空间、变量的值int a=3;1101 afff地址表示地址表示存储空间存储空间a变量名变量名3变量的值变量的值461.变量的声明 变量声明的格式为:数据类型符 变量名1,变量2,变量名n;例如:int x;int y;或等效为:int x,y;注意:注意:定义变量的语句必须以“;”号结束,在定义一个语句中也可以同时定义多个变量,变量之间用“,”隔开。对变量的定义可以在函数体之外,也可以在函数体或复合语句中。472变量的初始化 C语言允许在说明变量的同时对其初始化,i
27、nt sum=0;/*说明变量sum的类型为整型,初始值为0*/float pi=3.1416;char c=w;【例2.4】整型变量的定义和引用。#include stdio.hmain()int x,y,z,s;/*基本整型变量定义,一次可定义一个或多个变量*/x=3;y=4;z=5;/*整型变量的引用*/s=x+y+z;/*整型变量的引用*/printf(ns=%d,s);运行结果:运行结果:S=12注意:注意:(1)不同类型的数据在内存中占据不同长度的存储区,而且采用不同的表示方式。(2)一种数据类型对应着一个值的范围。(3)一种数据类型对应着一组允许的操作。482.2 标识符和关键字
28、-标识符一个标识符可由字母、数字和下划线组成 ;必须用字母或下划线开头;大小写要区分;不能用保留关键字作变量名;避免混淆的字母;例如:l 与 I,o 与 0.例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$1234932 个关键字:(由系统预定义,具有固定定义,不能由系统预定义,具有固定定义,不能另作定义另作定义)auto break case char constcontinue default do double elseenum extern float for
29、 gotoif int long register returnshort signed sizeof static structswitch typedef unsigned union voidvolatile while-关键字502.3 整型数在计算机中的存储方式 计算机系统的内存储器,是由许多称为字节的单元组成的,1个字节由8个二进制位(bit)构成,每位的取值为0/1。最右端的那1位称为“最低位”,编号为0;最左端的那1位称为“最高位”,而且从最低位到最高位顺序,依次编号。原码、反码和补码的相关知识计算机中,所有的整数都是以补码的形式进行存储的正整数的原码、反码和补码相同求负整数的
30、补码步骤如下:(1)求负整数的原码(2)在原码的基础上求反码(3)在反码的基础上加1原码 5的八位二进制的原码为0000 0101-5绝对值的八位二进制表示为0000 0101正整数的原码是这个数本身。负整数的原码求解方法:负整数的绝对值用二进制表示,最高位用于表示符号,1表示负整数,0表示正整数。求-5的原码:1000 0101-5原码的八位二进制表示:求5的原码:反码 反码表示法规定:正整数的反码和原码相同负整数数的反码是对该数的原码除符号位外各位取反求5的反码:5的反码的八位二进制为0000 0101求-5的反码:-5的原码的八位二进制表示为1000 0101-5的反码的八位二进制表示为
31、1111 1010补码 补码表示法规定:正整数的补码和原码相同 负整数的补码是在该数的反码的基础上加1,即最后(即最右边)一位上加1。求5的补码:5的补码的八位二进制为0000 0101求-5的补码:-5的反码的八位二进制表示为1111 1010-5的补码的八位二进制表示为1111 1011 C 语言中所有的整数都是以补码的方式存储的 例:求-50在内存中的存储结果(假定用16位来存储)。-50绝对值的原码:0000 0000 0011 0010-50的原码:1000 0000 0011 0010-50的反码:1111 1111 1100 1101-50的补码:1111 1111 1100 1
32、110 例:把内存中以补码形式存储的数据1111 1111 1111 0110转化为十进制整数。数据的补码表示:1111 1111 1111 0110除符号位外,各位取反:1000 0000 0000 1001最低位加1:1000 0000 0000 1010-10 例:把内存中以补码形式存储的数据1111 1111 1111 0110转化为十进制整数。数据的补码表示:1111 1111 1111 0110除符号位外,各位取反:1000 0000 0000 1001最低位加1:1000 0000 0000 1010-10582.4 有符号的数据类型和无符号的数据类型 类型类型标识符所占字节数取
33、值范围及精度字符型signed char1-128+127unsigned char10255整型signed int4-214 783 648+214 783 647signed short int2-32 768+32 767signed long int4-214 783 648+214 783 647unsigned int404 294 967 295unsigned short int2065535unsigned long int404 294 967 295实型float4-3.410-383.41038,67位有效数字double8-1.710-3081.710308,151
34、6位有效数字long double16-1.210-49321.7104932,1819位有效数字592.5 运算符及表达式 算术算术运算符运算符:+-*/%+-+-*/%+-关系关系运算符运算符:=!=!=逻辑逻辑运算符运算符:!&|&|位位运算符运算符:|&|&赋值赋值运算符运算符:=+=-=+=-=条件条件运算符运算符:?:?:逗号逗号运算符运算符:,地址地址运算符运算符:*&*&求字节数求字节数运算符运算符:sizeofsizeof强制类型转换:强制类型转换:(type-name(type-name)分量分量运算符运算符:.-.-下标下标运算符运算符:其他其他 :()-()-602.5
35、.1 赋值运算符和赋值表达式1赋值运算符与赋值表达式“=”就是赋值运算符。赋值表达式:由赋值运算符组成的表达式称为赋值表达式。它的一般形式:=如:x=5;赋值表达式的求解过程:将赋值运算符右侧的表达式的值赋给左侧的变量。赋值的含义是将赋值运算符右边的表达式的值存放到左边变量名标识的存储单元中。61说明:说明:(1)赋值运算符左边必须是变量,右边可以是常量、变量、函数调用或由常量、变量、函数调用组成的表达式。例如:x=10,y=x+10,y=func()都是合法的赋值表达式,12=a,2*a=3*5+55都不是合法的赋值表达式。(2)赋值符号“=”不同于数学的等号,它没有相等的含义,“=”才表示
36、相等。例如:C语言中x=x+1是合法的,而数学上不合法。(3)赋值运算时,当赋值运算符两边的数据类型不同时,将由系统自动进行类型转换。转换原则是:先将赋值号右边表达式的类型转换为左边变量的类型,然后赋值。赋值运算符的优先级仅仅高于逗号运算符,具有自右向左的结合性。应用举例【例2.8】有语句int a=2,b=5,x,y;执行x=y=a+b;后x,y的值。abxy2577【例2.9】有定义:int a,b,c;求执行表达式a=(b=65)/(c=6);后a的值。abc65610复合赋值运算符 a =b+a=a+b 相当于 a=a-b a-=b a*=b a=a*b a/=b a=a/b a%=b
37、 a=a%b 相当于 相当于 相当于 相当于 y*=a+b;y=y*(a+b)相当于【例2.10】有定义:int a=6,b=8;求执行a*=b+=12后,a的值。a6b8b+=12 b=b+12 20a*=ba=a*b 120 复合赋值运算符【例2.11】有定义:“int a=12;”,执行表达式a+=a-=a*=a后,a的值为()。A12B144 C0 D132a*=aa12a=a*a 144a-=a a=a-a 0a+=a a=a+a 0652.5.2 算术运算符和算术表达式 算术运算符包括:+(加),-(减),*(乘),/(除),%(取余),+(增1运算符或称自增运算符),-(减1运算
38、符或称自减运算符)。双目运算符的两个操作数类型可以不同,运算前遵循类型的一般算术转换规则自动转换成相同的类型,运算结果的类型与转换后操作数的类型相同。类型的一般算术转换规则的基本原则是值域较窄的类型向较宽的类型转换。算术运算符和算术表达式 算术运算符包括:算术运算符包括:+,-,*,/,%,+,-左操作数右操作数运算符13+5 13.0+5结果为整数18 结果为浮点数18.0 d 97 结果为整数3 1/2 结果为整数0 1.0/2结果为浮点数0.5 5%10 结果为整数5 10%5 结果为整数0 1/2.0 1.0/2.0 自增、自减运算符 +自增运算符,其作用是使变量的值自加1-自减运算符
39、,其作用是使变量的值自减1 +i,-i 前缀运算:在使用i之前,先使i的值自增(或自减)1 i+,i-后缀运算:在使用i之后,再使i的值自增(或自减)1【例】有定义:int i=8,j;求执行 j=i+;后i,j的值i8j89【例】有定义:int i=8,j;求执行 j=+i;后i,j的值ij8 99应用举例应用举例【例2.12】假设变量i,j,k的值分别为3,5和3,求执行表达式“m=(+k)*j;”和“n=(i+)*j;”中的m和n的值。ijkmn353 420154应用举例应用举例习题习题1、下列算术运算符中,只能用于、下列算术运算符中,只能用于整型数据的是(整型数据的是()。)。A-B
40、+C/D%习题2、假设有以下变量定义:假设有以下变量定义:int k=7,x=12;则能使值为则能使值为3的表达式是(的表达式是()Ax%=(k%=5)Bx%=(x-k%5)Cx%=k+k%5 D(k%=5)(x%=k)D20C2702.5.3 长度测试运算符长度测试运算符sizeof长度测试运算符sizeof可用来测试某个类型的变量所占用计算机内存空间的字节长度。格式为:sizeof(类型名)例:main()printf(char:%d bytesn,sizeof(char);printf(short:%d bytesn,sizeof(short);printf(int:%d bytesn,
41、sizeof(int);printf(long:%d bytesn,sizeof(long);printf(float:%d bytesn,sizeof(float);printf(double:%d bytesn,sizeof(double);return 0;712.5.4 关系运算符和关系表达式1关系运算符关系运算实际上就是比较运算,即比较两个运算对象值的大小。符号优先级(大于),=(大于或等于)高=(等于),!=(不等于)低注意:注意:(1)关系运算符为双目运算符,结合方向为自左至右。(2)关系运算符的结果为真(1)或假(0),C语言中没有逻辑值。(3)算术运算符高于关系运算符。72
42、2.关系表达式 由关系运算符、运算对象以及小括号组成的表达式称为关系表达式。当表达式成立时,返回值为整型值1;当表达式不成立时,返回值为整型值0。ca+b 等同于c(a+b)a=bc等同于a=(bc)ab!=c等同于(ab)!=c【例2.14】请注意下列给出的表达式及其返回值。65的返回值是0。若a=3,b=5,则a=3+10的返回值是0。若x=90,则x53;printf(%dn,x);0【例2.16】已知a=3,b=2,c=1,则表达式ab=c的值为()。1 对于关系表达式要注意如下事项:一个关系式中含有多个关系表达式时,要注意与数学式的区别。应避免对实数作相等或不等的判断,因为实数在内中
43、存放时有一定的误差。逻辑运算符与逻辑表达式&|!逻辑运算符:用逻辑运算符将关系表达式连接起来就构成逻辑表达式。逻辑表达式:【例2.17】分析逻辑表达式!(53)&(23)!(1)0逻辑表达式的运算结果:1(“真”),0(“假”)a&b x|y !z 逻辑表达式具有唯一真值的变量2、逻辑运算符与逻辑表达式 C语言逻辑表达式的特性:在计算逻辑表达式时,只有在必需执行下一个表达式才能求解时,才求该表达式。逻辑与(&)运算表达式中,只要前面一个表达式被判定为“假”,系统不再判定其后的表达式,整个表达式的值为0。a+&b+逻辑或(|)运算表达式中,只要前面一个表达式被判定为“真”,系统不再判定或求解其后
44、的表达式,整个表达式的值为1。a=0,b=0a+|b+a=1,b=1【例2.19】定义:int i=10,s=0;执行下列语句s=+s|+i;后s和i的值是多少?i10s0 175【例2.18】已知year为整型变量,不能使表达式(year%4=0&year%100!=0)|(year%400=0)的值为“真”的数据是()。A1990B1992C1996D2000 A【例2.19】定义:“int i=10,s=0;”,分别执行下列语句,s和i的值是多少?s=+s|+i;答案为:s=1,i=10【例2.20】定义:“int x=0,y=0,z=0;”,分别执行下列语句后,各变量的值是多少?+x&
45、+y|+z 答案为:x=1,y=1,z=0 应用举例已知已知A,B,C,D四人中有一个人是小偷,并且,这四个人中每个四人中有一个人是小偷,并且,这四个人中每个人要么说真话,要么说假话。在审讯过程中,这四个人分别回答如人要么说真话,要么说假话。在审讯过程中,这四个人分别回答如下:下:A说:说:B没有偷,是没有偷,是D偷的。偷的。B说:我没有偷,是说:我没有偷,是C偷的。偷的。C说:说:A没有偷,是没有偷,是B偷的。偷的。D说:我没有偷。说:我没有偷。现要求根据这四个人的回答,写出能确定谁是小偷的条件。现要求根据这四个人的回答,写出能确定谁是小偷的条件。int a,b,c,d;b+d=1真真b+d
46、=1假假b+d=1b+cb+ca+ba+bb+c=1b+c=1a+b+c+da+b+c+da+b+c+d=1&b+d0 1=1b+d1 0=1=1=1=1=1=1=1772.5.6 条件运算符与条件运算表达式条件运算符“?:”是C语言提供的惟一一个三目运算符。条件运算表达式的一般格式为:表达式1?表达式2:表达式3【例2.20】从键盘读入一个整数赋给x,如果x大于等于0,把x的平方赋给y,否则把x的2倍赋给y。#include stdio.hvoid main()int x,y;scanf(%d,&x);y=x=0?x*x:2*x;printf(y=%dn,y);【例2.21】已定义“int
47、x=4,b=5,y;”,执行语句:y=+xb?x:b-+x?+b:x后,x、b、y的值分别为_。答案为x=6,b=4,y=6【例2.24】分析下列程序的输出结果。#include stdio.hvoid main()int i,j,k,a=3,b=2;i=(-a=b+)?-a:+b;j=a+;k=+b;printf(i=%d,j=%d,k=%dn,i,j,k);i=1,j=1,k=4【例2.25】请编制程序,任意输入两个整数,输出其中较小者。main()int n1,n2,min;clrscr();printf(input two number(n1,n2):);scanf(%d,%d,&n1
48、,&n2);min=(n1n2)?n2:n1;printf(min=%d,min);运行时,按屏幕提示操作:input two number(n1,n2):3,5结果为:min=3【例2.26】编制程序,输入大写字母,则输出小写字母;输入小写字母,则输出大写字母。main()char ch;printf(input any letter:);scanf(%c,&ch);ch=(ch=A)&(chb?x:b-+x?+b:x后,x、b、y的值分别为_。xyb45554666习题:找出三个整形数据的最大数int a,b,c ;scanf(%d%d%d,&a,&b,&c);,maxab?a :b ;(
49、ac?a:c)(bc?b:c)max=792.5.7 逗号运算符与逗号表达式 逗号运算符,又称“顺序求值运算符”。逗号表达式的一般形式为:表达式1,表达式2或表达式1,表达式2,表达式3,表达式n;运算过程是:自左至右依次计算表达式1,表达式2,表达式n的值,而整个逗号表达式的值取最后的表达式n的值。【例2.27】分析下列逗号表达式的计算过程及结果。3+5,6*3 表达式的值是18。a=(3+5,6*3)a的值是18,此为赋值表达式。a=3+5,6*3 a的值是8,表达式的值是18(先作赋值运算)。a=3+5,6*a a的值是8,表达式的值是48。(a=3+5,6*a),a+100 a的值是8
50、,表达式的值是108。使用逗号表达式应该注意如下事项:逗号表达式可以和另外一个表达式组成一个新的逗号表达式。并不是在所有出现逗号的地方都组成逗号表达式。如在变量说明中和函数参数表中的逗号只是用做个变量之间的间隔符。802.5.7 逗号运算符与逗号表达式【例2.27】下面是给字符变量赋值的六种方式,仔细体会字符数据的表示方法和逗号表达式的用法。#include stdio.h main()char c1,c2,c3,c4,c5,c6;c1=A,c2=x41,c3=101,c4=65,c5=0 x41,c6=0101;printf(%c,%c,%c,%c,%c,%c n,c1,c2,c3,c4,c