Java PTA(3)——流程控制语句

三.流程控制语句

1.JAVA语句分类

空语句        仅包含一个分号

表达式语句        由表达式加分号构成    

        赋值表达式   ++或--的前后缀形式  方法调用   对象创建表达式

声明语句        声明一个变量

标号语句        标号:语句

块语句        用一对花括号{ }将零个或多个语句括起来,也称复合语句

2.结构化程序设计的基本结构

(1)顺序结构

先执行A,再执行B

(2)选择结构: 

若P为真,则执 行A,否则执行B。

 若P为真,则执 行A,否则跳过A。

(3)循环结构

3.1)当型循环      

当P为真,反复执行A, P为假时出循环。

3.2)直到型循环      

先执行A, 再判断,若P为假,反复执行A, 直到P为真出循环。

(4) 三种基本结构总结

        共同特点:单入口、单出口

        三种结构之间可以是平行关系,也可以互相嵌套,通过结构之间的复合形成复杂的结构。

3.分支语句  

分支语句实现程序流程控制的功能 ,即根据一定的条件有选择地执行或跳过特定的语句。

(1)if-else  

if-else语法格式

if ( boolean类型表达式 ) {
		        语句或语句块;
}


if ( boolean类型表达式 ){
    语句或语句块;   
}else if ( boolean类型表达式 ) {
    语句或语句块;  
}else {
     语句或语句块;	
}

(2)switch 

switch语句语法格式

switch(exp){
		case const1:
			statement1;
			break;
		case const2:
			statement2;
			break;
		… …
		case constN:
			statementN;
			break;
		default:
			statement_dafault;
			break;
	} 

注意:break的重要性

case的穿透性 :在switch语句中,如果后面不写break且已经进入程序,程序会一直往下走,不会判断case中的常量值,执行后面所有的case知道遇到break结束,或者执行完所有的case结束

例如:

public class Test {
    public static void main(String[] args) {
        int x = 6,y = 10,k = 5;
        switch(x % y) {
            case 0: k = x * y;
            case 6: k = x / y;
            case 12: k = x - y;
            default: k = x * y - x;
        }
        System.out.println(k);
    }
}

结果:54

原因:case后没有break, x%y == 6 进入 case 6 得到 k = 0 ;case的穿透性进入 case 12 得到 k = -4;case的穿透性进入 default 得到 k = 54;已经到达switch,跳出switch。

4.循环语句

循环语句功能

        在循环条件满足的情况下,反复执行特定代码

循环语句的四个组成部分

  • 初始化部分(init_statement)
  • 循环条件部分(test_exp)
  • 循环体部分(body_statement)
  • 迭代部分(alter_statement)

(1)for 循环

for 循环语句语法格式

for(init_statement; test_exp; alter_statement){
        body_statement      
}

应用举例

	public class ForLoop
	{	public static void main(String args[])
		{         int result = 0;
		          for(int i=1; i<=100; i++) {
	                  result += i;         
                  }
  	              System.out.println("result=" + result);
		}
	} 

(2)while 循环

while 循环语句语法格式

[init_statement]
while(test_exp){
    body_statement;
	[alter_statement;]    
}

应用举例

		public class WhileLoop
               {
		        public static void main(String args[])
             	        {	int result = 0;
			int i=1;
			while(i<=100) 
                               {        result+= i;
                            	            i++;     	}
			System.out.println("result=" + result);
		         }
		} 

(3)do-while 循环

do/while 循环语句语法格式

[init_statement]
do{
       body_statement;
	   [alter_statement;]
} while( test_exp); 

应用举例

        public class WhileLoop
		{        public static void main(String args[])
        	         {    int result = 0, int i=1;
			  do
                          {        result += i;
                                    i++;
			  }while(i<=100);
			  System.out.println("result=" + result);     }   } 

5.特殊的循环控制语句

(1) break  

break语句用于终止某个语句块的执行          

{   ……	 
    break;
    ……
}

(2)contitnue

continue语句用于跳过某个循环语句块的一次执行

continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环

6. 常用程序设计方法

(1)枚举法(穷举法)

“笨人之法”: 把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出。

(2)迭代法

基本思想:不断由已知值推出新值,直到求得解为止。

迭代初值、迭代公式和迭代终止条件是迭代法的三要素。

例:斐波纳契数列。

前两个数都是1,第三个数是前两个数之和,以后的每个数都是其前两个数之和。    

各数之间的一种递推关系,即:            

Fn = Fn-1 + Fn-2,F1 = F2 =1 本

题的三要素是:        

迭代初值:x=1,  y=1        

迭代公式:z=y+x        

终止条件:共计算n-2次

 2.1)累加型

2.2)阶乘型

2.3)递归法

        基本思想是不断把问题分解成规模较小的同类问题,直到分解形成的问题因规模足够小而能直接求得解为止。

        一般来说,使用递归的程序代码会更简捷,也更容易理解,但递归代码的执行效率却非常低,所以应尽量避免使用。

7.题目

