stanford编程方法——习题答案(the art and science of java)—

? Chapter 04 Statement FormsReview questions——————————————————————————-1. Is the construction??? 17;a legal statement in Java? Is it useful?Answer:??? legal statement but not userful——————————————————————————-2. Describe the effect of the following statement, assuming that i, j, and k are declared as integer variables:??? i = (j = 4) * (k = 16);Answer:??? i = j * k????? = 4 * 16????? = 64;——————————————————————————-3. What single statement would you write to set both x and y (which you may assume are declared to be type double) to 1.0?Answer:??? x = y = 1.0;——————————————————————————-4. What is a block? What important fact about blocks is conveyed by the termcompound statement, which is another name for the same concept?Answer:??? {??????? statements??? }——————————————————————————-5. What are the two classes of control statements?Answer:??? conditionals??? Iteration——————————————————————————-6. What does it mean to say that two control statements are nested?Answer:??? a control statement is used within the body of another control statement——————————————————————————-7. What are the two values of the data type boolean?Answer:??? true??? false——————————————————————————-8. What happens when a programmer tries to use the mathematical symbol for equality in a conditional expression?Answer:??? assignment——————————————————————————-9. What restriction does Java place on the types of values that can be compared using the relational operators?Answer:??? The relational operators can only be used to comapre automic data value——————————————————————————-10. How would you write a Boolean expression to test whether the value of the integer variable n was in the range 0 to 9, inclusive?Answer:??? 0 <= n && n <= 9——————————————————————————-11. Describe in English what the following conditional expression means:??? (x != 4) || (x != 17)For what values of x is this condition true?Answer:??? expression is always true for any x——————————————————————————-12. What does the term short-circuit evaluation mean?Answer:??? the evaluation stops as soon as the program can determine the result??? ——————————————————————————-13. Assuming that myFlag is declared as a Boolean variable, what is the problem with writing the following if statement?if (myFlag == true) . . .Answer:??? if (myFlag) …——————————————————————————-14. What are the four different formats of the if statement used in this text?Answer:(1) Single-line if statements??? if (condition) statement;(2) Multiline if statements??? if (condition) {??????? statements;??? }(3) The if-else statement ??? if (condition) {??????? statementT??? } else {??????? statementF??? }(4) Cascading if statements??? if (condition1) {??????? statement1??? } else if (condition2) {??????? statement2??? } else if (condition3) {??????? statement3??????? . . .??? } else {??????? statement_none??? }——————————————————————————-15. Describe in English the general operation of the switch statement.Answer:??? switch (e) {??????? case c1:??????????? statements1??????????? break;??????? case c2:??????????? statements2??????????? break;??????? . . . more case clauses . . .??????? default:??????????? statements_def??????????? break;??? }——————————————————————————-16. Suppose the body of a while loop contains a statement that, when executed, causes the condition for that while loop to become false. Does the loop terminate immediately at that point or does it complete the current cycle?Answer:??? complete the current cycle——————————————————————————-17. Why is it important for the DigitSum program in Figure 4-6 to specify that the integer is positive?Answer:??? to make sure that the program will exit normally——————————————————————————-18. What is the loop-and-a-half problem? What two strategies are presented in the text for solving it?Answer:??? a loop contians some operations thata must be perfromed before testingfor completion(1) read-until-sentinel? pattern??? while (true) {??????? prompt user and read in a value??????? if (value == sentinel) break;??????? rest of body??? }(2) value != sentinel??? prompt user and read in a value??? while (value != sentinel) {??????? process the data value??????? prompt user and read in a new value??? }——————————————————————————-19. What is the purpose of each of the three expressions that appear in the control line of a for statement?Answer:??? for (init; test; step) {??????? statements??? }??? ——————————————————————————-20. What for loop control line would you use in each of the following situations:a) Counting from 1 to 100.b) Counting by sevens starting at 0 until the number has more than two digits.c) Counting backward by twos from 100 to 0.Answer:a) Counting from 1 to 100.??? for (int i = 1; i <= 100; i++) {??????? …??? }b) Counting by sevens starting at 0 until the number has more than two digits.??? for ( int i = 0; i = 0; i–) {??????? …??? }——————————————————————————-21. Why is it best to avoid using a floating-point variable as the index variable in a for loop?Answer:??? because floating-point numbers are only approximations——————————————————————————-Programming exercises1. As a way to pass the time on long bus trips, young people growing up in the United

