第2章数据类型运算符与表达式.ppt

上传人:sccc 文档编号:5635053 上传时间:2023-08-04 格式:PPT 页数:128 大小:1.71MB
返回 下载 相关 举报
第2章数据类型运算符与表达式.ppt_第1页
第1页 / 共128页
第2章数据类型运算符与表达式.ppt_第2页
第2页 / 共128页
第2章数据类型运算符与表达式.ppt_第3页
第3页 / 共128页
第2章数据类型运算符与表达式.ppt_第4页
第4页 / 共128页
第2章数据类型运算符与表达式.ppt_第5页
第5页 / 共128页
点击查看更多>>
资源描述

《第2章数据类型运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《第2章数据类型运算符与表达式.ppt(128页珍藏版)》请在三一办公上搜索。

1、C语言,讲授人:蔡娟,北京林业大学信息学院,C语言程序设计,C语言程序设计,C语言程序设计,问题与讨论,1.编写程序(1)编写程序,输出“北京,2008”。(2)编写程序,求出两个数的最小值。,第2章数据类型、运算符与表达式,2.1C语言的数据类型2.2常量与变量 2.2.1常量 2.2.2变量2.3整型数据 2.3.1整型常量 2.3.2整型变量 2.3.3整型数据在内存中的存放形式 2.3.4整型数据的溢出 2.3.5整型常量的类型2.4浮点数据类型2.4.1浮点型常量 2.4.2浮点型变量2.4.3浮点型常量的类型,本章内容,2.5 字符型数据2.5.1字符常量 2.5.2字符变量2.5

2、.3字符数据在内存中的存储形式及其使用方法2.5.4字符串常量2.6各类数值型数据间的混合运算2.7算术运算符和算术表达式 2.7.1C语言运算符和C算术表达式2.7.2主要的算术运算符和算术表达式2.8逗号运算符和逗号表达式本章小结,本章内容,2.1C语言的数据类型,程序的主要部分是由数据和执行语句组成的。计算机处理的对象是数据。,在程序中对所用到的所有数据都必须指定其数据类型,数据的类型决定数据在内存中占空间大小以及存储方式,数据类型,数据类型,整型,浮点型,字符型(char),短整型(short),整型(int),长整型(long),单精度浮点型(float),双精度浮点型(double

3、),空类型(void),基本类型,指针类型(T*),构造类型,枚举类型(enum),结构体类型(struct),共用体类型(union),标识符,在C语言中,有3类标识符:关键字 不能用作变量名。如int,float,char,if,while,for系统预定义的标识符;不能用作变量名如printf,main,sin用户标识符 用户自己定义的标识符如符号常量、变量、函数名,数组,结构体,共用体,文件等,标识符,标识符是由字母、数字和下划线组成,且第一个字符不能是数字。例如变量名、数组名、自定义函数名等。相同字母标识符的大写和小字是有区别的,被认为是不同的表示形式。例如:count Count

4、coUNT 是不同的习惯上,符号常量用大写,变量用小写。,判断以下标识符是否为合法:,count _above N_name x_1 x_2_ y1 y2K C_sum_1M.d 99job$12a-1 float,circle area c1 _sum_a PI,1_c ab Doc.Bao bei int,2.2常量与变量,数据的基本表现形式为常量和变量,2.2.1常量,在程序执行过程中,其值不能被改变的数据叫做常量。直接(字面)常量 在程序中可以直接使用的常量。符号常量 用一个符号名来代表一个常量。,直接常量,常量也是区分不同类型的。C语言有四种类型的常量分别简称为整数、实数、字符和字符

5、串。整型常量:如 12,0,-3浮点型(实型)常量:如 4.6,-1.23,1.2e3字符型常量:如 a,+,n字符串常量:如“a”,“C Program”,符号常量,C程序是通过#define预处理命令来定义符号常量的。一个#define命令只能定义一个符号常量,且用一行书写,不用分号结尾。符号常量要先定义后使用,定义的一般格式是:#define 符号常量 常量 如#define PI 3.1415926/*不可写成 PI=3.1415926*/,标识符使用原则:(1)符号常量名用大写;(2)见名知义,含义清楚;如 sum,max(3)符号常量能够做到“一改全改”需要对某一个数进行多处修改时

