数据类型与表达式演示文稿_第1页
数据类型与表达式演示文稿_第2页
数据类型与表达式演示文稿_第3页
数据类型与表达式演示文稿_第4页
数据类型与表达式演示文稿_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据类型与表达式演示文稿目前一页\总数八十五页\编于十四点数据类型与表达式目前二页\总数八十五页\编于十四点本章导读本章包括知识点:C语言的基本数据类型数据类型与变量、常量的关系各种常量的性质和定义表达式中各种运算符的功能和特点及副作用数据类型的相互转换规则

目前三页\总数八十五页\编于十四点2.1数学上的“数”到计算机中的“数”数学中,数是一门研究抽象的学科,数和数的运算都是抽象的,数据不分类型,其运算是绝对精确的,如果88-8=80,1/6=0.16666(循环小数)。当从纯数学的计算过渡到用计算机来解决问题时,数变成了一个实在的工程问题,在计算机中,数值是具体存在的,它存放在计算机的存储器中。目前四页\总数八十五页\编于十四点存储空间是有限的每一个存储单元存放的数据范围都是有限的,不可能无穷大也不可能无穷小,如前面所说的1/6=0.16666(循环小数)用计算机是表示不出来的,因为存储器的空间大小是有限的,用计算机的计算不是抽象的理论值的计算,而是用工程的方法实现的计算,在许多情况下只能得到近似的结果,用计算机来计算1/6:得到的结果为0.166667,而不是无穷的小数位。目前五页\总数八十五页\编于十四点为什么要划分“数据类型”怎样使计算机合理的表示现实生活中各种类型的数据,也就是说,使计算机能够根据数据的实际表示范围以及数据的表示形式,为数据分配合理的存储空间。计算机存储器的资源是十分宝贵的,如何为存储器做到量体裁衣?为了解决这个问题,计算机对不同种类的数据用不同的“数据类型”来表示,不同的数据类型有不同的存储空间(所表示的数的范围不相同)和存储形式。“数据类型”是学习程序设计语言时必须首先明确的问题。目前六页\总数八十五页\编于十四点2.2数据类型概述整型基本整型int数据类型基本类型构造类型指针类型*空类型void实型(浮点型)字符型char枚举类型enum数组类型[]结构体类型struct共用体类型union单精度实型float双精度实型double短整型short长整型long无符号整型unsigned目前七页\总数八十五页\编于十四点基本数据类型

int整数,在目前绝大多数机器上占4个字节。在VisualC++6.0中,int型占4个字节。float单精度浮点数,一般是4个字节长double双精度浮点数,一般是8个字节长

char字符,一般是1个字节长用来表示256个ASCII字符,或者0~255的整数目前八页\总数八十五页\编于十四点数据类型修饰符shortshortint,短整数,一般2个字节长。通常简写为shortlonglongint,长整数,一般是4个字节长。通常简写为longlongdouble,长双精度(高精度)浮点数,一般是10个字节长。signed用来修饰char、int、short和long,说明他们是有符的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0)目前九页\总数八十五页\编于十四点

2.3常量和变量

2.3.1常量2.3.2变量2.3.3变量命名规则

2.3.4变量的定义目前十页\总数八十五页\编于十四点2.3.1常量

常量是指直接用于程序中的、不能被程序修改的、固定不变的量。C语言中的常量值是用数值或字符串表示的。C语言常量包括整数、浮点数、字符、字符串四种类型。有时为了使用方便,可用一个符号名来代表一个常量,这称为符号常量。符号常量一般定义格式如下:#define标识符常量数据例如:#definePI3.14159一旦某标识符定义成为一个常量后,以后在程序处理时,凡是碰到了该标识符,都将替换成对应的常量。目前十一页\总数八十五页\编于十四点

2.3.2变量

变量是指C语言编程中合法的标识符,是用来存取某种类型值的存储单元,其中存储的值可以在程序执行的过程中被改变。变量必须先定义后使用

目前十二页\总数八十五页\编于十四点定义变量的一般形式为:

变量类型说明符变量列表[=初值]

