java程序设计案例教程课后答案许敏(java程序设计案例教程王希军

http://www.itjxue.com  2023-02-16 18:35  来源:未知  点击次数: 

java考试题求助

Bank类中有一个customers集合,用来存储所有的Customer(储户)对象,addCustomer()方法用语向该集合中添加储户,getCustomer()方法根据下标值获取某个储户,getNumOfCustomer()方法获取储户总数,getCustomers()方法返回储户列表,以便获得每个储户对象‘

Customer类有一个accounts集合,用来存储某个储户的所有Account(账号)对象,addAccount()方法用于向该集合中添加账号,getAccount()方法根据下标值获取该储户的某个账号,getNumOfAccounts()方法获取该储户的账号总数,getAccounts()方法返回该储户的账号Iterator,以便获得每个账号对象。

Account类是抽象类,有一个balance属性,代表余额。Deposit()方法表示存款,amount参数是存款额,Withdraw()方法表示取款,取款额amount如果超出了余额就会抛出透支异常,我们需要定义一个OverdraftException类来表示这个异常,当抛出异常时,不进行取款交易,并报告用户此项错误。

SavingsAccount类表示大额存款账号,继承Account,新增一个属性interestRate,代表利率。

CheckingAccount类表示大额存款账号,也继承Account,它有一个叫canOverdraft的属性,是一个boolean值,代表该账号能否透支(true——能,false——否);它还有一个叫maxOverdraft的属性,表示该账号允许的最大透支额。这个类的withdraw()方法(取款)需要考虑的因素比较多:在发生透支时,如果账号不允许透支(canOverdraft=false),则抛出异常并退出交易;如果允许透支(canOverdraft=true),但透支额(amount-balance)超出最大透支额的话,也抛出异常并退出交易;只有在不发生透支或透支额小于最大透支额时,交易才能正常进行。另外,在每次进行透支交易时,最大透支额(maxOverdraft)应作调整,以便使该账号的最大透支额随透支次数的增加而不断减少,从而避免透支的滥用,阻止信用膨胀。CheckingAccount类有两个构造方法,只带一个参数的构造方法用来初始化balance,同时设定canOverdraft=false,maxOverdraft=0.00.

CustomReport类用来显示每个储户的姓名及他所有的账号的类别和余额,以报表的形式输出。

根据以上描述,创建一个TestBanking类,并在其main方法中添加若干储户和账号,然后模拟存款,取款业务,并最终输出一张完整的报表。

要求:

1. 用文件来存储用户的所有信息。

2. 有用户图形界面。(最基本的:存钱、取钱、新增账号、新增账户,可以使用菜单来实现,也可以使用按钮来实现)。

采用以下表格进行模拟:

储户姓名 账号

Saving Account Checking Account

Jane Simms SavingsAccount(500.00,0.05) CheckingAccount(200.00,true,400.00)

Owen Bryant 无 CheckingAccount(200.00)

Tim Soley SavingsAccout(1500.00,0.05) CheckingAccount(300.00)

Maria Soley SavingsAccount(160.00,0.05) 与Tim Soley共享一个CheckingAccount

输出报表格式如下:

CUSTOMERS REPORT

储户姓名:Jane Simms

Savings Account:当前余额是¥****

Checking Account:当前余额是¥****

储户姓名:Owen Bryant

Checking Account:当前余额是¥****

储户姓名:Tim Soley

Savings Account:当前余额是¥****

Checking Account :当前余额是¥****

储户姓名:Maria Soley

Savings Account :当前余额是¥****

Checking Account :当前余额是¥****

java程序设计上机题,求答案

public class Point {

int x;

int y;

public Point() {

}

public Point(int x, int y) {

this.x = x;

this.y = y;

}

public Point(int x) {

this.x = x;

this.y = x;

}

public double distance() {//求当前点到原点的距离

return Math.sqrt((x * x + y * y));

}

public double distance(int x1, int y1) {//求当前点到(x1,y1)的距离

return Math.sqrt((x-x1)*(x-x1) + (y-y1) * (y-y1));

}

public double distance(Point other){

int x2 = other.x;

int y2 = other.y;

return Math.sqrt((x-x2)*(x-x2) + (y-y2) * (y-y2));

}

}

《Java语言程序设计基础篇》第六版的练习题和编程题答案

哥们我给你写完了,耽误了我半个小时的时间啊!你直接运行就可以了

import java.awt.BorderLayout;

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Calendar;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class Constellation implements ActionListener{

private JFrame frame = null;

private JTextField year = null;

private JTextField month = null;

private JTextField day = null;

private JLabel label1 = null;

private JLabel label2 = null;

private JLabel label3 = null;

private JPanel panel1 = null;

private JPanel panel2 = null;

private JButton button = null;

private JTextField output = null;

public static final String[] zodiacArr = { "猴", "鸡", "狗", "猪", "鼠", "牛", "虎", "兔", "龙", "蛇",

"马", "羊" };

public static final String[] constellationArr = { "水瓶座", "双鱼座", "牡羊座", "金牛座", "双子座", "巨蟹座",

"狮子座", "处女座", "天秤座", "天蝎座", "射手座", "魔羯座" };

public static final int[] constellationEdgeDay = { 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22,

22 };

/**

* * 根据日期获取生肖 *

* @return 11.

*/

public static String date2Zodica(Calendar time) {

return zodiacArr[time.get(Calendar.YEAR) % 12];

}

/**

* * 根据日期获取星座 *

* @param time *

* @return

*/

public static String date2Constellation(Calendar time) {

int month = time.get(Calendar.MONTH);

int day = time.get(Calendar.DAY_OF_MONTH);

if (day constellationEdgeDay[month]) {

month = month - 1;

}

if (month = 0) {

return constellationArr[month];

}

// default to return 魔羯

return constellationArr[11];

}

public Constellation(){

frame = new JFrame("计算生肖,星座");

year = new JTextField("",3);

month = new JTextField("",3);

day = new JTextField("",3);

label1 = new JLabel("请输入年份:");

label2 = new JLabel(",请输入月份:");

label3 = new JLabel(",请输入日期:");

button = new JButton("查看结果");

button.addActionListener(this);

panel1 = new JPanel();

panel1.setLayout(new FlowLayout(FlowLayout.CENTER));

panel1.add(label1);

panel1.add(year);

panel1.add(label2);

panel1.add(month);

panel1.add(label3);

panel1.add(day);

panel1.add(button);

frame.setLayout(new BorderLayout());

frame.add(panel1,BorderLayout.NORTH);

panel2 = new JPanel();

output = new JTextField("",40);

panel2.add(output,JPanel.CENTER_ALIGNMENT);

frame.add(panel2,BorderLayout.CENTER);

frame.setSize(500, 100);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

public void actionPerformed(ActionEvent e) {

output.setText("");

int y = Integer.parseInt(year.getText());

int m = Integer.parseInt(month.getText());

int d = Integer.parseInt(day.getText());

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.YEAR, y);

calendar.set(Calendar.MONTH, m);

calendar.set(Calendar.DAY_OF_MONTH, d);

String zodica = date2Zodica(calendar);

String constellation = date2Constellation(calendar);

String str = "您输入的日期为:"+y+"年-"+m+"-月"+d+"日,得到的生肖:"+zodica+",星座:"+constellation;

output.setText(str);

}

//testcode

public static void main(String[] args) {

new Constellation();

}

}

java语言程序设计(第三版)清华大学出版社答案

1.5请参照本章例题,编写一个C程序,输出以下信息:

**************************

Very Good!

**************************

解:

mian()

{printf(“**************************”);

printf(“\n”);

printf(“Very Good!\n”);

printf(“\n”);

printf(“**************************”);

}

1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。

解:

mian()

{int a,b,c,max;

printf(“请输入三个数a,b,c:\n”);

scanf(“%d,%d,%d”,a,b,c);

max=a;

if(maxb)

max=b;

if(maxc)

max=c;

printf(“最大数为:“%d”,max);

}

第三章

3.6写出以下程序运行的结果。

main()

{char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;

printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);

printf(“\t\b%c %c”,c4,c5);

}