6、,利用符号常量,只需要修改其定义的地方即可,避免了偶然的错误。,#define PI 3.1415926#include void main()double r,area,circle;r=3.6;area=PI*r*r;circle=2*PI*r;printf(%lf,%lfn,area,circle);,c2_1.c,符号常量,浮点型常量,整型常量,字符型常量,常量举例,使用符号常量应注意以下两个方面:(1)它不同于变量,在其作用域内其值不能改变和赋值。如:在上例中如再用PI=3.14;这一语句进行赋值,则 是错误的。(2)符号常量名一般用大写,而变量名用小写以示区别。标识符的长度无统一规

7、定,随系统而不同,TC为32个,建议不要超过 个。,2.2.2变量,在程序运行过程中,其值可以改变的量称为变量。变量应该有一个名字,以便被引用,在内存中占据一定的存储单元。注意变量区分变量名和变量值,这是两个不同的概念。变量名实际上是以一个名字带秒一个内存地址。,变量的说明:,变量应该“先定义,后使用”,变量定义:数据类型变量名列表数据类型:合法的数据类型变量名列表:用逗号隔开的多个标识符举例:如 inta,b,c,d;,int a=3;,变量名,3,变量值,存储单元,a,变量,在对程序编译时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上就是通过变量名找到相应的内存地址,从该

