第三章习题汇总(二)

循环结构类习题

题目分析:拿到题目首先根据题目可得,提示用户要求输入一些数字,根据写入的数据得出判断是否为正数还是负数,输入数字为0时跳出循环,如果输入的数不为0,则进行相加(注:应该是一边输入一边相加)用sum表示相加的结果,如果判断为正数时,p++(p代表的是输入正数的数目),如果判断为负数时n++(n代表的是输入负数的数目),最后求所有数的平均值则是用sum/(p+n)

注:使用while(true){

}

具有一定的风险,必须在合适的时机使用break跳出循环

import java.util.*;
class test11{
    public static void main(String[] args){
        Scanner s=new Scanner(System.in);
        double sum=0;
        int p=0;//正数的个数
        int n=0;//负数的个数
        System.out.print("请输入若干数字");
        while(true){
            int num=s.nextInt();
            if(num!=0){
                sum+=num;//等同于 sum=sum+num;
                if(num>0){
                    p++;
                }else{
                    n++;
                }
            }else{
                break;//跳出当前循环
            }
        }
        if(p+n==0){
            System.out.println("除了0没有其他数字的输入");
        }else{
            System.out.println("正数的个数"+p);
            System.out.println("负数的个数"+n);
            System.out.println("总数"+sum);
            System.out.println("平均数"+sum/(p+n));
        }
    }
}

 

 分析题目:要算出两个数(n1,n2)的最大公约数,首先应该将n1,n2两个数中小的数的所有约数都表示出来,将所有的约数从最大的数开始输出,然后用大的数去整除第一个数的约数,若出现其余数为0的情况下,则说明这个数就是n1,n2的最大公约数,然后将这个数赋值给gcd,然后用break跳出循环,输出gcd。

import java.util.*;
class test12{
    public static void main(String[] args){
        Scanner s=new Scanner(System.in);
        System.out.print("输入两个数");
        int n1=s.nextInt();
        int n2=s.nextInt();
        int gcd=1;
        for(int i=n1<n2?n1:n2;i>=1;i--){//先写出n1,n2两个数中最小数的所有因数,然后依次排列,从最大值依次往前算
             if(n1%i==0&&n2%i==0){
                 gcd=i;
                 break;
             }
        }
        System.out.println(gcd);
    }
}

 

 题目分析:根据题目要求输入一个数,以升序的方式显示它的所有最小因子

用题目中给定的120 进行分析,它输出的最小因子的升序顺序是2,2,2,3,5。

120    2->120    2

60       2->60      2

30       2->30       2

15       2->15       3

5          2->5        5

1

有上述分析可得,当最后的值变为1时跳出循环,。。。使用while(true){}先进入到循环,当i=2时是for循环的初始条件,循环条件是,当i<num时一直循环,当i=num时循环停止,因此循环条件是i<=num,当num%i==0时输出i,然后将num/i赋值给num在进行循环,一直到num=1时跳出循环

import java.util.*;
class test13{
    public static void main(String[] args){
        Scanner s=new Scanner(System.in);
        System.out.print("请输入一个数");
        int num=s.nextInt();
        while(true){
            for(int i=2;i<=num;i++){
                if(num%i==0){
                    System.out.print(i+" ");
                    num=num/i;
                    break;
                }
            }
            if(num==1){
                  break;
            }
        }
    }
}

 

 题目分析:

素数:除了1和其本身以外没有其他因数的数称为素数

首先先用一个boolean类型的flag作为标记,假设开始输入的就为素数,当flag=flase时用break跳出循环,当循环是for进行完毕的话则说明是素数,如果是break出来的则不是素数

class test17{
     public static void main(String[] args){
         int count=0;
         boolean flag=true;//定义一个boolean类型的flag(作为标记)  boolean flag=true--假设开始输入的数为素数
         for(int num=2;num<=1000;num++){
             for(int m=2;m<=num-1;m++){
                 if(num%m==0){
                     flag=false;
                     break;
                 }
             }
             if(flag){
                 count++;
                 System.out.print(num+" ");
                if(count%8==0){
                    System.out.println();
                }
             }
             flag=true;
         }
     }
 }

 

 题目分析:由上述题目可得,我们可以发现括号内数字的分子都为1且分母是2*i-1

又发现当数字次序为偶数次序是为减,我们可以定义一个double类型的flag=1,然后将-flag赋给flog即可

import java.util.*;
class test18{
    public static void main(String[] arge){
        Scanner s=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int imax=s.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);
    }
}

 题目分析:这道题目需要注意的是:闰年的条件是什么?--1.可以整除4且不可以整除100;2.可以整除400

class test20{
    public static void main(String[] args){
        int count=0;
        for(int i=101;i<=2100;i++){
            if(i%4==0&&i%100!=0||i%400==0){
                count++;
                System.out.print(i+" ");
                if(count%10==0){
                    System.out.println();
                }
            }
        }
        System.out.println("\n闰年一共"+count+"个");
    }
}

题目分析:我们一般将十进制化为二进制时所用的方法时不断将2短除,将余数从下往上写即可

二进制字符串的反取: binStr=num%2+binStr;

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

 

 题目分析:当输入0时跳出循环,先让最大数为0,依次输入新数,当它>最大数时,将这个数列为最大数,若它<最大数时,此时原最大数还是现在的最大数

import java.util.*;
class test24{
    public static void main(String[] args){
        Scanner s=new Scanner(System.in);
        int num=0;
        int max=0;
        int count=0;
        System.out.print("请输入数字:");
        while(true){
            num=s.nextInt();
            if(num==0){
                break;
            }else if(num>max){
                max=num;
                count=1;
            }else if(num==max){
                count++;
            }
        }
        System.out.println("max="+max+",count="+count);
    }
}
发布了21 篇原创文章 · 获赞 0 · 访问量 366

猜你喜欢

转载自blog.csdn.net/weixin_44318477/article/details/104255892