java语言的科学与艺术 第五章 课后编程

本博客介绍了一元二次方程的求解方法,并通过多个实例展示了如何使用Java进行图形绘制,包括房屋、火车等复杂图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎大家转载,为保留作者成果,转载请注明出处,http://blog.youkuaiyun.com/netluoriver,有些文件在资源中也可以下载!如果你没有积分,可以联系我索要!

1、

package fifth_charter;
/*
* File: Formula.java
* ---------------------------
* 计算一元二次方程
* 第五章第一题
* 
* Author luoriver
*/

import acm.program.*;
import acm.graphics.*;
import java.awt.*;
public class Formula extends ConsoleProgram{
	public void run(){
		double a = readDouble("a: ");
		double b = readDouble("b: ");
		double c = readDouble("c: ");
		suqard(a, b, c);
	}
	
	private void suqard(double a, double b, double c){
		double sq = b * b - 4 * a * c;
		if(sq<0){
			println("此公式无解");
		}else{
			double x1 = (-b - Math.sqrt(sq))/(2 * a);
			println("第一个解为:" + x1);
			
			double x2  = (-b + Math.sqrt(sq))/(2 * a); 
			println("第二个解为:" + x2);
		}
	}
}

3、

package fifth_charter;
/*
* File: Square.java
* ---------------------------
* This program displays a target on the screen.
* 
* Author luoriver
*/

import java.awt.*;

import acm.graphics.*;
import acm.program.*;
public class Square extends ConsoleProgram {
	public void run() {
		println("本程序是计算2次幂");
		int k = readInt("请输入一个数:");
		raiseIntToPower(k);
	}
	
	private void raiseIntToPower(int k){
		int s = 1;
		println("2的0次方=1 ");
		for(int i = 1; i < k; i++){
			s *=2;
			println("2的" + i + "次方= " + s);
		}
	}
};

4、

package fifth_charter;

/*
* File: DigitNum.java
* ---------------------------
*本程序是来计算输入整数的位数
* 第五章第4题
* 
* Author luoriver
*/

import java.awt.*;
import acm.graphics.*;
import acm.program.*;

public class DigitNum extends ConsoleProgram{
	public void run(){
		println("本程序是来计算输入整数的位数");
		int i = readInt("请输入一个整数:");
		countDigits(i);
		
	}
	
	private void countDigits(int n){
		int m = 1;
		while(n / 10 > 0){
			 m += 1;
			n = n / 10;
		}
		print(n + "是" + m + "位数");
		
	}
}

5、

package fifth_charter;

/*
* File: Target.java
* ---------------------------
*打印靶程序
* 第五章第5题
* 
* Author luoriver
*/

import java.awt.*;
import acm.graphics.*;
import acm.program.*;

public class Target extends GraphicsProgram{
	public void run(){
		createFilledCircle();
		
	}
	
	private void createFilledCircle(){
		double dx = getWidth() / 2;
		double dy = getHeight() / 2;
		//N 代表每个圆圈之间的间距
		double N = (OUTER_RADIUS - INNER_RADIUS)  /4;
		
		for(int i = 0; i < 5; i ++){
			GOval c = new GOval(dx  - OUTER_RADIUS +  i * N, dy - OUTER_RADIUS + i * N, 2 * (OUTER_RADIUS - i * N), 2 * (OUTER_RADIUS - i * N)); 
			c.setFilled(true);
			if(i % 2 == 0){
				c.setFillColor(Color.RED);
			}else{
				c.setFillColor(Color.WHITE);
				c.setFilled(true);
			}
			add(c);
		} 
		
		GOval e = new GOval(dx - INNER_RADIUS, dy - INNER_RADIUS, 2 * INNER_RADIUS, 2 * INNER_RADIUS);
		e.setFilled(true);
		e.setFillColor(Color.RED);
		add(e);
		
		} 
	
	private static final int N_CIRCLES = 5;
	private static final  double OUTER_RADIUS = 75;
	private static final double INNER_RADIUS = 10;
}


6、

package fifth_charter;


/*
* File: DrawLight.java
* ---------------------------
* 编程练习第5章第6题
* 
* Author luoriver
*/

import acm.program.*;
import acm.graphics.*;
import java.awt.*;

public class DrawLight extends GraphicsProgram {
	