States have been known to sing the following rather repetitive song:99 bottles of beer on the wall.99 bottles of beer.You take one down, pass it around.98 bottles of beer on the wall.98 bottles of beer on the wall. . . .

Anyway, you get the idea. Write a Java program to generate the lyrics to this song.(Since you probably never actually finished singing it, you should decide how youwant the song to end.) In testing your program, it would make sense to use someconstant other than 99 as the initial number of bottles.

/* * File: BottlesOfBeer.java * ------------------------- * This program generates the lyrics to the 99 Bottles of Beer. */import acm.program.*;public class BottlesOfBeer extends ConsoleProgram {public void run() {int end = readInt("Please input an integer between 0 and " + TOTAL_BOTTLES_OF_BEER + ": ");while (end = TOTAL_BOTTLES_OF_BEER) {println(end + " isn't between 0 and " + TOTAL_BOTTLES_OF_BEER + "( x = "+TOTAL_BOTTLES_OF_BEER + ").");end = readInt("Please input an integer between 0 and " + TOTAL_BOTTLES_OF_BEER+ ": ");}int i = TOTAL_BOTTLES_OF_BEER;while (i != end) {if (i != 0 ){println(i + " bottles of beer on the wall, " + i + " bottles of beer.");println("Take one down and pass it around, " + --i + " bottles of beer on the wall.");} else {println("No more bottles of beer on the wall, no more bottles of beer." );println("Go to the store and buy some more, 99 bottles of beer on the wall.");}}}private static final int TOTAL_BOTTLES_OF_BEER = 99;}

2. While we’re on the subject of silly songs, another old standby is “This Old Man,” forwhich the first verse isThis old man, he played 1.He played knick-knack on my thumb.With a knick-knack, paddy-whack,Give your dog a bone.This old man came rolling home.Each subsequent verse is the same, except for the number and the rhyming word atthe end of the second line, which gets replaced as follows:2—shoe 5—hive 8—pate3—knee 6—sticks 9—spine4—door 7—up to heaven 10—shinWrite a program to display all 10 verses of this song.

/* * File: ThisOldMan.java * --------------------- * This program generates the silly songs named by "This Old Man". */import acm.program.*;public class ThisOldMan extends ConsoleProgram {private static final String array[] = {"thumb", "shoe", "knee", "door","hive", "sticks", "up to heaven", "pate", "spine", "shin"};private static final String  num_arr[] = {"one", "two", "trhee", "four","five", "six", "seven", "eight", "nine", "ten"};public void run() {for (int i = 0; i < 10; i++) {println("This old man, he played " + num_arr[i] + ".");println("He played knick-knack on my " + array[i] + ".");println("With a knick-knack, paddy-whack,");println("Give your dog a bone.");println("This old man came rolling home");println("");}}}

3. Write a program that reads in a positive integer N and then calculates and displaysthe sum of the first N odd integers. For example, if N is 4, your program shoulddisplay the value 16, which is 1 + 3 + 5 + 7.

/* * File: SumOfTheFirstNOddIntergers.java * ------------------------------------- * This program taht reads  in a positive intteger N and then calculates * and displays the sum of the first N odd intergers. For example, if N * is 4, your program should display the value 16, which is 1 + 3 + 5 +7. */import acm.program.*;public class SumOfTheFirstNOddIntergers extends ConsoleProgram {public void run () {int sum = 0;int N = readInt("Please Enter a positive integer N: ");while (N <= 0) {N = readInt("Please Enter a positive integer N: ");}for (int i = 0, odd = 1; i < N; i++, odd += 2 )sum += odd;println("the sum of the first " + N + " odd intergers is " + sum + ".");}}

4. Why is everything either at sixes or at sevens?— Gilbert and Sullivan, H.M.S. Pinafore, 1878Write a program that displays the integers between 1 and 100 that are divisible byeither 6 or 7.

