习题4一、选择题1.下列语句执行后的输出结果是__A____。if(62*5)System.out.print(Hello);System.out.print(EveryOne);A.HelloEveryOneB.HelloC.EveryOneD.One2.下列语句执行后,k的值是__C____。inti=6,j=8,k=10,m=7;if(ij||mk--)k++;elsek--;A.12B.11C.10D.93.下列循环语句的循环次数是___D___。inti=5;do{System.out.println(i--);i--;}while(i!=0);A.0B.1C.5D.无限4.下列代码片段执行之后,输出的结果为__C___。intx=12,m=11,y=13;inttemp=xy?x:y;temp=tempm?temp:m;System.out.print]n(temp);A.11B.12C.13D.15.下列关于switch语句的描述中,正确的是__D____。A.退出switch语句的唯一途径是执行break语句B.switch语句中case和default子句都可以有多个C.switch语句中case子句的语句序列中一定要包含break语句D.switch语句中default子句可以省略6.执行for(i=1;i=10;i++)循环后,i的值为___C___。A.1B.10C.11D.97.下列关于for循环和while循环的说法中__A___是正确的。A.while循环能实现的操作,for循环也都能实现B.while循环判断条件一般是程序结果,for循环判断条件一般是非程序结果C.两种循环任何时候都可替换D.两种循环结构中循环体都不可以为空8.给出下列的代码,___C__行在编译时可能会有错误。①publicvoidmodify(){②inti,j,k;③i=100;④while(i0){⑤j=i*2;⑥System.out.println(Thevalueofjis+j);⑦k=k+1;⑧}⑨}A.line4B.line6C.line7D.line89.执行如下程序代码后,变量c的值是___C____。inta=0,c=0;do{--c;a=a-1;}while(a0);A.0B.1C.-1D.死循环10.下列关于for语句的描述错误的是____A____。A.在for语句中定义的变量,可以在for语句之外的语句中使用B.循环变量的值可以由大到小变化C.for语句中的循环语句体有可能一次都不执行D.for语句中的3个表达式都可以省略二、填空题1.在switch语句中,表达式的值必须是____整型(整型,短整型)____或者__字符型(字符型,字节型)____类型的数据。2.在__do...while______语句形式中,不论表达式的值是true还是false,循环体中的语句至少被执行一次。3.___continue_____语句可以终止当前一轮的循环,不再执行其下面的语句,直接进入下一轮的循环;___break_____语句通可以使程序从一个语句体的内部跳出去,继续执行该语句体下面的语句。4.对于下面代码,输出的第7个整数是___18_____,共有____9____行输出,如果将i++改为i--,___不会_____(会/不会)出现编译错误。for(i=12;i=20;i++)System.out.println(i);System.out.println();5.如果在程序执行过程中,while语句中表达式的值始终为true,则循环体会被无数次执行,进入到无休止的____死循环___状态中。6.for语句的表达式1中可以并列多个表达式,但它们之间要用____逗号___隔开。7.实现下面的程序流程,请填空。条件1条件2BCADtruefalsefalsetrueif(条件1)System.out.println(A);Elseif(条件2)System.out.println(B);elseSystem.out.println(C);System.out.println(___D____);8.设有以下程序段,填写适当表达式,使程序运行时执行3次循环体。intx=1dox+=2;System.out.println(x);Loopx7;三、简答题1.if语句中判断条件是否成立的表达式一定是逻辑型的表达式吗,为什么?答:可以不是,但是最终结果必须是逻辑值。逻辑表达式的值是表达式中各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。只要最后的逻辑值为逻辑值就满足条件。2.switch语句中,case后面的语句序列中一定要有break语句吗?答:不一定要有break语句。break语句的作用是执行完一个case分支后,使程序跳出switch结构。如果没有break语句,程序执行完匹配的case语句序列后,还会继续执行后面的case子句。当不使用break语句时,switch允许多个case子句执行(当多个case子句符合执行条件且case子句中没有使用break语句时)。3.试比较break语句与continue语句用于循环语句中的不同。答:continue语句只能用在循环语句中。它的作用是终止本次循环,跳过循环体的其余部分,直接转向循环条件判断。对于while语句和do…while语句,continue语句执行时,直接跳过循环体中剩余的代码而转到循环条件判断处;对于for语句,continue语句执行时,直接跳过循环体中剩余的代码,转到执行表达式3,先改变循环控制变量后再进行循环条件的判断。break语句通常用在循环语句和switch语句中。它的作用是使程序从一个语句体的内部跳出去,继续执行该语句体后面的语句。例如,从switch语句的case语句中跳出,或者用来结束循环。break语句及continue语句均可用于循环语句中,对于单层循环,continue语句仅结束本次循环,如果循环条件仍为true,则继续循环;而break语句是结束整个循环。4.试比较while、do…while和for三种循环的异同。答:循环语句的三种形式while、do…while和for语句在表达上是等价的,也就是说任意一个循环都可以用三种形式之一实现。(1)while语句和do...while语句,只在while后面指定循环条件,但是需要在循环体中包括使循环趋于结束的语句,而for语句则可以在迭代语句中包含使循环趋于结束的语句。(2)用while语句和do...while语句时,对循环变量的初始化操作应该放在while语句和do...while语句之前,而for语句则可以在初始化语句中完成。(3)while语句和do...while语句实现的功能相同,唯一的区别就是do…while语句先执行后判断,无论表达式的值是否为true,都将执行一次循环;而while语句则是首先判断表达式的值是否为true,如果为true则执行循环语句;否则将不执行循环语句。(4)for循环语句一般用在对于循环次数已知的情况下,而while语句和do...while语句则一般用在对于循环次数不确定的情况下。5.分析下面3个if语句中哪两个是等价的。if(a==b);if(c==d)a=1;elseb=1;if(a==b){if(c==d)a=1;elseb=1;}if(a==b)if(c==d)a=1;elseb=1;答:第二个和第三个是等价的。四、编程题1.编写模拟计算器的程序。程序接收两个整数和要执行的操作,输出类似3*8=24的结果。⑴importjavax.swing.JOptionPane;⑵publicclassCalculater{⑶publicstaticvoidmain(String[]args){⑷doublea=0.0,b=0.0;⑸Stringstr;//String类型的变量用于接收用户的输入⑹str=JOptionPane.showInputDialog(请输入收第一个数:);⑺a=Double.parseDouble(str);⑻str=JOptionPane.showInputDialog(请输入第二个数:);⑼b=Double.parseDouble(str);⑽JOptionPane.showMessageDialog(null,a+”*”+b+”=”+a*b);⑾}⑿}2.写程序求解以下分段函数。要求输入x的值,输出函数y的值。100,10,105,xxxxxxyimportjavax.swing.JOptionPane;publicclassPiecewiseFun{publicstaticvoidmain(String[]args){doublex=0.0,y=0.0;Stringstr=JOptionPane.showInputDialog(请输入x);x=Double.parseDouble(str);if(x-5&&x0){y=x;JOptionPane.showMessageDialog(null,y=+y);}elseif(x==0){y=x-1;JOptionPane.showMessageDialog(null,y=+y);}elseif(x0&&x10){y=x+1;JOptionPane.showMessageDialog(null,y=+y);}elseJOptionPane.showMessageDialog(null,y=+y);}}3.编写程序,求1−3+5−7+…−99+101的值。publicclassSumNum{publicstaticvoidmain(String[]args){intsum=0;Stringstr=;for(inti=1,j=1;i=101;i=i+2,j++){if(j%2==0){sum=sum-i;str=str+-+i;}else{sum=sum+i;str=str+++i;}}System.out.println(str+=+sum);}}4.编程找出所有的水仙花数。(水仙花数是指一个3位数,其各位数字的立方和等于其本身。例如:153是一个水仙数,13+53+33=153)publicclassNarcissisticNum{publicstaticvoidmain(String[]args){for(inti=100;i1000;i++){inta=i/100;//百位intb=(i-a*100)/10;//十位intc=i-a*100-b*10;//个位if((a*a*a+b*b*b+c*c*c)==i)System.out.println(a+^3++b+^3++c+^3=+i);}}}5.编程找出比1234大的最小素数。publicclassPrimeNum{publicstaticvoidmain(String[]args){inti=1234;while(true){booleanflag=true;for(intk=2;ki;k++){if(i%k==0){flag=false;break;}}if(flag)break;elsei=i+1;}System.out.println(比1234大的最小素数=+i);}}6.给定一个列表Nums={60,40,20,10,8,6,4,2,2,10,4},编程实现以下功能。(1)从命令行输入两个数,查找Nums中是否存在这两个数之间的数。(1)importjava.util.Scanner;(2)publicclassSearchNum{(3)publicstaticvoidmain(String[]args){(4)int[]Nums={60,40,20,10,8,6,4,2};(5)Scannersc=newScanner(System.in);(6)System.out.println(请输入第一个数