8、存储单元中读取数据。,10,两个字节,a,地址,地址,变量名,变量值,存储单元,内存,short a=10;,变量的类型有整型、实型(单精度实型和双精度实型)、字符型等;8个二进制位是一个字节,表示一个基本存储单元。不同数据类型的变量,编译系统分配不同大小的存储单元。变量的数据类型决定了该变量占用内存存储单元的个数。,变量,变量的值实际存放在内存存储单元内,不同的变量存放在不同的存储单元中;用sizeof(类型标识符)来查询变量的存储空间大小。printf(“%dn”,sizeof(int);,变量,a,b,c,d,0,a=0;a=6;a=a+2d=10;d=d-a;,6,8,10,2,内存的

9、存储单元,inta,b,c,d;,a,$,56,-61.33,-61.33,内存区,2.3整型数据,2.3.1整型常量整型常量是程序中使用最多的一种数据类型,在程序中书写整型常量时没有小数部分。用户根据需要分别可以用十进制、八进制和十六进制的形式书写:,十进制格式:书写时直接写出数字。如 123、516、-39、156、0、+708 等。八进制格式:以0开头 如 0111、010007、0177777-037、0156、+0100等。十六进制格式:以0 x或0X开头的数字 如 0 x78AC、0 xFFFF、0 x61、0X2A、0 x6d 等,错误的表达形式:27、-018、090都是非法的

10、八进制整数2c、-03D、18都是非法的十六进制整数,2.3.2整型变量,基本整型 int短整型 short int长整型 long int占字节数排序 shortintlongVisual C+给整型变量分配字节情况short:2个字节int:4字节long:4字节,例如,短整型(short)变量的数值范围是-3276832767,参见P22-表2-1TC和VC中的整数数据类型比较,无符号整型变量,无符号基本整型 unsigned int无符号短整型 unsigned short int无符号长整型 unsigned long int占字节数排序unsigned shortunsigned

11、intunsigned longVisual C+给整型变量分配字节情况unsigned short:2个字节unsigned int:4字节unsigned long:4字节,例如,无符号短整型变量的数值范围是065535,#include void main()short a,c;unsigned short b,d;a=32767;b=a;c=a+1;d=b+1;printf(c=%d,d=%dn,c,d);,程序运行结果:c=-32768,d=32768,整型变量举例,整型变量举例c2_2.c,整型变量的定义:int a,bmain()int a,b,c,d;unsigned u;a=

12、12;b=-24;u=10;c=a+u;d=b+u;printf(a+u=%d,b+u=%dn,c,d);,a+u=22 b+u=-14,运行结果:,main()int a=-32766;unsigned b;b=a;printf(a=%d,b=%un,a,b);,结果:a=-32766,b=32766,2.3.3整型数据在内存中的存放形式,数据在内存中是以二进制形式存放的。例如 int i;i=10;变量i 在内存中实际存放情况:,10,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,实际上,在存放整数的存储单元中,一般情况下,最左面的一位是用来表示符号的“0”代表数值为正,

13、“1”代表数值为负。,实际上,数值是以补码的形式表示的。正数的原码与它的反码和补码相同。如果是负数,求其补码的方法:将该数的绝对值得二进制的形式,按位取反再加1。例如-10的补码是:10取反再加1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,或对直接对负数求其补码:方法是:除符号位外,将其原码的数值部分求反(即变,变)则可求其反码,由反码的最低位加即可求得其补码。其结果一样。,2.3.4整型数据的溢出,如果在TC环境下,系统给一个整型变量分配2个字

14、节,则变量的最大允许值是32767,如果再加1,则会出现什么情况?例2-3 整型数据的溢出,include void main()int a,b;a=32767;b=a+1;printf(“%d,%dn”,a,b);,程序运行结果:32767,-32768,解释,a:32767b:-32768,下面是-32768的补码形式。注意:一个2字节的整数变量只能容纳-3276832767,大于32767,或小于-32768,就要发生”溢出”现象。,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,对于同一道题,在VC环境下,

15、则不会发生溢出,因为在VC环境下,整型的数据占4个字节,则数据的范围为:-21474836482147483647.这时的运行结果是:32767,32768,2.3.5整型常量的类型,常量也是有类型的,因为数据是要存储的。不同类型的数据的所所分配的字节和存储方式是不同的。整型常量在字面上就能决定它的类型。(1)如果值在-3276832767范围内,则认为它是int型,分配2个字节,可以赋值给int和long int型变量,2.3.5整型常量的类型,(2)如果值在-21474836482147483647范围内,则认为它是长整型,分配4个字节,可以赋值给long int型变量。(3)整型常量后面

16、加l或L,则认为是long int型常量。例如123l,456L。(4)整型常量后面加u或U,认为是unsigned int型常量。例如:123u,456U。,2.4 浮点型数据,实型常量又称为浮点型常量,只能用十进制来表示,可以用小数或指数两种形式表示。(1)小数形式-数字小数点(注意必须有小数点)如:0.12、.12、0.0、12.等。(2)指数形式-又称为科学计数法。如:12e3=12E3=12*103。注意:1e和E均可。如12e3和12E3相等。2e之前必须有数字,e后必须为整数。如:e2、3e1.2 是非法的指数形式。,2.4.1 浮点型常量,2.4.2浮点型变量,1.浮点型变量的

17、分类单精度(float型)浮点型变量双精度(double型)浮点型变量长双精度(long double型)浮点型变量一般C编译系统为:单精度(float)型数据分配4个字节;双精度(double)型 8长双精度(long double)8 不同系统分配的不同,2.浮点型数据在内存中存放形式浮点型数据是按照指数形式存储。系统把一个浮点型数据分成小数部分和指数部分分别存放。3.浮点型数据的舍入误差浮点型数据提供有限的有效数位,超出部分将被舍去。float类型的单精度变量,它只保证7位有效数字(包括小数点)。double类型的双精度变量,可以提供16位有效数字。,2.4.3浮点型常量的类型,浮点型常

18、量也是有类型的,不同的类型的数据按不同的方式存储。C编译系统编译系统把浮点型常量作为双精度处理。若不想把浮点型常量作为双精度处理,可以在数值后面加f或者F,这样会按单精度处理。1.23f,3.66F,c2_3.c#include void main()float a;a=3.141592612;printf(a=%fn,a);程序运行结果:a=3.141593,c2_4.c#include void main()double a;a=3.141592612;printf(a=%10.9fn,a);程序运行结果:a=3.141592612,换作double会怎么样?,main()float a,

19、b;a=123456.789e5;b=a+20;printf(b=%fn,b);结果:b=12345678848.000000,舍入误差,2.5字符型数据,字符型数据,用一对单引号括起来的一个字符,单引号只是字符与其他部分的分割符,不是字符的一部分,并且,不能用双引号代替单引号。在单引号中的字符不能是单引号或反斜杠,如:a,A,#合法的字符常量,非法的字符常量“A”不代表字符常量,2.5.1.字符常量,除了以上形式的字符常量外,C语言还允许一种特殊形式的字符常量转义字符。这些字符用于控制输出或编译系统本身保留,无法作为字符常量来表示。C语言中规定,采用反斜杠后“”跟一个字母来代表一个控制字符,

20、反斜杠“”后的字符不再作原有的字符使用,而具有新的含义。,转义字符,例子,101 A012 换行n0或000 空操作字符例子2-5转义字符的使用/t一个“制表区”占8列/r回车,将当前位置移到本行开头/n换行,将当前位置移到下一行开头/b退格,将当前位置移到前一列,转义字符的使用,c2_5.c#include void main()printf(ab ct derftgn);printf(hti bbj kn);运行结果:,解释:,r,回车,将当前位置移到本行开头;意味着自此输出的字符(包括空格和跳格所经过的位置)将取代原来在该位置上显示的字符。,转义字符的使用,#include void m

21、ain()printf(a);printf(101n);printf(xFn);,#include void main()printf(boytgirln);printf(atbrUn);程序运行结果:boy girlU b,字符变量,字符变量用来存放字符常量,它只能放一个字符,不要以为在一个字符变量中可以存放一个字符串(包括两个以上的字符)。字符变量的定义形式如下:char c1,c2;字符变量的赋值 c1=a;c2=b;在所有的编译系统中都规定用一个字节来存放一个字符,因此一个字符型变量在内存中占1个字节。,字符型变量的值在内存中的表现形式为该字符对应的ASCII值,是二进制数。c1的值为

22、:01100001(97)c2的值为:01100010(98)字符型数据和整型数据之间可以通用,也可以进行算术运算。,2.5.3字符的存储形式及使用方法,存储形式:ASCII代码二进制形式常用字符与ASCII码的对照表参见 附录I使用方法:字符型数据可与整型数据通用输出:字符型数据可以字符形式输出,也可以整数(0-255)形式输出。赋值:字符型数据可与整型数据互相赋值,2.5.3字符的存储形式及使用方法,main()char c1,c2;c1=97;/*等价于c1=a*/c2=98;/*等价于c2=b*/printf(%c,%cn,c1,c2);/*输出?*/printf(%d,%dn,c1,

23、c2);/*输出?*/结果:a,b 97,98,例2-6,字符数据和整型数据可以互相赋值,#include void main()char c1,c2;c1=A;c2=c1+32;printf(%c,%cn,c1,c2);,字符数据和整型数据可以进行算术运算,程序运行结果:A,a,2.7大小写字母的转换,#include void main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(%c,%cn,c1,c2);,运行结果:A,B,用一对双引号“”括起来的一个或多个字符的序列称为字符串。字符串以双引号“”为定界符,双引号不作为字符串的一部分,如

24、:“Hello”,“A”,“Good Morning!”,“I say:“Goodbye!”,2.5.4 字符串常量,字符串中的字符数称为该字符串的长度,在存储时,系统自动在字符串的末尾加以字符串结束标志,即转义字符0。注意:“A”和A是两种完全不同的数据,所以“A”和A是不同的。“A”是字符串常量,在内存中占2个字节。A是字符常量,在内存中占1个字节。,2.5.4 字符串常量,C语言规定,每个字符串在内存中占用的字节数等于字符串的长度+1,这是因为最后一个字节存放的字符是空字符,其值为0,书写常用转义字符0来表示。在C语言中这是字符串的结束标记。例如“AB”,“A”的长度分别是2和1,但它们

25、在内存中分别占用3和2个字节。,C语言规定,字符串中的字母是区分大小写的。“a”和“A”是不同的字符串。字符串中的字符可以是一个,多个,也可以没有。没有字符的字符串称为“空字符串”。“”就是一个空字符串。一个字符串中所有字符的个数称为该字符串的长度(不包括结束标志),其中每个转义字符只当一个字符。例如“”,“abc”,“1234567890”,“ABCD”,“101102x43x44”的长度分别是:0,3,10,6,4,字符串常量,由一对双撇号括起来的字符序列“hello,2008”,“a”,“bao bei”,“M.D.John”可以输出字符串printf(“One world,one dr

26、eam.”)不能将字符串常量赋给字符变量Char c;c=a;c=“a”;,“a”,“china”,字符串结束标志,ASCII码为0,是空操作字符,2.6数据类型的混合运算,整型、实型、字符型数据间可混合运算 如:1+2.8-3.6*a+b在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。运算前要进行类型转换,规则如下:必定的转换字符数据整数floatdouble运算对象类型不同时的转换整数double,基本数据类型之间的混合运算,图中横向向左的箭头表示必定的转换,char型数据必定先转换成int型数据再进行运算。纵向的箭头表示不同数据类型的转换方向,C语言的转换规则是由低向高转换

27、。,1.隐式类型转换-转换规则:,int b;float c,f;double d;long e;c=10+a+b*f-d/e;,运算次序是:1)先计算右侧的表达式。进行10+a运算。先将a转换为整数97,运算结果为整数107。2)进行b*f运算。先将b和f均转换为double类型,运算结果是double类型。,隐式类型转换:举例,3)整数107与b*f的积相加。先将整数107转换为double类型(107.0),运算结果是double类型。4)进行d/e运算。先将long e转换为double类型,运算结果是double类型。5)进行(3)-(4)运算,结果为double类型。6)将右侧表达