①变量类型说明符,确定了变量的取值范围以及对变量所能进行的操作规范②变量列表,由一个或多个变量名组成。当要定义多个变量时,各变量之间用逗号分隔。③初值是可选项,变量可以在定义的同时赋初值,也可以先定义,在后续程序中赋初值。目前十三页\总数八十五页\编于十四点C语言中的变量名除了符合标识符的条件之外,还必须满足下列约定:①变量名不能与关键字相同。②C语言对变量名区分大小写。③变量名应具有一定的含义,以增加程序的可读性。例:charesc='a';

int

i=1;

intsum=0;

floateps=1.0e-5;目前十四页\总数八十五页\编于十四点2.3.3变量命名规则

C语言的标识符的命名规则是:1.由字母或下划线(_)开头,同时由字母、0~9的数字或下划线(_)组成。2.不能与关键词同名。例如:school_id,_age,es10为合法的标识符。school-id,man*,2year,class为不合法的标识符。

标识符是用来标识对象名字(包括变量、函数、数组、类型等)的有效字符序列。构造一个标识符的名字,需要按照一定的规则。标识符不宜过短,过短的标识符会导致程序的可读性变差;但也不宜过长,否则将增加录入工作量和出错的可能性。目前十五页\总数八十五页\编于十四点关键字(32个)关键字在C语言中,有其特殊的含义,不能用作一般的标识符使用,即一般的标识符(变量名、类名、方法名等)不能与其同名。ANSIC关键词autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile目前十六页\总数八十五页\编于十四点2.3.4变量的定义C语言对变量强制定义的目的是:因为只有在定义了变量的类型后,系统才知道如何给变量分配存储空间。如指定变量a为整型,在编译时就能为其分配相应的4个字节的存储空间,并按整数方式存储数据。指定一个变量属于一个特定的类型,在编译时,能根据该类型进行运算是否合法性的检查。目前十七页\总数八十五页\编于十四点变量的具体定义形式inta,b,c;//表示定义了a,b,c三个整型变量,其初值是不确定的;inta=4,b=5,c=6;//表示定义了a,b,c三个整型变量并分别赋初值4,5,6;floata=3.5,b,c;//表示定义了a,b,c三个单精度型变量,其中只有a赋初值3.5;chara,b=’A’,c;//表示定义了a,b,c三个字符型变量,其中只有变量b赋初值’A’;目前十八页\总数八十五页\编于十四点

2.4整数类型

2.4.1整型常量2.4.2整型变量目前十九页\总数八十五页\编于十四点

2.4.1整型常量

整数常量是不带小数的数值,用来表示正负数。例如0x55、0x55ff、1000000都是C语言的整数常量。整数常量的取值范围是有限的,它的大小取决于此类整型数的类型,与所使用的进制形式无关。目前二十页\总数八十五页\编于十四点整数常量三种形式:十进制、八进制、十六进制(1)十进制整数是由不以0开头的0~9的数字组成的数据。(2)八进制整数是由以0开头的0~7的数字组成的数据。(3)十六进制整数是由以0x或0X开头的0~9的数字及A~F的字母组成的数据。例如:0,63,83是十进制数,00,077,0123是八进制数,0x0,0X53,0x53,0X3f,是十六进制数。目前二十一页\总数八十五页\编于十四点

2.4.2整型变量

整型变量类型有short、int、long、unsigned四种说明符。目前二十二页\总数八十五页\编于十四点数据在存储器中的存储形式inta=5;//表示定义了一个基本类型的int变量,VisualC++6.0的编译系统为其分配4个字节的存储空间,每个字节8位,共32位。数在内存中是以二进制形式表示的,因此,整数5在内存中的表示如下所示:00000000000000000000000000000101整数在存储单元的存放形式是用其补码(complement)的形式存放。目前二十三页\总数八十五页\编于十四点整数类型的取值范围类型TurboC2.0VisualC++6.0宽度取值范围宽度取值范围[signed]int16-32768~3276732-2147483648~2147483647[unsigned]int160~65535320~4294967295[signed]short16-32768~3276716-32768~32767[unsigned]short160~65535160~65535long32-2147483648~214748364732-2147483648~2147483647[unsigned]long320~4294967295320~4294967295目前二十四页\总数八十五页\编于十四点

2.5实数类型