解:

aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc

AㄩN

3.7 要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。

解:

#include stdio.h

main()

{ char c1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;

c1+=4;

c2+=4;

c3+=4;

c4+=4;

c5+=4;

printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5);

}

运行结果:

密码是Glmre

3.9求下面算术表达式的值。

(1)x+a%3*(int)(x+y)%2/4

设x=2.5,a=7,y=4.7

(2)(float)(a+b)/2+(int)x%(int)y

设a=2,b=3,x=3.5,y=2.5

(1)2.5

(2)3.5

3.10写出程序运行的结果。

main()

{int i,j,m,n;

i=8;

j=10;

m=++i;

n=j++;

printf(“%d,%d,%d,%d”,i,j,m,n);

}

解:

9,11,9,10

3.12 写出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。

(1)a+=a (2) a-=2 (3) a*=2+3 (4)a/=a+a

(5) a%=(n%=2),n的值等于5

(6)a+=a-=a*=a

解:

(1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0

第四章

4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。

a=_3_ _b=_4_ _c=_5

x=1.200000,y=2.400000,z=-3.600000

x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40

c1=ˊaˊ_or_97(ASCII)

c2=ˊbˊ_or_98(ASCII)

main()

{int a=3,b=4,c=5;

long int u=51274,n=128765;

float x=1.2,y=2.4,z=3.6;

char c1=’a’,c2=’b’;

printf("a=%2d b=%2d c=%2d\n",a,b,c);

printf("x=%f,y=%f,z=%f\n",x,y,z);

printf("x+y=%5.2f y+z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x);

printf("u=%6ld n=%9ld\n",u,n);

printf("%s %s %d%s\n","c1=’a’","or",c1,"(ASCII)");

printf("%s %s %d%s\n","c2=’a’","or",c2,"(ASCII)");

}

4.7用scanf下面的函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入?

main()

{

int a,b;float x,y;char c1c2;

scanf("a=%d_b=%d",a,b);

scanf("_x=%f_y=%e",x,y);

scanf("_c1=%c_c2=%c",c1,c2);

}

a=3_b=7

_x=8.5_y=71.82

_c1=A_c2=a

4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。

main()

{float r,h,C1,Sa,Sb,Va,Vb;

scanf("%f,%f",r,h);

C1=2*3.14*r;

Sa=3.14*r*r;

Sb=4*Sa;

Va=4*3.14*r*r*r/3;

Vb=Sa*h;

printf("C1=%.2f\n",C1);

printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);

}

4.9输入一个华氏温度,要求输出摄氏温度。公式为

c=5(F-32)/9

输出要求有文字说明,取位2小数。

main()

{float F,c;

scanf("%f",F);

c=5*(F-32)/9;

printf("c=%.2f",c);

}

4.10编程序,用getchar函数读入两个字符给c1、c2,然后分别用函数和函数输出这两个字符。并思考以下问题:(1)变量c1、c2应定义为字符型或整形?抑二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整形变量与字符变量是否在任何情况下都可以互相代替?如:

char c1,c2;

int c1,c2;

是否无条件的等价?

#include"stdio.h"

main()

{char c1,c2;

c1=getchar();c2=getchar();

putchar(c1);putchar(’\n’);putchar(c2);putchar(’\n’);

}

#include"stdio.h"

main()

{char c1,c2;

c1=getchar();c2=getchar();

printf("c1=%d c2=%d\n",c1,c2);

printf("c1=%c c2=%c\n",c1,c2);

}

第五章

5.1 什么是算术运算?什么是关系运算?什么是逻辑运算?

解:略。

5.2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?

解:设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。例如35的值为“真”,系统给出35的值为1。

5.3 写出下面各逻辑表达式的值。设a=3,b=4,c=5。

(1) a+bcb==c

(2) a||b+cb-c

(3) !(ab)!c||1

(4) !(x=a)(y=b)0

(5) !(a+b)+c-1b+c/2

解:

(1) 0

(2) 1

(3) 1

(4) 0

(5) 1

5.4 有3个整数a、b、c,由键盘输入,输出其中最大的数。

解:

方法一

#include stdio.h

main()

{ int a,b,c;

printf("请输入3个整数:");

scanf("%d,%d,%d",a,b,c);

if(ab)

if(bc) printf("max=%d\n",c);

else printf("max=%d\n",b);

else if(ac) printf("max=%d\n",c);

else printf("max=%d\n",a);

}

方法二:使用条件表达式,可以使程序更加简明、清晰。

程序如下:

#include stdio.h

main()

{ int a,b,c,temp,max;

printf("请输入3个整数:");

scanf("%d,%d,%d",a,b,c);

temp=(ab)?a:b; /* 将a和b中的大者存人temp中 */

max=(tempc)?temp:c; /* 将a和b中的大者与c比较,取最大者*/

printf("3个整数的最大数是%d\n”,max);

}

5.5 有一函数:

写一程序,输入x值,输出y值。

解:

#include stdio.h

main()

{int x,y;

printf("输入x:");

scanf("%d",x);

if(x1) /* x1 */

{ y=x;

printf("x=%3d, y=x=%d\n",x,y);

}

else if (x10) /* 1≤x-10 */

{ y=2*x-1;

printf("x=%3d, y=2*x-1=%d\n",x,y);

}

else /* x≥10 */

{ y=3*x-11;

printf("x=%3d, y=3*x-11=%d\n",x,y);

}

}

5.6 给一个百分制成绩,要求输出等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,80~90分为’B’,70~79分为’C’,60分以下为’D’。

解:

程序如下:

#include stdio.h

main()

{ float score;

char grade;

printf("请输入学生成绩:");

scanf("%f",score);

while(score100||(score0)

{ printf("\n输入有误,请重新输入:");

scanf("%f",score);

}

switch((int)(score/10))

{ case 10:

case 9: grade=’A’;break;

case 8: grade=’B’;break;

case 7: grade=’C’;break;

case 6: grade=’D’;break;

case 5:

case 4:

case 3:

case 2:

case 1:

case 0: grade=’E’;

}

printf("成绩是%5.1f,相应的等级是%c。\n",score,grade);

}

说明:对输入的数据进行检查,如小于0或大于100,要求重新输入。(int)(score/10)的作用是将 (score/10) 的值进行强制类型转换,得到一个整型值。

5.7 给定一个不多于5位的正整数,要求:① 求它是几位数;② 分别打印出每一位数字;③ 按逆序打印出各位数字。例如原数为321,应输出123。

解:

#include stdio.h

main()

{ long int num;

int indiv,ten,hundred,thousand,ten_thousand,place;

/*分别代表个位、十位、百位、千位、万位和位数*/

printf("请输入一个整数(0~99999):");

scanf("%ld",num);

if (num9999) place=5;

else if(num999) place=4;

else if(num99) place=3;

else if(num9) place=2;

else place=1;

printf("place =%d\n", place);

ten_thousand=num/10000;

thousand=num/1000%10;

hundred=num/100%10;

ten=num%100/10;

indiv=num%10;

switch(place)

{ case 5: printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);

printf("\n反序数字为;");

printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand);

break;

case 4: printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);

printf("\n反序数字为:");

printf("%d%d%d%d\n",indiv,ten,hundred,thousand);

break;

case 3: printf("%d,%d,%d",hundred,ten,indiv);

printf("\n反序数字为:");

printf("%d%d%d\n",indiv,ten,hundred);

break;

case 2: printf("%d,%d",ten,indiv);

printf("\n反序数字为:");

printf("%d%d\n",indiv,ten);

break;

case 1: printf("%d",indiv);

printf("\n反序数字为:");

printf("%d\n",indiv);

break;

}

}

