CSIS 10A Practice Final Exam SOLUTIONS

advertisement
CSIS 10A
Practice Final Exam SOLUTIONS
Practice Questions
1) Define each of the following terms, as they relate to this course:

machine language -- The low level instructions that only the computer's CPU can understand. The Java
compiler translates your programs into Bytecode, which the java virtual machine runs by further
translating them to machine language.

algorithm -- a set of instructions for accomplishing a task.

formal parameter -- the variable declared inside the parentheses of a method definition. Used to receive
the actual parameter or argument of a method call. For example, status in the method below is a formal
parameter:
public void setStatus(int status){
currentState = status;
}

actual parameter -- sometimes called "argument". The variable or value we provide in a method call,
which is "passed" to the formal parameter when we jump into a method. For example, both Pad.FROG
and 2 are actual parameters.
lilyPad.setStatus( Pad.FROG);
lilyPad.setStatus(2);

array -- a data type representing a collection of homogeneous (same data type) values arranged by
location.

garbage collection -- the removal of objects from memory that takes place when they are no longer
referred to by any variables.
2) Write a Java code segment that will compute the sum of the reciprocals of the first 10000 positive integers.
Use a for statement. The sum you should compute is:
1/1 + 1/2 + 1/3 + 1/4 + . . . + 1/10000
answer:
int sum = 0;
for (int k = 1; k<=10000; k++)
sum = sum + 1.0/k;
3) Here is a class for representing books owned by the library. Complete the three methods indicated according
to the javadoc comments provided. You don't have to write the javadocs
Constructor Summary
Book(String author, String title)
creates a new Book object with a given title, and author. Initially, a book is not checked out.
Method Summary
void checkout()
checkout - checks a book out by changing checkedOut to true;
String getAuthor()
returns the author of the book
boolean isCheckedOut()
returns the checkOut status of a book, true if checkedOut
public class Book {
private String title, author; // title and author
private boolean checkedOut; // whether the book is checked out
// constructor
public Book(String author, String title){
this.title = title;
this.author = author;
checkedOut = false;
}
// getAuthor
public String getAuthor(){
return author;
}
// checkOut
public void checkout(){
checkedOut = true;
}
// isCheckedOut
public boolean isCheckedOut(){
return checkedOut;
}
}
4) Draw a map of memory after the following statements execute:
Book b = new Book("Gladwell","Blink");
Book c = new Book("Ballard","Crash");
Book d = b;
d.checkOut();
5) Suppose that a library owns 27,532 books and that information about all the books has already been stored
in an array
Book[] books = new Book[27532];
Write a code segment that will (do both in the same loop)
a) count the number of books by "Shakespeare" owned by the library.
b) count the number of books that are currently checked out
int numShake = 0, numCheckOut = 0;
for (int k = 0; k< books.length; k++){
if (books[k].getAuthor().equals("Shakespeare"))
numShake++;
if (books[k].isCheckedOut())
numCheckOut++;
}
System.out.println("Number of Shakespeare books = " + numShake);
System.out.println("Number of books checked out = " + numCheckOut);
6) Complete the next 4 lines of the trace table for the following code:
sum
0
10
11
12
13
int sum = 0, m = 10;
for (int k=0; k<5; k++){
sum = m - k;
m = m + 2;
}
m
10
12
14
16
18
k
0
1
2
3
4
k<5
T
T
T
T
T
7) What will be displayed on the terminal by the following nested loop?
DISPLAY
for (int k = 3; k >= 1; k -- ){
for (int m = k; m >=0 ; m --){
System.out.print( m );
}
System.out.println();
}
3210
210
10
8) Suppose we have an array of int declared with the following values:
int [] data = {7, 5, 1, 2, 4, 5, 3, 6};
and, we execute the statements:
for (int k = 0; k<7 ; k++) {
data[k+1] = data[k];
}
Please draw the data array after the statements have completed:
0
7
1
7
2
7
3
7
4
7
5
7
6
7
7
7
9) Suppose that a bird watching club has collected data on the number of sightings of 20 different bird species
in each of 100 different cities, for the year 1995. The data has already been stored in an array, sightings,
which was created by the statement
int[][] sightings = new int[20][100];
The value stored in sightings[i][j] is the number of times that a bird belonging to species number i was
sighted in city number j.
a) Write a code segment that will count the total number of sightings of species number 17 in all 100 cities.
int num17= 0;
// number of species 17 sightings
for (int k=0; k<100; k++)
// loop over all cities
num17 = num17 + sightings[17][k];
// add the count of city k to num17
b)
Write a code segment that will compute and print the total number of bird sightings for city number 0,
then for city number 1, then for city number 2, and so forth, up to city number 99. You can print the
answers to standard output using System.out.println().
for (int j=0; i<100; j++){
// loop over all city numbers
int num = 0;
// number of bird sightings in a city
for (int i = 0; i<20;i++)
// loop over all bird species
num = num + sightings[i][j];
System.out.println("number of sightings for city " + i + " = " + num);
}
c)
Let's say that a species is endangered if it has been sighted in only 4 cities or fewer. (Species number i
was sighted in city number j if sightings[i][j] is greater than zero.) Write a code segment that will
print a list of all the species that are endangered. You can print the answers to standard output using
System.out.println().
for (int i=0; i<20; i++){
// loop over all bird species
int num = 0;
// number of cities where bird sighted
for (int j = 0; j<100;j++){
// loop over all cities
if ( sightings[i][j] > 0 ) // if we see bird i in city j …
num = num + 1;
// add 1
}
// after loop
if ( num <=4)
System.out.println("species " + i + " is endangered ");
}
10) a) Complete the following little applet. When it starts up, the applet should display the message "Hello World."
When the user clicks on the applet, the message should change to "Goodbye World." If the user clicks again, it should
change back to "Hello World," and so forth. Use the paint() method to display the strings. You will need to add an
instance variable to keep track of the message that is currently displayed.
class Greetings extends Applet implements MouseListener {
int messageNumber = 0;
public void init() { // (No need to change this.)
addMouseListener(this);
}
public void paint(Graphics g) {
if (messageNumber == 0)
g.drawString( 100, 100, "Hello World!");
else
g.drawString( 100, 100, "Goodbye World!");
};
public void mousePressed(MouseEvent evt) {
if (messageNumber == 0 )
messageNumber = 1;
else
messageNumber = 0;
// switch messages
repaint();
};
public void mouseReleased(MouseEvent evt) { } // Junk required by
public void mouseClicked(MouseEvent evt) { }
//
public void mouseEntered(MouseEvent evt) { }
//
public void mouseExited(MouseEvent evt) { }
} // end class Greetings
the MouseListener
interface.
Download