zoukankan      html  css  js  c++  java
  • 《JAVA语言》课问题汇总

    一、阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。

    1. 原码

    原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

    [+1]原 = 0000 0001

    [-1]原 = 1000 0001

    第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

    [1111 1111 , 0111 1111]

    [-127 , 127]

    原码是人脑最容易理解和计算的表示方式.

    2. 反码

    反码的表示方法是:

    正数的反码是其本身

    负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

    [+1] = [00000001]原 = [00000001]反

    [-1] = [10000001]原 = [11111110]反

    可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

    3. 补码

    补码的表示方法是:

    正数的补码就是其本身

    负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

    [+1] = [00000001]原 = [00000001]反 = [00000001]补

    [-1] = [10000001]原 = [11111110]反 = [11111111]补

    对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

    二、课堂测试1:像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 “软件”。

    package calculate;

    public class calculate {

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    }

    }

    class  Calculat{

    public static void main(String[] args) {

    for(int i=1;i<=30;i++)

    {

    System.out.print(i+"");

    int x=(int)(Math.random()*100);

    System.out.print(x);

    int operator=(int)(Math.random()*4+1);

    if(operator==1)

    {

    System.out.print("+");

    }

    else if(operator==2)

    {

    System.out.print("-");

    }

    else if(operator==3)

    {

    System.out.print("*");

    }

    else if(operator==4)

    {

    System.out.print("/");

    }

    int y=(int)(Math.random()*100);

    if(x<y)

    {

    int temp;

    temp=x;

    x=y;

    y=temp;

    }

    System.out.println(y);

      }

    }

    }

    三、在“二”的基础上进行课堂测试2: 1、题目避免重复;2、可定制(数量/打印方式);3、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整。

    package calculate;

    import java.util.Random ;

    import java.util.Scanner;

    import java.lang.reflect.Array;

    import java.util.LinkedList;

    import java.util.List;

    public class FourOperations1

    {

        public static void main(String[] ages)

        {

            while(1>0)

            {

                System.out.print("\n请选择要求:"

                    +"\n  是否有乘除法;(True/False)"

                    +"\n  是否有括号(最多可以支持十个数参与运算)(True/False)"

                    +"\n  数值范围(True(1~10)/False(1~100))"

                    +"\n  加减乘除有无负数(True/False)"

                    +"\n  除法有无余数(True/False)");

                Scanner sc = new Scanner(System.in);

                Boolean[] a=new Boolean[5];

                for(int i=0;i<5;i++)

                {

                     a[i]=sc.nextBoolean();

                }

                //sc.close();

                System.out.println("请输入要出题的个数");

                Scanner N = new Scanner(System.in);

                int index=N.nextInt();

                //N.close();

            

                for(int ii=0;ii<index;ii++)

                {    

                    if(a[1]==false)

                    {

                        int a1=RandomNum(100),a2=RandomNum(100);

                        int sign=RandomNum(4);

                        if(sign==3&&a[4]==false)

                        {

                            a1=(a1%15)*(a2%10);

                            System.out.print("\n"+a1);

                            PrintSign(sign);

                            System.out.print(a2%10+"  =");

                            continue;

                        }

                        if(a[0]==false)

                        {            

                            if(a[3]==false)

                            {

                                if(a[2]==false)

                                {

                                    

                                    System.out.print("\n"+a1);

                                    PrintSign(sign%2);

                                    System.out.print(a2+"  =");

                                }    

                                else if(a[2]==true)

                                {

                                    System.out.print("\n"+a1%10);

                                    PrintSign(sign%2);

                                    System.out.print(a2+"  =");

                                }

                            }

                            else if(a[3]==true)

                            {

                                int ssign=RandomNum(2);

                                if(ssign==0){

                                    a1=-a1;

                                }

                                if(a[2]==false)

                                {

                                    System.out.print("\n"+a1);

                                    PrintSign(sign%2);

                                    System.out.print(a2+"  =");

                                }    

                                else if(a[2]==true)

                                {

                                    System.out.print("\n"+a1%10);

                                    PrintSign(sign%2);

                                    System.out.print(a2%10+"  =");

                                }

                            }

                        }

                        else if(a[0]==true)

                        {

                            if(a[3]==false)

                            {

                                if(a[2]==false)

                                {

                                    System.out.print("\n"+a1);

                                    PrintSign(sign);

                                    System.out.print(a2+"  =");

                                }    

                                else if(a[2]==true)

                                {

                                    System.out.print("\n"+a1%10);

                                    PrintSign(sign);

                                    System.out.print(a2%10+"  =");

                                }

                            }

                            else if(a[3]==true)

                            {

                                int ssign=RandomNum(2);

                                if(ssign==0){

                                    a1=-a1;

                                }

                                if(a[2]==false)

                                {

                                    System.out.print("\n"+a1);

                                    PrintSign(sign);

                                    System.out.print(a2+"  =");

                                }    

                                else if(a[2]==true)

                                {

                                    System.out.print("\n"+a1%10);

                                    PrintSign(sign);

                                    System.out.print(a2%10+"  =");

                                }

                            }

                            

                        }

                    }

                    else if(a[1]==true)

                    {

                        int size=RandomNum(9);

                        int[] array=new int[size*2+4];

                        if(a[0]==false){

                            for(int i=0;i<=size;i++){

                                array[i]=RandomNum(2);

                            }

                        }

                        else if(a[0]==true){

                            for(int i=0;i<=size;i++){

                                array[i]=RandomNum(4);

                            }

                        }

                        if(a[2]==true){

                            for(int i=size+1;i<=size*2+2;i++){

                                array[i]=RandomNum(70)+4;

                            }

                        }

                        else if(a[2]==false){

                            for(int i=size+1;i<=size*2+2;i++){

                                array[i]=RandomNum(96)+4;

                            }

                        }

                        

                        if(a[3]==true){

                            for(int i=size+1;i<=size*2+2;i++){

                                int ssign=RandomNum(2);

                                if(ssign==0){

                                array[i]=-array[i];

                                }

                            }

                        }

                        

                        LinkedList<Node> nodeList = new LinkedList<Node>();

                        for(int nodeIndex=0;nodeIndex<array.length;nodeIndex++){

                             nodeList.add(new Node(array[nodeIndex]));       

                        

                        }

                        creatBinTree(array,nodeList);

                        Node root = nodeList.get(0);

                        inOrderTraverse(root);

                        System.out.println("  =  ");

                    }

                }

            }

        }

        public static int RandomNum(int i)

        {

            Random a=new Random();

            int a1=a.nextInt (i);

            return a1;

        }

        public static void PrintSign(int sign)

        {

            if(sign==0){

                System.out.print("  +  ");

            }

            else if(sign==1){

                System.out.print("  -  ");

            }

            else if(sign==2){

                System.out.print("  *  ");

            }

            else if(sign==3){

                System.out.print("  /  ");

            }

            else

                System.out.print(sign);

        }

        

        public static class Node

        {

            Node leftchild;

            Node rightchild;

            int data;

            

            Node(int newData){

                leftchild=null;

                rightchild=null;

                data=newData;

            }

        }

        

        public static void creatBinTree(int array[],LinkedList<Node> nodeList){

            

            

            for(int parentIndex=0;parentIndex<array.length/2-1;parentIndex++){

                nodeList.get(parentIndex).leftchild = nodeList  

                        .get(parentIndex * 2 + 1);

                nodeList.get(parentIndex).rightchild = nodeList  

                        .get(parentIndex * 2 + 2);

            }

        }

        public static void inOrderTraverse(Node node) {  

            if (node == null)  

                return;  

            if (node.leftchild != null) {

            System.out.print("(");  

            }

            inOrderTraverse(node.leftchild);  

            PrintSign(node.data );  

            inOrderTraverse(node.rightchild);

            if (node.rightchild != null) {

                System.out.print(")");  

            }

        }  

        

    }

  • 相关阅读:
    二维数组最大子数组算法
    寻找最大子数组
    最大值bug 调试
    多路电梯调度算法
    分析一个文本文件各个词出现的频率,并把频率最高的十个词打印出来。
    使用redis实现生产者消费者模式
    简单使用redis实现sso单点登录
    MongoDB批量导入及简单的性能优化
    mysql安装
    字符串操作性能优化
  • 原文地址:https://www.cnblogs.com/xiangyu721/p/11556397.html
Copyright © 2011-2022 走看看