第3章运算符、表达式和语句_第1页
第3章运算符、表达式和语句_第2页
第3章运算符、表达式和语句_第3页
第3章运算符、表达式和语句_第4页
第3章运算符、表达式和语句_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

第3章运算符、表达式和语句2主要内容3.1运算符与表达式3.2分支语句3.3循环语句3运算符与表达式运算符:算术运算符、比较运算符、条件运算符、逻辑运算符、位运算符、赋值运算符和自增自减运算符。表达式:4算术运算符算术运算符包括:+,-,*,/,++,--,%没有指数运算

Math.pow(2.0,3.0);//2.03.0整数除法:截去余数

7/5结果为1取模:返回余数

7%5结果为2“+”还可以做字符串的连接

System.out.println(“abc”+6);5例如:publicclassTest{publicstaticvoidmain(String[]agrs){inti=5; System.out.println("i="+i); System.out.println("i++:"+(i++)+"i="+i); System.out.println("++i:"+(++i)+"i="+i);}}i=5i++:5i=6++i:7i=76问题?-7/5 =-7%5 =7%-5 =15.5%5 =-1-220.5注意:在取模运算中,运算结果的符号与第一个操作数的符号相同浮点数可以进行取模运算7关系运算符六个关系运算符:<、>、<=、>=、==和!=例如: 1>2;//false 3.5!=1;//true 51.5>=23.0; //true 540<=654; //true 24==3*8;//true

booleantest1=(10<10);//test1=false;8注意事项<、>、<=和>=只能用来比较两个数值类型数据的大小不能用于String、boolean或其他类型9条件运算符条件表达式

e1?e2:e3其中:e1为boolean类型,e2与e3的类型相同执行顺序:若e1的值为true,e2的值为最终结果若e1的值为false,e3的值为最终结果例如:y=x>=0?x:-x//求|x|max=x>y?x:y//求x,y的较大者10逻辑运算符六个布尔逻辑运算符:

& (逻辑与AND)

| (逻辑或OR)

^ (逻辑异或XOR)!

(逻辑非NOT)单目运算符,即只有一个操作数

&&(条件与AND)|| (条件或OR)11短路规则(&&和||)如果从第一个操作数可以推断出表达式结果,就不再计算第二个操作数例如:

if((x==2)&&(y!=2)) System.out.println("两个条件都为true.");

