书签 分享 收藏 举报 版权申诉 / 175
上传文档赚钱

类型工程类C语言程序设计优秀课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4308684
  • 上传时间:2022-11-28
  • 格式:PPT
  • 页数:175
  • 大小:470.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《工程类C语言程序设计优秀课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    工程 语言程序设计 优秀 课件
    资源描述:

    1、2021/02/2512021/02/252&C语言的发展与特点&C语言的基本程序结构&C语言程序的开发过程&C语言的基本词法&算法2021/02/253l汇编语言依赖于计算机硬件,程序的可读性和可移植性差;l一般高级语言难以实现汇编语言的某些功能如对内存地址的操作、位操作等。2021/02/254l1960年 ALGOL 60;l1963年 英国剑桥大学提出CPL语言;l1967年 Matin Richards提出BCPL语言;l1970年 Ken Thompson提出B语言;l1972-1973 Dennis.M.Ritchie提出C语言;lBrian W.Kernighan 和D.M.R

    2、itchie介绍标准C;l1987年美国国家标准化协会提出ANSI C。2021/02/255l简洁、紧凑,使用方便、灵活;l允许直接访问地址,能进行位操作;l运算符丰富;l数据类型丰富;l结构化程序语言,便于实现程序的模块化;l程序执行效率高,可移植性好。2021/02/256lC程序是由函数构成的,每个C程序有且只有一个主函数(main),可包含若干其他函数;l每个函数由首部与函数体组成;首部包括函数类型、函数名、函数参数(形参)、参数类型,int max(int x,int y)函数体包括声明部分和执行部分。2021/02/257lmain函数位置任意,但总是从main函数开始执行,在m

    3、ain函数中结束;lC程序书写自由,每个语句后需加一个分号;l主函数可调用任何非主函数,非主函数之间可互相调用,但不能调用主函数;lC语言本身没有输入输出语句;l用/*/进行注释。2021/02/258l编辑l编译l链接 计算机只能识别和执行由0和1组成的二进制的指令,为了使计算机能执行高级语言源程序,必须先用“编译程序”把源程序翻译成二进制形式的“目标程序”,然后将该目标程序与系统的函数库和其他目标程序连接成为可执行的目标程序。2021/02/259l字符集:包括大小写英文字母52个、数字10个、键盘符号33个、转义字符。l标识符:是用户自定义的一组字符序列,用来表示程序中需要辨认的对象名称

    4、,如符号常量、变量、数组、函数。规定:n 标识符是由字母或下划线开头的字母、数字、下划线组成的一串符号,最长不能超过32个字符;n大小写字母有区别,大写字母只用来定义宏名,其他都采用小写字母表示。2021/02/2510l保留字:32个,有特殊含义,主要用于构成语句,进行存储类型和数据类型的定义,不允许用户作为自定义标识符使用;l词类:常量、变量、运算符、函数、表达示、保留字;l语句:完成特定的操作,语句的有机组合序列完成指定的功能;2021/02/2511l赋值语句;l函数调用语句;l表达式语句;l流程控制语句;l复合语句;l空语句;2021/02/2512著名计算机科学家沃思提出公式:程序

    5、=数据结构+算法v数据结构:对数据的描述即指定数据的类型和数据的组织形式;v算法:对操作的描述即操作步骤。2021/02/2513判定2000-2500年中的每一年是否闰年。设定y为被检测的年份。算法如下:lS1:2000=ylS2:若y不能被4整除,则输出y“不是闰年”,然后转至S6lS3:若y能被4整除,不能被100整除,则输出y“是闰年”,然后转至S6lS4:若y能被100整除,又能被400整除,输出y“是闰年”;否则输出y“不是闰年”,然后转至S6lS5:输出y“不是闰年”lS6:y+1=ylS7:当y2500,算法停止;2021/02/2514l有穷性;l确定性;l有零个或多个输入;

    6、l有一个或多个输出;l有效性2021/02/2515l用流程图表示算法;l用伪代码表示算法;l用计算机语言表示算法。2021/02/2516&C语言的数据类型;&C语言的运算符与表达式;2021/02/2517数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型(void)整型整型(int)字符型字符型(char)实型(浮点型)实型(浮点型)数组类型数组类型结构体类型结构体类型(struct)共用体类型(联合类型)共用体类型(联合类型)(union)枚举类型枚举类型单精度型单精度型(float)双精类型双精类型(double)2021/02/2518 在程序运行过程中,

    7、其值不能被改变的量称为常量。C语言中规定的常量类型有以下五种:整型常量、实型常量、字符常量、字符串常量和符号常量。2021/02/2519 1.整型常量的表示方法:l十进制整数:无前缀,数码取值为09,如123,-456。l八进制整数:前缀为0,数码取值为07,如0123,-011。八进制数与十进制数的转换方法如下:(0123)8=1*82+2*81+3*80=64+16+3=(83)102021/02/2520l十六进制整数:前缀0X或0 x,数码取值为09,AF或af,如0 x2A,-0 x12。十六进制数与十进制数转换方法:(-0 x12)16=-(1*161+2*160)=-(16+2

    8、)=(-18)102.整型常量的后缀:l加后缀L或l,表示长整型数。l加后缀u,表示无符号数。2021/02/2521n实型常量即实数又称为浮点数,C语言中实数只采用十进制,有两种表示形式:l小数形式:由数码09和小数点组成(注意必须有小数点),如.123,-123.4567;l指数形式:由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数),如 -2.1e2,2.1e-2。2021/02/2522C语言中,字符常量是用单引号括起来的单个字符,如a,$等。转义字符是一种特殊形式的字符常量,它是以一个“”开头的字符序列。2021/02/2523字符形式含义n换行,将当前位置移到下一行开头t水

    9、平制表(跳到下一个tab位置)b退格,将当前位置移到前一列r回车,将当前位置移到本行开头f换页,将当前位置移到下页开头反斜杠字符“”单引号字符”双引号字符ddd1到3位8进制数所代表的ASC字符xhh1到2位16进制数所代表的ASC 字符2021/02/2524main()printf(“abctderftgn”);printf(“htibbjk”);2021/02/2525 程序运行后在打印机上得到以下结果:fabcgdehjik 注意在显示屏上最后看到结果以与上述打印结果不同,是:fgdehjk2021/02/2526 C语言中,字符串变量是由一对双引号括起来的字符序列,如“China”,

    10、“$3.232”。注意:不要将字符常量与字符串常量混淆。注意:不要将字符常量与字符串常量混淆。2021/02/2527l字符常量是由单引号括起来的,字符串常量是由双引号括起来的;l字符常量只能是单个字符,字符串常量则可是零个或多个字符;l可把一个字符常量赋予一个字符变量,但不能把一个字符串变量赋予一个字符变量,C语言中没有相应的字符串变量,可用字符数组来存放字符串常量;l字符常量占一个字节的内存,字符串常量占的内存字节数等于字符串中字节数加1,最后一个字节存放字符0作为字符串结束标志。2021/02/2528 C语言中,可用一个标识符来表示一个常量,称为符号常量又称为宏定义,使用前须先定义,其

    11、定义规则为:#define 标识符 常量2021/02/2529#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(“total=%d”,total);使用符号常量的好处:使用符号常量的好处:含义清楚;含义清楚;在需要改变一个常量在需要改变一个常量时能做到时能做到“一改全改一改全改”;2021/02/2530 变量是指在程序运行中其值是变化的量。一个变量应该有一个变量名,在内存中占据一定的存储单元,在该存储单元中存放变量的值。3变量值变量值a变量名变量名存储单元存储单元图图2.12021/02/2531语言中,要求

    12、对变量作强制定义,即“先定义,后使用”。l便于发现错误;l为每一个变量指定确定类型,在编译时就能为其分配相应的存储单元。2021/02/2532 整型数据在内存中是以二进制形式存放的。若定义了一个整型变量i:int i=10;图3.2(a)是数据存放的示意图,图3.2(b)是数据在内存中实际存放的情况;i10(a)i0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0(b)图图2.22021/02/2533 实际上,整型数值是以补码表示的。一个正数的补码与其原码相同,求负数的补码方法:将该数的绝对值的二进制形式按位取反再加1。例如求-10的补码:0 0 0 0 0 0 0 0 0 0

    13、 0 0 1 0 1 01 1 1 1 1 1 1 1 1 1 1 1 0 1 0 11 1 1 1 1 1 1 1 1 1 1 1 0 1 1 010的原码的原码取反取反再加再加1得得-10的的补码补码2021/02/2534l有符号基本整型signed intl有符号短整型 signed short intl有符号长整型 signed long intl无符号基本型 unsigned intl无符号短整型 unsigned short intl无符号长整形 unsigned long int.整型变量的分类:2021/02/2535类型说明符数的取值范围字节数signed int-3276

    14、832767 即-215(215-1)2unsigned int065535 即 0(216-1)2signed short int-3276832767 即-215(215-1)2unsigned short int065535 即 0(216-1)2signed long int-21474836482147483647 即-231(231-1)4unsigned long int04294967295 即 0(232-1)4表表2.1整型数据的所占的内存字节数与取值范围整型数据的所占的内存字节数与取值范围2021/02/2536 类型说明符 变量名标识符,变量名标识符,.;如:int a

    15、,b,c;unsigned short x,y;2021/02/2537见教材P34例2.32021/02/2538l单精度型 float 占4个字节内存,提供7位有效数字,l双精度型 double 占8个字节内存,提供16位有效数字。整数没有误差,实数有精度,有误差,提供6位小数,7位有效数字。2021/02/2539格式和书写规则同整型变量说明相同,如:float s,t;double h,k;2021/02/2540main()float a,b;a=123456.789e5;b=a+20;printf(“%f,%f”,a,b);结果:结果:12345678848.000000,1234

    16、5678848.0000002021/02/2541 b的理论值应是12345678920,而一个实型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确表示该数,从结果看出,把20加在后几位上,是无意义的,应当避免将一个很大的数与一个很小的数直接相加减,否则就会“丢失”小的数。与此类似,用程序计算1.0/3*3的结果并不等于1。2021/02/2542 字符变量用来存放字符常量,只能存放一个字符,占用1个字节内存。字符变量定义如下:char c1,c2;2021/02/2543 将一个字符常量放到一个字符变量中,不是把该字符本身放到内存单元中,而是将该字符的相应的ASC 代码

    17、存放在存储单元中,如字符a的ASC 代码为97,b为98,9798c1c20 1 1 0 0 0 0 10 1 1 0 0 0 1 0c1c1图图2.32021/02/2544 在内存中,字符数据以ASC码存储,它的存储形式与整数存储形式类似,C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型量。在输出时,允许把字符变量按整型量输出,也允许把整型变量按字符型量输出。注意:当整形变量按字符型量处理时,只有低八位参与处理。2021/02/2545main()char c1,c2;c1=97;c2=98;printf(“%c,%cn”,c1,c2);printf(“%d,%dn”,c1,c2)

    18、;结果:a,b97,982021/02/2546 Turbo C将字符变量中的最高位作为符号位,也就是将字符处理成带符号的整数,即signed char型。它的取值范围是-128127。如果使用ASC码为0127间的字符,由于字节中最高位为0,因此用%d输出时,输出一个正整数。如果使用ASC码为128255间的字符,由于在字节中最高位为1,用%d格式符输出时,就会得到一个负整数。例如:main()char c=130;printf(“%d”,c);得到-126。如果不想按有符号处理,可以将变量定义为unsigned char类型,这时其取值范围是0255。signed char和unsigne

    19、d char 相仿,但它只有一个字节。2021/02/2547main()char c1=130;unsigned char c2=130;printf(“c1=%d,c2=%dn”,c1,c2);结果:结果:c1=-126,c2=1302021/02/2548 程序中常需要对一些变量预先设置初值。C语言允许在定义变量的同时使变量初始化,如int a=3;float f=3.56;char c=a;2021/02/2549 也可以使被定义的变量的一部分赋初值,如:int a,b,c=5;如果对几个变量赋予初值3,应写成int a=3,b=3,c=3;不能写成:int a=b=c=3;int a

    20、=3;相当于:int a;a=3;2021/02/2550l运算符是一些特定的符号,它用来对数据进行某些特定的操作;l运算对象(操作数)是用来进行运算的数据,包括常量、变量等;l表达式是用运算符将运算对象连接起来的式子。如1+2,1和2为运算对象,而1+2就是表达式。2021/02/2551l算术运算符算术运算符 用于各类数值计算。运算符有:加(+)、减(-)、乘(*)、除(/)、求余(或称模运运算,%)、自增(+)、自减(-)。l关系运算符关系运算符 用于比较运算。运算符主要有:大于()、小于(=)、小于等于(=)和不等于(!=)。1.运算符的种类运算符的种类2021/02/2552l逻辑运

    21、算符逻辑运算符 用于逻辑运算。运算符有:与(&)、或(|)、非(!)。l位操作运算符位操作运算符 参与运算的量,按二进制位进行运算。运算符有:按位与(&)、按位或(|)、取反()、按位异或()、左移()。l赋值运算符赋值运算符 用于赋值运算。赋值运算符有:简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)、复合位运算赋值(&=,|=,=,=)等三类。2021/02/2553l条件运算符条件运算符 是一个三目运算符,用于条件求值。运算符有:(?:)。l逗号运算符逗号运算符 用于把若干表达式组合成一个表达式。运算符有:(,)。l指针运算符指针运算符 用于取内容(*)和取地址(&)两种运算

    22、。l求字节运算符求字节运算符 用于数据类型所占的字节数(sizeof)。2021/02/2554l强制类型转换运算符强制类型转换运算符 可以利用强制类型转换运算符将一个表 达式转换成所需类型。其一般形式为:(类型名)(表达式)如(double)a;(int)(x+y);(float)(5%3)l其他运算符其他运算符 其他运算符有:括号()、数组下标、成员运算符.和用指针访问结构体成员的指向运算符-。2021/02/2555 C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级低的进行运算。如求表达式x+y*z的值:y的值左侧为加号,右侧为乘号,而乘

    23、号优先于加号,因此相当于x+(y*z),即先进行乘法运算,然后再进行加法运算。2021/02/2556 C语言的运算符不仅具有不同的优先级,还有结合性的问题。在表达式的运算过程中,各运算对象参与运算的先后顺序不仅要遵循运算符优先级别的规定,还要受运算符结合性的制约,当一个运算对象两侧的运算符优先级别相同时,需按运算符的结合性来处理,以便确定是自左向右进行运算还是自右向左进行运算。2021/02/2557 C语言中运算符的结合性分为两种:即左结合性(自左向右)和右结合性(自右向左)。例如:算术运算符就是左结合性的运算符算术运算符就是左结合性的运算符 表达式:x-y+z,运算对象y的左侧运算符“-

    24、”和右侧运算符“+”优先级相同,应按结合性来进行自左向右的运算,即先执行x-y运算,再执行+z的运算。赋值运算符是右结合性的运算符赋值运算符是右结合性的运算符 表达式:x=y=z,由于赋值运算符“=”的右结合性,所以先执行y=z运算,再执行x=(y=z)运算。2021/02/2558优先级别运算符运算形式结合方向含义1().-(e)aex.yp-x自左至右圆括号数组下标运算符结构体成员运算符指向结构体成员运算符2-+-!(t)*&sizeof-e+x或x+!et(t)e*p&xsizeof(t)自右至左负号运算符自增运算符和自减运算符逻辑非运算符按位取反运算符强制类型转换运算符指针运算符,由地

    25、址求内容求变量地址的运算符求某类型变量的长度运算符3*/%e1*e2自左至右乘、除、求余运算符表表2.2 C语言各运算符的优先级别与结合方向语言各运算符的优先级别与结合方向2021/02/25594+-e1+e2自左至右加法、减法运算符5e1e2自左至右左移、右移运算符6 =e1=单目单目运算符算术运算符算术运算符关系运算符运算符逻辑运算符逻辑运算符(不包括不包括!)条件运算符条件运算符赋值运算符赋值运算符逗号运算符逗号运算符 优先级别由上到下递减。优先级别由上到下递减。特殊运算符优先级最高,特殊运算符优先级最高,逗号运算符优先级最低。逗号运算符优先级最低。位运算符的优先级比较分位运算符的优先

    26、级比较分散散(有的在算术运算符之前有的在算术运算符之前(如如),有的在关系运算符之有的在关系运算符之前前(如如),有的在关系有的在关系运算符之后运算符之后(如如&、|)。2021/02/2562l 1.1.基本的算术运算符基本的算术运算符 基本的算术运算符有:加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)五种。两个整数相除的结果为整数,如5/3的结果为1,舍去小数部分。但是,如果除数或被除数中有一个为负值,多数机器采取“向零取整”的方法,即5/3=1,-5/3=-1,取整后向零靠拢。求余运算符“%”要求参与运算的量均为整型,运算结果等于两数相除后的余数,余数的符号取决于被除数的

    27、符号,如-100%3余数为-1,100%-3余数为1。2021/02/2563+i,-i 在使用i之前,先使i的值加(减)1i+,i-在使用i之后,再使i的值加(减)1 粗略地看,+i和i+的作用相当于i=i+1,但+i和i+不同之处在于+i是先执行i=i+1后,再使用i的值;而i+是先使用i的值后,再执行i=i+1。2021/02/2564 如果i的原值等于3,执行下面的赋值语句:j=+i;(i的值先变为4,再赋给j,j的值为4)j=i+;(先将i的值3赋给j,j的值变为3,然后i的值变为4)2021/02/2565P35例2.5main()int c=5;printf(“%d,%d,%dn

    28、”,c+=c+,c+8,+c);printf(“%dn”,c+=c+,c+8,+c);注意注意:Turbo C规定,规定,printf()函数中出现多个表达式输函数中出现多个表达式输出项时,先按从右到左的顺序计算各表达式的值,然后出项时,先按从右到左的顺序计算各表达式的值,然后再从左到右输出结果。本例中先计算再从左到右输出结果。本例中先计算+c,得得c=6,然后计然后计算算c+8得得14,最后计算,最后计算c+=c+,得得c=13。2021/02/2566l1.有如下两个程序,试比较结果 main()int i=3;printf(“%d,%dn”,(i+)+(i+)+(i+),i);main(

    29、)int i=3,k;k=(i+)+(i+)+(i+);printf(“%d,%dn”,k,i);补充:补充:结果:结果:12,312,3结结果:果:9,69,62021/02/2567l2.当出现难以区分的若干个+或-组成运算符串时,C语言规定,自左向右取尽可以多的符号组成运算符。例如:设整型变量x,y均为3,则:x+y 应理解为(x+)+y,结果为6,x值 为4,y值不变 x-y 应理解为(x-)-y,结果为0,x值 为2,y值不变2021/02/2568l单目算术运算符(-、+、-)优先于*、/、%算术运算符优先于+、-算术运算符;l同级单目算术运算符的结合性自右向左;l同级双目算术运算

    30、符的结合性自左向右。2021/02/2569 用算术运算符和括号将运算对象连接起来的式子,称为算术表达式。例如下面的表达式为算术表达式:a*b/c-1.5+a 如果一个算术运算符的两侧的数据类型不同,则按下面所述的内容先自动进行类型转换,使二者具有同一类型,然后再进行运算。2021/02/2570 整型(包括 int,short,long,unsigned int,unsigned short,unsigned long)和实型(包括 float,double)数据可以混合运算。而字符型数据可以与整型通用,因此整型、实型和字符型数据间可以混合运算,在进行运算时,不同类型 的数据要先换成同一类型

    31、,然后进行运算,转换规则如下图所示:2021/02/2571doublefloatlongunsignedintchar,short高高低低 图中横向向左的箭头表示必须的转换,如字符数据必须先图中横向向左的箭头表示必须的转换,如字符数据必须先转换为整数,转换为整数,short型转换为型转换为int,float型数据在运算时一律先转型数据在运算时一律先转换为换为double型,以提高精度型,以提高精度(即使是两个即使是两个float型数据相加,也型数据相加,也先都化成先都化成double型,然后再相加型,然后再相加)。纵向的箭头表示当运算为不同类型时转换的方向。例如纵向的箭头表示当运算为不同类型

    32、时转换的方向。例如int型与型与double型数据进行运算,先将型数据进行运算,先将int型数据转换为型数据转换为double型,型,然后在两个同类型然后在两个同类型(double型型)数据间进行运算,结果为数据间进行运算,结果为double型。注意箭头方向只表示数据类型级别的高低,由低向高转型。注意箭头方向只表示数据类型级别的高低,由低向高转换。不要理解为换。不要理解为int型先转换为型先转换为unsigned int型,再转成型,再转成long型,型,再转成再转成double型。如果一个型。如果一个int型数据与一个型数据与一个double型数据运型数据运算,是直接将算,是直接将int型转

    33、换成型转换成double型。型。2021/02/2572 假设已指定i为int型变量,f为float型变量,d为double型变量,e为long型变量,有以下式子:10+a+i*f-d/e在计算机执行时从左至右扫描,运算次序为:在计算机执行时从左至右扫描,运算次序为:进行进行10+a的运算,先将的运算,先将a转换为整数转换为整数97,运算结果为运算结果为107;由于由于“*”比比“+”优先,先进行优先,先进行i*f的运算。先将的运算。先将i与与f都都转换成转换成double型,运算结果为型,运算结果为double型;型;整数整数107与与i*f的结果相加。先将整数的结果相加。先将整数107转换

    34、成转换成double型,再相加,型,再相加,结果为结果为double型;型;将变量将变量e化为化为double型,型,d/e结果为结果为double型;型;将将10+a+i*f的结果与的结果与d/e的商相减,结果的商相减,结果为为double型型。2021/02/2573main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:结果:x=3.600000,i=3 上述类型转换由系统自动进行的,另一种类型转上述类型转换由系统自动进行的,另一种类型转换为强制类型转换。换为强制类型转换。需要说明的是在强制类型转换时,得到一个所需需要说

    35、明的是在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。如:类型的中间变量,原来变量的类型未发生变化。如:(int)x;如果如果x原来指定为原来指定为float型,进行强制类型运算后型,进行强制类型运算后得一一个得一一个int型的中间变量,它的值等于型的中间变量,它的值等于x 的整数部分,的整数部分,而而x的类型不变的类型不变(仍为仍为float型型)。见下例。见下例2.9:2021/02/2574所谓“关系运算”实际上是“比较运算”。将两个值进行比较,判断其比较的结果是否符合给定的条件。例如,a3是一个关系表达式,大于号()是一个关系运算符,如果a的值为5,则满足给定的

    36、“a3”条件,因此关系表达式的值为逻辑值“真”(即“条件满足”),用整数“1”来表示;如果a的值为2,不满足“a3”的条件,则称关系表达式的值为逻辑值“假”,用整数“0”来表示。2021/02/2575C语言提供下面语言提供下面6种关系运算符:种关系运算符:(小于小于)(大于大于)=(大于等于大于等于)=(等于等于)!=(不等于不等于)优先级相同优先级相同(高)高)优先级相同优先级相同(低)低)关于优先顺序:关于优先顺序:前前4 4种关系运算符种关系运算符(、=)的优先级别相同,后的优先级别相同,后2种也相同。前种也相同。前4种高于后种高于后2种;种;关系运算符的优先级低于算术运算符;关系运算

    37、符的优先级低于算术运算符;关系运算符的优先级高于赋值运算符。关系运算符的优先级高于赋值运算符。2021/02/2576例如:ca+b 等效于c(a+b)ab=c 等效于(ab)=ca=bc 等效于a=(bc 等效于a=(bc)2021/02/2577 用关系运算符将两个表达式(可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称为关系表达式。关系表达式的值是一个逻辑值,即“真”或“假”。例如,关系表达式“5=3”的值为“假”,“5=0”的值为“真”。C语言没有逻辑型数据类型,以1代表“真”,以0代表“假”。2021/02/2578a=3,b=2,c=1,则:则:

    38、关系表达式“ab”的值为“真”,表达式的值为1;关系表达式“(ab)=c”的值为“真”(因为ab的值为1,等于c的值),表达式的值为1;关系表达式“b+cb d的值为1 f=abc f 的值为0(因为“”运算符是自左向 右的结合方向,先执行“ab”得值为 1,再执行关系 运算“1c”,得值 0,赋给f)。2021/02/2579main()int a=5,b=3;float x=3.14,y=6.53;printf(“%d,%dn”,a+b!=a-b,xb)&(xy),(ay)。“!”是单目运算符,只要求有一个运算量,如!(ab)。l1.逻辑运算符及其优先次序逻辑运算符及其优先次序2021/0

    39、2/2581逻辑运算举例如下:a&b 若a、b为真,则a&b为真。a|b 若a、b之一为真,则a|b为真。!a 若a为真,则!a为假。ab!a!ba&ba|b真真假假真真真假假真假真假真真假假真假假真真假假表表2.3逻辑运算的真值表逻辑运算的真值表2021/02/2582 在一个逻辑表达式中如果包含多个逻辑运算符,如!a&b|xy&c,按以下的优先顺序和结合性:l!优先于双目算术运算符优先于关系运算符优先于&优先于|;l单目逻辑运算符!和单目算术运算符同级别,结合性自右向左;双目逻辑运算符的结合性是自左向右。2021/02/2583 如前所述,逻辑表达式的值应该是一个逻辑量“真”或“假”。C语

    40、言编译系统给出逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。即将一个非0的数值认作“真”。例如:若a=4,则!a的值为0。因为a的值为非0,被认作“真”,对它进行“非”运算,得“假”,“假”以0来代表。2021/02/2584l若a=4,b=5,则a&b的值为1。因为a和b均为非0,被认为是“真”,因此a&b的值也为“真”,值为1。la、b值同前,a|b的值为la、b值同前,!a|b的值为l4&0|2的值为 结论:由系统给出的逻辑运算结果不是就是1,不可能是其他数值。而在逻辑表达式中作为参加逻辑运算的运算对象可以是0(“假”

    41、)或任何非0的数值(按“真”)对待。如果在一个表达式中不同位置上出现数值,应区分哪些是作为数值运算或关系运逄的对象,哪些作为逻辑运算的对象。例如1112021/02/258553&83”(因为关系运算符优先于&)。在关系运算符两侧的5和3作为数值参加关系运算,“53”的值为1。再进行“1&84-!0”运算,8的左侧为“&”,右侧为“”运算符,根据优先规则,应先进行“”的运算,即先进行“84-!0”的运算。现在4的左侧为“”,右侧为“-”运算符,而“-”优先于“”,因此应先进行“4-!0”的运算,由于“!”级别高,因此先进行“!0”的运算,得到结果1。然后进行“4-1”的运算,得结果3,再进行“

    42、8x)&(b=yz);printf(“a=%d,b=%d,c=%dn”,a,b,c);结果:a=0,b=6,c=0lmain()int m,n,l,a,b,c,d;m=n=a=b=c=d=0;l=(m=a=b)|(n=c=d);printf(“m=%d,n=%d,l=%dn”,m,n,l);结果:m=1,n=0,l=12021/02/2588l1.简单赋值运算符简单赋值运算符 赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。如“a=3”的作用就是执行一次赋值运算,把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。如:x=a+b*c。2021/02/2589 在赋值符“=”

    43、之前加上某些二目运算符可构成复合赋值运算符。复合算术赋值运算符有:+=、-=、*=、/=、%=五种。复合位运算赋值运算符有:=、&=、=、|=五种。2021/02/2590 由赋值运算符将一个变量和一个表达式连接起来的的式子称为“赋值表达式”。其一般形式为:l赋值表达式的求解过程:将赋值运算符右侧的“表达式”的值赋给左侧的变量,赋值表达式的值就是被赋值的变量的值。如“a=5”这个赋值表达式的值为5(变量a的值也为5)。2021/02/2591l 上述赋值表达式的一般形式中的“表达式”,又可以是一个赋值表达式。如a=(b=5),括号内的“b=5”是一个赋值表达式,它的值等于5。“a=(b=5)”

    44、相当于“b=5”和“a=b”两个赋值表达式,因此a的值等于5,整个赋值表达式的值也等于5。我们知道赋值运算符按照“自右向左”的结合顺序,因此,“b=5”外面的括号可以不要,即“a=(b=5)”和“a=b=5”等价,都是先求“b=5”的值(得5),然后再赋给a,下面举几个例子:2021/02/2592a=b=c=5 (赋值表达式值为5,a、b、c 值均为5)a=5+(c=6)(表达式值为11,a值为11,c 值为6)a=(b=4)+(c=6)(表达式值为10,a值为10,b值为4,c 值为 6)a=(b=10)/(c=2)(表达式值为5,a值为5,b 值为10,值为2)2021/02/2593l

    45、 赋值表达式中可包含复合的赋值运算符。如:a+=a-=a*a,如果a的初值为12,此赋值表达式的求解步骤如下:a)先进行“a-=a*a”运算,它相当于 a=a-a*a=12-144=-132;b)再进行“a+=-132”运算,相当于 a=a+(-132)=-132-132=-264。2021/02/2594 如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。l将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。如i为整型变量,执行“i=3.56”的结果是使i的值为3,在内存中以整数形式存储。I.将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存

    46、储到变量中,如将23赋给float变量f,即f=23,先将23转换成23.00000,再存储在f中。如将23赋给double型变量d,即d=23,则将23补足有效位数字为23.000,然后以双精度浮点数形式存储到d中。2021/02/2595l将一个double型数据赋给float变量时,截取前面7位有效数字,存放到float变量的存储单元中,但应注意数值取值范围不以溢出。l字符型数据赋给整型变量时,由于字符只占有1个字节,而整型变量占2个字节,因此将字符数据(8位)放到整型变量低8位中,整型变量高8位有两种情况:若是将unsigned char数据赋给整型变量,高8位补0。若是将char数据

    47、赋给整型变量,如果字符最高位为0(0127),则整型变量高8位补0;如果字符最高位为1(-128-1),则整型变量高8 位补1。2021/02/2596l将一个int、short、long型数据赋给一个char型变量时,只将其8位原封不动地送到char型变量(即截断)。l将int型数据赋给long型变量时,要进行符号扩展,将整型数据的16位送到long型低16位中,如果int型数据为正值(符号位为0),则long型变量的高16位补0;如果int型变量为负值(符号位为1),则long型变量的高16位补1,以保持数值不变。l将unsigned int型数据赋给long型变量时,不存在符号扩展问题,

    48、只需将高位补0。l将一个unsigned 类型数据赋给一个占字节数相同的signed 变量(如:unsigned int=int,unsigned long=long,unsigned short=short,unsigned char=char),将unsigned型数据的2021/02/2597l内存中各位原样送到signed型变量中,若unsigned 类型数据未超过要赋值的变量的范围,则signed型变量值与unsigned型数据值相同;若超过,要根据补码知识进行转换。如:main()unsigned int a=65535;int b;b=a;printf(“%d”,b);结果输出-

    49、12021/02/2598 将signed型数据赋给所占字节相同的unsigned型变量,同样将signed型数据所占内存的各位原样送到unsigned型变量内存中,若signed型数据为非负值,则unsigned型变量值与signed型数据值相同;若为负值,要根据补码知识进行转换。如:main()unsigned a;int b=-1;a=b;printf(“%u”,a);结果输出65535。2021/02/2599l1.条件运算符条件运算符 条件运算符要求有3个操作对象,它是C语言中唯一的三目运算符。条件运算符的优先级规则:l其他运算符优先于条件运算符,条件运算符优先于赋值运算符和逗号运算

    50、符;条件运算符的结合性是自右向左。2021/02/25100 用条件运算符构成的表达式称为条件表达式,其一般形式为:表达式表达式1?表达式?表达式2:表达式:表达式3 条件表达式的执行顺序是:先计算表达式1的值,若值为非0(真),则计算表达式2的值,并将表达式2的值作为整个条件表达式的结果;若表达式1的值为0(假),则计算表达式3的值,并将表达式3的值作为整个条件表达式的结果。2021/02/25101main()int a=1,b=2,c=3,d=4,e;e=ab?a:cb?a:cd?c:d相当于ab?a:(cd?c:d)。2021/02/25102l C语言中提供了一种特殊的运算符逗号运算

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:工程类C语言程序设计优秀课件.ppt
    链接地址:https://www.163wenku.com/p-4308684.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库