	public void run(){
		double cx = getWidth() / 2;
		double cy = getHeight() / 2;
		double fx = cx - FRAME_WIDTH / 2;
		double fy = cy - FRAME_HEIGHT / 2;
		double dy = FRAME_HEIGHT / 4 + LAMP_RADIUS / 2;
		
		add(createFilledRect(fx, fy, Color.GRAY));
		add(createFilledCircle(cx, cy - dy, LAMP_RADIUS, Color.RED));
		add(createFilledCircle(cx, cy, LAMP_RADIUS, Color.YELLOW));
		add(createFilledCircle(cx, cy + dy, LAMP_RADIUS, Color.GREEN));
	}
	
	private GRect createFilledRect(double x, double y, Color color){
		GRect frame = new GRect(x, y, FRAME_WIDTH, FRAME_HEIGHT);
		frame.setFilled(true);
		frame.setColor(color);
		return frame;
	};
	private GOval createFilledCircle(double x, double y, double r, Color color){
	
		GOval circle = new GOval(x - r, y - r, 2 * r, 2 * r);
		circle.setFilled(true);
		circle.setColor(color);
		return circle;
	}

	/* Private constants */
	private static final double  FRAME_WIDTH = 50;
	private static final double  FRAME_HEIGHT = 100;
	private static final double  LAMP_RADIUS = 10;

}

7、

package fifth_charter;


/*
* File: Ask.java
* ---------------------------
* 编程练习第5章第7题
* 
* Author luoriver
*/

import acm.program.*;
import acm.graphics.*;

import java.awt.*;

public class Ask extends ConsoleProgram {
	
	public void run(){
		if (askYesNoQuestion(prompt)) {  
            println("Yes, I would like instructions.");  
        } else {  
            println("No, I wouldn'g like instructions.");  
        } 
	}
	
	private boolean askYesNoQuestion(String str) {
		String answer = readLine(str);
		while ( !answer.equals("yes") && !answer.equals("no")) {
			println("Please answer yes or no.");
			answer = readLine(str);
		}
		return (answer.equals("yes"));
	}
	
	/*
	 * 提示语句设置为常量
	 */
	private static final String prompt = "Would you like insatructions?";
}

8、

package fifth_charter;

/*
* File: Train.java
* ---------------------------
* 第五章  画一辆火车
* 
* Author luoriver
*/

import acm.program.*;
import acm.graphics.*;
import java.awt.*;

public class Train extends GraphicsProgram {
	
	public void run(){
		
		double trainWidth =3 * CAR_WIDTH + 4 * CONNECTOR;
		double x = (getWidth() - trainWidth) / 2;
		double y = getHeight();
		double dx = CAR_WIDTH + CONNECTOR;
		drawEngine(x, y);
		drawBoxcar(x + dx, y, Color.BLACK);
		drawCaboose(x + 2 * dx, y);
	}
	
	/*
	 * 这里画火车头
	 * @drawEngine
	 */
		private void drawEngine(double x, double y){
			drawCarFrame(x, y, Color.BLACK);
			drawSmokestack(x, y);
			drawCab(x, y);
			drawCowcatcher(x, y);			
		}
		
		/*
		 * 画烟囱的方法
		 * @patameter为双精度型
		 */
		private void drawSmokestack(double x, double y){
			GRect smoker =new GRect(x + SMOKESATCK_INSET, y - CAR_HEIGHT - CAR_BASELINE - WHEEL_RADIUS, SMOKESATCK_WIDTH, SMOKESATCK_HEIGHT );
			smoker.setFilled(true);
			smoker.setFillColor(Color.BLACK);
			add(smoker);
		}
		
		private void drawCab(double x, double y){
			GRect cab = new GRect(x + CAR_WIDTH - CAB_WIDTH + CONNECTOR, y - CAR_HEIGHT - CAR_BASELINE - WHEEL_RADIUS, CAB_WIDTH, CAB_HEIGHT);
			cab.setFilled(true);
			cab.setFillColor(Color.BLACK);
			add(cab);
		}
		
