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

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

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

1、程序是解决某种问题的一组指令的有序集合。著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:程序=数据结构+算法,学习的意义,程序是什么?,对数据的描述。在C语言中,体现为数据类型的描述!,对数据处理的描述。是为解决一个问题而采取的方法和步骤,是程序的灵魂!,结论:学好C语言首先就必须十分了解C语言的数据类型、运算符与表达式。,2.1 C语言数据类型,数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作,本章所介绍的数据类型,3.2 常量、变量和标识符1.标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母

2、或下划线C语言的关键字不能用作变量名 大小写敏感长度:有效长度为32个字符。随系统而异,但至少前8个字符有效命名原则:变量名和函数名中的英文字母一般用小写,以增加可读性 见名知意不宜混淆 如l与I,o与0,在TC2.0及BC3.1中,变量名(标识符)的有效长度为个字符,缺省值为,但在VC中其长度可达到255,例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$123,M.D.John,3days,#33,char,$123,ab,.字符非法,数字3不可作首字符,#字符非法

3、,char是关键字,字符非法,$不可作首字符,3.2 常量、变量和标识符2.常量定义:程序运行时其值不能改变的量(即常数)常量的分类:直接常量(值常量)整型常量:10、15、-10、-30 实型常量:12.5、30.0、-1.5 字符常量:A、b、c 字符串常量:“sum”、“A”、“123”符号常量 用标识符来代表常量。其定义格式为:,#define 符号常量 常量,#define NUM 20#define PI 3.1415926,#include#define PRICE 30void main()int num,total;num=10;total=num*PRICE;printf(

4、total=%d,total);,运行结果:total=300,行尾不能有分号 define前面一定要有#符号常量名最好使用大写 符号常量名最好有意义,3.2 常量、变量和标识符3.变量定义:程序运行时其值可以被改变的量 变量的两要素:变量名、变量值变量的定义格式:变量的初始化:定义时赋初始值变量的使用:先定义,后赋值变量定义位置:一般放在函数开头,存储类型 数据类型 变量名1,变量名2,变量名n;,int x,y,z;float radius,length,area;char ch;,决定分配字节数和数的表示范围,合法标识符,例:int a=2,b,c=4;float data=3.67;c

5、har ch=A;int x=1,y=1,z=1;int x=y=z=1;,例1:int student;stadent=19;/Undefined symbol statent in function main,例2:float a,b,c;c=a%b;/Illegal use of floating point in function main,3.3 简单数据类型与表示范围,1.整型数据,整型常量,十进制整数:由数字09和正负号表示.如:123,-456,0八进制整数:由数字0开头,后跟数字07表示.如:0123,011十六进制整数:由0 x或0X开头,后跟09,af,AF表示.如0 x

6、123,0Xff,定义整数的符号常量#define NUM1 20/十进制数20#define NUM2 020/八进制数(十进制16)#define NUM3 0 x2a/十六进制数(十进制42),思考题:下列整型常量哪些是非法的?012,oX7A,00,078,0 x5Ac,-0 xFFFF,0034,7B。,首字符不能是字母o,八进制数中不能有数字8,十进制数中不能有字母B,2.整数常量的分类,根据其值所在范围确定其数据类型。在TC2.0或BC3.1下,如果整型常量的值位于-3276832767之间,C语言认为它是int型常量;如果整型常量的值位于-2147483648214748364

7、7之间,C语言认为它是long型常量。整型常量后加字母l或L,认为它是long int 型常量。比如123L、45l、0XAFL。无符号数也可用后缀表示,整型常数的无符号数的后缀为U或u。例如:358u,0 x38Au,235Lu 均为无符号数。前缀、后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进制无符号长整数A5,其十进制为165。,3.实型数据,实型常量(实数或浮点数),十进制小数形式:由数字09和小数点组成.如:0.0,5.6,-5.指数形式:由十进制数,加阶码标志e或E以及阶码(只能为整数,可以带符号)组成.其一般形式为:aEn 其中:a为十进制数,n为十进制整数,都不可缺

8、少。其可表示为a10n,合法的实数表示:2.1E5 表示2.1105,3.7E-2 表示3.710-2。,非法的实数表示:345(无小数点),E7(阶码标志E之前无数字),-5(无阶码标志),50.-E3(负号位置不对),实型变量,单精度实型(float)float f=3.14,g;这种定义的变量在内存中占4个字节(32位)的存储单元。双精度实型(double)double x,y;这种定义的变量在内存中占8个字节(64位)的存储单元。长双精度实型(long double)long double x,y;在TC或BC下,这种定义的变量在内存中占10个字节(80位)的存储单元;在VC下则占8个