/* * File: DisplayIntegersDividedBy6or7Between1And100.java * ----------------------------------------------------- * This program displays the integers between 1 and 100 that are  * divisible by either 6 or 7. */import acm.program.*;public class DisplayIntegersDividedBy6or7Between1And100 extends ConsoleProgram {public void run() {for (int i = 1; i <= 100; i++) {if ((i % 6 == 0) || (i % 7 == 0)) {println(i + " is divived by either 6 or 7.");}}}}

5. Repeat exercise 4, but this time have your program display only those numbers thatare divisible by 6 or 7 but not both.

DisplayIntegersDividedBy6Xor7Between1And100.java/* * File: DisplayIntegersDividedBy6Xor7Between1And100.java * ----------------------------------------------------- * This program displays the integers between 1 and 100 that are  * divisible by 6 or 7, but not both. */import acm.program.*;public class DisplayIntegersDividedBy6Xor7Between1And100 extends ConsoleProgram {public void run() {for (int i = 1; i <= 100; i++) {if ((i%6==0 && i%7 !=0) || (i % 6 != 0 && i % 7 == 0)) {println(i + " is divived by 6 or 7 but not both.");}}}}

6. Using the AddIntegerList program from Figure 4-5 as a model, write a programcalled AverageList that reads in a list of integers representing exam scores and thenprints out the average. Because some unfortunate student might actually get a scoreof 0, your program should use –1 as the sentinel to mark the end of the input.

AverageList.java/* * File: AverageList.java * ----------------------  * This program reads in a list of integers representing exam scores * and then prints out the average. Because some unfortunate student * might actually get a score of 0, the program should use -1 as the  * setinel to aark the end of the input. */import acm.program.*;public class AverageList extends ConsoleProgram {/* Specifies the value of the sentinel */private static final int SENTINEL = -1;/* Runs the program */public void run() {println("This program averages a list of integers.");println("Enter values, one per line, using " + SENTINEL);println("to signal the end of the list.");int total = 0;int cnt = 0;int value = readInt(" ? ");while (value != SENTINEL) {total += value;cnt++;value = readInt(" ? ");}if (cnt != 0)println("The average is " + total / (cnt * 1.0) + ".");elseprintln("The avaerage is 0.");}}

7. Rewrite the DigitSum program given in Figure 4-6 so that instead of adding thedigits in the number, it generates the number that has the same digits in the reverseorder, as illustrated by this sample run:

/* * File: ReverseDigits.java * ---------------------------------- * This program reverses the digits in an integer. */import acm.program.*;public class ReverseDigits extends ConsoleProgram {public void run() {println("This program reverses the digits in an integer.");int num = readInt("Enter a positive integer: ");while (num  0) {rev *= BASE;rev += num % 10;num /= 10;}println("The reversed num is: " + rev);}private static final int BASE = 10;}

8. Rewrite the Countdown program given in Figure 4-8 so that it uses a while loopinstead of a for loop.

/* * File: CountDownUsingWhile.java * -------------------- * This program counts backwards from the value START * to zero, as in the countdown preceding a rocket * launch. */import acm.program.*;public class CountDownUsingWhile extends ConsoleProgram {/* Specifies the value from which to start counting down */private static final int START = 10;/* Runs the program */public void run() {int t = START;while (t >= 0) {println("Liftoff!");t--;}}}

9. In mathematics, there is a famous sequence of numbers called the Fibonaccisequence after the thirteenth-century Italian mathematician Leonardo Fibonacci. Thefirst two terms in this sequence are 0 and 1, and every subsequent term is the sum ofthe preceding two. Thus the first several numbers in the Fibonacci sequence are asfollows:F0 = 0F1 = 1F2 = 1 (0 + 1)F3 = 2 (1 + 1)F4 = 3 (1 + 2)F5 = 5 (2 + 3)F6 = 8 (3 + 5)Write a program to display the values in this sequence from F0 through F15.

/* * File: FibonacciSequencesFromF0ThroughF15.java * --------------------------------------------- * This program displays the value of Fibonacci sequence from F0 * through F15. */import acm.program.*;public class FibonacciSequencesFromF0ThroughF15 extends ConsoleProgram {public void run() {int [] array = new int[16];array[0] = 0;array[1] = 1;for (int i = 2; i <= 15; i++)array[i] = array[i-1] + array[i-2];for (int i = 0; i <= 15; i++) {println("F" + i + " = " + array[i]);}}}