		private void drawCowcatcher(double x, double y){
			GLine a = new GLine(x, y - CAR_BASELINE, x + CONNECTOR, y - CAR_BASELINE - 5);
			GLine b = new GLine(x, y - CAR_BASELINE, x + CONNECTOR ,  y - CAR_BASELINE- 10);
			GLine c = new GLine(x, y - CAR_BASELINE, x + CONNECTOR,  y - CAR_BASELINE- 15);
			add(a);
			add(b);
			add(c);
		}
		
		private  void drawBoxcar(double x, double y,Color color){
			drawCarFrame(x, y, Color.GREEN);
			double xRight = x + CONNECTOR + CAR_WIDTH / 2;
			double xLeft = xRight - DOOR_WIDTH;
			double yDoor = y - CAR_BASELINE - DOOR_HEIGHT;
			add(new GRect(xLeft, yDoor, DOOR_WIDTH, DOOR_HEIGHT));
			add(new GRect(xRight, yDoor, DOOR_WIDTH, DOOR_HEIGHT));
		}
		
		private void drawCaboose(double x, double y){
			drawCarFrame(x, y, Color.RED);
			GRect caboose = new GRect(x + CONNECTOR + CAR_WIDTH / 2 - CUPOLA_WIDTH / 2, y - CAR_BASELINE - CAR_HEIGHT - CUPOLA_HEIGHT,CUPOLA_WIDTH, CUPOLA_HEIGHT);
			caboose.setFilled(true);
			caboose.setFillColor(Color.RED);
			add(caboose);
		}
		
		private void drawCarFrame(double x, double y, Color color){
			double x0 = x + CONNECTOR;
			double y0 = y - CAR_BASELINE;
			double top  = y0 - CAR_HEIGHT;
			add (new GLine(x, y0, x + CAR_WIDTH + 2 * CONNECTOR, y0));
			drawWheel(x0 + WHEEL_INSET, y - WHEEL_RADIUS);
			drawWheel(x0 + CAR_WIDTH - WHEEL_INSET, y - WHEEL_RADIUS);
			GRect r = new GRect(x0, top, CAR_WIDTH, CAR_HEIGHT);
			r.setFilled(true);
			r.setFillColor(color);
			add(r);
		}	
		
		
		private void drawWheel(double x, double y){
			double r = WHEEL_RADIUS;
			GOval wheel = new GOval(x -r, y -r, 2 * r, 2 * r);
			wheel.setFilled(true);
			wheel.setFillColor(Color.GRAY);
			add(wheel);
		}
		
	

	/* 定义火车的框架 */
	private static final double  CAR_WIDTH = 75;
	private static final double  CAR_HEIGHT = 36;
	
	/* 定义画布底部到火车底部的距离*/
	private static final double CAR_BASELINE = 10;
	
	/* 定义两列火车连接器的宽度*/
	private static final double CONNECTOR = 6;
	
	/* 定义轮子的半径 */
	private static final double WHEEL_RADIUS = 8;
	
	/* 定义火车轮到两侧的距离 */
	private static final double WHEEL_INSET = 16;
	
	/* 定义引擎的大小 */
	private static final double CAB_WIDTH = 35;
	private static final double CAB_HEIGHT = 8;
	
	/*定义烟囱的大小和离火车前端的位置 */
	private static final double SMOKESATCK_WIDTH = 8;
	private static final double SMOKESATCK_HEIGHT = 8;
	private static final double SMOKESATCK_INSET = 8;
	
	/*定义火车门的大小*/
	private static final double DOOR_WIDTH = 18;
	private static final double DOOR_HEIGHT = 32;
	
	/*定义炮塔的大小 */
	private static final double CUPOLA_WIDTH = 35;
	private static final double CUPOLA_HEIGHT = 8;
	
}

9、

package fifth_charter;

/*
* File: House.java
* ---------------------------
*本程序是画出一个房子
* 第五章第9题
* 
* Author luoriver
*/

import java.awt.*;
import acm.graphics.*;
import acm.program.*;

public class House extends GraphicsProgram{
	
	/*
	 * 定义房子的一些常量
	 * (non-Javadoc)
	 * @see acm.program.ConsoleProgram#run()
	 */
	// 定义房子的基线
	private static final double BASELINE = 20;
	
	//设置房顶的高度
	private static final double ROOF_HEIGHT = 30;
	
	//定义房子的主框架
	private static final double FRAME_WIDTH = 100;
	private static final double FRAME_HEIGHT = 80;
	