9、字节(64位)。,注意:三种实数类型中,其精度是 float double long double;long float实际上就是double,因此,没有long float类型;所有的实型常量按照double类型处理。,3.实型数据,实型数据的精度,#include void main()float a;/定义float型变量a double b,c;/定义double型变量b和c a=123.456789;/对变量a赋值为123.456789 b=a;/将变量a赋给变量b c=123.456789;/对变量c赋值为123.456789 printf(a=%f b=%lf c=%lfn,a,

10、b,c);,123.456787,123.456787,123.456789,a=123.456787 b=123.456787 c=123.456789,float型变量最多只能精确表示8个数字,因此显示a的值时,只能有效显示前面8个数字即123.45678,最后追加一位数字7是随机的,课 堂 练 习,题目:编写程序,计算半径为15.67cm的圆面积。要求分别使用单精度型和双精度型数据计算。#define PI 3.14159,4.字符型数据和字符串常量,字符型常量,定义:用单引号括起来的单个普通字符或转义字符.,如 a A?n 101,字符常量的值:该字符的ASCII码值,如 A65,a9

11、7,048,n10,转义字符:反斜线后面跟一个字符或一个代码值表示,如 101-A 012-n 376-x61-a 60-0 483-(),例:A-101-x41-65,例:转义字符举例#include void main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Visual C);,运行结果:(屏幕显示)A B CI say:”How are you?”C ProgramVisual C,例:void main()printf(“Yb=n”);,运行结果:屏幕显示:=打印机输出:,字符

12、串常量 定义:用双引号(“”)括起来的字符序列 存储:每个字符串尾自动加一个 0 作为字符串结束标志,例1:字符串“HELLO”在内存中,例2:空串“”,0,字符常量与字符串常量不同,例:char ch;ch=“A”;,例:char ch;ch=A;,课 堂 练 习,题目:1、输入两个字符,如果先输入的字符大则输出1,否则输出0;或输入一个字符,输出它的下一个字符;,课 堂 练 习,2、假设变量ch中已经存放字母A,编写程序将ch中的字母转换成小写字母后输出。3、编写程序,在屏幕上输出,5.简单数据类型的表示范围,符号位,十六位整型数所表示的数据范围,数据位,6.简单的数据输出,C语言中没有用

13、于输出的语句,只能通过标准库函数的调用来完成数据的输出任务。库函数的一般调用格式为:,函数名(参数1,参数2,参数n);,printf函数:,例:printf(How are you!);,输出:How are you!,例:int a=100;printf(variable a=%d,a);,输出:variable a=100,%d:用于显示有符号整型数据,如int、short型数据;%u:用于显示无符号整型数据,如unsigned int、unsigned short型数据;%f:用于显示实型数据,如float型数据;%c:用于显示字符型数据,如char型数据;%s:用于显示字符串数据。,

14、格式控制符,例:简单的数据输出,#include void main()int a,b;unsigned int u;long L;char ch;float f;a=200;b=-1;u=b;L=u;ch=A;f=32.17;,printf(a=%dt,a);printf(b=%dn,b);printf(u=%ut,u);printf(L=%ldn,L);printf(f=%fn,f);printf(ch is%c and value is%dn,ch,ch);printf(I love C language!rYoun);/I后有三个空格,在VC下:a=200 b=-1u=42949672

15、95 L=-1f=32.169998ch is A and value is 65You love C language!,在BC下:a=200 b=-1u=65535 L=65535f=32.169998ch is A and value is 65You love C language!,b的值是-1,在内存中表示为:0 xffff(BC下),0 xffffffff(VC下),当它赋给u时,由于u是无符号数,因此u的值是65535(BC下),4294967295(VC下)。,L是有符号长整型,u是无符号整型。在BC下,L占4字节,u占2字节,当把u赋值给L时,L的高2个字节为全0(因u无符

16、号),故L的值为0 x0000ffff,即65535。但在VC下,L和u都占4字节,当把u赋值给L时,L的值为0 xffffffff,即-1。,2.4 C语言的运算符与表达式,变量用来存放数据,运算符则用来处理数据。用运算符将变量和常量连接起来的符合C语法规则的式子被称为表达式。,运算符的分类:单目运算符:只带一个操作数的运算符。如:+、-运算符。双目运算符:带两个操作数的运算符。如:+、-运算符。三目运算符:带三个操作数的运算符。如:?运算符。,学习运算符时应注意:运算符的功能:该运算符主要用于做什么运算。与运算量关系:要求运算量的个数及运算量的类型。运算符的优先级:表达式中包含多个不同运算

