您好,欢迎来到九壹网。
搜索
您的当前位置:首页Java_语言基础

Java_语言基础

来源:九壹网


Java 语言基础

1.标示符和关键字在定义和使用方面有何区别?

【答】定义方面:标示符是用户定义的、以字母开头的字母数字序列,关键字是由Java语言定义的、具有特定含义的英文单词。

使用方面:标示符用于命名变量、常量、类、对象等元素,每一个关键字都有特定的含义,不能被赋予别的含义。

2.Java语言的基本数据类型有哪些?引用数据类型有哪些?

【答】基本数据类型有:整数类型byte、short、int、long,浮点数类型float、double,字符类型char,布尔类型boolean;引用数据类型包括数组(array)、类(class)和接口(interface)

3.试分析基本数据类型与引用数据类型的主要特点,并说明使用这两种变量有哪些差别?【答】基本数据类型的变量保存数据值,而引用数据类型的变量保存地址。

4.算术运算、关系运算、逻辑运算和位运算各有哪些运算符?

【答】算术运算:单目运算符有+(正)、—(负)、++(自增)、——(自减),双目运算符有+(加)、—(减)、*(乘)、/(除)、%(取余)

关系运算:=(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)都是双目运算

逻辑运算:&(与)、|(或)、!(非)、^(异或)、&&(条件与)、||(条件或),其中!是单目运算,其它都是双目运算

位运算:~(非)、&(与)、|(或)、^(异或)、<<(左移位)、>>(右移位)、>>>(无符号移位)

5.程序中为什么需要常量和变量?声明常量或变量时,为什么必须给出其所属的数据类型?

【答】在程序中使用的数据大多需要经常变化,用常量值表示显然不够,因此每一种算法语言都提供常量和变量来存储数据。

为了确定常量或变量的数据性质、取值范围、以及它们占用的内存单元的字节数和它们参加的合法运算和操作。

6.什么是变量的作用域,声明变量时,如何确定变量的作用域?

【答】 变量的作用域是指其作用范围。变量声明的位置决定了它的作用域

7.设i是一个整数类型变量,写出下列问题对应的表达式?

(1) 判断i为奇数或偶数;

【答】i%2==0 //取值为true时是偶数,否则是奇数

(2) 判断i的值是否在0~9之间;

【答】(i>0)&&(i<9)

8.设ch是一个字符变量,写出下列问题对应的表达式

(1) 判断ch是一个十进制的数字字符

(2) 判断ch是一个十六进制的数字字符

(3) 判断ch是一个大写字母

(4) 判断ch是一个英文字母,不论大写和小写

(5) 如何将一个十进制的数字字符ch转换成对应的整数类型值

(6) 如何将一个十六进制的数字字符ch转换成对应的整数类型值

9.说明for、while、和do-while三种循环语句的特点和区别?

While语句的特点:“先判断后执行”,当条件满足时执行循环体

Do-while语句的特点:“先执行后判断”,先执行循环体,在判断条件是否满足

For语句的特点:“先判断后执行”,但for语句将循环控制变量初始值、循环条件和变量的变化规律都以表达式形式写在循环体之前。

10.分别用for,while,do-while三种循环语句计算一个正数的阶乘

(1)for(i=1,i<=10,i++){

int Sum=1;

Sum=Sum*i;}

(2)int i=1;

while(i<=10){

int Sum=1;

Sum=Sum*i;

i++;}

int i=Sum=1;

do{

Sum=Sum*i;

i++;}while(i<=10);

11.输出以下数字的形式;

(1) 0 0 0 0

0 1 1 1

0 1 2 2

0 1 2 3

〖解答〗采用二重循环的程序如下。

public class Phalanx

