实验22分支程序设计.docx
- 文档编号:23647890
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:20
- 大小:25.10KB
实验22分支程序设计.docx
《实验22分支程序设计.docx》由会员分享,可在线阅读,更多相关《实验22分支程序设计.docx(20页珍藏版)》请在冰豆网上搜索。
实验22分支程序设计
实验2-2、 分支程序设计
2-2、1实验目的
(1)掌握if语句的使用,掌握if语句的嵌套编程特点;
(2)掌握条件的表达技巧;
(3)掌握switch语句的使用;
(4)了解从键盘获取数据的方法。
2-2、2知识要点
2-2、2.1if语句的两种形式
条件语句根据条件的真假控制程序的执行流程。
编写程序时要注意与if与else的搭配。
(1)无else分支
if(条件表达式)
{
statement1;
}
(2)有else分支
if(条件表达式)
{
statement1; //if块
}
else
{
statement2; //else块
}
注意:
要执行的分支含有多个语句时一定要用大括号{ }
2-2、2.2if语句的嵌套
(1) 最近匹配原则:
else分支总是与最靠近它的if匹配。
(2) 条件的表达技巧
● 理解else分支的内含,进入else分支表示的隐含条件。
● 注意逻辑与、或、非的运用
2-2、2.3switch语句—多分支语句
语句格式:
switch(表达式){
case表达式1:
语句组1;break;
case表达式2:
语句组2;break;
……
default:
语句组;break;
}
功能:
计算switch表达式的值,与后面case中哪个表达式匹配就从执行相应的语句组。
注意:
(1) 表达式结果只能是整数(byte、short、int、long)或字符两种;
(2) break的作用是退出switch语句;
(3) default的含义是所有case不匹配情形。
2-2、2.4从键盘获取数据的办法
(1)利用命令行参数获取数据。
参数之间用空格分隔。
(2)利用System.in.read()从键盘读一个字符。
(3)从键盘读一行字符串的方法。
以下方法返回从键盘获取的输入串,该方法可作为通用方法安排在程序中使用。
publicstaticStringinputLine(){
Stringx=null;
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
try{
x=br.readLine();
}catch(IOExceptione){}
returnx;
}
(4)数据输入程序中要含有IO异常处理代码(try...catch)。
(5)如何将数字串转换为整数和双精度数。
Integer.parseInt(String)
Double.parseDouble(String)
2-2、3样例程序
样例1:
从键盘输入x,根据以下情形求y的值:
y=0; 当x≤0时
y=2x+1; 当0 y=X2-1; 当x≥5时 【参考程序1】 importjava.io.*; publicclassFxy{ publicstaticvoidmain(Stringargs[]){ doublex=0,y; BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in)); try{ Strings=br.readLine(); x=Double.parseDouble(s); }catch(IOExceptione){} if (x<=0) y=0; else if (x<5) y=2*x+1; else y=x*x-1; System.out.println("y="+y); } } 【参考程序2】 publicclassFxy{ publicstaticvoidmain(Stringargs[]){ doublex,y; x=Double.parseDouble(args[0]); if (x<=0) y=0; if(x>0&&x<5) y=2*x+1; if(x>=5) y=x*x-1; System.out.println("y="+y); } } 【说明】参考程序1的执行流程见图3-1,输入数据的办法是运行后从键盘输入,程序中使用了嵌套if语句,在最外层if语句已判x<=0则其else分支就隐含x>0,所以针对0 【编程技巧】 (1) 记住两种获取一个输入整数的办法; (2)if语句的条件表达,逻辑运算符的使用,else分支隐含着什么情况。 (3)if的嵌套与非嵌套的执行差别。 样例2: 输入一个学生的成绩,给出相应的等级(分别用if和switch语句实现)。 85分及以上为A级;70分及以上为B级;60分及以上为C级;60分以下为D级。 【参考程序1】 publicclassScore{ publicstaticvoidmain(Stringargs[]){ ints=Integer.parseInt(args[0]); if(s<60) System.out.println("D"); elseif(s<70) System.out.println("C"); elseif(s<85) System.out.println("B"); else System.out.println("A"); } } 【参考程序2】 publicclassScore{ publicstaticvoidmain(Stringargs[]){ ints=Integer.parseInt(args[0]); intx=s/10; switch(x){ case0: case1: case2: case3: case4: case5: System.out.println("D");break; case6: System.out.println("C");break; case7: case8: if(s<85){System.out.println("B");break;} case9: case10: System.out.println("A"); } } } 【说明】参考程序1是一种简单的实现方式,使用了阶梯if语句,流程见图3-2。 参考程序2采用switch实现,但对于80分~89分的情形还需要特别考虑,因为上了85分即为“A”,所以其中又安排了一个if语句。 【编程技巧】 (1)阶梯if的嵌套关系; (2)case语句情况表示,如何将问题域的各种情形转化为整数值。 2-2、4上机练习 ✧ 基本题 1)从键盘输入4个学生的成绩,找出最高分和最低分。 importjava.io.*; publicclassScore{ publicstaticvoidmain(String[]args)throwsNumberFormatException,IOException{ float[]score=newfloat[4]; BufferedReaderin=newBufferedReader(newInputStreamReader(System.in)); for(inti=0;i System.out.println("请输入第"+(i+1)+"个成绩: "); score[i]=Float.parseFloat(in.readLine()); } floatmin=32768; floatmax=0; for(inti=0;i if(score[i]>max){ max=score[i]; } if(score[i] min=score[i]; } } System.out.println("最大值: "+max+"最小值: "+min); } } 运行结果为: 请输入第1个成绩: 67 请输入第2个成绩: 78 请输入第3个成绩: 56 请输入第4个成绩: 89 最大值: 89.0最小值: 56.0 【提示】引入两个变量分别存放最高分和最低分,根据比较改变这两个变量值。 2) 输入一个百分制分数,输出其对应的五分制成绩,包括: 优、良、中、及格、不及格。 importjava.io.*; publicclassscore{ publicstaticvoidmain(Stringargs[]){ intx=0; BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in)); try{ Strings=br.readLine(); x=Integer.parseInt(s); }catch(IOExceptione){} { if(x<60) System.out.println("不及格"); elseif(x<70) System.out.println("及格"); elseif(x<80) System.out.println("中"); elseif(x<90) System.out.println("良"); else System.out.println("优"); } } } 运行结果为: 67 及格 ✧ 提高题 1)设有一元二次方程如下: aX2+bx+c=0 试根据从键盘输入的a,b,c求解方程的根。 【提示】要考虑各种情形: 一是a为0的情形,方程根为-c/b。 还有就是根据判别式 Δ=b2-4ac进行判断,如果Δ.>0有两个实根;Δ=0,有一个实根;Δ<0,无实数解。 另外,求x的平方根可用Math.sqrt(x)方法。 importjava.util.Scanner; publicclasstest{ publicstaticvoidmain(String[]args){ Scanners=newScanner(System.in); System.out.println("请输入a: "); Doublea=s.nextDouble(); System.out.println("请输入b: "); Doubleb=s.nextDouble(); System.out.println("请输入c: "); Doublec=s.nextDouble(); doubled=b*b-4*a*c; doublex,x1,x2; if(a==0){ x=((-c)/b); System.out.println("x="+x); }else{ if(d<0) System.out.println("noanswer"); elseif(d==0){ x1=x2=(-b)/(2*a); System.out.println("x1=x2="+x1); }else{ x1=((-b)+Math.sqrt(d))/(2*a); x2=((-b)-Math.sqrt(d))/(2*a); System.out.println("x1="+x1+"x2="+x2); } } } } 运行结果为: 请输入a: 1 请输入b: 2 请输入c: 1 x1=x2=-1.0 2) 输入某人的应纳税所得额,计算个人所得税。 税率表如下: 级数 全月应纳税所得额 税率% 速算扣除法(元) 1 不超过500元的 5 0 2 超过500元至2000元的部分 10 25 3 超过2000元至5000元的部分 15 125 4 超过5000元至20000元的部分 20 375 5 超过20000元至40000元的部分 25 1375 6 超过40000元至60000元的部分 30 3375 7 超过60000元至80000元的部分 35 6375 8 超过80000元至100000元的部分 40 10375 9 超过100000元的部分 45 15375 计算公式是: 应纳个人所得税税额=应纳税所得额×适用税率-速算扣除数 例: 王某当月应纳税所得额6400元。 则应纳个人所得税税额=6400×20%-375=905元。 importjava.io.*; publicclassTax{ publicstaticvoidmain(Stringargs[]){ intx=0; BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in)); try{ Strings=br.readLine(); x=Integer.parseInt(s); }catch(IOExceptione){} { if(x<=500) System.out.println("tax="+(x*5/100)); elseif(x<=2000) System.out.println("tax="+(x*10/100-25)); elseif(x<=5000) System.out.println("tax="+(x*15/100-125)); elseif(x<=20000) System.out.println("tax="+(x*20/100-375)); elseif(x<=40000) System.out.println("tax="+(x*25/100-1375)); elseif(x<=60000) System.out.println("tax="+(x*30/100-3375)); elseif(x<=80000) System.out.println("tax="+(x*35/100-6375)); elseif(x<=10000) System.out.println("tax="+(x*40/100-10375)); else System.out.println("tax="+(x*45/100-35375)); } } } 运行结果为: 6400 tax=905 2-2、5思考题 1)下列语句片段的结果为 intresult; inta=17,b=6; result=(a%b>4)? a%b: a/b; System.out.println(result); A.0 B.1 C.2 D.5 2)以下程序的运行结果为: 1.publicclassConditional{ 2. publicstaticvoidmain(Stringargs[]) { 3. intx=4; 4. System.out.println("valueis"+((x>4)? 99.99: 9)); 5. } 6. } A.输出: valueis99.99 B.输出: valueis9 C.输出: valueis9.0 D.在第4行出现编译错误 3)以下代码段的输出结果为 1.intx=0,y=4,z=5; 2.if(x>2) { 3. if(y<5){ 4. System.out.println("messageone"); 5. } 6. else{ 7. System.out.println("messagetwo"); 8. } 9. } 10.elseif(z>5) { 11. System.out.println("messagethree"); 12.} 13.else{ 14. System.out.println("messagefour"); 15.} A.messageone B.messagetwo C.messagethree D.messagefour 4)以下程序的输出结果为: publicclasstest{ publicstaticvoidmain(Stringargs[]){ intx=1,y=1,z=1; if (x--==1&&y++==1||z++==1) System.out.println("x="+x+",y="+y+",z="+z); } } A.x=0,y=2,z=1 B.x=1,y=2,z=1 C.x=0,y=1,z=1 D.x=0,y=2,z=2 5)编译和运行以下代码结果为: 1.publicclassEqualsTest{ 2. publicstaticvoidmain(Stringargs[]){ 3. byteA=(byte)4096; 4. if(A==4096)System.out.println("Equal"); 5. elseSystem.out.println("NotEqual"); 6. } 7.} A.在第3行出现转换丢失精度的编译错误. B.输出"NotEqual". C.输出"Equal". 6)关于以下程序哪条叙述正确? 1.int j=2; 2.switch(j){ 3. case2: 4. System.out.println("valueistwo"); 5. case2+1: 6. System.out.println("valueisthree"); 7. break; 8. default: 9. System.out.println("valueis"+j); 10. break; 11.} A.第5行的表达式不合法; B.变量j是可接受的,switch中表达式可以是byte,short,int,或long的任何类型; C.输出为valueistwo D.输出是valueistwo后跟valueisthree E.输出是valueistwo后跟valueis2 7)以下程序的编译运行结果为: 1: publicclassQ10 2: { 3: publicstaticvoidmain(String[]args) 4: { 5: inti=10; 6: intj=10; 7: booleanb=false; 8: 9: if(b=i==j) 10: System.out.println("True"); 11: else 12: System.out.println("False"); 13: } 14: } A.第9行出现编译错误; B.第9行出现运行错误; C.输出True D.输出False 8)以下程序的编译和运行结果为? classtest{ staticbooleancheck; publicstaticvoidmain(Stringargs[]){ inti; if(check==true) i=1; else i=2; if(i=2)i=i+2; elsei=i+4; System.out.println(i); } } A.3 B.4 C.5 D.6 E.语句if(i=2)编译出错 9)以下代码: if(a>4) System.out.println("test1"); elseif(a>9) System.out.println("test2"); else System.out.println("test3"); a为何值将有输出结果test2? A. 小于0 B. 小于4 C. 4和9之间 D. 大于9 E. 无任何可能 10)有如下代码段: switch(x){ case1: System.out.println("One");break; case2: case3: System.out.println("Two");break; default: System.out.println("end"); } 变量x的取值下列哪些情形时,能使程序输出"Two"。 A.1 B.2 C.3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验22 分支程序设计 实验 22 分支 程序设计