28、式的结果转换为float型,并赋给c。,#include void main()int i;float f;double d,result;long e;i=12;f=3.6F;d=12.2;e=366;result=10+a+i*f-d/e;printf(%fn,result);,数据类型之间的隐式转换举例:,一般形式:(类型名)(表达式)如:(int)x+y,(double)a 举例 main()float x;int i;x=3.6 i=(int)x;printf(“x=%f,i=%d”,x,i);,结果:x=3.600000,i=3,2 显式类型转换-强制类型转换,强制类型转换运算符,

29、(类型名)(表达式)(float)7/4(float)3.14(int)3.6(char)23.6,#include void main()float a;int i;char c;a=(float)3.141592612;i=(int)a;c=(char)23.6;printf(a=%f,i=%d;c=%cn,a,i,c);,运算符和表达式,2.7算术运算符和算术表达式,2.7.1C语言运算符和表达式简介,1C运算符 运算符又称操作符,它指示在一个或多个操作数上完成某种运算操作或动作。C语言的运算符按所完成的运算操作分为 算术运算符、关系运算符、逻辑运算符、赋值运算符与其它运算符五类;按参与

30、运算的操作数可分为:单目运算符、双目运算符和三目运算符。,运算符和表达式,2C表达式 从一般意义上讲,表达式是由运算符和操作数组成的符合C语言语法规范的算式。算术运算符表达式、关系运算符表达式、逻辑运算符表达式、赋值运算符表达式与逗号表达式;表达式运算的结果是一个值,称为表达式的值,结果的数据类型称为表达式值的类型。,算术表达式,用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子,称为C算术表达式a+b-ca*b-ca*(b-c)a*b/c-1.5+a+5%3,2.7.2算术运算符和算式表达式,1.基本的算术运算符加法运算符 or 正值运算符 减法运算符 or 负值运算符 乘法运算符

