java程序设计实用教程第3版习题集Word下载.docx
- 文档编号:17387616
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:54
- 大小:153.24KB
java程序设计实用教程第3版习题集Word下载.docx
《java程序设计实用教程第3版习题集Word下载.docx》由会员分享,可在线阅读,更多相关《java程序设计实用教程第3版习题集Word下载.docx(54页珍藏版)》请在冰豆网上搜索。
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++){
intSum=1;
Sum=Sum*i;
}\\等价于Sum*=i;
(2)inti=1;
while(i<
=10){
intSum=1;
i++;
}
inti=Sum=1;
do{
}while(i<
=10);
11.输出以下数字的形式;
(1)0000
0111
0122
0123
〖解答〗采用二重循环的程序如下。
publicclassPhalanx
{
publicstaticvoidmain(Stringargs[])
{
intn=4;
//阶数
for(inti=0;
i<
n;
i++)
for(intj=0;
j<
j++)
System.out.print("
"
+((i<
j)?
i:
j));
System.out.println();
}
(2)输出下列形式的数字三角阵(当n=4时)。
1
121
12321
1234321
publicclassTower
//行数
for(inti=1;
=n;
for(intj=1;
=n-i;
j++)//前导空格
);
=i;
+j);
for(intj=i-1;
j>
0;
j--)
12.下列程序希望用for语句求出1~n累加和并显示,请问程序有错误吗?
错在哪里?
输出结果i和s的值分别是多少?
inti=1,n=10,s=0;
for(i=1,i<
=n,i++);
s+=i;
System.out.pointln(“Sum=1+……+”+n+”=”+s);
有错误,正确的如下
=n,i++)
13.编程验证哥德巴赫猜想。
哥德巴赫猜想:
(1)任何大于2的偶数都可以表示为2个素数之和,如16=3+13,16=5+11
(2)任何大于5的奇数都可以表示为3个素数之和,如11=2+2+7,11=3+3+5
〖解答〗程序如下。
publicclassGoldbach
staticfinalintMAX=30;
//数据范围
staticint[]prime=null;
//存放素数的一维数组
staticintnumber;
//素数个数,即数组的实际元素个数
publicGoldbach(intn)//输出n的哥德巴赫算式
if(prime==null)
init();
if(n%2==0)//偶数
inti=0;
while(i<
number&
prime[i]<
=n/2)
if(isPrime(n-prime[i]))
System.out.print(n+"
="
+prime[i]+"
+"
+(n-prime[i])+"
i++;
else//奇数
=n/3)
intj=i;
//如果j=0,则会出现重复的算式
while(j<
prime[j]<
if(isPrime(n-prime[i]-prime[j]))
+prime[j]+"
+(n-prime[i]-prime[j])+"
j++;
}
publicstaticvoidinit()//初始化数组,筛选法求素数
prime=newint[30];
prime[0]=2;
//已知的最小素数
number=1;
//素数个数
inti=1;
//下一个素数应存放的数组下标位置
intk=3;
//从最小奇数开始测试,所有偶数不需测试
do
intj=0;
while((j<
number)&
(k%prime[j]!
=0))//用已知素数prime[j]测试k
if(j==number)//k是素数
prime[i]=k;
//将k添加到数组prime中
number++;
k+=2;
//测试下一个奇数是否是素数
}while(k<
MAX);
output();
publicstaticvoidoutput()//输出素数
System.out.println("
Allprimesin2~"
+MAX+"
are:
number;
+prime[i]);
if((i+1)%10==0)
//每行写10个数
\nnumber="
+number);
publicstaticbooleanisPrime(intk)//判断k是否为素数,即在prime中查找k值
{
booleanyes=false;
while(!
yes&
i<
=number&
=k)
if(prime[i]==k)
yes=true;
elsei++;
returnyes;
for(inti=4;
Goldbach.MAX;
i+=2)
newGoldbach(i);
for(inti=7;
程序运行结果如下:
Allprimesin2~30are:
2357111317192329
number=10
偶数
4=2+2
6=3+3
8=3+5
10=3+710=5+5
12=5+7
14=3+1114=7+7
16=3+1316=5+11
18=5+1318=7+11
20=3+1720=7+13
22=3+1922=5+1722=11+11
24=5+1924=7+1724=11+13
26=3+2326=7+1926=13+13
28=5+2328=11+17
奇数
7=2+2+3
9=2+2+59=3+3+3
11=2+2+711=3+3+5
13=3+3+7
15=2+2+1115=3+5+715=5+5+5
17=2+2+1317=3+3+1117=5+5+7
19=3+3+1319=3+5+11
21=2+2+1721=3+5+1321=3+7+1121=5+5+1121=7+7+7
23=2+2+1923=3+3+1723=3+7+1323=5+5+1323=5+7+11
25=3+3+1925=3+5+1725=5+7+1325=7+7+11
27=2+2+2327=3+5+1927=3+7+1727=5+5+1727=7+7+13
29=3+3+2329=3+7+1929=5+5+1929=5+7+17
不能有重复表达式,例如
19=3+3+1319=3+5+1119=5+3+11
21=2+2+1721=3+5+1321=3+7+1121=5+3+1321=5+5+1121=7+3+1121=7+7+7
14.Java的数组比C++的数组有哪些优越之处?
【答】Java语言不支持C++的指针类型,对数组的操作只能按照数组方式,不能使用指针。
Java的数组都是动态数组,并且是引用数据类型,提高了安全性和简单性。
另外,Java语言具有资源回收机制,能够自动收回不再使用的资源,一般情况下程序不需要归还数组所占的内存空间。
15.作为引用数据类型,数组变量与基本数据类型的变量使用时有哪些区别?
【答】数组变量与基本数据类型变量不同点在于,存储单元的分配方式不同,两个变量之间的赋值方式也不同。
基本数据类型变量获得存储单元的方式是静态的,声明了变量后系统就为变量分配了存储单元,就可以对变量赋值。
两个变量之间的赋值是值本身。
数组变量的引用赋值,数组变量保存的是数组的引用,即数组占用的一片连续存储空间的首地址及长度特性。
当声明一个数字变量而未申请空间时,变量是未初始化的,没有地址及特性值。
只有申请了存储空间,才能以下标表示数组元素。
16.求一组数中的最大值和最小值。
【答】程序如下:
publicclassZuizhi{
publicstaticvoidmain(String[]args)
//TODO自动生成方法存根
intarray[]=newint[100];
for(inti=1;
=30;
++i)//初始化数组
array[i]=i;
intmax=array[1];
//保存最大值
intmin=array[1];
//保存最小值
for(intj=2;
++j)
{
max=Math.max(max,array[j]);
min=Math.min(min,array[j]);
}
System.out.println("
该数组最大值为:
"
+max);
该数组最小值为:
+min);
运行结果如下:
30
1
17.采用一维数组输出杨辉三角形。
程序如下:
publicclassYanghui1
intn=10;
//n表示行数
int[]table=newint[n+1];
table[0]=1;
//每行第1个数都为1
i++)//控制输出n行
i;
j++)//输出三角形的一维数组
+table[j]);
for(intj=i;
j--)//生成下一行数据
table[j]=table[j-1]+table[j];
//通式
18.输出下列方阵:
(1)输出如下形式的数字方阵(当n=4时):
1267
35813
491214
10111516
程序如下:
PublicclassJmat
Publicstaticvoidmain(Stringargs[]){
(2)输出如下形式的数字方阵(当n=4时):
12510
43611
98712
16151413
〖解答〗采用二维数组的程序如下。
publicclassJmat
//阶数
int[][]mat=newint[n][n];
intk=1;
//k是自然数,递增变化
mat[j][i]=k++;
//k先赋值后自加
=0;
mat[i][j]=k++;
mat.length;
i++)//输出二维数组元素
mat[i].length;
j++)//i、j是行、列下标
+mat[i][j]);
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]是不成立的。
由此证明。
publicclassDort
int[][]mat={{1,2,3},{4,5,6},{7,8,9}};
booleanfind=false;
//找到鞍点标记
introw=0;
//第1行下标
intmax=0;
//记录当前行最大值的列下标
find&
row<
mat.length)
max=0;
//初始设每行第1列值最大
mat[row].length;
j++)//在row行上找最大值
if(mat[row][j]>
mat[row][max])//mat[row][max]为该行最大值
max=j;
booleanyes=true;
//再判断mat[row][max]是否在列上最小
while(yes&
j<
if(j!
=row&
mat[j][max]<
mat[row][max])//在列上找到更小值,则不是鞍点
yes=false;
if(yes)
find=true;
else
row++;
if(find)
Thedort:
+mat[row][max]);
null"
20.设一个一维数组的元素值为:
7,4,8,9,1和5,请输出具有以下内容的方阵:
748915
574891
157489
915748
891574
489157
publicclassShift
inttable[]={7,4,8,9,1,5};
左移:
table.length;
System.out.print(table[(i+j)%table.length]+"
System.out.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 程序设计 实用教程 习题集
![提示](https://static.bdocx.com/images/bang_tan.gif)