10. Modify the program in the preceding exercise so that instead of specifying the indexof the final term, the program displays those terms in the Fibonacci sequence that areless than 10,000.

/* * File: FibonacciSeqenceLessThan1000.java * This program dispplays those terms in the Fibonacci * sequence that less than 1000 */import acm.program.*;import java.math.*;public class FibonacciSeqenceLessThan1000 extends ConsoleProgram {private static final  int LAST_INDEX = 1000;public void run() {BigInteger[] array =  new BigInteger[LAST_INDEX];array[0] = new BigInteger("0");array[1] = new BigInteger("1");for (int i = 2; i < LAST_INDEX; i++) {array[i] = new BigInteger(array[i - 2].add(array[i - 1]).toString());}for (int i = 0; i < LAST_INDEX; i++) {println("F" + i + " = " +  array[i]);}}}

11. Write a GraphicsProgram that uses two nested for loops to create the followingcheckerboard diagram in the upper left corner of the canvas:

The individual squares are all instances of the class GRect introduced in Chapter 2.Alternate squares both horizontally and vertically contain a somewhat smaller GOvalto create the checkerboard effect.

/* * File: Checkerboard.java * ----------------------- * This program draws a checkerboard. */import acm.graphics.*;import acm.program.*;/* * This class draws a checkerboard on the graphics window. * The size of the checkerboard is specified by the * constants NROWS and NCOLUMNS, and the checkboard fills * the vertical space available. */public class Checkerboard extends GraphicsProgram {/* Number of rows */private static final int NROWS = 8;/* Number of columns */private static final int NCOLUMNS = 8;/* Runs the program */public void run() {int sqSize = getHeight() / NROWS;for (int i = 0; i < NROWS; i++) {for (int j = 0; j < NCOLUMNS; j++) {int x = j * sqSize;int y = i * sqSize;GRect sq = new GRect(x, y, sqSize, sqSize);if ((i + j)% 2 != 0) add(new GOval(x + 4, y + 4, sqSize-8 , sqSize-8));add(sq);}}}}

12. Using much the same strategy as you did in the preceding exercise, write aGraphicsProgram that creates a simple calendar diagram similar to the one shown inthe following diagram:

Your program should use the following named constants to control the format of thecalendar display:

/* The number of days in the month */ private static final int DAYS_IN_MONTH = 31; /* The day of the week on which the month starts */ /* (Sunday = 0, Monday = 1, Tuesday = 2, and so on) */ private static final int DAY_MONTH_STARTS = 5; /* The width in pixels of a day on the calendar */ private static final int DAY_WIDTH = 40; /* The height in pixels of a day on the calendar */ private static final int DAY_HEIGHT = 30;

Your display should generate exactly the number of rows necessary to display thedays of the month. Here, in a 31-day month that begins on a Friday, the calendarneeds six rows; if you were generating a calendar for a non-leap-year February thatbegan on a Sunday, the calendar would require only four rows.

/* * File: Calendar.java * ------------------- * This program displays a simple calendar diagram. */import acm.graphics.*;import acm.program.*;public class Calendar extends GraphicsProgram {/* The number of days in the month */private static final int DAYS_IN_MONTH= 31;/* The day of the week on which the month starts *//* (Sunday = 0, Monday = 1, Tuesday = 2, and so on) */private static final int DAY_MONTH_STARTS = 5;/* the width in pixels of a day on the calendar */private static final int  DAY_WIDTH = 40;/* the number of rows */private static final int NROWS = (DAYS_IN_MONTH + DAY_MONTH_STARTS) / 7 + ((DAYS_IN_MONTH +DAY_MONTH_STARTS) % 7 == 0 ? 0 : 1);private static final int NCOLUMNS = 7;public void run() {for (int i = 0; i < NROWS; i++) {for (int j = 0; j = DAY_MONTH_STARTS && (i * 7 + j - DAY_MONTH_STARTS) < DAYS_IN_MONTH)add(new GLabel((i*7+j - DAY_MONTH_STARTS + 1) + ""), x + 4, y + 14);add(sq);}}}}

我知道有一种爱情,叫做与你白头,有一种幸福,叫做和你相伴。

stanford编程方法——习题答案(the art and science of java)—

相关文章:

你感兴趣的文章:

标签云: