Java假期作业(Day04)

一.选择题

1、【C语言】读程序,选择结果( D )

int main()
{
   int a = 5;
   if( a = 0 ){
      printf("%d", a - 10);
   }
   else
   {
   printf("%d", a++);
   }
   return 0;
}

A. -5      B. 6      C. 1      D. 0

解析:注意 if 语句 if (a = 0),是一个等号,此时是赋值。那么a被改为了0,if条件就是假了;打印的时候,是后置++,所以先打印 a,那么结果就是0,最后对a进行自增运算,最终a还是变成1了,打印的时候还是0。

2、【C语言】关于野指针,下面说法错误的是( C )

A. 野指针指可能指向非法的内存地址

B. 野指针有时也可能指向合法的内存地址

C. 野指针都是由指针未初始化导致的

D. 对野指针的访问,可能会导致程序异常

解析:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址, 所以结果是不可知的。 所以C选项中:不一定都是未初始化引起的。也可能是,比如动态内存开辟后使用free释放,但是最后没有置空。 故:A B D均为正确的。

3、下列 java 程序的输出结果为( B )。

public class Example{
   String str=new String("hello");
   char[]ch={'a','b'};
   public static void main(String args[]){
      Example ex=new Example();
      ex.change(ex.str,ex.ch);
      System.out.print(ex.str+" and ");
      System.out.print(ex.ch);
   }
   public void change(String str,char ch[]){
      str="test ok";
      ch[0]='c';
   }
}

A: hello and ab       B: hello and cb 

C: hello and a         D: test ok and ab

解析:主要考察引用的传递,是否会修改原来的值。建议在IDEA中运行和调试。 在change函数中,接受的都是引用,但是str修改的是形参自己的指向。ch是通过该引用修改了原来数组对象的内容。所以, 同学们需要注意,传引用什么时候,能够改变原来的指向的内容?就看是否通过当前这个引用,修改了原来的对象的内容。

4、已知有下列Test类的说明,在该类的main方法内,则下列哪个语句是正确的?( A )

public class Test {
   private float f = 1.0f;
   int m = 12;
   static int n = 1;
   public static void main (String args[]) {
      Test t = new Test();
   }
}

A: t.f;           B: this.n;

C: Test.m    D: Test.f

解析:A:同一个类中,可以访问私有的成员   

B:n是静态的,不能通过this访问   

C:m是普通的成员变量,需要通过对象的引用访问   

D:f是普通的成员变量,需要通过对象的引用访问

5、以下会产生信息丢失的类型转换是( B )

A: float a=10;

B: int a =(int)8846.0;

C: byte a=10; int b=-a

D: double d=100

解析:A:整数部分可以存入浮点型中

B:会丢失信息,小数部分无法保存,就算是0也不能保存

C:字面值10赋值给a,没有超过表示的范围,可以存储。int b = -a;一个字节赋值给4个字节没有问题

D:同A时一个道题。

二.代码题

1、有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个 人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

public class getAge{
   public class static main(String[] args){
      int n = 2, age = 10;
      for(int i = 2 ;i <= 5;i++){
          age += n;
      }
      System.out.println("第五个人的年龄是:" + age);
   } 
}
private static int getAge(int age){
    if(age==1)
       return 10;
    else
       return getAge(age-1)+2;
}
public static void main(String[] args) {
   System.out.println(getAge(5));
}

2、给定一个3乘以3的二维数组,里面的数据随机生成。分别求出两个对角线的元素之和。

public static void main(String[] args) {
   Random random = new Random();
   int[][] array = new int[3][3];
   for (int i = 0; i < 3; i++) {
       for (int j = 0; j < 3; j++) {
           array[i][j] = random.nextInt(10);
       }
   }
   int sum1 = 0;
   int sum2 = 0;
   for (int i = 0; i < array.length; i++) {
       for (int j = 0; j < array[i].length; j++) {
           //1、确定左到右的对角线
           if(i == j) {
             sum1 += array[i][j];
           }
           //2、确定右到左的对角线
           if(i+j == array.length-1) {
             sum2 += array[i][j];
           }
       }
   }
   System.out.println(sum1);
   System.out.println(sum2);
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值