天天看点

练习题——流程控制语句(下)

上一次我总结了有关选择结构的 if 和 switch 语句的练习题,相比于今天要总结的循环结构要简单许多,因此这次总结会更加细致。

这里先总结一个解决for循环的方法:

  • 先看行与行之间的规律。因为这个规律比较明显,所以我们一般将这个for循环写在最外层
  • 其次观察每一行(列)有什么规律。如果每一行的规律不止一个,那就还是按规律比较明显的先写。(这时就是嵌套 for 循环,注意格式的缩进)。
  • 最后跳出循环,完成剩下的程序性代码。
练习题——流程控制语句(下)

分析:图案1:按照步骤,我们先看行与行之间的规律——每一行都比上一行的数字多一个,总共是六行

                       其次观察每一行(列)的数字之间的规律——逐次加一,,最大数字为六,并且每个数字都要空一格

public class Home03_15{
    public static void main(String[] args){
        for(int j=1;j<=6;j++){   //行的规律:每一行的数字比上一行多一个
            for(int i=1;i<=j;i++){      //列的规律:每个数字比上一个数字加一
                System.out.print(i + " ");
            }
            System.out.println();   //每一行完后要进行换行
        }
    }
}
           

运行结果:

练习题——流程控制语句(下)

       图案2:按照步骤:先看行与行之间的规律——每一行都比上一行的数字少一个,总共是六行

                    其次观察每一行(列)的数字之间的规律——逐次加一,,最大数字为六,并且每个数字都要空一格

public class Home03_15b{
    public static void main(String[] args){
        for(int j=6;j>=1;j--){
            for(int i=1;i<=j;i++){
                System.out.printf(i + " ");
            }
            System.out.println();
        }
    }
}
           

运行结果:

练习题——流程控制语句(下)

       图案3:按照步骤,我们先看行与行之间的规律——每一行都比上一行的数字少一个,总共是六行。但是我们会发现这个图   有空白部分,其实那是空格。

                    其次观察每一行(列)的规律,首先是空格的规律,每一行的空格数都比上一行少一个,然后是数字,每一个数字都比前一个数字大一。

public class Home03_15c{
    public static void main(String[] args){
        for(int k=1;k<=6;k++){    //行,每一行的数字都比上一行多一个
            for(int j=1;j<=(6-k);j++){       //空格,每一行的空格数都比上一行少一个
                System.out.printf(" ");
            }
            for(int i=1;i<=k;i++){      //数字,每一个数字都比上一个数字大一
                System.out.print(i);
            }
            System.out.println();
        }
    }
}
           

运行结果:

练习题——流程控制语句(下)

        图案4:按照步骤,我们先看行与行之间的规律——每一行都比上一行的数字多一个,总共是六行。但是我们会发现这个图   有空白部分,其实那也是空格。

                    其次观察每一行(列)的规律,首先是空格的规律,每一行的空格数都比上一行少一个,然后是数字,每一个数字都比前一个数字大一。

public class Home03_15d{
    public static void main(String[] args){
        for(int k=1;k<=6;k++){      //行
            for(int j=1;j<=(k-1);j++){    //空格
                System.out.print(" ");
            }
            for(int i=1;i<=(7-k);i++){     //数字
                System.out.print(i);
            }
            System.out.println();
        }
    }
}
           

运行结果:

练习题——流程控制语句(下)
练习题——流程控制语句(下)

分析:我们先观察这个图的规律,发现它是两边对称的,对于这种对称图形,我们一般会运用绝对值来确定它的范围,这样就能得到一个对称图形。

           按照步骤, 因为我们把这个图分成了左右对称的两部分,所以还是每一行都比上一行多一个数字,还有空格。

           其次观察每一行的数字(列),我们会发现每个数都是2的次方,2的0次方、2的1次方......最高是2的7次方,并且每一行的最高次幂都是这一行的行数-1.

class Home03_16{
    public static void main(String[] args){
        for(int i=1;i<=8;i++){      //行
            for(int j=1;j<=8-i;j++){     //空格
                System.out.print("    ");
            }
            for(int k=-(i-1);k<=i-1;k++){     //根据图形对称性及最高次幂  
                System.out.printf("%4.0f",Math.pow(2,i-1-Math.abs(k)));
            }    //4.0f是为了格式的整齐,Math.pow是指数,用绝对值表示图形对称
            System.out.println();        //每一行之间进行换行
        }
    }
}
           

运行结果:

练习题——流程控制语句(下)

以上是有关图形的循环结构的习题,我们所遇到的问题肯定不止图形,更多的是代数,例如求和、求具有规律性的算法......所以下面就是一些有关代数的循环题。

练习题——流程控制语句(下)

分析:我们观察等式,发现等式最后一项分式已经告诉了我们每个分式分母的规律,2*项数-1。

           那我们下来就要观察每个分式之间的规律,奇数项前面是负号偶数项前面是正号,正负交错。

import java.util.Scanner;
class Demo03_18{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int imax=scanner.nextInt();
        double sum=0;
        double flag=1;
        for(int i=1;i<=imax;i++){        //插入项数
            sum+=flag/(2*i-1);      //求出每个项,并且对所有项求和      
            flag=-flag;          //变换每个项前面的符号,一正一负
        }
        double pi=sum*4;
        System.out.println(pi);
    }
}
           

运行结果:

练习题——流程控制语句(下)
练习题——流程控制语句(下)

分析:我们首先要知道用十进制怎么求出二进制,那就是用十进制一直除以2,直到商0,那么所有的余数就是二进制。那么这里就要用到while循环了。但是数字和数字相加还是一个数字,那怎么办呢?这就需要用到字符串,因为字符串和数字只能叠加,运用while循环之后,什么时候跳出循环呢?就是商0的时候,这时就要用到 if 语句了。

import java.util.Scanner;
class Demo03_23{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int num=scanner.nextInt();
        String binStr="";
        while(true){
            binStr=num%2+binStr;
            num/=2;
            if(num==0){
                break;
            }
        }
        System.out.println(binStr);
    }
}
           

运行结果:

练习题——流程控制语句(下)