实数类型的数据即实型数据,在C语言中实型数据又称为浮点数。浮点数是带有小数的十进制数,可用十进制数形式或指数形式表示。C语言的浮点数常量在机器中有单精度和双精度之分。单精度以32位形式存放,双精度则以64位形式存放。目前二十五页\总数八十五页\编于十四点2.5.1实型常量表示形式:(1)十进制数形式:十进制整数+小数点+十进制小数。(2)指数形式:十进制整数+小数点+十进制小数+E(或e)+正负号+指数。例如:

3.14159,0.567,9777.12是十进制数形式,1.234e5,4.90867e-2是指数形式。目前二十六页\总数八十五页\编于十四点

2.5.2实型变量

(1)float类型float类型是一个位数为32位的单精度浮点数。它具有运行速度较快,占用空间较少的特点。(2)double类型double类型是一个位数为64位的双精度浮点数。双精度数在某些具有优化和高速运算能力的现代处理机上运算比单精度数快。双精度类型double比单精度类型float具有更高的精度和更大表示范围,常常使用。目前二十七页\总数八十五页\编于十四点

2.6字符类型

计算机中,字符是按其代码来存放的(ASCII码),例如小写字母’a’,其代码为97,在存储时,按整数97进行存取,只是它只占一个字节的存储空间,因此字符型数据实际上是整数类型的一种。但是,字符数据在使用上有自己的特点,因此,将其作为一种数据类型来介绍。目前二十八页\总数八十五页\编于十四点2.6.1字符型常量(1)用单引号括起来的一个字符;如:‘A’、‘1’、’?’等。(2)用单引号括起来的由反斜杠(\)引导的转义字符。如:‘\n’、‘\t’、’\x41’、’\101’等。目前二十九页\总数八十五页\编于十四点转义字符表功能字符形式功能字符形式回车\r单引号\’换行\n双引号\"水平制表\t八进制位模式\ddd退格\b十六进制模式\xdddd换页\f反斜线\\目前三十页\总数八十五页\编于十四点【例2.1】转义字符的输出#include<stdio.h>voidmain(){ charch; ch='\141'; printf("%c\n%c",ch,ch-32);}目前三十一页\总数八十五页\编于十四点

2.6.2字符型变量

字符型变量的类型说明符为char,它在机器中占8位,其范围为0~255。注意:字符型变量只能存放一个字符,不能存放多个字符,例如:chara='am';这样定义赋值是错误的。目前三十二页\总数八十五页\编于十四点

字符串常量

用一对双引号括起来的字符序列。注意:每个字符串的后面都有一个‘\0’结束符。

如:“SHANGHAI”,“AbcdeFGHijk”,“Howareyou”。‘\’‘√‘\\‘√‘’‘‘\‘‘a’与“a”的区别。注意目前三十三页\总数八十五页\编于十四点2.6.3字符数据在内存中的存储形式字符数据在内存中是以其ASCII码形式存取的。字符数据并不是直接将字符本身放到内存单元的,而是将该字符的ASCII码存放到内存单元,如字符A的ASCII码值为65;其内存的具体存储形式为:01000001

在一定条件下,字符型数据和整形数据是通用的。需注意的是,字符型数据只占一个字节,只能存取0~255范围内的整数。目前三十四页\总数八十五页\编于十四点【例2.2】字符数据的定义、赋值及存取#include<stdio.h>voidmain(){ chara,b;//定义ab两个字符变量; inti,j;//定义ij两个整形变量; a='A';//为字符变量a赋值'A'; i=66;//为整形变量i赋值65; b=i;//将整形变量i的值赋给字符变量b; j=a;//将字符变量a的值赋给整形变量j; printf("i=%d,j=%d,i=%c,j=%c\n",i,j,i,j); printf("a=%d,b=%d,a=%c,b=%c\n",a,b,a,b);}目前三十五页\总数八十五页\编于十四点字符数据注意事项字符型常量区分大小写,'a'和'A'是两个不同的字符常量;字符型常量只包含一个字符,如’ab’不是字符常量;'a'中,单撇号是定界符,而不属于字符常量的一部分。注意字符’0’和数字0的区别。字符’0’表示输出一个形状为0的字符,保存字符’0’只占用内存一个字节,ASCII码值为48。而数字0是以整数存储方式存储,如果定义它为前面所讲的基本int型的话,它占用内存4个字节来保存。请读者仔细体会。如:printf(“%c”,’0’+’0’);printf(“%d”,0+0);上机试试,输出结果分别是什么?目前三十六页\总数八十五页\编于十四点