	/*
	 * 定义房子中窗户的大小,从图中可以看到,窗户可以分成为2个或3个组成的矩形
	 */
	private static final double WINDOW_WIDTH = 4;
	private static final double WINDOW_HEIGHT = 6;
	
	
	/*
	 * 定义门的大小
	 */
	private static final double DOOR_WIDTH = 20;
	private static final double DOOR_HEIGHT = 40;
	
	/*
	 * 定义锁的半径、高度及偏离门的位置
	 */
	private static final double LOCK_RADIUS = 2;
	private static final double LOCK_HEIGHT = 20;
	private static final double LOCK_INSERT = 4;
	
	public void run(){
		double dx = getWidth() / 2;
		double dy = getHeight();
		
		double fx = dx - FRAME_WIDTH / 2;
		double fy = dy - BASELINE;
		double fz = dy - BASELINE - FRAME_HEIGHT;
	
		drawRoof(dx, fz - ROOF_HEIGHT);
		drawFrame(fx, fy - FRAME_HEIGHT);
		drawLeftTopWindows(dx - FRAME_WIDTH / 4 - WINDOW_WIDTH, fy - FRAME_HEIGHT / 4 * 3);
		drawRightTopWindows(dx + FRAME_WIDTH / 4 - WINDOW_WIDTH, fy - FRAME_HEIGHT/4 * 3);
		
		drawLeftLowWindows(dx - FRAME_WIDTH / 4 - WINDOW_WIDTH / 2 * 3, fy - FRAME_HEIGHT / 4);
		drawRightLowWindows(dx + FRAME_WIDTH / 4 - WINDOW_WIDTH / 2 * 3, fy - FRAME_HEIGHT / 4);
		drawDoor(dx - DOOR_WIDTH / 2, fy - DOOR_HEIGHT); 
		
	}
	
	/*
	 * 这里用到了本章学习的数学函数:
	 * Math.sqrt(x)	返回值x的平方根
	 * 和
	 * Math.pow(x,y)返回x的y次幂
	 * 主要来求平面坐标中两条直线的距离
	 * 
	 */
	
	private void drawRoof(double x, double y){
		/*
		 * 这里的if语句表示三角形的两条边的和必须大于第三边,否则就不能构成一个三角形
		 * 平面中两条直线的距离等于两个横坐标的平方与纵坐标的平方的和再求根,求得的根即为三角形的一条边,因两端的线都一样,所以再乘以2
		 * 三角形两条边的和来判断是否大于房子的宽度
		 * 如果两条的边的和小于第三条边,给出提示信息:将房顶的高度设置大一些
		 */
		if(Math.sqrt(Math.pow(x - FRAME_WIDTH / 2, 2) + Math.pow(y - FRAME_WIDTH / 2, 2 )) * 2 > FRAME_WIDTH){
			add(new GLine(x,y, x - FRAME_WIDTH / 2, getWidth() - BASELINE - FRAME_HEIGHT));
			add(new GLine(x,y, x + FRAME_WIDTH / 2, getWidth() - BASELINE - FRAME_HEIGHT));
		}else{
			println("请将ROOF_HEIGHT的值设置大一些!!!!");
		}
	}
	
	private void drawFrame(double x, double y){
		GRect frame = new GRect(x, y, FRAME_WIDTH, FRAME_HEIGHT);
		add(frame);
	}
	
	private void drawLeftTopWindows(double x, double y){
		for(int i = 0; i < 2; i++){
			for(int j = 0; j < 2; j++){
			add(new GRect(x + i * WINDOW_WIDTH  , y + j * WINDOW_HEIGHT, WINDOW_WIDTH, WINDOW_HEIGHT));
			}
		}
		
		
	}
	
	private void drawRightTopWindows(double x, double y){
		for(int i = 0; i < 2; i++){
			for(int j = 0; j < 2; j++){
			add(new GRect(x + i * WINDOW_WIDTH  , y + j * WINDOW_HEIGHT, WINDOW_WIDTH, WINDOW_HEIGHT));
			}
		}
	}
	
