第2章Java 语言基础范文
第2章 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 System.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(" "+j); for (int j=i-1;j>0;j--) System.out.print(" "+j); System.out.println(); } } } 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+……+”+n+”=”+s); 有错误,正确的如下 int i=1,n=10,s=0; for(i=1,i<=n,i++) s+=i; System.out.pointln(“Sum=1+……+”+n+”=”+s); 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) //输出n的哥德巴赫算式 { if (prime==null) init(); 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 output(); } 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 new Goldbach(i); for(int i=7;i new 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 24=7+17 24=11+13 26=3+23 26=7+19 26=13+13 28=5+23 28=11+17 奇数 7=2+2+3 9=2+2+5 9=3+3+3 11=2+2+7 11=3+3+5 13=3+3+7 15=2+2+11 15=3+5+7 15=5+5+5 17=2+2+13 17=3+3+11 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; //n表示行数 int[] table = new int[n+1]; table[0]=1; //每行第1个数都为1 for (int i=1;i<=n;i++) //控制输出n行 for (int j=0;j System.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; //k是自然数,递增变化 for (int i=0;i { for (int j=0;j<=i;j++) mat[j][i] = 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.print(" "+mat[i][j]); System.out.println(); } } } 19.找出一个二维数组的鞍点,即该位置的元素在该行上最大,在列上最小。也可能没有暗点。 〖命题〗一个二维数组如果有鞍点,那么它只有一个鞍点。 〖证明〗反证法。 设该二维数组已有一个鞍点,为M[i,j],则有 M[i,*] <= M[i,j] <= M[*,j] (1) 即i行上的所有元素均小于j列上的所有元素。 假设有另一个鞍点M[x,y],由(1)式知 M[i,y] <= M[x,j] (2) 而M[x,y]应在该行上最大,有 M[x,y] >= M[x,j] (3) M[x,y]应在该列上最小,有 M[x,y] <= M[i,y] (4) 根据(2)式,显然(3)和(4)式是不可能同时成立的。 因而假设有另一个鞍点M[x,y]是不成立的。由此证明。 〖解答〗采用二维数组的程序如下。 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 { for (int j=0;j System.out.print(" "+mat[i][j]); System.out.println(); } boolean find = false; //找到鞍点标记 int row=0; //第1行下标 int max=0; //记录当前行最大值的列下标 while (!find && row { max=0; //初始设每行第1列值最大 for (int j=1;j if (mat[row][j]>mat[row][max]) //mat[row][max]为该行最大值 max = j; boolean yes = true; //再判断mat[row][max]是否在列上最小 int j=0; while (yes && j { if (j!=row && mat[j][max] yes = false; j++; } if (yes) find = true; else row++; } if (find) System.out.println("The dort: "+mat[row][max]); else System.out.println("The dort: null"); } 20.设一个一维数组的元素值为:7,4,8,9,1和5,请输出具有以下内容的方阵: 7 4 8 9 1 5 57 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.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 方法很多,由学生自己编写练习。 package cn.Testcx; import java.util.Scanner; public class lesson2 { public static void main(String[] args){ @SuppressWarnings("resource") Scanner input =new Scanner(System.in); System.out.print("请输入一个摄氏温度:"); double Celsius =input.nextDouble(); double Fahrenheit =(9.0/5)*Celsius+32; System.out.println("摄氏温度:"+Celsius+"度"+"转换成华氏温度为:"+Fahrenheit+"度"); System.out.print("请输入圆柱的半径和高:"); double radius =input.nextDouble(); int higth = input.nextInt(); double areas =radius*radius*Math.PI; double volume =areas*higth; System.out.println("圆柱体的面积为:"+areas); System.out.println("圆柱体的体积为:"+volume); System.out.print("输入英尺数:"); double feet =input.nextDouble(); double meters =feet*0.305; System.out.println(feet+"英尺转换成米:"+meters); System.out.print("输入一个磅数:"); double pounds =input.nextDouble(); double kilograms =pounds*0.454; System.out.println(pounds+"磅转换成千克为:"+kilograms); System.out.println("输入分钟数:"); long minutes =input.nextInt(); long years =minutes/(24*60*365); long days = (minutes%(24*60*365))/(24*60); System.out.println(minutes+"分钟"+"有"+years+"年和"+days+"天"); long totalCurrentTimeMillis =System.currentTimeMillis(); long totalSeconds =totalCurrentTimeMillis/1000; long currentSeconds =totalSeconds%60; long totalMinutes =totalSeconds/60; long currentMinutes =(totalSeconds%(60*60))/60; long currenthours =(totalMinutes/60)%24; System.out.print("输入时区偏移量:"); byte zoneOffset = input.nextByte(); long currentHour =(currenthours+(zoneOffset*1))%24; System.out.println("当期时区的时间为:"+currentHour+"时"+currentMinutes+"分"+currentSeconds+"秒"); java语言程序设计基础篇第二章程序练习题答案 2.1(将摄氏温度转化为华氏温度) import java.util.*; public class test { public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); System.out.print("Enter a degree in celsius: "); double Celsius = input.nextDouble(); double Fahrenheit; Fahrenheit = (9.0/5) * Celsius + 32; System.out.println(Celsius + " Celsius is" + Fahrenheit + " Fahrenheit"); } } 2.2(计算圆柱体的体积) import java.util.*; public class test { public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); System.out.print("Enter the radius and length of a cylinder: "); double radius = input.nextDouble(); double length =input.nextDouble(); double area = radius * radius * Math.PI; double volume = area * length; System.out.println("The area is " + area); System.out.println("The volume is " + volume); } } 2.3(将英尺转换为米) import java.util.Scanner; public class test { public static void main(String[] args) { 第2章 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是一个十进制的数字字符 第二章 Java语言基础 一选择题 1. 下列java标识符,错误的是() A、_sys_varl B、$change C、User_name D、1_file 2.下列不属于简单数据类型的是() A、整数类型 B、类 C、符点数类型 D、布尔类型 3.下列属于JA V A关键词的是() A、TRUE B、goto C、float D、NULL 4.下列声明和赋值语句错误的是 A、double w=3.1415; B、String strl=”bye”; C、float z=6.74567 D、boolean truth=true; 5.java中,八进制数以______开头。 A、0x B、0 C、0X D、08 6.自定义类型转换是由按优先关系从低级数据转换为高级数据,优先次序为() A、char-int-long-float-double B、int-long-float-double-char C、long-float-int-double-char D、以上都不对 7.在java中,Integer.MAX_V ALUE表示 A、浮点类型最大值 B、整数类型最大值 C、长整型最大值 D、以上说法都不对 8.JA V A中,数据类型值中不可能出现的符号是() A、d B、f C、e D、/ 9.下列表示单引号的是() A、… B、\? C、\\\\? D、…\\ 10. 下列语句片断中,four得值为:() int three=3; char one=‘1’ char four=(char)(three+one); A、3 B、1 C、31 D、4 11. 下列不属于整型变量的类型是 A、byte B、short C、float D、long 12. int类型整型变量在内存中的位数为 A、8 B、16 C、32 D、64 13. 下列数据类型转换,必须进行强制类型转换的是 A、byte→int B、short→long C、float→double D、int→char 14. java中,用()关键字定义常量 A、final B、#define C、float D、const 15. 关于变量的作用范围,下列说法错误的是 A、异常处理参数作用域为整个类 B、局部变量作用于声明该变量的方法代码段 C、类变量作用于声明该变量的类 D、方法参数作用于传递到方法内代码段 16. 下列属于条件运算符的是 A、+ B、?: C、&& D、>> 17. 下列程序test类中的变量c的最后结果为 第二章Java编程基础(上)作业 1、现有2个byte类型的变量bb=126、bb2=5,当执行bbl=(byte)(bb+bb2);语句之后,bb 的值应该是( D )。 A、-128 B、131 C、-125 bb1 D、语句在编泽中出错 2、下列单精度浮点数fValue的赋值语句中,不正确的一个是( A )。 A、fValue=(double)-23.234f; B、fValue=(char)-12.34f; C、fValue=(char)-56.78d; D、fValue=(int)23.234f; 3、下列标识符中,正确的是( B )。 A、1_Back B、$_Money C、$-money D、2-Foward 4、下列标识符中,合法的一个是( D )。 A、$#@!$ B、$--$ C、2$$2 D、$22$ 5、设有类型定义short i=32;long j=64;下面赋值语句中不正确的一个是( B )。 A、j=i; B、i=j; C、i=(short)j; D、j=(long)i; 6、现有1个char类型的变量cl=66和1个整型变量i2=2;与执行c1=cl+(char)i2;语句之 后,cl的值应该是( A )。 A、‘d’ B、’D’ C、68 D、语句在翻译时出错 7、下列Java语句中,不正确的一个是( D )。 A、Double dValue=(float)1233.213f; B、double dValue=(float)1.213E2f; C、char ch=(char)-1; D、char ch=66: 8、下列哪一个语句是合法的?( D ) A、byte=128; B、Boolean=true: C、long l=0x23EFL; D、double=0.1453d: 9、以下的变量定义语句,合法的是( C )。 A、float_*5=123.456F; B、byte $_bl=156782; C、int_long_=324233L; D、double a=Double.MAX_ V ALUE: 10、设有定义int a=12;则执行以下语句后,a的值为( A )。 a*=12; A、144 B、12 C、24 D、0 11、算术表达式1+2/3—4*5B、的值为9( ) A、1 B、-19 C、-5 D、0 12、下列语句序列执行后,x的值是( B )。 public class ex3{ public static void main(String[ ]args){ int a=2; int b=3; int x=4; x=++a*x; System.out.println(x);java语言程序设计基础篇第十版课后答案第二章答案
java语言程序设计基础篇第二章程序练习题答案
第2章Java 语言基础范文
java第二章1
第二章 Java编程基础(上)作业