2.7不同数据类型之间的转换

不同类型的数据之间的运算称为混合运算。在混合运算中,将会碰到类型转换的情况。类型转换可分为自动类型转换、强制类型转换两种。目前三十七页\总数八十五页\编于十四点

2.7.1自动类型转换

转换从低级到高级。各类型从低级到高级的顺序为:char→int→long→float→double。目前三十八页\总数八十五页\编于十四点例如:charch=’A’;inti=28;floatx=2.36;doubley=6.258e+6;若表达式为i+ch+x*y转换过程:先将ch转换成int型,计算i+ch,由于ch=’A’,而’A’的ASCⅡ码值为65,故计算结果为93,类型为int型。再将x转换成double型,计算x*y,结果为double类型。最后将i+ch的值93转换成double型,表达式的值最后为double类型。目前三十九页\总数八十五页\编于十四点

2.7.2强制类型转换

高级数据要转换成低级数据,需用使用强制类型转换。这种使用可能会导致溢出或精度的下降,最好不要使用。强制类型转换的格式为:(type)变量;其中:type为要转换成的变量类型。例如:(int)(a+b)(强制将a+b的值转换成整型)目前四十页\总数八十五页\编于十四点【例2.3】数据类型转换的例子#include<stdio.h>voidmain(){floatx;inti;x=3.5;i=(int)x;printf("x=%f",x);printf("i=%d",i);}运行结果为:x=3.500000i=3目前四十一页\总数八十五页\编于十四点数据类型转换注意事项注意总结不同类型的数据之间赋值的规律:对于整型数据(含字符型)之间的赋值是按内存单元的存储形式直接传送,实型数据之间以及整数与实数之间是先转换后赋值。注意在类型转换过程中出现的错误,如:inta=32767;shortb=a+1;上机运行可以发现,得到b的结果不是32768,因为它超出了短整型数的表示范围。目前四十二页\总数八十五页\编于十四点2.8运算符与表达式

数据是需要用来加工的,如对数据的加减乘除运算,大小比较等等,这些都是编写程序必须的,否则程序就没有意义了。为解决这个问题,C语言提供了丰富的运算符,使得C的运算十分灵活方便。目前四十三页\总数八十五页\编于十四点

2.8运算符与表达式

2.8.1算术运算符与算术表达式2.8.2赋值运算符与赋值表达式2.8.3关系运算符与关系表达式2.8.4逻辑运算符与逻辑表达式2.8.5条件运算符与条件表达式2.8.6逗号运算符与逗号表达式目前四十四页\总数八十五页\编于十四点2.8.1算术运算符与算术表达式算术运算符用于算术运算,其操作数为数字类型或字符类型。算术运算符表运算符名称使用方式说明+加a+ba加b-减a-ba减b*乘a*ba乘b/除a/ba除b%取模a%ba取模b(返回除数的余数)++自增++a,a++自增--自减--a,a--自减目前四十五页\总数八十五页\编于十四点例:合法的C语言算术表达式。

a*b/c-1.5+’a’+fabs(-5)

fabs(-5)是求-5的绝对值的库函数。“++”、“--”

前缀方式是先将操作数加(或减)1,再将操作数的值作为算术表达式的值;后缀方式是先将操作数的值作为算术表达式的值,再将其加(或减)1。目前四十六页\总数八十五页\编于十四点例如:a的值为5,

++a为前缀方式,首先将a的值加1,再得到表达式的值为6;

a++为后缀方式,首先得到表达式的值为5,再将a的值加1。自增运算符和自减运算符运算对象只能是变量,不能是常量或表达式。形式3++或++(i+j)都是非法的表达式。目前四十七页\总数八十五页\编于十四点算术运算符使用说明运算符“/”有以下规定:两个整数相除的结果为整数,如4/3的结果值为1,舍去小数部分。运算符“%”,称之为取模,也就是通常所说的求余数,其两个操作数都必须为整数,如“5%3=2”。前面的运算符称为双目运算符,所谓双目就是有两个操作数,仅有一个操作数的运算符称为单目运算符。目前四十八页\总数八十五页\编于十四点算术运算符使用说明