31、*不能写为 or 除法运算符/模运算符 or 求余运算符%两侧必须为整数,所以它只适用于整型和字符型7%4,120%a,基本的算术运算,a*12.77 10/5 7%5 10%2 12.0%6?(这是一个分数),写成C的形式:1/22+7/3*9-(5+4)*4%6 自左至右结合,表达式中的括号不管有多少层,一律使用圆括号。如(x+(y-10)/(a*a-b)。在将一个数学上的运算式写成对应的C语言的表达式时,要注意进行必要的转换 乘号不能省略。如在数学上两个量相乘可写成xy,而写成C语言的运算式时必须写成x*y。数学表达式中出现的数学运算函数要用C语言提供的对应的数学运算库函数来代替。如:在

32、数学上求一个数x的平方根,在C语言中要写成sqrt(x)。类似的还有求绝对值、指数函数、对数函数和三角函数等。,注意事项,3.要特别注意表达式中两个整型数相除的情况如:有一数学表达式为2/3(f-32),要写成对应的C语言的表达式时,如果只简单地写为2/3*(f-32)时,则该表达式的值永远为0;因为式中的2和3都为整型常量,在计算2/3时按、整型数据的除法运算,则结果为0,但结果0并不是我们所期望的运算结果。所以,正确的写法应是2.0/3.0*(f-32)。,注意事项,4.ab与a%b的区别:ab:a,b均为整数时,结果为整数a,b当中有一个为实数时,结果即为double型负数时,“向零取整

33、”,如-5/3=-1ab:a,b必须为整型数据,如 8%5=3,1%2=1负数时,符号与被除数相同,如-5%3=-2,5%-3=2,注意事项,5.算术表达式和运算符的优先级与结合性算术表达式的定义 a*b/c-1.5+a运算符的优先级和结合性,注意事项,2.算术运算符的优先级与结合性,优先级(运算符的优先级不同时)先括号,再乘除(包括求余运算),后加减a*(b-c)+e%d结合性(运算符的优先级相同时)算术运算符的结合性为“自左至右”,称为“左结合性”,先与左边的运算符结合+-运算符的结合顺序是自右至左。a+b-c,a*b/c,表中,同一行的运算符具有相同的优先级,其优先级按从上到下的顺序递减

34、;如:圆括号运算符的优先级最高,逗号运算符的优先级最低。当同一表达式中有多个优先级相同的运算符时,则根据其结合性确定运算顺序。C语言中,对表达式求值时,先按优先级确定运次序,再将优先级相同的运算符按结合性进行运算。如表达式a+!b+c-,先求解!b和c-,然后a加上!b再加上c-得出最后的结果。,解释说明:,自增作用结果:i=i+1;区别:i+是先使用i的值,再执行i=i+1+i是先执行i=i+1,再使用i的值举例:i=3;k=i+;则k=3,i=4;printf(“%d”,i+);结果3 printf(“%d”,+i);结果4,自增、自减运算符,a=6,b=6;,a=6,b=5;,问题,in

35、t i=10;printf(%d%d%dn,+i,i,-i);问输出的结果是什么?10 9 9这个问题跟函数的参数的执行顺序有关。C语言中规定,在多数系统中对函数参数求值顺序是自右而左的。,+,-只能用于变量,而不能用于常量和表达式。如:5+,+(a+b)都不对。+,-的结和特性是自右至左 如:-i+相当于:-(i+),注意事项,如:2+(2*b-1)-,如:-a+-(a+)(-a)+,问题:i+j 怎么处理?,2023/8/4,自增、自减运算符,在表达式中包含自增、自减运算符时,容易出错i=3;i=3;k=(i+)+(i+)+(i+);k=(+i)+(+i)+(+i);9 18处理一个运算符

36、与两个运算符相同的情况,C编译在处理时尽可能的(自左向右)将若干个字符组成一个运算符。k=i+j k=i-j等效于:等效于:k=(i+)+j k=(i-)-j而非 而非 k=i+(+j)k=i-(-j),自增、自减运算符举例,#include void main()int i,j,k,u,w;i=3;j=i+;k=+i;u=-i+;w=-+i;printf(%d,%d,%d,%d,%dn,i,j,k,u,w);,程序运行结果:7,3,5-5-7,关系运算符和关系表达式,关系运算符就是对两个量之间进行比较的运算符 优先级低于传统运算,但高于赋值运算符;其运算的结果只有“真”和“假”。,由关系运算

37、符将两个表达式连接形成的运算式子称为关系表达式;注意=与赋值运算符=的区别对于由两个字符组成的运算符,其两个字符间不可以加空格。字符数据的比较是按照其 ASCII,如“=”不能写成“=”,一个关系表达式的值是一个逻辑值;因此一个关系表达式的值只能是真或是假。c语言没有逻辑型数据.而是以1 代表”真即表达式成立:以0代表假,即不成立;10!=9 的值是1,如:假设a=1,b=20,c=3,则ab表达式成立,其值为1b=c表达式不成立,其值为0(a+b)!=c表达式成立,其值为1,如:53为1 38为0,数学上判断x是否在区间a,b中,习惯上写成 a x b,但在C语言中正确的写法应当是:,a=x

38、&x=b&逻辑运算符“与”,而不是a=x=b表达式 a=x=b,则是先求 a=x 的值后再与 b 做关系比较。,逻辑运算符和逻辑表达式,1.逻辑运算符 逻辑运算符是对两个逻辑量间进行运算的运算符。,2.逻辑表达式 由逻辑运算符将两个表达式连接形成的式子。,逻辑运算符和逻辑表达式,注意事项,对于参加逻辑运算的操作数,系统认为“非0”为真,“0”为假。而逻辑表达式的结果只能为逻辑真(1)或逻辑假(0)。逻辑表达式的最终计算结果值,用1表示真,用0表示假。但在进行逻辑运算的过程中,凡是遇到非零值时就当真值参加运算,遇到0值时就当假值参加运算。如:int a=10,b=15,c=14;则(a+6)&(

39、bc)的值为1,如 设a=4,b=3 a&b 值为1 a|b 值为1!a 值为0如:a&b结果为1,在一个表达式中注意优先级。例53&2|84-!0 的结果为1。,在逻辑表达式的求值过程中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的值时才执行该运算符。a&b&c 只有a为真时,才需要判别b的值;只有a和b的值都为真时,才需要判别c的值;只要a为假,就不必判别b和c;如果a为真,b为假,不判别c。(为什么?)a|b|c 只要a为真,就不必判别b和c。(为什么?),注意事项,即系统将自动执行“短路”操作,如int i=10;则表达式i&(i=0)&(+i)的值为

40、0(假),该表达式运算结束后,变量i的值为0,而不是1。(为什么?),注意事项,int a=-1,b=4,k;int a=1,b=2,c=3,d=4,m=1,n=1 k;k=(+a b)结果为:m=0,n=1,k=0。的结果为:0,0,,例如:int a=2,b=1,c=4,t;t=a|(bc)|(ac);t 的值是,如:int i=1,j;则表达式i+|i+|i+的值为1(真),运算结束后,变量i的值为2,而不是4。(为什么?),对于数学上的表示多个数据间进行比较的表达式,在C语言中要拆写成多个条件,并用逻辑运算符将其连接形成一个逻辑表达式,而不能直接照搬。如:在数学上,要表示一个变量a的值

41、处于-1和-9之间时,可以 用-9-9&a-1。,注意事项,因为,假设变量a当前的值为-5,它的值确实处在-1和-9之间。但在C语言中求-9-9&a-1的形式。,注意事项,条件运算符和条件表达式,在C语言中只提供了一个三目运算符-条件运算符“?:”,其一般形式为:表达式1?表达式2:表达式3 条件运算的运算规则是:首先判断表达式1的值,若其值为真(非0),则取表达式2的值为整个表达式的值;若其值为假(0),则取表达式3的值为整个表达式的值。如:若a=3,b=4,则条件表达式ab?a:b的值为4。,2.8逗号运算符和逗号表达式,一般形式:表达式1,表达式2,表达式n求解过程:先求表达式1的值,然

42、后再求表达式2的值,,整个逗号表达式的值为表达式n的值。,逗号运算符和逗号表达式,如:2+3,3*5 则表达式最后值为。,15,(1)优先级最低,如:x=2+3,x-4 则表达式最后值为。,1,(2)逗号表达式可以嵌套,即表达式n本身也可以为一逗号表达式,如:(x=2*5,x-3),x*4 则表达式最后值为.,40,(3)并非所有出现逗号的地方,就可以作为逗号表达式,如:printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),x,y);,举例,#include void main()int i=2,j;(j=3*i,j+2),j*5;printf(