5.8 企业发放的奖金根据利润提成。利润I低于或等于10万元时,奖金可提成10% ;利润高于10万元,低于20万元(100000I≤200000)时,其中10万元按10%提成,高于10万元的部分,可提成7.5% ;200000I≤400000时,其中20万元仍按上述办法提成(下同),高于20万元的部分按5%提成;400000I≤600000时,高于40万元的部分按3%提成;600000〈I≤1000000时,高于60万的部分按1.5%提成;I1000000时,超过100万元的部分按1%提成。从键盘输入当月利润I,求应发放奖金总数。要求:(1)用if语句编程序;(2)用switch语句编程序。

解:计算利润时,要特别注意不同利润的不同提成比例。例如,利润为15万元,其中有10万元按10%的比例提成,另外5万元则按7.5%提成。

(1) 用if语句编程序。

#include stdio.h

main()

{ long i;

float bonus,bon1,bon2,bon4,bon6,bon10;

bon1=100000*0.1; /*利润为10万元时的奖金*/

bon2=bon1+100000*0.075; /*利润为20万元时的奖金*/

bon4=bon2+200000*0.05; /*利润为40万元时的奖金*/

bon6=bon4+200000*0.03; /*利润为60万元时的奖金*/

bon10=bon6+400000*0.015; /*利润为100万元时的奖金*/

printf("请输入利润i:");

scanf("%ld",i);

if(i=100000)

bonus=i*0.1; /*利润在10万元以内按0.1提成奖金*/

else if(i=200000)

bonus=bon1+(i-100000)*0.075; /*利润在10万至20万元时的奖金*/

else if(i=400000)

bonus=bon2+(i-200000)*0.05; /*利润在20万至40万元时的奖金*/

else if(i=600000)

bonus=bon4+(i-400000)*0.03; /*利润在40万至60万元时的奖金*/

else if(i=1000000)

bonus=bon6+(i-600000)*0.015; /*利润在60万至100万元时的奖金*/

else

bonus=bon10+(i-1000000)*0.01; /*利润在100万元以上时的奖金*/

printf(”奖金是%10.2f\n",bonus);

}

此题的关键在于正确写出每一区间的奖金计算公式。例如利润在10万元至20万时,奖金应由两部分组成:①利润为10万元时应得的奖金。即100000ⅹ0.1;②10万元以上部分应得的奖金。即(num-100000)ⅹ0.075。同理,20万~40万这个区间的奖金也应由两部分组成:①利润为20万元时应得的奖金,即100000ⅹ0.1ⅹ10万ⅹ0.075;②20万元以上部分应得的奖金,即(num-200000)ⅹ0.05。程序中先把10万、20万、40万、60万、100万各关键点的奖金计算出来,即bon1、bon2、bon4、bon6、hon10;然后再加上各区间附加部分的奖金。

(2) 用switch语句编程序。

输入利润i,确定相应的提成等级branch

根据branch确定奖金值

0 奖金=i*0.1

1 奖金=bon1+(i-105)*0.075

2 奖金=bon2+(i-2*105)*0.05

3

4 奖金=bon4+(i-4*105)*0.03

5

6 奖金=bon6+(i-6*105)*0.015

7

8

9

10 奖金=bon10+(i-106)*0.01

输出奖金

#include stdio.h

main()

{ long i;

float bonus, bon1, bon2, bon4, bon6, bon10;

int c;

bon1=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bon10=bon6+400000*0.015;

printf("请输入利润i:");

scanf("%ld",i);

c=i/100000;

if(c10) c=10;

switch(c)

{ case 0: bonus=1*0.1;break;

case 1: bonus=bon1+(i-100000)*0.075;break;

case 2 :

case 3: bonus=bon2+(i-200000)*0.05; break;

case 4:

case 5: bonus=bon4+(i-400000)*0.03;break;

case 6:

case 7:

case 8:

case 9: bonus=bon6+(i-600000)*0.015;break;

case 10: bonus=bon10+(i-1000000)*0.01;

}

printf("奖金是%10.2f",bonus);

}

5.9 输入4个整数,要求按由大到小的顺序输出。

解:此题采用依次比较的方法排出其大小顺序。在学习了循环和数组以后,可以有更多的排序方法。

#include stdio.h

main()

{ int t,a,b,c,d;

printf("请输入4个整数:");

scanf("%d,%d,%d,%d",a,b,c,d);

printf("\n a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);

if(ab) {t=a; a=b; b=t;}

if(ac) {t=a; a=c; c=t;}

if(ad) {t=a; a=d; d=t;}

if(bc) {t=a; b=c; c=t;}

if(bd) {t=b; b=d; d=t;}

if(cd) {t=c; c=d; d=t;}

printf("排序结果如下:\n");

printf("%d, %d, %d, %d\n",a,b,c,d);

}

5.10 有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。这4个塔的高度分别为10m。塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。

程序如下:

#include stdio.h

main()

{ int h=10;

float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4;

printf("请输入一个点(x,y):");

scanf("%f,%f",x,y);

d1=(x-x1)*(x-x1)+(y-y1)*(y-y1); /*求该点到各中心点的距离*/

d2=(x-x2)*(x-x2)+(y+y2)*(y+y2);

d3=(x+x3)*(x+x3)+(y-y3)*(y-y3);

d4=(x+x4)*(x-x4)*(y+y4)*(y+y4);

if(d11d21d31d41) h=0; /*判断该点是否在塔外*/

printf("该点高度为%d\n",h);

}

第六章

第六章 循环控制

6.1输入两个正整数m和n,求其最大公约数和最小公倍数。

main()

{long m,n,i=1,j,s;

scanf("%ld,%ld",m,n);

for(;i=mi=n;i++)

{if(m%i==0n%i==0) s=i;}

if(m=n) j=m;

else j=n;

for(;!(j%m==0j%n==0);j++);

printf("s=%ld,j=%ld\n",s,j);

}

6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

#include"stdio.h"

main()

{char c;int i=0,j=0,k=0,l=0;

while((c=getchar())!=’\n’)

{if(c=65c=90||c=97c=122) i++;

else if(c=48c=57) j++;

else if(c==32) k++;

else l++;}

printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);

}

6.3求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。

#include"math.h"

main()

{int n,sum=0,i=1,s=2;

scanf("%d",n);

while(i=n)

{sum=sum+s;s=s+2*pow(10,i);

i++;}

printf("sum=%d\n",sum);

}

6.4 求 ,(即求1!+2!+3!+4!+5!+…+20!)

main()

{int n,i=1;long sum=0,s=1;

scanf("%d",n);

while(i=n) {s=s*i;sum=sum+s;i++;}

printf("sum=%ld\n",sum);

}

6.5 求

main()

{double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum;

for(;i=100;i++) s1=s1+i;

for(;j=50;j++) s2=s2+j*j;

for(;k=10;k++) s3=s3+1/k;

sum=s1+s2+s3;

printf("sum=%f\n",sum);

}

6.6打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。

#include"math.h"

main()

{int x=100,a,b,c;

while(x=100x1000) {a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;

if(x==(pow(a,3)+pow(b,3)+pow(c,3))) printf("%5d",x);x++;}

}

6.7一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。编程序找出1000之内的所有完数,并按下面格式输出其因子:

6 its factors are 1、2、3

main()

{int m,i,j,s;

for(m=6;m10000;m++)

{s=1;

for(i=2;im;i++)

if(m%i==0) s=s+i;

if(m-s==0)

{printf("%5d its fastors are 1 ",m);for(j=2;jm;j++) if(m%j==0)

printf("%d ",j);printf("\n");}

}

}

main()

{int m,i,j,s;

for(m=6;m1000;m++)

{s=m-1;

for(i=2;im;i++)

if(m%i==0) s=s-i;

if(s==0)

{printf("%5d its fastors are 1 ",m);for(j=2;jm;j++) if(m%j==0)

printf("%d ",j);printf("\n");}

}

}

6.8有一分数序列:

求出这个数列的前20项之和。

main()

{int i=1,n;double t,x=1,y=2,s,sum=0;

scanf("%ld",n);

while(i=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;}

printf("%f\n",sum);

}

6.9一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高?

main()

{int i,n;double h=100,s=100;

scanf("%d",n);

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

{h*=0.5;if(i==1) continue;s=2*h+s;}

printf("h=%f,s=%f\n",h,s);

}

6.10猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。

main()

{int i=1,sum=0;

for(;i=10;sum=2*sum+1,i++);

printf("sum=%d\n",sum);

}

6.11用迭代法求 。求平方根的迭代公式为:

要求前后两次求出的得差的绝对值少于0.00001。

#include"math.h"

main()

{float x0,x1,a;

scanf("%f",a);

x1=a/2;

do

{x0=x1;x1=(x0+a/x0)/2;}

while(fabs(x0-x1)=0.00001);

printf("%.3f\n",x1);

}

6.12 用牛顿迭代法求方程在1.5附近的根。

main()

{double x,y;x=1.5;

do{y=2*x*x*x-4*x*x+3*x-6;

x=x-y/(6*x*x-8*x+3);}

while(y!=0);

printf("x=%.3f\n",x);

}

6.13用二分法求方程在(-10,10)之间的根

main()

{double x1,x2,y1,y2;x1=-10;x2=10;

do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6;

x1=x1-y1/(6*x1*x1-8*x1+3);}

while(y1!=0);

do

{y2=2*x2*x2*x2-4*x2*x2+3*x2-6;

x2=x2-y2/(6*x2*x2-8*x2+3);}

while(y2!=0);

printf("x1=%.3f,x2=%.3f\n",x1,x2);

}