	private void drawLeftLowWindows(double x, double y){
		for(int i = 0; i < 3; i++){
			for(int j = 0; j < 2; j++){
			add(new GRect(x + i * WINDOW_WIDTH  , y + j * WINDOW_HEIGHT, WINDOW_WIDTH, WINDOW_HEIGHT));
			}
		}
	}
	
	private void drawRightLowWindows(double x, double y){
		for(int i = 0; i < 3; i++){
			for(int j = 0; j < 2; j++){
			add(new GRect(x + i * WINDOW_WIDTH  , y + j * WINDOW_HEIGHT, WINDOW_WIDTH, WINDOW_HEIGHT));
			}
		}
	}
	
	private void drawDoor(double x, double y){
		add(new GRect(x, y, DOOR_WIDTH, DOOR_HEIGHT));
		drawLock(x + DOOR_WIDTH - LOCK_INSERT - LOCK_RADIUS * 2, y + DOOR_HEIGHT / 2 - LOCK_RADIUS);
	}
	
	private void drawLock(double x, double y){
		add(new GOval(x, y, LOCK_RADIUS * 2, LOCK_RADIUS * 2));
	}
	

}

10、

package fifth_charter;

/*
* File: HouseOfUsher.java
* ---------------------------
*本程序是画出一个房子
* 第五章第10题
* 
* Author luoriver
*/

import java.awt.*;

import acm.graphics.*;
import acm.program.*;

public class HouseOfUsher extends GraphicsProgram{
	
	/*
	 * 定义房子的一些常量
	 *
	 */
	// 定义房子的基线
	private static final double BASELINE = 10;
	
	//定义房子离画布左边的距离
	private static final double HOUSE_INSERT = 10;
	
	//定义塔的大小
	private static final double TOWER_WIDTH = 30;
	private static final double TOWER_HEIGHT = 120;
	
	//定义塔顶上三角的高度
	private static final double TOWER_ROOF_HEIGHT = 30;
		
	//定义房子的大小
	private static final double HOUSE_WIDTH = 100;
	private static final double HOUSE_HEIGHT = 80;
	
	//设置房顶上三角的高度
		private static final double HOUSE_ROOF_HEIGHT = 30;
	/*
	 * 定义房子中窗户的大小及高度
	 */
	private static final double WINDOW_RADIUS = 4;
	private static final double WINDOW_HEIGHT = 50;
	private static final double WINDOW_INSERT = 10;
	
	/*
	 * 定义门的大小
	 */
	private static final double DOOR_WIDTH = 20;
	private static final double DOOR_HEIGHT = 40;
	private static final double DOOR_ROOF_HEIGHT = 8;
	
	//定义草的大小
	private static final double GRASS_WIDTH = 10;
	private static final double GRASS_HEIGHT = 50;
	//定义草上三角的高度
	private static final double GRASS_ROOF_HEIGHT = 20;
	
	//定义草之间的距离
	private static final double GRASS_DISTANCE = 15;
	
	public void run(){
		drawLeftTower();
		drawHouse();
		drawRightTower();
		drawGrass();
	}
	
	private void drawLeftTower(){
		drawModel(HOUSE_INSERT, getHeight() - TOWER_HEIGHT - BASELINE, TOWER_WIDTH, TOWER_HEIGHT, TOWER_ROOF_HEIGHT);
	}
	
	private void drawRightTower(){
		drawModel(HOUSE_INSERT + TOWER_WIDTH + HOUSE_WIDTH, getHeight() - TOWER_HEIGHT - BASELINE, TOWER_WIDTH, TOWER_HEIGHT, TOWER_ROOF_HEIGHT);
	}
	
	private void drawHouse(){
	 	drawModel(HOUSE_INSERT + TOWER_WIDTH, getHeight() - BASELINE - HOUSE_HEIGHT, HOUSE_WIDTH, HOUSE_HEIGHT, HOUSE_ROOF_HEIGHT);
	 	drawDoor();
	 	drawWindows();
	}
	
	private void drawDoor(){
		drawModel(HOUSE_INSERT + TOWER_WIDTH + HOUSE_WIDTH / 2 - DOOR_WIDTH / 2, getHeight() - BASELINE - DOOR_HEIGHT, DOOR_WIDTH, DOOR_HEIGHT, DOOR_ROOF_HEIGHT);
	}
	
	private void drawWindows(){
		drawLeftWindow();
		drawRightWindow();
	}
	