单目算术运算符“++”、“--”的前缀与后缀方式,对操作数本身的值的影响是相同的,但其对表达式的值的影响是不同的。前缀方式是先将操作数加(或减)1,再将操作数的值作为算术表达式的值;后缀方式是先将操作数的值作为算术表达式的值,再将其加(或减)1。(设a=5)(1)b=++a为前缀方式,结果为b=6,a=6;(2)b=a++为后缀方式,结果为b=5,a=6。目前四十九页\总数八十五页\编于十四点运算符的优先级和结合性为什么要规定运算符的优先级和结合性?

如:有合法的C语言表达式:a*b-1.5/c但上面的表达式C语言的编译系统怎样来解释?是按((a*b)-(1.5/c))还是(((a*b)-1.5)/c)来计算?目前五十页\总数八十五页\编于十四点仅有运算符,表达式的解析会出现二义性,为避免表达式计算的二义性,C++语言规定了运算符的优先级和结合性。

算术运算符的优先级是:(1)++、--优先级最高(2)然后是*、/、%(3)最后是+-。算术运算符的结合性是:“自左至右的结合方向”又称“左结合性”,即运算对象先与左面的运算符优先结合。目前五十一页\总数八十五页\编于十四点表达式a-b*c,b的左侧为减号,右侧为乘号,而乘号优先于减号,等价于a-(b*c)。如果在一个运算对象两侧的运算符的优先级别相同,如a-b+c,则按规定的“结合方向”处理,等价于(a-b)+c。显然,表达式a*b-1.5/c是按((a*b)-(1.5/c))来处理,这样就避免了二义性的问题。目前五十二页\总数八十五页\编于十四点

2.8.2赋值运算符与赋值表达式

赋值运算符“=”就是把右边操作数的值赋给左边操作数。赋值运算符左边操作数必须是一个变量,右边操作数可以是常量、变量、表达式。例如:表达式b=a+3在赋值运算符两边的操作数的数据类型如果一致,就直接将右边的数据赋给左边;如果不一致,就需要进行数据类型自动或强制转换,将右边的数据类型转换成左边的数据类型后,再将右边的数据赋给左边变量。目前五十三页\总数八十五页\编于十四点复合运算符运算符名称使用方式说明+=相加赋值a+=b加并赋值,a=a+b-=相减赋值a-=b减并赋值,a=a-b*=相乘赋值a*=b乘并赋值,a=a*b/=相除赋值a/=b除并赋值,a=a/b%=取模赋值a%=b取模并赋值,a=a%b练习:设a=12,计算表达式a+=a-=a*12和a+=a-=a*=12的值目前五十四页\总数八十五页\编于十四点赋值表达式分析

a=b=c=9正确(赋值表达式值为9,a,b,c值均为9)

a=18+(c=27)正确(表达式值为45,a值为45,c值为27)

(a*b)=c=9错误(a*b)不是左值a+=a-=a*a正确,假设a的初值为5,表达式值为-40,a的最终值为-40目前五十五页\总数八十五页\编于十四点赋值运算符的优先级和结合性

赋值运算符“=”及复合赋值运算符的优先级为同一级别,结合方向为“自右向左”目前五十六页\总数八十五页\编于十四点

2.8.3关系运算符与关系表达式