if((x==2)||(y!=2)) System.out.println(“一个条件为true.");

12逻辑运算(&和|

)可做位运算也可做逻辑运算在逻辑运算中:两个操作数均会被运算(即不采用短路规则)用不用短路规则,副作用不同13逻辑运算符

booleanb=x>y&x++==y--;//x为4,y为4,b为false。

例如:intx=3,y=5; booleanb=x>y&&x++==y--;

//x为3,y为5,b为false。

短路14赋值运算符赋值类运算符包括:=、+=、-=、*=、/=、&=、|=、%=、<<=、>>=和>>>=op1=op1二元运算符op2;等价于op1二元运算符=op2;例如:a=a+b;等价于a+=b;15publicclassc2_7{publicstaticvoidmain(Stringargs[]){intx,y,z;x=1;y=2;z=3;x+=y;y%=x;z/=x;System.out.print("\tx="+(x+=y));System.out.print("\ty="+y);System.out.println("\tz="+z);}}运行结果是:x=5 y=2z=1赋值运算符16

运算符优先级表

运算符优先级表顺序运算符1括号,如

()和[]3一元运算符,如

-、++、--和

!3算术运算符,如*、/、%、+和

-4关系运算符,如

>、>=、<、<=、==和

!=5逻辑运算符,如

&、^、|、&&、||6条件运算符和赋值运算符,如

?:、=、*=、/=、+=和

-=运算符与表达式17算法的基本控制结构if/elseif/elsewhilefordowhileswitchcasebreakcontinue

return18控制结构顺序结构Java最基本的结构选择结构三种类型:if、if/else和switch

循环结构三种类型:for、while和do/while19if语句if语句的格式是:if(布尔表达式)

语句或if(布尔表达式){

一条或多条语句}例如

if

(grade>=60)

System.out.println("Passed");20if-else语句if-else语句的格式是:if(布尔表达式)

语句1或语句块1else

语句2或语句块2例如:if

(grade>=60)System.out.println("Passed!");elseSystem.out.println("Failed!");作业1、有一函数:从键盘输入一个x值,输出y值。2122多分支选择结构switch语句switch语句的形式是:switch(表达式){case

值1:

语句组1

break;case

值2:

语句组2

break;……case

值n:

语句组n

break;default:

语句组(n+1)}23多分支选择结构switch语句说明:switch后面的表达式的类型可以是byte、char、short和int(不允许是浮点数类型和long型)。case后面的值1、值2、…、值n是与表达式类型相同的常量,但它们之间的值应各不相同,否则就会出现相互矛盾的情况。case后面的语句块可以不用花括号括起。default语句可以省去不要。当表达式的值与某个case后面的常量值相等时,就执行此case后面的语句块。若去掉break语句,则执行完第一个匹配case后的语句块后,会继续执行其余case后的语句块,而不管这些语句块前的case值是否匹配。24switch语句中使用

breakcharmyGrade=‘A’;switch(MyGrade){case’A’:MyScore=5;case‘B’:MyScore=4;case’C’:MyScore=3;default:MyScore=0;}MyGrade的值为‘A’,执行完switch语句后,MyScore的值被赋成0charmyGrade=‘A’;switch(MyGrade){case’A’:MyScore=5;break;case’B’:MyScore=4;break;case’C’:MyScore=3;break;

default:MyScore=0;}MyGrade的值为‘A’,执行完switch语句后,MyScore的值被赋成5charmyGrade=‘A’;switch(MyGrade) {case’A’:case’B’:case’C’:MyScore=1;//及格

break;default:MyScore=0;//不及格}练习写程序,使用switch语句完成将输入的整型数字1—7转换为“星期一”、“星期二”、…“星期日”,当输入数字不在1—7之间,输出错误信息。26importjava.util.Scanner;publicclassSwitchT{publicstaticvoidmain(String[]args) {System.out.print("请输入大于等于1小于等于7的整数数字:");Scannerinput=newScanner(System.in);intday=input.nextInt();System.out.println();switch(day){ case1:System.out.println("星期一"); break; case2:System.out.println("星期二"); break; case3:System.out.println("星期三"); break; case4:System.out.println("星期四"); break; case5:System.out.println("星期五"); break; case6:System.out.println("星期六"); break; case7:System.out.println("星期日"); break; default:System.out.println("对不起你输入的整数数字不在1到7之间!");}}}27循环语句

循环语句特点for语句计数型循环语句,提前指定循环的次数,适用于循环次数已知的情况while语句指定循环结束条件,适用于循环次数未知的情况do-while语句与while基本相同,但它的循环体至少会执行一次,适用于循环次数未知的情况表

各种循环语句28for循环语句格式:

for

(表达式1;表达式2;表达式3)

语句或语句块

式2bodyfalsetrue式3式129while循环语句while循环语句格式为:while(布尔表达式)

语句或语句块当条件(布尔表达式)为true

,则不断地执行语句或语句块“while”循环中止条件是布尔表达式变为false如果布尔表达式一开始就为false,则不执行循环体布尔式语句falsetrue30while循环语句将下面格式的for语句转换为while语句:

for

(表达式1;表达式2;表达式3)

语句或语句块

转换后:

表达式1;

while

(表达式2)

{

语句或语句块

表达式3;

}31do/while循环语句先执行,后判定条件即循规环体至少执行1次格式do{

语句或语句块}while(布尔表达式);好的编程风格:总是以“{}”引导循环体,即使语法上并不需要布尔式语句falsetrue作业5、编写打印下列图形的程序:3233跳转语句用于改变程序控制流:continue语句break语句return循环

break体循环条件true34break语句

break语句在switch语句中,用来终止一个语句序列用来退出一个循环用来实现goto语句所特有的一些功能,实现使程序的流程从一个语句块内部跳转出来break语句的语法格式:break;

break标号;循环

break体循环条件true作业2、编写一Java程序,查找1~100之间的素数并将运行结果输出。3536break语句break标号;标号名:定义在程序中外层循环语句的前面,用来标志这个循环结构,或放在一个语句块的前面来标识一个语句块。37程序中可用break标号;来跳出该代码块,转到该块后的第一个语句去执行,如:a:{……//a代码块 b:{……//b块 c:{……//c块 breakb; ……//这段代码不会被执行 }//c结束 ……//这段也不会被执行}//b结束……//从此开始执行}//a结束38break语句publicclassJ_Break{publicstaticvoidmain(Stringargs[]){inti=0;

aBreakBlock:{System.out.println("在break语句之前");if(i<=0)breakaBreakBlock;System.out.println("在if和break语句之后");}

System.out.println("在aBreakBlock语句块之后");}}在break语句之前在aBreakBlock语句块之后39publicclassTest1{publicstaticvoidmain(String[]args){booleant=true;first:{ second:{ third:{System.out.println("1"); if(t)breaksecond; System.out.println("2");} System.out.println("3");} System.out.println("4");} }}运行结果:1440continue语句

continue语句只能出现在循环体中其作用是结束本轮循环,接着开始判断决定是否执行下一轮循环。continue语句的语法格式:continue;41continue语句continue语句,它的作用是终止当前这一轮的循环,跳过本轮剩余的语句,直接进入当前循环的下一轮。在for循环中,不带标号的continue语句会跳转至表达式3,计算修改循环变量后再判断循环条件。在while或do…while循环中,不带标号的continue语句会使流程直接跳转至条件表达式

循……环

continue体……循环条件true42continue语句publicclassBreakT{ publicstaticvoidmain(String[]args){ inti,j; for(i=3;i<=40;i++){ for(j=2;j<=i/2;j++){ if(i%j==0)

continue;} if(j>i/2) {System.out.println(""+j+"是素数");}} }}2是素数3是素数3是素数4是素数4是素数5是素数5是素数6是素数6是素数7是素数7是素数8是素数8是素数9是素数9是素数10是素数10是素数11是素数11是素数12是素数12是素数……作业3、P42(2)4、P42(3)

6、写一个程序,计算s=1-1/3+1/5-1/7+1/9+…的前10000项之和。4344数组由相同类型的若干项数据组成例如:publicstaticvoidmain(Stringargs[])其中args是String类型的数组占用连续的内存地址数组的静态性一旦创建就不能修改数组的长度Java提供了避免访问数组元素越界的机制45数组声明一维数组变量的声明格式有如下两种:数组元素的数据类型变量名[];数组元素的数据类型[]变量名;示例:int[]c;

String[]names;

int

c[];

String

names[];

46示例int[]c=new

int[12];c

是数组名如何获得数组的长度?c.length第一个数组元素的下标为0

使用数组可以通过数组名与下标每个数组元素类似于普通的变量c[

0

]=

3;c[

0

]+=

5;-4560721543-89062-3164537812c[1]c[2]c[4]c[3]c[5]c[6]c[7]c[8]c[9]c[10]c[11]c[0]c.length47下标有时也称为索引必须是整数或整数表达式,例如:c[11]示例:含有运算符的下标表达式:

if(x==3) t=(c[5-2]==c[3])&&(c[x]==c[3]);

//t=true48数组的创建利用new来为数组型变量分配内存空间示例:int[]c;

//声明c=

new

int[12];

//创建对象,并分配内存声明时不能指定数组的大小上面的两个语句可以简化成一个语句int[]c=

new

int[12];数组创建后,系统自动为数组元素赋初值整型:0实型:0.0f或0.0d字符:‘\0’类对象:null49通过初始化语句创建数组Java语言允许通过数组的初始化语句创建数组简单类型:声明时自动分配空间

int[]n={10,20,30,40,50};上面语句创建了一个含有五个元素的数组下标值分别为0,1,2,3,4这时不需要运算符new引用类型:声明时不分配空间,需要利用new完成空间分配(String隐含分配)

String[]str={“Fortran”,”QBasic”,”Pascal”};赋值操作是地址的拷贝StringstringArrar[];//定义一个String类型的数组变量StringArray=newString[3];//给数组stringArray分配3个元素空间StringArray[0]=newString(“how”);//初始化各数组元素StringArray[1]=newString(“are”);StringArray[2]=newString(“you”);50数组publicclassArrayT{ publicstaticvoidmain(String[]args){ inti; intx[]={1,2,3,4,5,6,7,8,9,10}; for(i=0;i<10;i++) { System.out.println("x"+i+"is"+x[i]); } }}练习写程序完成:定义数组,长度为10从键盘为数组进行初始化为数组排序输出数组52publicclassArraySort{publicstaticvoidmain(String[]args){finalintN=10;Scannerr=newScanner(System.in);inta[]=newint[N];inti,t,j;booleantag;for(i=0;i<a.length;i++){a[i]=r.nextInt();}System.out.println("排序前:");for(i=0;i<N;i++){System.out.print(a[i]+"");}System.out.println();for(i=0;i<N-1;i++){tag=true;for(j=0;j<N-i-1;j++){if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;tag=false;}}if(tag)break;}System.out.println("排序后:"+m);for(i=0;i<N;i++){System.out.print(a[i]+"");}}}53Arrays.sort()publicstaticvoidsort(int[]

a)对指定的int型数组按数字升序进行排序。例Arrays.sort(a)54Arrays.sort()importjava.util.*;publicclassTestArraySort{ publicstaticvoidmain(String[]args) { inta[]={2,45,1,-6,78,67,90}; System.out.println("输出排序前结果:"); for(inti=0;i<a.length;i++){ System.out.print(""+a[i]); }Arrays.sort(a); System.out.println("\n"+"输出排序后结果:"); for(inti=0;i<a.length;i++){ System.out.print(""+a[i]); }}}作业7、在一个长度为10的整型数组中,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。8、有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。(插入位置可顺序查找和折半查找)5556System.arraycopy()publicstaticvoidarraycopy(Object

src,int

srcPos,Object

dest,int

destPos,int

length)将源数组src中从下标srcPos开始的length个元素复制到目标数组dest,在目标数组的下标为srcPos位置开始存储。如System.arraycopy(scoure,0,dest,0,x)57System.arraycopy()publicclassArrayCopy{ publicstaticvoidmain(String[]args) { inta[]={5,6,32,12}; intb[]={41,52,3,44,56}; System.arraycopy(a,0,b,0,3); for(inti=0;i<a.length;i++) System.out.print(""+a[i]); System.out.println(); for(intj=0;j<b.length;j++) System.out.print(""+b[j]); System.out.println();} }作业9、某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。输入一个四位

温馨提示

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

评论

0/150

提交评论