43、j=%dn,j);程序运行结果:j=6,#include void main()int i=2,j=4;printf(%dn,(i=i+1,i+j,j+1);程序运行结果:5,C语言的标准库函数,C语言编译系统预先编写好的公共函数,是不需要用户编写的,而直接在用户程序中通过调用方式来使用的函数。例如:求平方根函数(sqrt)、乘方运算函数(pow)、三角函数中的正弦函数(sin)在程序中用#include命令行包含所需的头文件#include 或#include“头文件名”注意:头文件均是以“.h”作为文件名的后缀,使用C语言的标准库函数,库函数的一般调用方法是:函数名(参数表)使用库函数时要

44、掌握如下方法:在程序中用#include命令行包含所需的头文件。了解所使用函数的作用。,使用C语言的标准库函数,#include/*包含头文件math.h*/main()double x=3.0;printf(“n%fn,sqrt(x*x+1);/*调用C语言库函数sqrt*/,例如:利用函数求 的值()(设x3),基本数据类型的定义、长度、范围字符常量与字符串常量的区别基本算术运算符及自增、自减运算符复合赋值运算符,本章重点内容,作业2-必须上交,P39第5题第6题第7题第8题第9题,输入并运行习题2.9(P39)分别作以下改动并运行:()将第四行改为:m=i+;n=+j;()程序改为:ma