关系运算符用来对两个操作数进行比较。关系表达式就是用关系运算符将两个表达式连接起来的式子,其运算结果为布尔逻辑值。如果关系表达式成立结果为真(true),否则为假(false)。由于C语言没有逻辑型数据,就用1代表“真”,0代表“假”。目前五十七页\总数八十五页\编于十四点关系运算符运算符名称使用方法说明==等于A==b如果a等于b返回真,否则为假!=不等于A!=b如果a不等于b返回真,否则为假>大于A>b如果a大于b返回真,否则为假<小于A<b如果a小于b返回真,否则为假<=小于或等于A<=b如果a小于或等于b返回真,否则为假>=大于或等于a>=b如果a大于或等于b返回真,否则为假目前五十八页\总数八十五页\编于十四点关系运算符的优先级和结合性(1)“<”、“<=”、“>”和“>=”为同一级,“==”和“!=”为同一级。前者优先级高于后者。(2)关系运算符优先级低于算术运算符,高于赋值运算符和逗号运算符。(3)关系运算符的结合性为自左向右。目前五十九页\总数八十五页\编于十四点【例2.4】关系表达式的运用#include<stdio.h>voidmain(){charch=’w’;inta=2,b=3,c=1,d,x=10;printf(“%d”,a>b==c);printf(“%d”,d=a>b);printf(“%d”,ch>’a’+1);printf(“%d”,d=a+b>c);printf(“%d”,b-1==a!=c);printf(“%d\n”,3<=x<=5);}运行结果为001101程序输出了6个表达式的值,其中有两个是赋值表达式,请读者根据运算符的优先级作出判断。目前六十页\总数八十五页\编于十四点关系表达式注意事项关系表达式3<=x<=5等价于关系表达式(3<=x)<=5当x=10时,3<=x的值是1,再计算1<=5,得到1。其实,无论x去何值,关系表达式3<=x的值不是1就是0,都小于5,即3<=x<=5的值恒为1。由此看出关系表达式3<=x<=5无法正确表示数学上的代数式3≤x≤5。目前六十一页\总数八十五页\编于十四点关系表达式注意事项b=a;这是一个赋值表达式,将变量a的内容赋值给变量b;最终变量b单元的内容被变量a单元的内容覆盖。b==a;这个一个关系表达式,一般用在程序的条件判断中。如if(b==a),判断变量a和变量b单元的内容是否相等,如相等,此条件表达式的结果为1,否则为0。最终变量b单元的内容和变量a单元的内容保持各自原值,变量b单元的内容不会被变量a单元的内容覆盖目前六十二页\总数八十五页\编于十四点2.8.4逻辑运算符与逻辑表达式C语言如何表示数学上的(3≤x≤5)?某城市规定,去公园可免门票的条件为:年龄10岁以下(含10岁)的儿童或者年龄70岁以上(含70岁)的老人。C语言如何表示这个条件?目前六十三页\总数八十五页\编于十四点

2.8.4逻辑运算符与逻辑表达式

逻辑运算符用来对关系表达式进行运算。逻辑表达式就是用逻辑运算符将关系表达式连接起来的式子,其运算结果为布尔逻辑值。逻辑运算符运算符名称&&逻辑与||逻辑或!逻辑非目前六十四页\总数八十五页\编于十四点与、或、非运算规则表达式A表达式BA&&BA||B!A假假假假真假真假真真真假假真假真真真真假目前六十五页\总数八十五页\编于十四点逻辑运算符的优先次序(1)!→&&→||(2)!高于算术运算符,&&、||低于关系运算符。例如:a||b&&c等价于a||(b&&c)。!a&&b等价于(!A)&&b。!x==2等价于(!x)==2。a||3*8&&2等价于a||((3*8)&&2)。目前六十六页\总数八十五页\编于十四点【例2.5】逻辑表达式的运用#include<stdio.h>voidmain(){inta=2,b=0,c=0;printf(“%d”,a&&b);printf(“%d”,a||b&&c);printf(“%d”,!a&&b);printf(“%d”,a||3+10&&2);}运行结果为0101目前六十七页\总数八十五页\编于十四点逻辑表达式的求解规则求解C语言逻辑表达式时,按从左到右的顺序计算运算符两侧的操作数,一旦得到表达式的结果,就停止计算。求解逻辑表达式exp1&&exp2时,先计算exp1,若其值为0,则exp1&&exp2值一定为0。此时,没有必要计算exp2的值。例2.5中,计算表达式!a&&b时,先算!a,由于a的值是2,!a就是0,该逻辑表达式的值一定是0,不必再计算b。目前六十八页\总数八十五页\编于十四点逻辑表达式的求解规则求解逻辑表达式exp1||exp2时,先计算exp1,若其值为非0,则exp1||exp2值一定为1。此时,没有必要计算exp2的值。例2.3中,计算表达式a||3+10&&2时,先算a,由于a的值是2,该逻辑表达式的值一定是1,不必再计算3+10&&2。通常,关系运算符和逻辑运算符在一起使用,用于流程控制语句的判断条件。目前六十九页\总数八十五页\编于十四点逻辑运算符应用实例如何表示数学上的(3≤x≤5)?用一个逻辑运算符&&就可以解决问题了:(x>=3)&&(x<=5)。用一个逻辑运算符&&来连接两个关系表达式,表示这两个条件必须同时为真,表达式的值才为真。如何表示去公园可免门票的条件?用一个逻辑运算符||就可以解决问题了:(age<=10)||(age>=70)。用一个逻辑运算符||来连接两个关系表达式,表示这两个条件只要有一个为真,整个表达式的结果为真。目前七十页\总数八十五页\编于十四点