(1)判断题

1.1 Java中的switch-case分支结构的特点是等值判断。它能用if分支结构进行改写。(T)

1.2 Java中的switch-case分支结构中,一旦控制表达式的计算结果与某个case值匹配成功,就执行完该case对应的语句块,即结束switch-case语句。(F)

1.3 在JDK1.8及以后的版本中,使用如下语句是否正确?(T)

String str="*******";
  switch(str)
  {
     case "abc":
       //...
        break;
     case "def":
       //.....
       break;
   }

1.4 break语句只用于循环语句中,它的作用是跳出循环。(F)

1.5 循环嵌套是指在一个循环语句的循环体中再定义一个循环语句的语法结构。while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套。(T)

1.6 Java中continue语句的作用是结束本次迭代,开始下一次迭代。(T)

1.7 在switch语句中必须要有default选项。(F)

1.8 while(表达式)...语句中的“表达式”的值必须是boolean型数据。(T)

(2)单选题

2.1 假设有如下程序:

public class Demo {
        public static void main(String args[]) {
                 boolean flag = 10%2 == 1 && 10 / 3 == 0 && 1 / 0 == 0 ;
                 System.out.println(flag ? "mldn" : "yootk") ;
        }
}

最终执行结果是什么?

A.mldn

B.yootk

C.true

D.程序出错

2.2 编译运行以下程序后,关于输出结果的说明,正确的是( )。

public class Main {
    public static void main(String[] args) {
        int x = 4;
        System.out.println("value is "+((x>4)?99.9:9));
    }
}

A.输出结果为: value is 99.99

B.输出结果为: value is 9

C.输出结果为: value is 9.0

D.编译错误

2.3 下面代码运行结果显示( )。

double temperature = 50;
if (temperature >= 100)
   System.out.println("too hot");
else if (temperature <= 40)
   System.out.println("too cold");
else
   System.out.println("just right");

A.too hot

B.too cold

C.just right

D.too hot too cold just right

2.4 下列语句序列执行后,k 的值是( )

int x=6, y=10, k=5;
switch( x%y ){ 
      case 0: k=x*y;
      case 6: k=x/y;
      case 12: k=x-y;
      default: k=x*y-x;
}

A.60

B.5

C.0

D.54

2.5 以下表达式中,()不可作为循环条件。

A.x = 10

B.y >= 80

C.inputPass == truePass

D.m !=3

2.6 while循环和 do…while循环的区别是:( )

A.没有区别,这两个结构任何情况下效果一样

B.while循环比 do…while循环执行效率高

C.while循环是先循环后判断,所以循环体至少被执行一次

D.do…while循环是先循环后判断,所以循环体至少被执行一次

2.7 在JAVA中,给定代码片段如下所示,则编译运行后,输出结果是()。

for (int i = 0; i < 10; i++) {
    if (i == 10 - i) {
        break;
    }

    if (i % 3 != 0) {
        continue;
    }
    System.out.print(i + " ");
}

A.0

B.0 3

C.0 3 6

D.0 3 6 9

2.8 下面代码将输出( )行 "Welcome to Java"?。

int count = 0;
do {
     System.out.println("Welcome to Java");
} while (count++ < 10);

A.10

B.11

C.9

D.1

2.9 分析下列代码的运行结果是什么?

​void looper(){

    int x=0;
    one:
    while(x<20) {
        two:
            System.out.print(++x);
            if(x>3)
              break two;
    }

}

A.编译错误

B.0

C.1

D.2

2.10 下列选项中不属于本段代码输出结果的是( )

public class Main{
    public static void main(String args[]) {
      one:
      two:
      for(int i=0; i<3; i++) {
          three:
          for(int j=10; j<30; j+=10) {
             System.out.println(i+j);
             if(i>0)
                break one;
          }
      }
    }
}

A.10

B.20

C.11

D.21

2.11 挑错题(A,B,C,D注释标注的哪行代码有错误?)

public class Test {
public static void main(String args[]){
int m=1000;
while (m>100) //A
{
m = m--; //B
if (m == 600){ //C
continue;
m++; //D
}
System.out.println("m= "+m);
}
}

}

A.

B.

C.

D.

(3)填空题

3.1

​
public class E {
    public static void main(String[] args) {
        int x = 1,y = 6;
        while (y-->0){
            x--;
        }
        System.out.print("x = "+x+",y="+y);
    }
}

​

x =     -5         , y =     -1        

(4)程序填空题

4.1程序改错题:求1到5的阶乘的和

功能:求1!+2!+3!+4!+5!。

public class Test {
    public static void main(String[] args) {
        fun();
    }
    public static void fun(){
        int n,j;
        //float s=0.0,t=1.0;//此行语句有错误,改正后填到下侧空格内
        
        float s = 0.0f, t = 1.0f;       //填空1
        
        for(n=1;n<=5;n++){
            //s=1;//此行语句有错误,改正后填到下侧空格内

            t=1;        //填空2
            
            for(j=1;j<=n;j++){
                //t=t*n;//此行语句有错误,改正后填到下侧空格内

                t=t*j;      //填空3
            }
            //s+t=s;//此行语句有错误,改正后填到下侧空格内

            s=t+s;          //填空4
        }
        System.out.printf("jiecheng=%.0f\n",s);
    }
}