6.14打印以下图案

*

* * *

* * * * *

* * * * * * *

* * * * *

* * *

*

java语言程序设计课后答案 郞波 第二版 清华大学出版社

我有

Java面向对象程序设计

清华大学出版社

(编著 耿祥义 张跃平)

习题解答

建议使用文档结构图

(选择Word菜单→视图→文档结构图)

习题1

1.James Gosling

2.

(1)使用一个文本编辑器编写源文件。

(2)使用Java编译器(javac.exe)编译Java源程序,得到字节码文件。

(3)使用Java解释器(java.exe)运行Java程序

3.Java的源文件是由若干个书写形式互相独立的类组成的。

应用程序中可以没有public类,若有的话至多可以有一个public类。

4.系统环境path D\jdk\bin;

系统环境classpath D\jdk\jre\lib\rt.jar;.;

5. B

6. Java源文件的扩展名是.java。Java字节码的扩展名是.class。

7. D

8.(1)Speak.java

(2)生成两个字节码文件,这些字节码文件的名字Speak.class 和 Xiti8.class

(3)java Xiti8

(4)执行java Speak的错误提示

Exception in thread "main" java.lang.NoSuchMethodError: main

执行java xiti8得到的错误提示

Exception in thread "main" java.lang.NoClassDefFoundError: xiti8 (wrong name: Xiti8)