	private void drawLeftWindow(){
		add(new GOval(HOUSE_INSERT + TOWER_WIDTH + WINDOW_INSERT + WINDOW_RADIUS, getHeight() - BASELINE - WINDOW_HEIGHT, WINDOW_RADIUS, WINDOW_RADIUS));
	}
	
	private void drawRightWindow(){
		add(new GOval(HOUSE_INSERT + TOWER_WIDTH + HOUSE_WIDTH - WINDOW_INSERT - WINDOW_RADIUS, getHeight() - BASELINE - WINDOW_HEIGHT, WINDOW_RADIUS, WINDOW_RADIUS));
	}
	
	private void drawGrass(){
		for(int i = 0; i < 3; i++){
			drawModel(HOUSE_INSERT + TOWER_WIDTH * 2 + HOUSE_WIDTH + i * GRASS_DISTANCE + GRASS_WIDTH, getHeight() - GRASS_HEIGHT - BASELINE, GRASS_WIDTH, GRASS_HEIGHT, GRASS_ROOF_HEIGHT);
		}
	}
	
	private void drawModel(double x, double y, double width, double height, double roof_height){
		/*
		 * 
		 */
		if(Math.sqrt(Math.pow(width/2, 2) + Math.pow(roof_height, 2 )) * 2 > width){
			add(new GLine(x, y, x + width/2,y - roof_height));
			add(new GLine(x + width, y, x + width / 2,y - roof_height));
		}else{
			println("请将ROOF_HEIGHT的值设置大一些!!!!");
		}
		
		add(new GRect(x, y, width, height));
	}
}

11、

package fifth_charter;

/*
* File: Prime.java
* ---------------------------
*本程序是计算素数
* 第五章第11题
* 
* 
* 
* Author luoriver
*/

import java.awt.*;
import acm.graphics.*;
import acm.program.*;

public class Prime extends ConsoleProgram{
	public void run(){
		for(int i = 2; i < MAX; i++){
			if(isPrime(i)){
				println(i + "是素数");
			}
		}
	}
	
	private static boolean isPrime(int num){
		   
       for(int i = 2; i <= Math.sqrt(num); i++) {//程序默认2是素数,当j=2时,循环不执行
           if(num % i == 0){
             return false;
           }
       }
       		return true;
	}
		
	private static final int MAX = 1000;
}

12、这个题自己没有按照书上的,自己写了一个约数的公式,反正是做出来了,

package fifth_charter;

/*
* File: PerfectNum.java
* ---------------------------
*本程序是计算完全数
* 第五章第12题
* 
* 
* 
* Author luoriver
*/

import java.awt.*;
import acm.graphics.*;
import acm.program.*;

public class PerfectNum extends ConsoleProgram{
	public void run(){
		println("本程序是显示一定范围内的完全数");
		for(int i = MIN; i < MAX; i++){
			isPerfectNum(i);
		}
	}
	
	/*
	 * 约数:如果一个整数能被两个整数整除,那么这个数就是着两个数的约数。
	 * 约数是有限的,一般用最大公约数。 一个整数最小的约数是1,最大的约数是其本身
	 * 由此可知
	 */
	private void isPerfectNum(int n){
	
		int y = n / 2;
		int sum  = 0;
		for(int i = 1; i < y; i++){
			for(int j = 1; j <= n; j++){
				if(n % i == 0 && n % j ==0 && i <= j && i * j == n ){
						int s = i + j;
						sum += s;
					//	println (i + "*" + j + "=" + j * i);
				}
			}
		}
		
		// println(n);
		if(sum - n == n){
			println(n + "是完全数");
		}
	}
	
	//定义寻找完全数的范围
	private static final int MIN = 1;
	private static final int MAX = 9999;
}