{

public static void main(String args[])

{

int n=4; for (int i=0;i{

for (int j=0;j//阶数

System.out.print(\" \"+((iSystem.out.println();

}

}

}

(2)输出下列形式的数字三角阵(当n=4时)。

1

1 2 1

1 2 3 2 1

1 2 3 4 3 2 1

〖解答〗采用二重循环的程序如下。

public class Tower

{

public static void main(String args[])

{

int n=4; //行数

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

{

for (int j=1;j<=n-i;j++) System.out.print(\" for (int j=1;j<=i;j++)

System.out.print(\" for (int j=i-1;j>0;j--)

System.out.print(\" System.out.println();

}

//前导空格

\");

\"+j);

\"+j);

}

}

12.下列程序希望用for语句求出1~n累加和并显示,请问程序有错误吗?错在哪里?输出结果i和s的值分别是多少?

int i=1,n=10,s=0;

for(i=1,i<=n,i++);

s+=i;

System.out.pointln(“Sum=1+……+”有错误,正确的如下

int i=1,n=10,s=0;

for(i=1,i<=n,i++)

s+=i;

System.out.pointln(“Sum=1+……+” ”=”+s);

”=”+s);

+n++n+

13.编程验证哥德猜想。哥德猜想:

(1)任何大于2的偶数都可以表示为2个素数之和,如16=3+13,16=5+11

(2)任何大于5的奇数都可以表示为3个素数之和,如11=2+2+7,11=3+3+5

〖解答〗程序如下。

public class Goldbach

{

static final int MAX=30; static int[] prime=null; static int number; public Goldbach(int n) {

if (prime==null)

init();

//数据范围

//存放素数的一维数组

//素数个数,即数组的实际元素个数

//输出n的哥德算式

if (n%2==0) //偶数

{

int i=0;

while (i{

if (isPrime(n-prime[i]))

System.out.print(n+\"=\"+prime[i]+\"+\"+(n-prime[i])+\" i++;

}

}

else //奇数

{

int i=0;

\");

while (i{

int j=i; //如果j=0,则会出现重复的算式

while (j{

if (isPrime(n-prime[i]-prime[j]))

System.out.print(n+\"=\"+prime[i]+\"+\"+prime[j]+\"+\" +(n-prime[i]-prime[j])+\" \");

j++;

}

i++;

}

}

System.out.println();

}

public static void init() //初始化数组,筛选法求素数

{

prime = new int[30];

prime[0]=2; //已知的最小素数

number=1; //素数个数

int i=1; //下一个素数应存放的数组下标位置

int k=3; //从最小奇数开始测试,所有偶数不需测试

do

{

int j=0;

while ((jj++;

if (j==number) //k是素数

{

prime[i]=k; //将k添加到数组prime中

i++;

number++;

}

k+=2; //测试下一个奇数是否是素数

} while(koutput();

}

public static void output() //输出素数

{

System.out.println(\"All primes in 2~\"+MAX+\" are: \");

for (int i=0;i{

System.out.print(\" \"+prime[i]);

if ((i+1)%10==0)

System.out.println(); //每行写10个数

}

System.out.println(\"\\nnumber=\"+number);

}

public static boolean isPrime(int k) //判断k是否为素数,即在prime中查找k值

{

boolean yes=false;

int i=0;

while (!yes && i<=number && prime[i]<=k)

if (prime[i]==k)

yes=true;

else i++;

return yes;

}

public static void main(String args[])

{

for(int i=4;inew Goldbach(i);

for(int i=7;inew Goldbach(i);

}

}

程序运行结果如下:

All primes in 2~30 are:

2 3 5 7 11 13 17 19 23 29

number=10

偶数

4=2+2

6=3+3

8=3+5

10=3+7 10=5+5

12=5+7

14=3+11 14=7+7

16=3+13 16=5+11

18=5+13 18=7+11

20=3+17 20=7+13

22=3+19 22=5+17 22=11+11

24=5+19 26=3+23 28=5+23 奇数

7=2+2+3

9=2+2+5 11=2+2+7 13=3+3+7 15=2+2+11 17=2+2+13 24=7+17 26=7+19 28=11+17 9=3+3+3

11=3+3+5

15=3+5+7 17=3+3+11 24=11+13

26=13+13

15=5+5+5 17=5+5+7

19=3+3+13 19=3+5+11

21=2+2+17 21=3+5+13 21=3+7+11 21=5+5+11 21=7+7+7

23=2+2+19 23=3+3+17 23=3+7+13 23=5+5+13 23=5+7+11

25=3+3+19 25=3+5+17 25=5+7+13 25=7+7+11

27=2+2+23 27=3+5+19 27=3+7+17 27=5+5+17 27=7+7+13

29=3+3+23 29=3+7+19 29=5+5+19 29=5+7+17

不能有重复表达式,例如

19=3+3+13 19=3+5+11 19=5+3+11

21=2+2+17 21=3+5+13 21=3+7+11 21=5+3+13 21=5+5+11 21=7+3+11 21=7+7+7

14.Java的数组比C++的数组有哪些优越之处?

【答】Java语言不支持C++的指针类型,对数组的操作只能按照数组方式,不能使用指针。Java的数组都是动态数组,并且是引用数据类型,提高了安全性和简单性。另外,Java语言具有资源回收机制,能够自动收回不再使用的资源,一般情况下程序不需要归还数组所占的内存空间。

15.作为引用数据类型,数组变量与基本数据类型的变量使用时有哪些区别?

【答】数组变量与基本数据类型变量不同点在于,存储单元的分配方式不同,两个变量之间的赋值方式也不同。基本数据类型变量获得存储单元的方式是静态的,声明了变量后系统就为变量分配了存储单元,就可以对变量赋值。两个变量之间的赋值是值本身。

数组变量的引用赋值,数组变量保存的是数组的引用,即数组占用的一片连续存储空间的首地址及长度特性。当声明一个数字变量而未申请空间时,变量是未初始化的,没有地址及特性值。只有申请了存储空间,才能以下标表示数组元素。

16.求一组数中的最大值和最小值。

【答】程序如下:

public class Zuizhi {

public static void main(String[] args)

{

// TODO 自动生成方法存根

int array[]=new int[100];

for(int i=1;i<=30;++i)//初始化数组

array[i]=i;

int max=array[1];//保存最大值

int min=array[1];//保存最小值

for(int j=2;j<=30;++j)

{

max=Math.max(max, array[j]);

min=Math.min(min, array[j]);

}

System.out.println(\"该数组最大值为:\"+max);

System.out.println(\"该数组最小值为:\"+min);

}

}

运行结果如下:

该数组最大值为:30

该数组最小值为:1

17.采用一维数组输出杨辉三角形。

程序如下:

public class Yanghui1

{

public static void main(String args[])

{

int n=10; int[] table = new int[n+1];

table[0]=1; for (int i=1;i<=n;i++) {

//n表示行数

//每行第1个数都为1

//控制输出n行

for (int j=0;jSystem.out.print(\" \"+table[j]);

System.out.println();

for (int j=i;j>0;j--) table[j]=table[j-1]+table[j]; }

}

}

18.输出下列方阵:

(1) 输出如下形式的数字方阵(当n=4时):

1 2 6 7

3 5 8 13

//生成下一行数据

//通式

4 9 12 14

10 11 15 16

程序如下:

Public class Jmat

{

Public static void main(String args[]){

}

}

(2)输出如下形式的数字方阵(当n=4时):

1 2 5 10

4 3 6 11

9 8 7 12

16 15 14 13

〖解答〗采用二维数组的程序如下。

public class Jmat

{

public static void main(String args[])

{

int n=4; int[][] mat = new int[n][n];

int k=1; for (int i=0;i{

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

mat[j][i] = k++;

//阶数

//k是自然数,递增变化

//k先赋值后自加

for (int j=i-1;j>=0;j--)

mat[i][j] = k++;

}

for (int i=0;i{

for (int j=0;jSystem.out.print(\" \"+mat[i][j]);

System.out.println();

}

}

}

19.找出一个二维数组的鞍点,即该位置的元素在该行上最大,在列上最小。也可能没有暗点。

〖命题〗一个二维数组如果有鞍点,那么它只有一个鞍点。

〖证明〗反证法。

设该二维数组已有一个鞍点,为M[i,j],则有

M[i,*] <= M[i,j] <= M[*,j] 即i行上的所有元素均小于j列上的所有元素。

假设有另一个鞍点M[x,y],由(1)式知

M[i,y] <= M[x,j] 而M[x,y]应在该行上最大,有

M[x,y] >= M[x,j] M[x,y]应在该列上最小,有

M[x,y] <= M[i,y] 根据(2)式,显然(3)和(4)式是不可能同时成立的。

因而假设有另一个鞍点M[x,y]是不成立的。由此证明。

(1)

(2)

(3)

(4)

〖解答〗采用二维数组的程序如下。

public class Dort

{

public static void main(String args[])

{

int[][] mat = {{1,2,3},{4,5,6},{7,8,9}};

for (int i=0;ifor (int j=0;jSystem.out.println();

}

boolean find = false; //输出二维数组元素

//i、j是行、列下标

//找到鞍点标记

int row=0; //第1行下标

int max=0; //记录当前行最大值的列下标

while (!find && row{

max=0; 大

for (int j=1;jif (mat[row][j]>mat[row][max]) 该行最大值

max = j;

boolean yes = true; 列上最小

int j=0;

while (yes && j//初始设每行第1列值最 //在row行上找最大 //mat[row][max]为//再判断mat[row][max]是否在

{

if (j!=row && mat[j][max]yes = false;

j++;

}

if (yes)

find = true;

else

row++;

}

if (find)

System.out.println(\"The dort: else

\"+mat[row][max]);

System.out.println(\"The dort: null\");

}

20.设一个一维数组的元素值为:7,4,8,9,1和5,请输出具有以下内容的方阵:

7 4 8 9 1 5

5 7 4 8 9 1

1 5 7 4 8 9

9 1 5 7 4 8

8 9 1 5 7 4

4 8 9 1 5 7

【答】程序如下:

public class Shift

{

public static void main(String args[])

int table[] = {7,4,8,9,1,5};

System.out.println(\"左移:\");

for (int i=0;i{

for (int j=0;jSystem.out.print(table[(i+j)%table.length]+\" System.out.println();

}

System.out.println(\"\\n左移:\");

for (int i=0;i{

int j=i;

{

\");

do

{

System.out.print(table[j]+\" \");

j=(j+1)%table.length;

}while (j!=i);

System.out.println();

}

}

}

21、22、23、24、25、26、27、28、29 方法很多,由学生自己编写练习。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务