执行java Xiti8.class得到的错误提示

Exception in thread "main" java.lang.NoClassDefFoundError: Xiti8/class

执行java Xiti8得到的输出结果

I'm glad to meet you

9.属于操作题,解答略。

习题2

1. D

2.【代码1】 【代码2】 错误 //【代码3】更正为 float z=6.89F;

3.float型常量后面必须要有后缀“f”或“F”。

对于double常量,后面可以有后缀“d”或“D”,但允许省略该后缀。

4.public class Xiti4{

public static void main (String args[ ]){

char ch1='你',ch2='我',ch3='他';

System.out.println("\""+ch1+"\"的位置:"+(int)ch1);

System.out.println("\""+ch2+"\"的位置:"+(int)ch2);

System.out.println("\""+ch3+"\"的位置:"+(int)ch3);

}

}

5.数组名字.length

6.数组名字.length

7. 【代码1】A,65

【代码2】-127

【代码3】 123456.783,123456.78312

8.

【代码1】false

【代码2】true

【代码3】false

【代码4】3

【代码5】4.4

【代码6】8.8

习题3

输出110

if-else语句书写的不够规范,复合语句缺少大括号“{}”,代码不够清晰。

2.你好好酷!!

3.

public class Xiti3_3

{

public static void main (String args[ ]){

int startPosition=0,endPosition=0;

char cStart='а',cEnd='я';

startPosition=(int)cStart; //cStart做int型转换据运算,并将结果赋值给startPosition

endPosition=(int)cEnd ; //cEnd做int型转换运算,并将结果赋值给endPosition

System.out.println("俄文字母表:");

for(int i=startPosition;i=endPosition;i++){

char c='\0';

c=(char)i; //i做char型转换运算,并将结果赋值给c

System.out.print(" "+c);

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

System.out.println("");

}

}

}