17、符时运算符运算的先后次序。运算符的结合性:同级别运算符的运算顺序(指左结合性还是右结合性)。运算结果的类型:表达式运算后最终所得到的值的类型。,课 堂 练 习,题目:酒杯A中盛有红酒,酒杯B中盛有白酒,请将两杯中的酒交换。,题目:输入两个整数给两个变量赋值,然后将两个变量的值互相交换。,1.赋值运算符、赋值表达式,赋值运算符(“”,双目运算符),一般形式:,变量=常量或变量或表达式,功能:将右边常量或变量或表达式的值赋给左边变量,例如:int x,y,z;x=20;y=x;z=x+y;,赋值表达式,定义:,由赋值运算符或复合赋值运算符(后面即将介绍),将一个变量和一个表达式连接起来的表达式,称

18、为赋值表达式。,一般格式:,变量(复合)赋值运算符 表达式,赋值表达式的值:被赋值变量的值。,例如:“a=5”这个赋值表达式,变量a的值“”就是它的值。,赋值语句,例如:x=8;a=b=c=5;,定义:赋值表达式在其后面加分号就构成了赋值语句。,赋值运算符及赋值表达式的使用,多个变量连续赋值,例如:a=b=c=10;,a=(b=(c=10);,结果:a、b、c的值都为10,赋值表达式的嵌套,例如:a=(b=2)+(c=3),(a=(b=2)+(c=3),结果:b为2,c为3,a为b+c即5,注意:赋值语句“=”左边必须是变量名或对应某特定内存单元的表达式(后面的章节会遇到这样的表达式),不能是

19、常量或其它表达式。例如:30=a;b+2=5;都是错误的。赋值语句中的“=”表示赋值,不是代数中相等的意思。要表示相等的意思则应用关系运算符“=”表示,二者切勿混淆!,说 明,以下赋值语句是否可行?int z;z=53;z=513;z=5=5;,2.强制类型转换符,C语言的数据类型是可以相互转换的。转换的方法有两种:一种是自动转换,一种是强制转换。,自动转换,例如:int a=2.5;则a的值将是2,而不是2.5。这种自动改变等号右边表达式值的数据类型的操作称为数据类型的自动转换。,首先将等号右边的表达式的值转换成“=”左边的数据类型。然后再赋值给等号左边的变量。,(1)短长度的数据类型 长长

20、度的数据类型,方法:直接将无符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,长长度的数据类型数据的高位部分补零。,无符号短长度的数据类型 无符号或有符号长长度的数据类型,xxx,无符号短长度的数据类型,0,0,.,.,.,.,.,0,.,.,.,.,.,高位部分补0,例如:unsigned char ch=0 xfc;unsigned int a=0 xff00;/假设int数据为16位 int b;unsigned long u;b=ch;/b的值将是0 x00fc u=a;/u的值将是0 x0000ff00,如果将ch的值赋给-4,问b的值又是多少呢?,0 x00fc,2.强

21、制类型转换符,自动转换,(1)短长度的数据类型 长长度的数据类型,方法:直接将有符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,然后将低位部分的最高位(即有符号短长度数据的符号位)向长长度的数据类型数据的高位部分扩展。,有符号短长度的数据类型 无符号或有符号长长度的数据类型,zxx,有符号短长度的数据类型,z,符号位向高位部分扩展,z,z,符号位,例如:char ch=2;int a=-2;int b;unsigned long u;b=ch;/b的值将是2 u=a;/u的值将是0 xfffffffe,2.强制类型转换符,自动转换,(2)长长度的数据类型 短长度的数据类型,方法:

22、直接截取长长度的数据类型数据的低位部分(长度为短长度的数据类型的长度)作为短长度数据类型的数据。,例如:int a=-32768;/假设int数据为16位 unsigned long b=0 xffffaa00;char ch;int c;ch=a;/ch的值将是0 c=b;/c的值将是0 xaa00,(3)长度相同的数据类型转换,方法:数据按照原样复制即可。,例如:int a=0 xff00;unsigned int b=a;/b的值将是0 xff00,2.强制类型转换符,强制转换,强制类型转换是通过类型转换运算来实现的。其一般形式为:,(类型说明符)(表达式),功能:把表达式的运算结果强制

23、转换成类型说明符所表示的类型。其中,(类型说明符)是强制类型转换符,它的优先级比较高。,例:float x=3.5,y=2.1,z;int a;a=(int)(x+y);/结果为5 z=(int)x+y;/结果为5.100000 z=(double)(3/2);/结果为1.000000 a=(int)3.6;/结果为3,精度损失问题,注意:在使用强制转换时应注意以下问题:类型说明符和表达式都必须加括号(单个变量可以不加括号)。例如:把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时

24、性转换,而不改变数据说明时对该变量定义的类型。例如,(double)a 只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。,基本算术运算符:+-*/%结合方向:从左向右 优先级:-*/%-+-(2)(3)(4)说明:“-”可为单目运算符时,右结合性 两整数相除,结果为整数%要求两侧均为整型数据,例:5/2=-5/2.0=,例:5%2=-5%2=1%10=5%1=5.5%2,3.算术运算符、算术表达式,2,-2.5,1,-1,1,0,(),课 堂 练 习,1、编写程序,计算两个数的和和差,要求从键盘输入两个数。2、编写程序,计算函数y=2x/(x-5)的值,其

25、中自变量x的值从键盘输入。3、编写程序,给小学生出1道100以内2个数的加法题,等学生说出自己的答案后,再告诉学生正确的答案。,课 堂 练 习,题目:输入一个四位数,反序输出这个数;或输出这个数的千位、百位、十位和个位。,课 堂 练 习,一个3位数的个位数立方、十位数立方、百位数立方之和如果等于这个数本身,就称为水仙花数。从键盘输入一个3位的整数,验证它是否为水仙花数。,表达式和算术表达式,3.算术运算符、算术表达式,表达式:用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子。算术表达式:表达式中的运算符都是算术运算符的表达式。,运算符优先级(到目前为止),例:3

26、+5*8、(x+y)/2-1等,自增、自减运算符+-作用:使变量值加1或减1 种类:前置+i,-i(先执行i=i+1或i=i-1,再使用i值)后置 i+,i-(先使用i值,再执行i=i+1或i=i-1),例:j=3;k=+j;j=3;k=j+;j=3;printf(“%d”,+j);j=3;printf(“%d”,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,4.自增自减运算符、符号运算符,负号运算符(“-”)减号()既是一个算术运算符,又是一个负号运算符。负号运算符是单目运

27、算符。例如:a=2,那么a的值就是2。负号运算符的优先级比较高,与强制类型转换符是同一个级别。,自增、自减运算符注意事项+和-运算符只能用于变量,不能用于常量和表达式。因为+和-蕴含着赋值操作。例如:5+、-(a+b)都是非法的表达式。负号运算符、+、-和强制类型转换运算符的优先级相同,当这些运算符连用时,按照从右向左的顺序计算,即具有右结合性。两个和之间不能有空格。在表达式中,连续使同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。例如:+i+是非法的。自增、自减运算,常用于循环语句中,使循环控制变变量加(或减)-,以及指针变量中,使指针指向下(或上)一个地址。,4.自增自减运

28、算符、符号运算符,例:int p,i=2,j=3;p=-i+;p=?i=?p=i+j;p=?i=?j=?p=i+-j;p=?i=?j=?p=i+-j;p=?i=?j=?p=i+i+;p=?i=?p=+i+(+i);p=?i=?,-2,3,5,3,3,4,2,2,4,3,2,4,4,4,8,5.算术运算符中数据类型转换规则,#include void main()float a,b,c;a=7/2;/计算7/2得int型值3,因此a的值为3.0 b=7/2*1.0;/计算7/2得int型值3,再与1.0相乘,因此b的值为3.0 c=1.0*7/2;/先计算1.0*7得double型的结果7.0,

29、然后再计算 7.0/2,因此c的值是3.5 printf(a=%f,b=%f,c=%f,a,b,c);,a=3.000000,b=3.000000,c=3.500000,6.位运算符、位运算表达式,位运算符:按位与(&)、按位或(|)、按位取反()、按位异或()、左移()六种。,左移()实现将某变量所对应的二进制数往左移位,溢出的最高位被丢掉,空出的低位用零填补。其一般格式为:,返回整型值的表达式 返回整型值的表达式,例:int a=3;a 2:将a所对应的二进制数左移两位,该表达式的值为12。2 a:将2所对应的二进制数左移三位(a的值),该表达式的值为16。,右移()右移运算实现将某变量所

30、对应的二进制数往右移位,溢出的最低位被丢掉,如果变量是无符号数,空出的高位用零填补,如果变量是有符号数,空出的高位用原来的符号位填补(即负数填1,正数填0)。其一般格式为:,返回整型值的表达式 返回整型值的表达式,例:int a=8;a 2:将a所对应的二进制数右移两位,该表达式的值为2。,例:将short类型数据的高、低位字节互换#include void main()short a=0 xf245,b,c;b=a 8;/将a的高8位移到低8位赋值给c,c的值为0 xfff2 c=c,a=0 x45f2,位运算之间的优先级&|,7.逗号运算符、逗号表达式,位运算符:,逗号表达式:用逗号连接起

31、来的表达式。其一般形式为:,表达式1,表达式2,表达式k,优先级:优先级最低。结合性:左结合性。即逗号表达式的求值顺序是从左向右依此计算用逗号分隔的各表达式的值。逗号表达式的值:最后一个表达式的值就是整个逗号表达式的值。用途:常用于循环for语句中。,例如:a+3,b=4,b+,例:a=3*5,a*4 a=3*5,a*4,a+5例:x=(a=3,6*3)x=a=3,6*a例:a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);,/a=15,表达式值60,/a=15,表达式值20,/赋值表达式,表达式值18,x=

32、18,/逗号表达式,表达式值18,x=3,/1,2,3,/3,2,3,例:#include void main()int x,y=7;float z=4;x=(y=y+6,y/z);printf(x=%dn,x);,运行结果:x=3,8.sizeof运算符、复合运算符,sizeof运算符 功能:获取变量和数据类型所占内存大小(字节数)格式:,sizeof 表达式sizeof(数据类型名或表达式),例:sizeof(int)其值为2(在TC2.0或BC3.1下)其值为4(在VC6.0下)sizeof(long)其值是4 sizeof 10L 其值也是4 unsigned long a=2;siz

33、eof(a)其值也是4,复合赋值运算符,种类:+=-=*=/=%=&=|=含义:exp1 op=exp2 exp1=exp1 op exp2,定义:将算术运算符、位运算符与赋值运算符组合在一起就构成了复合赋值运算符。复合赋值运算符即包含了算术运算或位运算,又包含了赋值操作。,例:a=12;a+=a-=a*a;,/a=-264 等价于a=a+(a=a-(a*a),例:int a=2;a%=4-1;a+=a*=a-=a*=3;,/a=0 等价于a=a+(a=a*(a=a-(a=a*3),2.5 运算符的优先级和结合性,判断表达式0XF0F0&0X1010+0X0A0A 5/2的值?0XF0F0&0

34、X1010+0X0A0A 5/2,2,0X1A1A,0X6868,0XF0F0&,0X6060,/的优先级最高,+的优先级比&、高,的优先级比&高,C语言编程习惯,(1)一行只放一条语句。(2)养成随时给程序加注释的习惯。(3)程序的书写要有层次感,该缩进的一定要缩进。(4)编写函数时,变量定义部分和函数的执行部分之间增加一空行,或者在程序的执行部分按照完成的功能块增加相应的空行,会增加程序的易读性。(5)为变量起有意义的名字,既可以帮助程序员读懂程序,也可以避免变量的重复乱用,导致程序的逻辑错误。(6)在运算符和赋值符的两边加上一个空格会增加程序的易读性。,本章小结,习题:P70P73 1、2,本章所介绍的主要内容是整型数据、实型数据和字符型数据的常量表示法和变量定义格式,以及可以作用于这些数据类型的运算符。虽然本章的内容比较烦杂,学起来也许比较枯燥,但本章的内容是学好C语言的基础,是每个C语言程序员必须熟练掌握的。现在我们一起来回忆一下本章有哪些内容值得我们特别留意和必须深刻领会的呢?变量的含义 数据在内存中的表示形式 不同类型的数据在内存中的表示范围 转义字符 有符号数与无符号数的区别 数据类型的自动转换与强制类型转换 各种运算符、运算符的优先级和结合性,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号