欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

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

    • 资源ID:4995995       资源大小:1.28MB        全文页数:98页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    第2章 数据类型、运算符与表达式,C语言程序设计基础,复习回顾,C语言的特点C语言程序格式特点及基本结构C语言的上机步骤.C,.obj,.exe 的区别,一个简单的C程序例子,#include/*函数功能:计算两个整数相加之和 入口参数:整型数据a和b 返回值:整型数a和b之和*/int Add(int a,int b)return(a+b);/*主函数*/main()int x,y,sum=0;printf(Input two integers:);scanf(%d%d,/*输出x和y相加之和*/,本章内容提要,基本数据类型;常量和变量;标识符命名;常用运算符和表达式;运算符的优先级与结合性 变量的地址和指向变量的指针,本章重点,C语言的数据类型及其使用范围字符串常量与字符常量的区别转义字符的使用C语言中的运算符和表达式,及各类数据的混合运算掌握变量的地址和指向变量的指针,本章难点,不同数据类型的使用范围赋值运算符和赋值表达式数据的隐式转换问题逗号运算符和逗号表达式运算符的优先级问题指针变量,第一讲 数据类型,C程序常见符号分类,关键字(Keyword)又称为保留字,C语言中预先规定的具有固定含义的一些单词 标识符(Identifier)系统预定义标识符用户自定义标识符 运算符(Operator)34种,详见附录B 分隔符(Separator)空格、回车/换行、逗号等 其它符号 大花括号“”和“”通常用于标识函数体或者一个语句块“/*”和“*/”是程序注释所需的定界符 数据(Data)变量(Variable)常量(Constant),2.1 C语言的数据类型(Data Type),数据为什么要区分类型?不同类型的数据代表不同的数据表示形式合法的取值范围占用内存空间大小可参与的运算种类 从基本数据类型到抽象数据类型无数据类型基本数据类型 构造数据类型 抽象数据类型,数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作,数据类型,整型,字符型,实型,有,无,有,3.4e-383.4e38,有,有,说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例:请看int和unsigned int,基本数据类型,标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字不可以是数字开头长度:最长32个字符命名原则:见名知意不宜混淆 如 l 与 I,o 与 0,2.2 常量与变量,例:判断下列标识符号合法性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,-标识符,下划线和大小写通常用来增强可读性variablenamevariable_nameVariableName,variableName某些功能的变量采用习惯命名如:for语句所采用的循环变量习惯用i,j,k,Windows 风格,UNIX 风格,一般用大写字母是宏定义预处理命令,不是C语句直接常量:整型常量 请点击:实型常量 请点击:字符常量 请点击:字符串常量 请点击:,如#define PRICE 30,定义:程序运行时其值不能改变的量(即常数)分类:符号常量:用标识符代表常量定义格式:#define 符号常量 常量,例 符号常量举例(ch2_1.c)#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);,运行结果:total=300,常量,符号常量:定义一个标识符来表示的常量。【例2】#define PRICE 20/*宏定义语句*/main()float num;float sum;/*变量定义*/num=6.0;sum=num*PRICE;printf(“sum=%f”,sum);/*输出结果*/,说明:1、符号常量的值在其作用域内不能改变,也不能再赋值;2、使用符号常量,可以做到一改全改;3、还可以起到一定的注释作用。,直接常量:直接可以看得到数据的常量。【例1】已知每千克牛肉的价格为20元,买6斤需要多少钱。main()float sum;/*变量定义*/sum=20.0*6;/*给变量赋值*/printf(“sum=%dn”,sum);/*输出结果*/,运行结果:(屏幕显示)Sum=120.000000,三种形式:十进制整数:由数字09和正负号表示.如 123,-456,0八进制整数:由数字0开头,后跟数字07表示.如0123,011十六进制整数:由0 x开头,后跟09,af,AF表示.如0 x123,0Xff,例 12 与 12L,例 30000 为int型 65536 为long int 型,整型常量的类型根据其值所在范围确定其数据类型在整常量后加字母l或L,认为它是long int 型常量,问题:0123=()100 x123=()100Xff=()10,整型常量(整常数),表示形式:十进制数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字十进制数;指数必须为整数)如12.3e3,123E2,1.23e4,e-5,1.2E-3.5,实型常量的类型默认double型在实型常量后加字母f或F,认为它是float 型,实型常量(实数或浮点数),定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 101-A 012-n 376-x61-a 60-0 483-(),例:A-101-x41-65,如 A65,a97,048,n10,如 a A?n 101,转义字符:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例(ch2_001.c,ch2_004.c)main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo C);,运行结果:(屏幕显示)A B CIsay:”How are you?”C ProgramTurbo C,例 main()printf(“Yb=n”);,运行结果:屏幕显示:=打印机输出:,字符常量,字符常量与字符串常量不同,定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个 0 作为字符串结束标志,例:char ch;ch=“A”;,字符串常量,概念:其值可以改变的量变量名与变量值变量定义的一般格式:数据类型 变量1,变量2,变量n;,变量初始化:定义时赋初值,例:int a,b,c;float data;,决定分配字节数和数的表示范围,合法标识符,例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;,变量的使用:先定义,后使用,例1 int student;stadent=19;/Undefined symbol stadent in function main,例2 float a,b,c;c=a%b;/Illegal use of floating point in function main,变量定义位置:一般放在函数开头,变量,占字节数随机器不同而不同,一般占一个机器字shortintlong可用sizeof(类型标识符)测量,实型变量float:占4字节,提供7位有效数字double:占8字节,提供1516位有效数字example,字符型变量字符变量存放字符ASCII码char与int数据间可进行算术运算,例1:float a;a=111111.111;/*a=111111.1*/例2:double b;b=111111.111;/*b=111111.111*/,例 a=D;/*a=68;*/x=A+5;/*x=65+5;*/s=!+G/*s=33+71;*/,没有字符串变量,用字符数组存放,整型变量,【exp2.7】一个较大实数加一个较小实数。main()float x=7.24356E10,y;y=x+54;printf(x=%en,x);printf(y=%en,y);,程序执行的结果为:x=7.24356E10 y=7.24356E10,进行计算时,要避免一个较大实数和一个较小实数相加减。,【exp2.8】实型数据的溢出 main()float a,b,c,d;a=1.2E33;b=0.5E-22;c=0.25E-21;d=a/b;d=d*c;printf(c=%fn,d);,结果:Floating point:Overflow,改:d=a*c;d=d/b;或:d=a/b*c;,/*ch2_5.c*/#define PRICE 12.5 main()int num=3;float total;char ch1,ch2=D;total=num*PRICE;ch1=ch2-A+a;printf(“total=%f,ch1=%cn”,total,ch1);,运行结果:total=37.500000,ch1=d,例子,结论:允许对字符变量赋以整型值。在输出时,允许把字符变量按整型量输出,同样也允许对整型变量赋以字符值,把整型量按字符量输出。注意:因字符量存放为单字节,所以当整型量按字符型量处理时,只有低八位字节参与处理。,本次课回顾,基本数据类型,int整数,在目前绝大多数机器上占4个字节。TC2中是2个字节float单精度浮点数,一般是4个字节长double双精度浮点数,一般是8个字节长char字符,一般是1个字节长用来表示256个ASCII字符,或者0255的整数,ASCII字符表1,数据类型修饰符,shortshort int,短整数,一般2个字节长。通常简写为shortlonglong int,长整数,一般是4个字节长。通常简写为longlong double,长双精度(高精度)浮点数,一般是16个字节长。signed用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0),3.4e-383.4e38,基本数据类型,注:对于其它系统中设基本整型占用内存字节数为n,其值域为:-2n-1(2n-1-1);无符号整型变量的值域为:0(2n-1)。,常数(Constant),整型常数18、-31长整型常量 123l、123L、123456l、123456L无符号型常量 123u、123U浮点常数十进制小数形式 123.45、456.78指数形式 1e-2、4.5e3单精度实型常量 123.45f、456.78F、1e-2f、4.5e3F长双精度型常量 123.45l、456.78L、1e-2l、4.5e3L,八进制与十六进制常数,以数字“0”开始的整型常数是八进制数022、-037010和10大小不一样因为八进制并不常用,所以此种表示法比较少见以“0 x”或者“0X”开始的整型常数是十六进制AF和af用来表示十进制的1015十六进制的形式比较常用,尤其在进行位一级的控制的时候0 x12、-0 x1F,-0 x1f,字符(Character)常数,字符常数的表示方法a,A,5,%,$单引号内只能有一个字符,除非用“”开头就是一个普通整数,也可以参与各种数学运算每个字符具有一个0255之间的数值,可从ASCII表查出注意:5和整数5的区别字符的数学运算在密码学内用得比较多,字符常数,转义字符一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示,字符串(String)常数,用双引号括住的由0个或多个字符组成的字符序列I am a string表示空字符串转义字符也可以在字符串中使用引号只作为字符串开始和结束的标志C语言内部用0表示字符串的结束除注释外,是唯一可以出现中文的地方x和x是不同的里定义了一系列专门的字符串处理函数,使用变量要注意,不要对变量所占的内存空间字节数想当然用sizeof获得变量或者数据类型的长度现场演示程序在Turbo C2.0下的运行结果,注意!,#include main()printf(Data type Number of bytesn);printf(-n);printf(char%dn,sizeof(char);printf(int%dn,sizeof(int);printf(short int%dn,sizeof(short);printf(long int%dn,sizeof(long);printf(float%dn,sizeof(float);printf(double%dn,sizeof(double);,变量声明,使用变量的基本原则变量必须先定义,后使用所有变量必须在第一条可执行语句前定义声明的顺序无关紧要一条声明语句可声明若干个同类型的变量声明变量,是初始化变量的最好时机不被初始化的变量,其值为危险的随机数char esc=a;int i=1;int sum=0;float eps=1.0e-5;,实型数据提供的有效数字位数,float型数据提供7位有效数字double型数据提供16位有效数字 使用不当导致舍入误差,#include main()float a;double b;a=123456.789e4;b=123456.789e4;printf(%fn%fn,a,b);,数据在内存中的存储格式,整型实型字符型,char型与int型之间的关系,小写字母转换为大写字母,#include main()char ch=b;ch=b-32;printf(%c,%dn,ch,ch);,#include main()char ch=b;ch=b-(a-A);printf(%c,%dn,ch,ch);,小结,C语言的数据类型分为标准类型、构造类型、指针类型、空类型等四大类;常量与变量:变量必须先定义,后使用;常量有直接常量和符号常量两种形式。C语言规定标识符只能由字母、数字和下划线3种字符组成,并且第一个字符必须为字母或下划线。整型数据:分为短整型(short)、长整型(long)和基本整型(int)3种。根据是否存放符号,又可分为:无符号(unsigned)数和有符号(signed)数。整型常量有3种形式:八进制(前缀0)、十进制(无前缀)、十六进制(0 x为前缀)。整型常量还可以加后缀u、U和l、L来表示无符号数和长整型。实型数据:分为单精度(float)、双精度(double)、长双精度3种。实型常量都是双精度型,可以用十进制小数和指数形式表示。字符型数据:在内存中以ASCII码形式存放。字符型数据可以作为整型数据使用,整型数据也可以作为字符型数据使用,相互转换的一句是ASCII码表,练习,(1)以下选项中合法的标识符是A)1-1 B)11 C)-11 D)1(2)以下选项中不能作为C 语言合法常量的是()。A)cd B)0.1e+6 C)a D)011(3)若函数中有定义语句:int k;,则A)系统将自动给k赋初值0 B)这时k中值无定义C)系统将自动给k赋初值-1 D)这时k中无任何值(4)以下选项中,能用作数据常量的是A)o115 B)0118 C)1.5e1.5 D)115L(5)以下叙述中正确的是()。A)C 程序的基本组成单位是语句 B)C 程序中的每一行只能写一条语句 C)简单C 语句必须以分号结束 D)C 语句必须在一行内写完(6)计算机能直接执行的程序是()。A)源程序 B)目标程序 C)汇编程序 D)可执行程序(7)以下选项中正确的定义语句是()。A)double a;b;B)double a=b=7;C)double a=7,b=7;D)double,a,b;(8)C 源程序中不能表示的数制是()。A)二进制 B)八进制 C)十进制 D)十六进制,1、C2、A3、B4、D5、C6、D7、C8、A,填空(10)若整型变量a 和b 中的值分别为7 和9,要求按以下格式输出a 和b 的值:a=7b=9请完成输出语句:printf(“【7】”,a,b);。(11)若变量x、y已定义为int类型且x的值为99,y的值为9,请将输出语句printf(【7】,x/y);补充完整,使其输出的计算结果形式为:x/y=11,printf(“a=%dnb=%d”,a,b);,printf(“x/y=%d”,x/y);,第二讲 运算符和表达式,运算符和表达式,运算符功能与运算量关系要求运算量个数要求运算量类型运算符优先级别结合方向结果的类型,学习运算符应注意,基本算术运算符:+-*/%结合方向:从左向右优先级:-(负号运算符)-*/%-+-(减)(2)(3)(4)说明:“-”为单目运算符(负号)时,右结合性两整数相除,结果为整数,如运算量中有一个是实型,则结果为双精度实型%要求两侧均为整型数据,例 5/2=-5/2.0=,例 5%2=-5%2=1%10=5%1=5.5%2,算术运算符和表达式,2,-2.5,1,-1,1,0,(),现场演示课本例2.13,补充:,常用的标准数学函数,在C语言中,当要引用标准数学函数库时,通常在程序开头加上预处理,文件包含处理命令#include,或#include”math.h”.,C程序:#include#include”math.h”main()int a=3,b=4,c=5;double area=0,s=0;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(“narea=%fn”,area);,作用:使变量值加1或减1种类:前置+i,-i(先执行i+1或i-1,再使用i值)后置 i+,i-(先使用i值,再执行i+1或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*/,自增、自减运算符+-,作用:使变量值加1或减1种类:前置+i,-i(先执行i+1或i-1,再使用i值)后置 i+,i-(先使用i值,再执行i+1或i-1),说明:+-不能用于常量和表达式,如5+,(a+b)+-结合方向:自右向左优先级:-+-*/%-+-(减)(2)(3)(4),例-i+-(i+)i=3;printf(“%d”,-i+);/-3,例-i+i=3;printf(“%d”,-i+);,自增、自减运算符+-,现场演示课本例2.14,简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式或函数)赋给一个变量,复合赋值运算符种类:+=-=*=/=%=&=|=含义:exp1 op=exp2 exp1=exp1 op exp2,例 a=3;d=func();c=d+2;,赋值运算符和表达式,结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型,例 3=x-2*y;a+b=3;,例 float f;int i;i=10;f=i;则 f=10.0,例 int i;i=2.56;/结果i=2;,例:a=b=c=5 a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2),/表达式值为5,a,b,c值为5,/b=5;a=5,/表达式值11,c=6,a=11,/表达式值10,a=10,b=4,c=6,/表达式值5,a=5,b=10,c=2,说明(1):,结合方向:自右向左 优先级:14 左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型,例:a=12;a+=a-=a*a,例:int a=2;a%=4-1;a+=a*=a-=a*=3;,/a=-264 等价于a=a+(a=a-(a*a),/a=0 等价于a=a+(a=a*(a=a-(a=a*3),说明(2):,注:复合赋值符的优先级和赋值运算符相同(14),结合性也相同(右结合性).使用复合赋值符的目的是简化程序,提高编译效率,并产生质量较高的目标代码.,例2.15,类型转换,在进行赋值操作时,会发生类型转换将取值范围小的类型转为取值范围大的类型是安全的反之是不安全的如果大类型的值在小类型能容纳的范围之内,则平安无事但是,浮点数转为整数,会丢失小数部分,非四舍五入反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用,隐式转换什么情况下发生运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量时输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型,不同类型数据间的转换,char ch;int i;float f;double d;,ch/i+f*d-(f+i),例 1,一般形式:(类型名)(表达式)例:(int)(x+y)(int)x+y(double)(3/2)(int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变,例 main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:x=3.600000,i=3,精度损失问题,显式转换(强制转换),例2.16和2.17,字符串与数值类型之间的转换,int i=123这样用是不行地atof(),atoi(),atol()把字符串转为double,int和long定义在stdlib.h中sprintf()可以用来把各种类型的数值转为字符串定义在stdio.h中,自动类型转换,同种数据类型的运算结果,还是该类型不同种数据类型的运算结果,是两种类型中取值范围更大的那种long double double float long int short char把数据赋值给另外一种类型变量也会发生自动类型转换从小到大,顺利转换从大到小,可能丢失信息(好的编译器会发出警告),类型强转,消除从大到小的警告l=(long)i;可以通过“(类型)表达式”的方式把表达式的值转为任意类型强转时,你必须知道你在做什么强转与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将,#include main()int m=5;printf(m/2=%dn,m/2);printf(float)(m/2)=%fn,(float)(m/2);printf(float)m/2=%fn,(float)m/2);printf(m=%dn,m);,形式:表达式1,表达式2,表达式n结合性:从左向右优先级:15逗号表达式的值:等于表达式n的值用途:常用于循环for语句中,例 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=18,/逗号表达式,表达式值18,x=3,/1,2,3,/3,2,3,逗号运算符和表达式,例:#include main()int x,y=7;float z=4;x=(y=y+6,y/z);printf(x=%dn,x);,运行结果:x=3,关系运算符种类:=!=结合方向:自左向右优先级别:,例 ca+b/c(a+b)ab!=c/(ab)!=c a=bc/a=(bc),关系表达式的值:是逻辑值“真”或“假”,用1和0表示,例 int a=3,b=2,c=1,d,f;ab(ab)=c b+cb f=abc,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,关系运算符和表达式,例 若a=0;b=0.5;x=0.3;则 a=x=b的值为,0,例 5278在C中是允许的,值为,0,例 int i=1,j=7,a;a=i+(j%4!=0);则a=,2,例 a0 结果为 A100 结果为,1,0,关系运算注意(1),例 注意区分“=”与“=”int a=0,b=1;if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);,例 应避免对实数作相等或不等的判断如 1.0/3.0*3.0=1.0 结果为可改写为:fabs(1.0/3.0*3.0-1.0)1e-6,0,关系运算注意(2),会出现警告,但不影响运行结果,逻辑运算符种类:!&|逻辑运算真值表,C语言中,运算量:0表示“假”,非0表示“真”,运算结果:0表示“假”,1表示“真”,逻辑运算符和表达式(1),例 ab&xy a=b|x=y!a|ab,优先级:,结合方向:,/(a=x)&(x=b),/(ab)&(xy),/(a=b)|(x=y),/(!a)|(ab),逻辑运算符和表达式(2),优先级:,结合方向:,例 a=4;b=5;!a a&b a|b!a|b 4&0|2 53&2|84-!0 c&d,值为1,值为0,值为1,值为1,值为1,值为1,/(53)&2|(8(4-(!0)值为1,逻辑运算符和表达式(3),短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例 a(m=ab)&(n=cd),/结果m=0,n=1,逻辑运算符和表达式(4),实例,ch是英文大写字母(ch=A)&(ch=Z)判断某一年year是否是闰年的条件是满足下列两个条件之一:能被4整除,但不能被100整除;能被400整除;(year%4=0)&(year%100!=0)|(year%400=0),一般形式:expr1?expr2:expr3执行过程功能:相当于条件语句,但不能取代一般if语句,例 求 a+|b|printf(“a+|b|=%dn”,b0?a+b:a-b);,例(a=b)?Y:N(x%2=1)?1:0(x=0)?x:-x(c=a&c=z)?c-a+A:c,条件运算符可嵌套 如 x0?1:(x0?-1:0)优先级:13,结合方向:自右向左 如 ab?a:cd?c:d ab?a:(cd?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型,例 x?a:b/x=0,表达式值为b;x0,表达式值为a xy?1:1.5/xy,值为1.0;xy,值为1.5,条件运算符与表达式,优先级,()-.!+-+-*&(类型)sizeof*/%+-=!=&|&|?:=+=-=*=/=%=&=|=,优先级,能背下优先级表的人凤毛麟角用括号来控制运算顺序更直观、方便,并减少出错的概率,结合性,多数运算符为左结合少数为右结合:一元运算符赋值运算符条件运算符,第二讲 小结,本讲主要介绍了C语言中的运算符和表达式,以及各运算符的优先级和结合性.重点介绍+了,-,*,/,%,+,-,以及逗号运算符、复合赋值运算符和强制类型转换运算符,(1)若有表达式(w)?(-x):(+y),则其中与w 等价的表达式是()。A)w=l B)w=0 C)w!=l D)w!=0(2)执行以下程序段后,w 的值为()。int w=A,x=14,y=15;w=(x|y),以下表达式中,值不为6的是A)x*=x+1 B)x+,2*x C)x*=(1+x)D)2*x,x+=2(4)以下不能正确表示代数式2ab/cd的C 语言表达式是()。A)2*a*b/c/d B)a*b/c/d*2 C)a/c/d*b*2 D)2*a*b/c*d(5)表达式(int)(double)(5/2)+2.5)的值是【5】(6)设变量a 和b 已正确定义并赋初值。请写出与a-=a+b 等价的赋值表达式【6】。,练习,1、D2、C3、D4、D,4,a=a-(a+b)或(a=-b),(7)有以下程序#includeMain()int a=1,b=2,c=3,d=0;if(a=1 程序运行后的输出结果是A)1,2,3 B)1,3,2 C)1,3,3 D)3,2,1,答案:C,练习,第三讲 变量的地址和指向变量的指针,为什么引入指针的概念,使程序简洁、紧凑、高效指针为函数提供修改变量值的手段 指针为C的动态内存分配系统提供支持 指针为动态数据结构(如例链表、队列、二叉树等)提供支持,有效地表示复杂的数据结构指针可以改善某些子程序的效率,变量与地址,程序中:int i;float k;,内存中每个字节有一个编号-地址,i,k,编译或函数调用时为其分配内存单元,变量是对程序中数据存储空间的抽象,1、指针的概念,指针:一个变量的地址指针变量:专门存放变量地址的变量叫,2000,指针,指针变量,变量的内容,变量的地址,指针与指针变量,含义,含义:取变量的地址单目运算符优先级:2结合性:自右向左,含义:取指针所指向变量的内容单目运算符优先级:2结合性:自右向左,两者关系:互为逆运算理解,i_pointer-指针变量,它的内容是地址量*i_pointer-指针的目标变量,它的内容是数据&i_pointer-指针变量占用内存的地址,i_pointer&i&(*i_pointer)i*i_pointer*(&i),i_pointer=&i=&(*i_pointer)i=*i_pointer=*(&i),&与*运算符,直接访问:按变量地址存取变量值间接访问:通过存放变量地址的变量去访问变量,例 i=3;-直接访问,3,例*i_pointer=20;-间接访问,20,直接访问与间接访问,例 k=i;-直接访问 k=*i_pointer;-间接访问,10,例 k=i;k=*i_pointer;,例子图解,指针变量与其所指向的变量之间的关系,指针变量的定义一般形式:存储类型 数据类型*指针名;,合法标识符,指针变量本身的存储类型,指针的目标变量的数据类型,表示定义指针变量不是*运算符,例 int*p1,*p2;float*q;static char*name;,注意:1、int*p1,*p2;与 int*p1,p2;2、指针变量名是p1,p2,不是*p1,*p23、指针变量只能指向定义时所规定类型的变量4、指针变量定义后,变量值不确定,应用前必须先赋值,2、指针变量,一般形式:存储类型 数据类型*指针名=初始地址值;,赋给指针变量,不是赋给目标变量,例 int i;int*p=,变量必须已说明过类型应一致,例 int i;int*p=,用已初始化指针变量作初值,例 main()int i;static int*p=.(),不能用auto变量的地址去初始化static型指针,指针变量的初始化,例 main()int i=10;int*p;*p=i;printf(“%d”,*p);,危险!,例 main()int i=10,k;int*p;p=,指针变量必须先赋值,再使用,零指针:(空指针)定义:指针变量值为零表示:int*p=0;,p指向地址为0的单元,系统保证该单元不作它用表示指针变量值没有意义,#define NULL 0int*p=NULL:,p=NULL与未对p赋值不同用途:避免指针变量的非法引用在程序中常作为状态比较,例 int*p;.while(p!=NULL).,void*类型指针表示:void*p;使用时要进行强制类型转换,例 char*p1;void*p2;p1=(char*)p2;p2=(void*)p1;,表示不指定p是指向哪一种类型数据的指针变量,零指针与空类型指针,main()int*p1,*p2,*p,a,b;scanf(%d,%d,运行结果:a=5,b=9 max=9,min=5,5,2006,9,2008,2006,2008,2006,例 输入两个数,并使其从大到小输出,特点:共享内存,“双向”传递,swap(int x,int y)int temp;temp=x;x=y;y=temp;main()int a,b;scanf(%d,%d,例 将数从大到小输出,5,9,5,5,9,COPY,指针变量作为函数参数地址传递,特点:共享内存,“双向”传递,swap(int x,int y)int temp;temp=x;x=y;y=temp;main()int a,b;scanf(%d,%d,例 将数从大到小输出,值传递,5,9,运行结果:5,9,指针变量作为函数参数地址传递,swap(int*p1,int*p2)int p;p=*p1;*p1=*p2;*p2=p;main()int a,b;int*pointer_1,*pointer_2;scanf(%d,%d,5,9,2000,2002,5,9,COPY,5,例 将数从大到小输出,swap(int*p1,int*p2)int p;p=*p1;*p1=*p2;*p2=p;main()int a,b;int*pointer_1,*pointer_2;scanf(%d,%d,5,9,2000,2002,5,9,运行结果:9,5,地址传递,例 将数从大到小输出(1),swap(int*p1,int*p2)int*p;*p=*p1;*p1=*p2;*p2=*p;main()int a,b;int*pointer_1,*pointer_2;scanf(%d,%d,运行结果:9,9,编译警告!结果不对!,int x;int*p=,5,9,2000,2002,9,9,COPY,假设2000,指针变量在使用前必须赋值!,例 将数从大到小输出(2),/*ch9_32.c*/swap(int x,int y)int t;t=x;x=y;y=t;main()int a,b;int*pointer_1,*pointer_2;scanf(%d,%d,运行结果:5,9,值传递,5,9,2000,2002,COPY,5,5,9,例 将数从大到小输出(3),运行结果:5,9,swap(int*p1,int*p2)int*p;p=p1;p1=p2;p2=p;main()int a,b;int*pointer_1,*pointer_2;scanf(%d,%d,5,9,2000,2002,COPY,2000,地址传递,2000,2002,例 将数从大到小输出(4),这一章我们学到了,变量的命名规则数据类型char,short,int,long,float,double,long doublesigned,unsignedenum常数、转义字符运算符算术运算符、关系运算符、逻辑运算符、增一/减一运算符、位运算符、赋值运算符、类型强转运算符、逗号运算符、条件运算符(?:)、sizeof类型转换优先级和结合性指针和指针变量,

    注意事项

    本文(第2章数据类型运算符和表达式.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开