4.

public class Xiti4

{ public static void main(String args[])

{ double sum=0,a=1;

int i=1;

while(i=20)

{ sum=sum+a;

i++;

a=a*i;

}

System.out.println("sum="+sum);

}

}

5.

class Xiti5

{ public static void main(String args[])

{ int i,j;

for(j=2;j=100;j++)

{ for(i=2;i=j/2;i++)

{ if(j%i==0)

break;

}

if(ij/2)

{ System.out.print(" "+j);

}

}

}

}

6.

class Xiti6

{ public static void main(String args[])

{ double sum=0,a=1,i=1;

while(i=20)

{ sum=sum+a;

i++;

a=(1.0/i)*a;

}

System.out.println("使用while循环计算的sum="+sum);

for(sum=0,i=1,a=1;i=20;i++)

{ a=a*(1.0/i);

sum=sum+a;

}

System.out.println("使用for循环计算的sum="+sum);

}

}

7.

public class Xiti7

{ public static void main(String args[])

{ int sum=0,i,j;

for(i=1;i=1000;i++)

{ for(j=1,sum=0;ji;j++)

{ if(i%j==0)

sum=sum+j;

}

if(sum==i)

System.out.println("完数:"+i);

}

}

}

8.方法之一

import java.util.Scanner;

public class Xiti8

