第十三讲习题参考答案

说明:这里给出的参考答案不能保证是最好的答案,并且只给出部分(对于没有给出答案的,如果你做了,感觉有问题,可以继续问)。

因为这里没有学习方法,所以所有代码都在main方法中完成。下面给出的答案都是main方法中的代码,你要执行这些代码,需要把基本框架写出来。

程序的基本框架:

public class Test1{

     public static void main(String args[]){

         // 要执行的代码写在这里

     }

}

 

编程题:

3、 输出11000中能被7整除或者以7结尾的数。

最常见的答案:

for(int i=1;i<=1000;i++){

   if(i%7==0 || i%10==7){

      System.out.println(i);

   }

}

不过这个程序要对1000个数进行遍历,其实这些数据规律性很强,可以利用这些规律,能被7整除也就是7的倍数,乘以1、2、3、4等等,以7结尾,相当于7+0、7+10、7+20、7+30等等。下面的代码是改造后的代码:

int value1=7; // 表示7 的倍数这一组

int value2=7; // 表示余数为7的这一组

while(true){

   if(value1 < value2){

      if(value1>1000) break;

      System.out.println(value1);

      value1+=7;

   }else if(value1 == value2){

      if(value1>1000) break;

      System.out.println(value1);

      value1+=7;

      value2+=10;

   }else{

      if(value2>1000) break;

      System.out.println(value1);

      value2+=10;

   }

}

如何不考虑顺序:

int number1=1000/7; // 能被7整除的数的个数

int number2=1000/10; // 余数为7的个数

int value=7;

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

   System.out.println(value);

   value+=7;

}

value=7;

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

   if(value%7 != 0){ // 去掉重复的

      System.out.println(value);

      value+=10;

   }

}

读程序题:

1. 写结果,如果有错,指出错误

       double a = 3.1251111111;
       double b = 1.0417037037;
       System. out .println((a/3)==b);
       System. out .println((b*3)==a);
答案:如果你认真计算,结果应该为true,但实际上不一定为true,我测试的结果为false,这道题不在于你答true或者false,而应该指出这种用法不对。因为计算机采用二进制表示,一个数很可能不能被准确表示。例如0.1表示为二进制0.000110011001100110011,不管采用多长都没有办法表示。所以对它进行加减乘除运算之后的结果也可能是不准确的,所以不能使用等号进行判断。只能按照一定的精度进行处理:
a/3-b>0.0000001 && a/3-b<0.0000001。(这个一定要牢记,在其他语言中也会有这样的问题,至少在C++中有)
2. 写结果 ,如果有错,指出错误
       int a=5;
       System. out .println(a++);
       System. out .println(++a);
      
       int b=a++;
       int c=++a;
       System. out .println(b);
       System. out .println(c);
答案:5  7  7  9 (考察++在前和在后的区别)
3. 写结果 ,如果有错,指出错误
       int a=0123;
       int b=123;
       System. out .println(a);
        System. out .println(b);
答案:83 123 (考察8进制和16进制表示)
4. 写结果 ,如果有错,指出错误
       byte b = 3;
       short s = 4;
       s = s+b++;
       System. out .println(s);
答案:s = s+b++;有错。整数的加减乘除如果操作数不是int,会转换为int,然后把int赋值给short后者byte时会出错。需要进行强制类型转换。
5 .写结果 ,如果有错,指出错误
       int a=10;
       int b=20;
       int c=30;
       if (a++ < b || a++ < c){
           System. out .println(a);
       } else {
           System. out .println(b);
       }
答案:11(考察||的用法)
6. 写结果 ,如果有错,指出错误
       int a=9;
       int b=5;
       int c=-5;
       System. out .println(a/b);
       System. out .println(a/c);
      
       System. out .println(a%b);
       System. out .println(a%c);
如果把 a=9 改为 a=-9 ,结果是什么
答案:1  -1   4   -4 (结果为整数)
7 .指出代码中的错误
       int a=123456;
       short s=123456;
       a=123456789123;
       long l=123456789123;
       float f=32;
       float f=32.3;
       double d=32.3;
答案:代码第2、3、4、6行有错误
8 .写结果 ,如果有错,指出错误
       int a=10;
       int b=3;
       if (a>b){
           System. out .println(1);
       } else if (a=b){
           System. out .println(2);
       } else {
           System. out .println(3);
       }
答案:代码错误,第五行应该为}else if(a==b){
    李绪成 CSDN Blog http://blog.csdn.net/javaeeteacher
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值