45、in()int i,j;i=8;j=10;printf(“%d,%d”,i+,j+);,思考题,()在()基础上,将printf语句改为:printf(“%d,%d”,+i,+j);()再将printf语句改为:printf(“%d,%d,%d,%d”,i,j,i+,j+);()程序改为:main()int i,j,m=0,n=0;i=8;j=10;m+=i+;n-=-j;printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);,通知,下节有小测验!,问题与讨论,1.常见C语言的数据类型有哪些?2.什么是常量?什么是变量?3.什么是标识符?在使用标识符时需要注意什么?4.整

46、型变量如何分类?不同类型整型变量所占字节和取值范围是多少?,问题与讨论,1.程序改错与分析 main()int a;b;sum;c;a=3,b=6;sum=a+b,c=a*b,printf(“a+b=n%d,sum)printf(“a*b=%dn,sum),输出结果应该上什么?,问题与讨论,2.程序改错与分析 main()int a,b,max,scanf(%d,%d,输出结果应该上什么?,问题与讨论,3 改错与分析#define PI 3.1415926/*定义符号常量*/main()float r,area;scanf(“%d”,r);area=PI*r2;printf(“area=%d”,area);,问题与讨论,4改错与分析,main()int a,b;a=32768;b=a-1;printf(“a=%d,b=%dn”,a,b);,问题与讨论,5 改错与分析,main()int long a,b;a=32768;b=a-1;printf(“a=%d,b=%dn”,a,b);,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号