{ public static void main (String args[ ]){

System.out.println("请输入两个非零正整数,每输入一个数回车确认");

Scanner reader=new Scanner(System.in);

int m=0,n=0,temp=0,gy=0,gb=0,a,b;

a=m = reader.nextInt();

b=n = reader.nextInt();

if(mn)

{ temp=m;

m=n;

n=temp;

}

int r=m%n;

while(r!=0)

{ n=m;

m=r;

r=m%n;

}

gy=n;

gb=a*b/gy;

System.out.println("最大公约数 :"+gy);

System.out.println("最小公倍数 :"+gb);

}

}

8.方法之二

import java.util.Scanner;

public class Xiti8 {

public static void main (String args[ ]){

System.out.println("请输入两个非零正整数,每输入一个数回车确认");

Scanner reader=new Scanner(System.in);

int m=0,n=0,t=0,gy=0,gb=0;

m = reader.nextInt();

n = reader.nextInt();

if(mn){

t=m;

m=n;

n=t;

}

for(int i=1;i=m;i++){

if(m%i==0 n%i==0){

gy=i;

}

}

gb=m*n/gy;

System.out.println(m+","+n+"的最大公约数为 "+gy);

System.out.println(m+","+n+"的最小公倍数为 "+gb);

}

}

9.

public class Xiti9

{ public static void main(String args[])

{ int n=1;

long sum=0,t=1;

t=n*t;

while(true)

{ sum=sum+t;

if(sum9999)

break;

n++;

t=n*t;

}

System.out.println("满足条件的最大整数:"+(n-1));

}

}// 1至7的阶乘和是sum=5913.0 // 1至8的阶乘和是sum=46233.0

习题4

1.用该类创建对象时。

2.所谓方法重载是在一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。构造方法可以重载。

3. 可以。不可以。

4.不可以。

5.成员变量又分为实例变量和类变量,用static修饰的变量是类变量。那么类变量和实例变量有什么区别呢?一个类通过使用new运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间;如果类中的成员变量有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类变量。也就是说对象共享类变量。

6.C,D

7.【代码1】,【代码4】

8.sum=-100

9.27

10. **20

##100

习题5

1. 如果子类和父类在同一个包中,那么子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法。继承的成员或方法的访问权限保持不变。如果子类和父类不在同一个包中,那么子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法,继承的成员或方法的访问权限保持不变。如果子类和父类不在同一个包里,子类不能继承父类的友好变量和友好方法。

只要子类中声明的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量。

子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同,子类如此定义的方法称作子类重写的方法。子类通过方法的重写可以隐藏继承的方法。

2.不可以。

3.abstract类。

4.假设B类是A类子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到A类的对象中时,称这个A类对象是子类对象的上转型对象。

5.可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。那么该接口变量就可以调用被类实现的接口中的方法。

6.A,C,D

7.15.0

8.0

8.98.0

12

9.

class A

{ public final void f()

{ char cStart='a',cEnd='z';

for(char c=cStart;c=cEnd;c++)

{ System.out.print(" "+c);

}

}

}

class B extends A

{ public void g()

{ char cStart='α',cEnd='ω';

for(char c=cStart;c=cEnd;c++)

{ System.out.print(" "+c);

}

}

}

public class Xiti9

{ public static void main (String args[ ])

{ B b=new B();

b.f();

b.g();

}

}

10.

class A

{ public int f(int a,int b){

if(ba)

{ int temp=0;

temp=a;

a=b;

b=temp;

}

int r=b%a;

while(r!=0)

{ b=a;

a=r;

r=b%a;

}

return a;

}

}

class B extends A

{ public int f(int a,int b)

{ int division=super.f(a,b);

return (a*b)/division;

}

}

public class Xiti10

{ public static void main (String args[ ])

{ A a=new A();

B b=new B();

System.out.println("最大公约数 :"+a.f(36,24));

System.out.println("最小公倍数 :"+b.f(36,24));

}

}

习题6

1.仍然有效。

2.可以。

3.不可以。

4.大家好,祝工作顺利!

5. 96

乘数超过99

习题7

1.

(1)Strategy是接口。

(2)Army不是抽象类。

(3)Army和Strategy是关联关系。

(4)StrategyA, StrategyB、StrategyC与Strategy是实现关系。

2.

3.

4.例子13的设计符合开-闭原则。

5.例子17的设计符合开-闭原则。

习题8

采用新增的策略为选手计算得分。

增加新的具体策略StrategyFour。StrategyFour类将double computeScore(double [] a)方法实现为去掉数组a的元素中的一个最大值和一个最小值,然后计算剩余元素的几何平均值。

import java.util.Arrays;

public class StrategyFour implements ComputableStrategy {

public double computeScore(double [] a) {

if(a.length=2)

return 0;

double score=0,multi=1;

Arrays.sort(a);

int n=a.length-2;

for(int i=1;ia.length-1;i++) {

multi=multi*a[i];

}

score=Math.pow(multi,1.0/n);

return score;

}

}

2.

(1)策略(Strategy)PrintCharacter.java

public interface PrintCharacter{

public abstract void printTable(char [] a,char[] b);

}

