哈工大c语言课件3_第1页
哈工大c语言课件3_第2页
哈工大c语言课件3_第3页
哈工大c语言课件3_第4页
哈工大c语言课件3_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

本章学习内容

算术运算符

增1和减1运算符

宏常量与

const常量

表达式与赋值中的自动类型转换

强制类型转换运算符

常用的标准数学函数第1页/共50页运算符(Operator)详见附录C常见的运算符算术运算符赋值运算符类型强转关系运算符逻辑运算符增1和减1位运算符第2页/共50页3.1C运算符和表达式

(OperatorandExpression)Example:W+Z操作数(Operand)运算符(Operator)操作数(Operand)何谓运算符和操作数?第3页/共50页3.1.1算术运算符和表达式Addition(+)Subtraction(-)Multiplication(*)Division(/)Modulus(%)ArithmeticOperators第4页/共50页除法(Division)Example:W/Z浮点数除法(FloatingDivision)WorZorbotharefloats整数除法(IntegerDivision)WandZareintegers第5页/共50页Example:anintegeraninteger

theresultisalsoaninteger整数除法(IntegerDivision)11/5=2第6页/共50页Example:实数除法(FloatingDivision)11.0/5=2.2afloatanintegertheresultisafloat第7页/共50页求余(Modulus)Itreturnsthe

remainder

thatoccursafterperformingthedivisionof2operandsRule:

操作数必须是整数Operandsmustbe

integers注意!第8页/共50页Example:11%5=1anintegeranintegertheresultistheremainderof11/51152101remainderresult求余(Modulus)第9页/共50页Example:-11%5=-1anintegeraninteger-115-2-10-1remainderresulttheresultistheremainderof-11/5求余(Modulus)第10页/共50页Example:11%-5=1anintegeraninteger11-5-2101remainderresulttheresultistheremainderof11/-5求余(Modulus)第11页/共50页Example:11.0%5=?afloatanintegerINVALID!

求余(Modulus)注意!第12页/共50页当算术表达式包含两个或两个以上的算术运算符时

首先要确定运算顺序所有的运算符都有一个优先级(OrderofPrecedence)

算术表达式

(ArithmeticExpression)第13页/共50页

优先级(OrderofPrecedence)

High: */%

Low: +-不同优先级时的运算顺序:——从高到低相同优先级时的运算顺序:——算术运算符为左结合(从左到右)算术表达式

(ArithmeticExpression)第14页/共50页Example:?48.52.5+6–

–44.52.5+6–2*2=算术表达式

(ArithmeticExpression)4.5第15页/共50页巧妙使用圆括号改变运算顺序从内往外运算Example:(9–(3+2))*3=?算术表达式

(ArithmeticExpression)第16页/共50页Example:

(9–(3+2))*3=??

–5412

(9–(3+2))*3=12算术表达式

(ArithmeticExpression)第17页/共50页赋值语句

(AssignmentStatement)三种赋值形式:Simple——简单赋值Multiple——多重赋值Shorthand——简写的复合赋值第18页/共50页算术混合运算第19页/共50页【例3.1】计算并输出一个三位整数的个位、十位和百位数字之和关键是如何分离个位、十位、百位数字?153%10

=3153/100=1153-1*100=5353/10=5第20页/共50页【例3.1】计算并输出一个三位整数的个位、十位和百位数字之和第21页/共50页变量的赋值简单赋值(SimpleAssignment):

变量=

表达式;多重赋值(MultipleAssignment):变量1=

变量2=

表达式;第22页/共50页Syntax:

变量x=变量x

运算符op

表达式;

变量x

运算符op=表达式;

3.1.2复合的赋值运算符

(CombinedAssignmentOperators)这种形式看起来更直观,且执行效率一般也更高一些第23页/共50页Example:num=num+5;num15

15+5

2020Example:num+=5;similarto

num=num+5shorthandassignmentoperator3.1.2复合的赋值运算符

(CombinedAssignmentOperators)第24页/共50页已知inta=3;执行a+=a-=a*a后,变量a的值?a+=a-=a*aa+=a-=9a+=-6

a=-123-6-12执行a+=a-=a*=a后,变量a的值?a+=a-=a*=aa+=a-=9a+=0

