您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第3章 程序控制流程
第3章程序控制流程3.1选择结构程序设计3.2循环结构程序设计3.3break和continue语句3.1选择结构程序设计单条件if…else多条件switch3.1.1if语句当条件为真(true)时执行一个操作条件为假(false)时执行另一个操作(1)双分支if(布尔表达式)语句区块1else语句区块2布尔表达式语句区块2语句区块1truefalse(2)单分支if(布尔表达式)语句区块1布尔表达式语句区块1truefalse(3)if的嵌套if(布尔表达式1)语句区块1elseif(布尔表达式2)语句区块2elseif(布尔式3)语句区块3….else(1)双分支:c3_1.java判断给出的成绩是否及格publicclassc3_1{publicstaticvoidmain(String[]args){intgrade;grade=86;if(grade=60){System.out.print(通过,成绩是:);System.out.println(grade);}elseSystem.out.println(不及格);}}grade=60打印“不及格”打印“通过”truefalse语句块——多行语句,必须加{}单行语句程序的运行结果是:通过,成绩是:86例c3_2.java比较两个数的大小importjava.awt.*;importjava.applet.*;publicclassc3_2extendsApplet{publicvoidpaint(Graphicsg){doubled1=43.4;doubled2=85.3;if(d1=d2)g.drawString(d1+=+d2,25,25);elseg.drawString(d1++d2,25,25);}}(2)单分支c3_3.java只有当成绩小于60时,输出“未通过”其他不输出grade60?语句区块1truefalsepublicclassc3_3{publicstaticvoidmain(String[]args){intgrade;grade=56;if(grade60){System.out.print(未通过,成绩是:);System.out.println(grade);}}}该程序的运行结果是:未通过,成绩是:56(3)if语句的嵌套//例c3_4.java用if嵌套将百分制转换为5分制publicclassc3_4{publicstaticvoidmain(String[]args){intgrade=76;if(grade=90)System.out.println(成绩:优);elseif(grade=80)System.out.println(成绩:良);elseif(grade=70)System.out.println(成绩:中等);elseif(grade=60)System.out.println(成绩:及格);elseSystem.out.println(成绩:不及格);}}例c3_5.javapublicclassc3_5{publicstaticvoidmain(String[]args){intx,y;x=8;y=4;if(x6)if(y6)System.out.println(“设备正常”);elseSystem.out.println(设备出错);}}注意:if嵌套时最近匹配:else将与离它最近的if配对程序错误反例:当x和y都大于6时,输出“设备正常”的信息;仅当x=6时,才输出“设备出错”结果却是:输入x6,y=6时,输出了“设备出错”而x=6时什么信息也没输出。问题出在哪里?——else同哪个if匹配了?{}3.1.3switch语句从多个分支中选择一个分支执行时嵌套的if——过于繁琐例如:对给定的成绩grade(介于0~100),划分成优:90~100良:80~90….那么能不能根据k=grade/10的结果来判断属于哪个分数段呢?swtichswitch(表达式){case值1:语句区块1;break;//分支1case值2:语句区块2;break;//分支2……case值n:语句区块n;break;//分支n[default:语句区块n+1;]//分支n+1}可以是byte,char,short,int,但不能是floatcase后面的值必须是常量Default可以省略注意break例:c3_6.java判断成绩等级importjava.awt.*;importjava.applet.*;publicclassc3_6extendsApplet{publicvoidpaint(Graphicsg){intk;intgrade=86;//改为76,结果仍旧是良,因为8:后面没有breakk=grade/10;switch(k){case10:case9:g.drawString(成绩:优,25,25);break;case8:case7:g.drawString(成绩:良,25,25);break;case6:g.drawString(成绩:及格。,25,25);break;default:g.drawString(成绩:不及格。,25,25);}}}3.1.3条件运算符——三目运算符适用:简单的if/else语句if(xy)m=x;elsem=y;可用下面的条件运算符来替代:m=(xy)?x:y若xy为true则表达式取x的值,否则取y的值形式:布尔表达式1?表达式2:表达式3表达式2和表达式3的类型必须相同【示例程序c3_7.java】publicclassc3_1{publicstaticvoidmain(Stringargs[]){intmax,min,a,b;inty;a=1;b=2;max=(ab)?a:b;y=(a!=b)?1:0;min=(ab)?a:b;System.out.print(max=+max);System.out.print(\ty=+y);System.out.println(\tmin=+min);}}运行结果是:max=2y=1min=13.2循环结构程序设计whiledo-whileforwhile(布尔表达式){循环体语句区块}循环体语句区块布尔表达式truefalsedo{循环体语句区块}while(布尔表达式)循环体语句区块布尔表达式truefalseWhile和do-while的区别:Do-while至少执行一次循环体而while可能一次都不执行3.2.1while语句【示例程序c3_8.java】打印数字1~5。publicclassc3_8{publicstaticvoidmain(String[]args){intcounter=1;//循环变量及其初始值while(counter=5)//循环条件{System.out.println(counter=+counter);counter++;//循环变量增值}}}运行结果如下:counter=1counter=2counter=3counter=4counter=53.2.2do-while语句【示例程序c3_9.java】计算从1开始的连续n个自然数之和,当其和值刚好超过100时结束,求这个n值。importjava.awt.*;importjava.applet.*;publicclassc3_9extendsApplet{publicvoidpaint(Graphicsg){intn=0;intsum=0;//循环变量及其初始值do{n++;sum+=n;//循环变量增值}while(sum=100);//循环条件g.drawString(sum=+sum,25,25);g.drawString(n=+n,100,25);}}该程序的运行结果是:sum=105n=143.2.3for语句适于:确切知道循环次数时一般形式for(初值表达式;布尔表达式;循环过程表达式){循环体程序语句区块}循环变量赋初值用来判断循环是否继续完成修改循环变量、改变循环条件初值表达式布尔表达式循环体语句区块循环过程表达式truefalsec3_10.java求自然数1~100之间所有奇数之和。publicclassc3_10{publicstaticvoidmain(String[]args){intsum=0,odd;for(odd=1;odd=100;odd+=2){sum+=odd;}System.out.println(sum=+sum+odd=+odd);}}该程序的运行结果是:sum=2500odd=101odd=1odd=100sum+=odd;odd+=2truefalsepublicclassc3_11{publicstaticvoidmain(String[]args){intf1=1,f2=1;//f1为第一项,f2为第二项for(inti=1;i38/2;i++){System.out.print(\t+f1+\t+f2);//每次输出两项if(i%2==0)System.out.println(\n);//每输出两次共4项后换行f1=f1+f2;//计算下一个奇位项f2=f2+f1;//计算下一个偶位项}}}例c3_11求Fibanacci数列Fibonacci数列:1,1,2,3,5,8,……的前36个数。构造该数列的递推关系是:F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n≥3)运行结果如下:1123581321345589144233377610987159725844181676510946177112865746368750251213931964183178115142298320401346269217830935245785702887922746514930352【特1】省略部分成分的forfor(;;)可以,但要在循环体内加循环变量,小心“死循环”【示例程序c3_12.java】编写求解(即1+2+3+……+9+10)的程序。publicclassc3_12{publicstaticvoidmain(String[]args){inti=1;//1.初值表达式写在循环语句之前intsum=0;for(;;){sum+=i++;//2.循环过程表达式i++写在了循环体内if(i10)break;//3.布尔表达式写在了循环体内的if语句中}System.out.println(sum=+sum);}}【特2】for头中使用逗号表达式for结构头的构件中,“初值表达式”和“循环过程表达式”中还可以使用逗号运算符。这也是Java中唯一使用逗号运算符的地方。publicclassc3_13{publicstaticvoidmain(String[]args){inti,sum;for(i=1,sum=0;i=10;i++)//初值表达式中使用了逗号运算符sum+=i;System.out.println(sum=+sum);}}该程序的运行结果是:sum=55for(i=1,sum=0;i=10;i++,sum+=i;);System.out.println(sum=+sum);//千万别忘记for末尾的;否则下一句就被当成循环体了思考whilevs.do-whilevs.for及其适用场合c3_15.java统计选票设有李L、王W、张Z三人竞选领导,由群众投票表决importjava.io.*;publicclassc3_15{publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderkeyin=newBufferedReader(newInputStreamReader(System.in));//上面一条语句是有关键盘输入数据流处理的,详细内容将在第12章讲解in
本文标题:第3章 程序控制流程
链接地址:https://www.777doc.com/doc-3824423 .html