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(\"  \"+((i } } } (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 ((j if (j==number)                        //k是素数 { prime[i]=k;                       //将k添加到数组prime中 i++; number++; } k+=2;                               //测试下一个奇数是否是素数 }  while(k } 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;i for(int i=7;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;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;i } boolean find = false;                    //输出二维数组元素 //i、j是行、列下标 //找到鞍点标记 int row=0;                                      //第1行下标 int max=0;                                      //记录当前行最大值的列下标 while (!find && row max=0;                             大 for (int j=1;j max = j; boolean yes = true;                  列上最小 int j=0; while (yes && j { if (j!=row && mat[j][max] 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;j } 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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务