a=03900第25页/共50页OperationExamplesofexpressionDescription+=num+=5;num=num+5;-=num-=5;num=num–5;*=num*=5;num=num*5;/=num/=5;num=num/5;%=num%=5;num=num%5;简写的复合赋值(ShorthandAssignment)3.1.2复合的赋值运算符

(CombinedAssignmentOperators)第26页/共50页3.1.3增1和减1运算符

(IncrementandDecrement)

n++,n--,++n,--n++让参与运算的变量加1,--让参与运算的变量减1作为后缀(postfix)运算符时,先取n的值,然后加/减1m=n++;m=n;n++;第27页/共50页3.1.3增1和减1运算符

(IncrementandDecrement)

n++,n--,++n,--n++让参与运算的变量加1,--让参与运算的变量减1作为后缀(postfix)运算符时,先取n的值,然后加/减1作为前缀(prefix)运算符时,先加/减1,然后取n的值m=++n;n++;

m=n;第28页/共50页Example:j=++i-2i5similartoi=i+1;j=i–2;j??46前缀(Prefix

)增1和减1运算符第29页/共50页Example:j=i++-2i5similartoj=i–2;i=i+1;后缀(Postfix)增1和减1运算符j??36第30页/共50页inta=3;printf("%d",-a++);a3similartoprintf("%d",-a);a=a+1;后缀(Postfix)增1和减1运算符4第31页/共50页良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次增1或者减1运算过多的增1和减1运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行结果3.1.3增1和减1运算符

(IncrementandDecrement)

第32页/共50页【例3.2】计算圆的周长和面积circumference=33.300854area=88.247263第33页/共50页【例3.3】计算圆的周长和面积Inputr:5.3↙circumference=33.300854area=88.247263在程序中直接使用的常数称为幻数(MagicNumber)

第34页/共50页使用幻数存在的问题?假如直接使用常数,会有什么影响?程序的可读性变差容易发生书写错误当常数需要改变时,要修改所有引用它的代码,工作量大,还可能有遗漏解决方案:避免使用幻数把幻数定义为常量(宏常量、const常量……)第35页/共50页3.2宏常量与宏替换

#define

标识符字符串宏常量(Macroconstant)也称符号常量一般采用全大写字母表示宏定义不是语句,而是一种编译预处理命令第36页/共50页【例3.4】计算圆的周长和面积宏替换第37页/共50页#include<stdio.h>#definePI3.14159;#defineR5.3;main(){

printf("area=%f\n",PI*R*R);

printf("circumference=%f\n",2*PI*R);}相当于执行#include<stdio.h>main(){

printf("area=%f\n",3.14159;*5.3;*5.3;);

printf("circumference=%f\n",2*3.14159;*5.3;);}语法错误计算圆的周长和面积第38页/共50页const常量与宏常量相比的优点是什么?const常量有数据类型某些集成化调试工具可以对const常量进行调试3.3const常量【例3.5】第39页/共50页表达式与赋值中的自动类型转换相同类型数据的运算结果,还是该类型不同类型数据的运算结果,是两种类型中取值范围大的那种long

double>double>float>long>int>short>chardoublefloatlongunsignedintchar,short低高第40页/共50页表达式与赋值中的自动类型转换取值范围小的类型赋值给取值范围大的类型是安全的反之是不安全的若大类型的值在小类型能容纳的范围之内,则平安无事但是浮点数转为整数,会丢失小数部分,而非四舍五入反之转换后的结果必然是错误的,具体结果与机器和实现方式有关避免如此使用,好的编译器会发出警告注意!第41页/共50页表达式与赋值中的自动类型转换【例3.6】下面程序演示了赋值中的类型转换第42页/共50页Example:

intx=10; floaty; y=(float)x;

(float)10

10.000000x10y??10.0000003.4自动类型转换与强制类型转换运算符强转(Casting)可以消除从大到小的警告

通过下面方式把表达式的值转为任意类型

(类型)表达式不改变x第43页/共50页Example:

inttotal,number; floataverage; … average=total/number;

15/2

7total15number2average??7.000000两个整数运算的结果还是整数,不是浮点数3.4自动类型转换与强制类型转换运算符

温馨提示

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

评论

0/150

提交评论