(2) 具体策略

PrintStrategyOne.java

public class PrintStrategyOne implements PrintCharacter {

public void printTable(char [] a,char[] b) {

for(int i=0;ia.length;i++) {

System.out.print(a[i]+",");

}

for(int i=0;ib.length;i++) {

System.out.print(b[i]+",");

}

System.out.println("");

}

}

PrintStrategyTwo.java

public class PrintStrategyTwo implements PrintCharacter {

public void printTable(char [] a,char[] b) {

for(int i=0;ia.length;i++) {

System.out.print(b[i]+","+a[i]+",");

}

}

}

(3)上下文 PrintGame.java

public class PrintGame {

PrintCharacter strategy;

public void setStrategy(PrintCharacter strategy) {

this.strategy=strategy;

}

public void getPersonScore(char[] a,char[] b){

if(strategy==null)

System.out.println("sorry!");

else

strategy.printTable(a,b);

}

}

应用以上策略:

public class Application {

public static void main(String args[]) {

char [] a=new char[26];

char [] b=new char[26];

for(int i=0;i=25;i++){

a[i]=(char)('a'+i);

}

for(int i=0;i=25;i++){

b[i]=(char)('A'+i);

}

PrintGame game=new PrintGame(); //上下文对象

game.setStrategy(new PrintStrategyOne()); //上下文对象使用策略一

System.out.println("方案1:");

game.getPersonScore(a,b);

game.setStrategy(new PrintStrategyTwo()); //上下文对象使用策略二

System.out.println("方案2:");

game.getPersonScore(a,b);

}

}

3.参照本章8.3.3自主完成。

习题9

1.A,B,D

2. Love:Game

3.13

abc夏日

4.13579

5.9javaHello

6.

public class Xiti6 {

public static void main (String args[ ]) {

String s1,s2,s3,t1="ABCDabcd";

System.out.println("字符串原来是这个样子: "+t1);

s1=t1.toUpperCase();

System.out.println("字符串中的小写字母变成大写是这个样子: "+s1);

s2=t1.toLowerCase();

System.out.println("字符串中的大写字母变成小写是这个样子: "+s2);

s3=s1.concat(s2);

System.out.println("大写字符串连接小写字符串是这个样子: "+s3);

}

}

7.

class Xiti7

{ public static void main(String args[ ])

{ String s ="中华人民共和国";

char a=s.charAt(0);

char b=s.charAt(6);

System.out.println("第一个字符: "+a);

System.out.println("最后一个字符: "+b);

}

}

8.

import java.util.*;

class Xiti8

{ public static void main(String args[]){

int year,month;

System.out.println("请输入年份和月份,每输入一个数回车确认");

Scanner reader=new Scanner(System.in);

year= reader.nextInt();

month= reader.nextInt();

String [] day=new String[42];

System.out.println(" 日 一 二 三 四 五 六");

Calendar rili=Calendar.getInstance();

rili.set(year,month-1,1);//将日历翻到year年month月1日,注意0表示一月...11表示十二月

int 星期几=rili.get(Calendar.DAY_OF_WEEK)-1;

int dayAmount=0;

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)

dayAmount=31;

if(month==4||month==6||month==9||month==11)

dayAmount=30;

if(month==2)

if(((year%4==0)(year%100!=0))||(year%400==0))

dayAmount=29;

else

dayAmount=28;

for(int i=0;i星期几;i++)

day[i]="";

for(int i=星期几,n=1;i星期几+dayAmount;i++){

if(n=9)

day[i]=String.valueOf(n)+" " ;

else

day[i]=String.valueOf(n);

n++;

}

for(int i=星期几+dayAmount;i42;i++)

day[i]="";

for(int i=0;i星期几;i++)

{ day[i]="**";

}

for(int i=0;iday.length;i++)

{ if(i%7==0)

{ System.out.println("");

}

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

}

}

}

9.

import java.util.*;

class Xiti9

{ public static void main(String args[]){

int year1,month1,day1,year2,month2,day2;

Scanner reader=new Scanner(System.in);

System.out.println("请输入第一个日期的年份 月份 日期 ,每输入一个数回车确认");

year1= reader.nextInt();

month1= reader.nextInt();

day1= reader.nextInt();

System.out.println("请输入第二个日期的年份 月份 日期 ,每输入一个数回车确认");

year2= reader.nextInt();

month2= reader.nextInt();

day2= reader.nextInt();

Calendar calendar=Calendar.getInstance();

calendar.set(year1,month1,day1);

long timeYear1=calendar.getTimeInMillis();

calendar.set(year2,month2,day2);

long timeYear2=calendar.getTimeInMillis();

long 相隔天数=Math.abs((timeYear1-timeYear2)/(1000*60*60*24));

System.out.println(""+year1+"年"+month1+"月"+day1+"日和"+

year2+"年"+month2+"月"+day2+"日相隔"+相隔天数+"天");

}

}

全部都给你

希望那个可以帮助到你 祝你学习成功

(责任编辑:IT教学网)

更多

推荐XML/XSLT文章