(5)编程题

7-1 判断点是否在圆内?

编写程序,提示用户输入一个点(x,y),然后检查这个点是否在以原点(0,0)为圆心、半径为10的圆内或圆的边界上。
提示:

截图01.jpg

输入格式:

输入任意一个点的x轴和y轴坐标值,且两个值之间空格分隔。

输出格式:

若点在圆内,输出1,否则输出0。

输入样例:

4 5

输出样例:

1

代码:

import java.util.*;

public class Main
{
    public static void main(String args[])
    {
        Scanner input=new Scanner(System.in);
        double x=input.nextDouble();
        double y=input.nextDouble();
        if(x*x+y*y<100)System.out.println(1);
        else System.out.println(0);
    }
}

7-2 if-else基础训练-计算年利率

基本年利率7.7%

  1. 如果一年以内利率给5折
  2. 如果三年以内利率为7折
  3. 如果五年以内利率为100%
  4. 如果五年以上利率为1.1倍

输入一个年份,计算这个年份下的实际利率是多少?

输入格式:

输入一个整数。例如:6。

输出格式:

实际利率=8.47%

输入样例:

6

输出样例:

实际利率=8.47%

输入样例:

-1

输出样例:

error

代码:


import java.util.*;
public class Main{
    public static void main(String []argc){
        Scanner sc = new Scanner(System.in);
        double year = sc.nextDouble();
        double lilv = 0.077;
        if(year <= 0)
            System.out.println("error");
        else {
            if(year<=1)
                lilv = lilv*0.5;
            else if(year<=3)
                lilv = lilv*0.7;
            else if(year<=5)
                lilv = lilv;
            else
                lilv = lilv*1.1;
            System.out.println("实际利率="+lilv*100+"%");
        }

    }
}

7-3 打印99乘法表

打印99乘法表

输入样例:

不需要输入



输出样例:

在这里给出相应的输出。要求:99乘法表中,每个表达式的乘法结果长度为3。

1x1=1  
2x1=2  2x2=4  
3x1=3  3x2=6  3x3=9  
4x1=4  4x2=8  4x3=12 4x4=16 
5x1=5  5x2=10 5x3=15 5x4=20 5x5=25 
6x1=6  6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 
7x1=7  7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 
8x1=8  8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 
9x1=9  9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81 

代码: 

public class Main{
    public static void main(String []argc){
        for(int i = 1; i <= 9; i++){
            for(int j = 1; j <= i; j++){
                String c = String.format("%-3d",i*j);
                System.out.print(i+"x"+j+"="+c);
            }
            System.out.println();
        }
    }
}

保留几位数可以用 String.format( , )或者System.out.printf()

System.out.printf("%dx%d=%-3d",i,j,(j*i));

7-4 累加求和

输入20以内的整数,编程计算k=1∑n​k!,并输出计算结果。

输入格式:

输入正整数N,1<=N<=20

输出格式:

输出计算结果

输入样例:

在这里给出一组输入。例如:

20

输出样例:

在这里给出相应的输出。例如:

2561327494111820313

代码:

import java.util.*;
public class Main{
    public static void main(String []args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        long  sum = 0;

        for(int i = 1; i<=n;i++){
            long jiecheng = 1;
            for(int j = 1; j<=i;j++){
                jiecheng = jiecheng*j;
            }
            sum = sum+jiecheng;
        }

        System.out.println(sum);
    }
}

注意:jiecheng和sum两个数据为 long 类型

7-5 分解质因数

求出区间[a,b]中所有整数的质因数分解。

输入格式:

输入两个整数a,b。数据规模和约定  2<=a<=b<=10000

输出格式:

每行输出一个数的分解,形如k=a1a2a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)

输入样例:

在这里给出一组输入。例如:

3 10

输出样例:

在这里给出相应的输出。例如:

3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5

代码:

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a=sc.nextInt();
        int b=sc.nextInt();
        for (int i = a; i <= b; i++) {
            if (isPrime(i))continue;
            else prime(i);
        }
    }

    public static boolean isPrime(int n) {//素数
        boolean ret=true;
        for (int i = 2; i <= Math.sqrt(n); i++) {
            if (n%i==0){
                ret=false;
                break;
            }
        }
        if (ret) System.out.println(n+"="+n);
        return ret;
    }

    public static void prime(int n){
        System.out.print(n+"=");
        for (int i = 2; i <= n; i++) {

            while (n%i==0&&n!=i){//从2开始除,直到与i相等就退出循环,能被i整除就输出因数i
                System.out.print(i+"*");
                n/=i;//n的值变为除去后的值
            }

            if (i==n){//退出时i等于n,输出最后结尾不带*的i
                System.out.println(i);
            }

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值