2.7.5条件运算符与条件表达式

条件运算符是一个三目运算符。一般形式为:

表达式1?表达式2:表达式3其中表达式1是一个关系表达式或逻辑表达式。执行过程:先求解表达式1的值,若表达式1的值为真,则求解表达式2的值,且作为整个条件表达式的结果;若表达式1的值为假,则求解表达式3的值,且作为整个条件表达式的结果。目前七十一页\总数八十五页\编于十四点赋值表达式

max=(a>b)?a:b执行结果就是将条件表达式的值赋给max,也就是将a和b二者中大者赋给max。条件运算符的优先级较低,只比赋值运算符高。它的结合方向是自右向左。例如:①(a>b)?a:b+1

等价于a>b?a:(b+1)。②a>b?a:c>d?c:d

等价于a>b?a:(c>d?c:d)。目前七十二页\总数八十五页\编于十四点

2.7.6逗号运算符与逗号表达式

逗号表达式的一般形式为

表达式1,表达式2逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如:x=(y=6,y*3)首先将6赋给y,然后执行y*3的运算,将整个结果赋给x。目前七十三页\总数八十五页\编于十四点一个逗号表达式又可以与另一个逗号表达式组成一个新的逗号表达式,例如:

(a=3*5,a+4),a+5先计算出a的值为3*5,等于15,再进行a*4的运算为60,再进行a+5的运算得20,即整个表达式的值为20。目前七十四页\总数八十五页\编于十四点逗号表达式的一般形式可以扩展为:

表达式1,表达式2,表达式3,…,表达式n它的值为表达式n的值。目前七十五页\总数八十五页\编于十四点2.9运算符与表达式的综合练习前面学习了6种类型运算符和表达式,学习运算符和表达式的目的重在应用,能够根据实际问题的需求写出对应的表达式,或者能够正确的将数学表达式转换为C表达式,这是学习C语言编程的第一步。目前七十六页\总数八十五页\编于十四点【例2.6】判断是否为闰年的条件是:能被4整除且不能被100整除或者是能被400整除,写出符合上述条件的表达式(定义变量intyear表示年)。问题分析:(1)首先,从整体来看,这个判断条件由两部分组成,两个条件之间是一个或的关系,用运算符逻辑||来连接这两个条件;(2)其次,条件1“能被4整除且不能被100整除”这又是一个复合条件,两个条件之间是且(逻辑与)的关系,由“&&”运算符来连接两个表达式:year%4==0&&year%100!=0;(3)完整的表达式是:

(year%4==0&&year%100!=0)||(year%400==0);目前七十七页\总数八十五页\编于十四点【例2.7】写出判断输入字符是否为字母的表达式(定义变量charch表示所输入的字符)。问题分析:(1)ch为大写字母的条件是ch>=’A’&&ch<=’Z’;(2)ch为小写字母的条件是ch>=’a’&&ch<=’z’;(3)显然,ch满足条件1或条件2都符合本题的要求,二者是或的关系,完整的表达式为:

(ch>=’A’&&ch<=’Z’)||(ch>=’a’&&ch<=’z’)。目前七十八页\总数八十五页\编于十四点【例2.8】求3个数中最大的数#include<stdio.h>voidmain(){inta=2,b=200,c=-8;intmax;max=(a>b)?a:b;max=(max>c)?max:c;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论