编辑推荐 本书采用现代面向对象方法,从零开始介绍最有用的类层次结构,全文使用图形和交互式程序,充分激发学生的学习兴趣。本书使用传记简介、引用以及哲学片段来突出计算的历史和理性背景,着重强调算法和问题解决,而今天的初级教科书通常忽略了这一点。 内容简介 自1995年首次发布以来,Java编程语言作为一种教学语言变得日益重要,现在已经成为初级计算课程斯坦福大学的标准语言Java语言可以让学生编写高度交互式程序,这充分激发了他们的学习兴趣。但Java语言很复杂,老师和学生们在理解Java语言的结构时,复杂性成为了最大的障碍。   在本书中,斯坦福大学教授、著名的计算机科学教育领导者Eric S.Roberts着重强调了更适合于初学者的友好讲解方式,使用ACM Java库简化编程。本书简练清晰地介绍了传统CS1课程的内容,同时也包含了最近的Computing Curriculum 2001报告计算机科学卷中指定为CS101O或CS111O课程的全部主题。 作者简介 Eric S. Roberts,美国斯坦福大学计算机科学系教授,并担任主管教学事务的系主任。同时还由于教学改革所取得的成就被评为Charles Simonyi荣誉教授。他于1980年获得哈佛大学应用数学博士学位,并曾在加州Palo Alto的DEC公司的系统研究中心工作了5年。作为一位成功的教育工作者,Roberts还获得了1993年的Bing Award奖。 目录 第1 前言  1.1 计算简史  1.2 计算机科学的含义  1.3 计算机硬件简介  1.4 算法  1.5 编程过程的几个阶段  1.6 Java和面向对象范例  1.7 Java和WWW  1.8 小结  1.9 复习题 第2 编程示例  2.1 “Hello world”程序  2.2 编程过程的观点  2.3 两数相加的程序  2.4 编程习语和模式  2.5 类和对象  2.6 图形程序  2.7 小结  2.8 复习题  2.9 编程练习 第3 表达式  3.1 原始数据类型  3.2 常量变量  3.3 运算符和操作数  3.4 赋值语句  3.5 布尔表达式  3.6 设计改变  3.7 小结  3.8 复习题  3.9 编程练习 第4 语句形式  4.1 Java的语句类型  4.2 控制语句和问题解决  4.3 if 语句  4.4 switch语句  4.5 while语句  4.6 for语句  4.7 小结  4.8 复习题  4.9 编程练习5 方法  5.1 方法概述  5.2 编写自己的方法  5.3 方法调用过程的技巧  5.4 分解  5.5 算法方法  5.6 小结  5.7 复习题  5.8 编程练习 第6 对象和类  6.1 使用RandomGenerator类  6.2 javadoc文档系统  6.3 定义自己的类  6.4 表示学生信息  6.5 有理数  6.6 扩展现有类  6.7 小结  6.8 复习题  6.9 编程练习 第7 对象和内存  7.1 内存结构  7.2 将内存分配给变量  7.3 原始类型对象  7.4 链接对象  7.5 小结  7.6 复习题  7.7 编程练习 第8 字符串和字符  8.1 枚举的原则  8.2 字符  8.3 作为抽象概念的字符串  8.4 使用String类中的方法  8.5 字符串处理案例研究  8.6 小结  8.7 复习题  8.8 编程练习 第9 面向对象图形  9.1 acm.graphics模型  9.2 acm.graphics程序包的结构  9.3 使用形状类  9.4 创建复合对象  9.5 小结  9.6 复习题  9.7 编程练习 第10 事件驱动程序  10.1 Java事件模型  10.2 简单的事件驱动程序  10.3 响应鼠标事件  10.4 响应键盘事件  10.5 创建简单的GUI  10.6 Swing 交互器层次结构  10.7 管理组件布局  10.8 使用TableLayout类  10.9 小结  10.10 复习题  10.11 编程练习 第11 数组ArrayList类  11.1 数组简介  11.2 数组的内部表示法  11.3 数组作为参数传递  11.4 使用数组制作表格  11.5 数组初始化  11.6 多维数组  11.7 图像处理  11.8 ArrayList类  11.9 小结  11.10 复习题  11.11 编程练习 第12 搜索排序  12.1 搜索  12.2 排序  12.3 评估算法效率  12.4 使用数据文件  12.5 小结  12.6 复习题  12.7 编程练习 第13 数组ArrayList类  13.1 ArrayList类回顾  13.2 HashMap类  13.3 Java集合架构  13.4 面向对象设计的原则  13.5 小结  13.6 复习题  13.7 编程练习 第14 展望  14.1 递归  14.2 并发  14.3 使用网络  14.4 编程模式  14.5 小结  14.6 复习题  14.7 编程练习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值