CSE142 Midterm
Winter 2009
Name of Student_______________________________________________________________
Section (e.g., AA)___________________ TA_____________________________________
This is an open-book/open-note exam. Space is provided for your answers. Use
the backs of pages if necessary. The exam is divided into eight questions with
the following points:
# Problem Area Points Score
---------------------------------------------
1 Expressions 10 _____
2 Parameter Mystery 12 _____
3 If/Else Simulation 12 _____
4 While Loop Simulation 12 _____
5 Assertions 15 _____
6 Programming 15 _____
7 Programming 15 _____
8 Programming 9 _____
----------------------------
Total 100 _____
The exam is not graded on style and you do not need to include comments.
You are allowed to abbreviate "Always", "Never," and "Sometimes" as "A", "N",
and "S" for the assertions question, but you should otherwise NOT use any
abbreviations on the exam.
You are NOT to use any electronic devices while taking the test, including
calculators. Anyone caught using an electronic device will receive a 10 point
penalty.
Do not begin work on this exam until instructed to do so. Any student who
starts early or who continues to work after time is called will receive a 10
point penalty.
If you finish the exam early, please hand your exam to the instructor and exit
quietly.
1. Expressions, 10 points. For each expression in the left-hand column,
indicate its value in the right-hand column. Be sure to list a constant of
appropriate type (e.g., 7.0 rather than 7 for a double, Strings in quotes).
Expression Value
3 * (5 - 2) - 3 - 2 * 2 __________
4 * 7 % 8 + 132 % 10 + 3 % 4 __________
27 / 5 / 2 + 3.4 * 2 - 1.1 * 2 __________
9 + 9 + "9 + 9" + 9 + 9 __________
19 / 2 / 2.0 + 2.5 * 6 / 2 + 0.5 * 4 __________
2. Parameter Mystery, 12 points. Consider the following program.
public class Mystery {
public static void main(String[] args) {
String she = "it";
String it = "her";
String her = "you";
String you = "she";
saying(you, it, you);
saying(it, her, she);
saying(she, "you", her);
saying(it, "him", "fred");
}
public static void saying(String it, String her, String she) {
System.out.println(she + " can't take " + it + " with " + her);
}
}
List below the output produced by this program.
3. If/Else Simulation, 12 points. Consider the following method.
public static void ifElseMystery(int a, int b) {
int c = 2;
if (a + c < b) {
c = c + 8;
} else {
b = b + 10;
}
if (a + c < b) {
c = c + 8;
} else {
b = b + 10;
}
System.out.println(b + " " + c);
}
For each call below, indicate what output is produced.
Method Call Output Produced
ifElseMystery(4, 15); _______________
ifElseMystery(7, 17); _______________
ifElseMystery(12, 5); _______________
ifElseMystery(16, 8); _______________
4. While Loop Simulation, 12 points. Consider the following method:
public static void mystery(int n) {
int x = 1;
int y = 1;
while (n > 2) {
x = x + y;
y = x - y;
n--;
}
System.out.println(x);
}
For each call below, indicate what output is produced.
Method Call Output Produced
mystery(1); _______________
mystery(3); _______________
mystery(5); _______________
mystery(7); _______________
5. Assertions, 15 points. You will identify various assertions as being either
always true, never true or sometimes true/sometimes false at various points
in program execution. The comments in the method below indicate the points
of interest.
public static int numOddDigits(int n) {
int x = 0;
// Point A
while (n != 0) {
// Point B
if (n % 2 == 1) {
x++;
// Point C
}
n = n / 10;
// Point D
}
// Point E
return x;
}
Fill in the table below with the words ALWAYS, NEVER, or SOMETIMES (you may
abbreviate them as A, N, or S).
n == 0 n % 2 == 1 x == 0
+---------------------+---------------------+---------------------+
Point A | | | |
+---------------------+---------------------+---------------------+
Point B | | | |
+---------------------+---------------------+---------------------+
Point C | | | |
+---------------------+---------------------+---------------------+
Point D | | | |
+---------------------+---------------------+---------------------+
Point E | | | |
+---------------------+---------------------+---------------------+
6. Programming, 15 points. Write a static method called quadrant that takes as
parameters a pair of double values representing an (x, y) point and that
returns the quadrant number for that point. Recall that quadrants are
numbered as integers from 1 to 4 with the upper-right quadrant numbered 1
and the subsequent quadrants numbered in a counter-clockwise fashion:
^ y-axis
|
|
|
Quadrant 2 | Quadrant 1
|
<--------------------+--------------------> x-axis
|
Quadrant 3 | Quadrant 4
|
|
|
V
Notice that the quadrant is determined by whether the x and y coordinates
are positive or negative numbers. If a point falls on the x-axis or the
y-axis, then the method should return 0. Below are sample calls on the
method.
Method Value Method Value
Call Returned Call Returned
------------------------------- -------------------------------
quadrant(12.4, 17.8) 1 quadrant(0.0, 0.0) 0
quadrant(-2.3, 3.5) 2 quadrant(12.5, 0.0) 0
quadrant(-15.2, -3.1) 3 quadrant(0.0, 2.3) 0
quadrant(4.5, -4.5) 4
Write your solution to method quadrant below.
7. Programming, 15 points. Write a static method called printTwoDigit that
takes a Random object and an integer n as parameters and that prints a
series of n randomly generated two-digit numbers. The method should use the
Random object to select numbers in the range of 10 to 99 inclusive where
each number is equally likely to be chosen. The method should indicate
whether the number 42 was selected. For example, given the following lines
of code:
Random r = new Random();
printTwoDigit(r, 4);
You would expect output like the following:
next = 52
next = 10
next = 96
next = 86
no 42
As the final line of output above indicates, that particular sequence did
not include the number 42. Suppose that we then call the method as follows:
printTwoDigit(r, 6);
We might get output like the following where 42 is included in the sequence:
next = 83
next = 29
next = 42
next = 22
next = 36
next = 73
We saw a 42
You may assume the integer value passed to your method is greater than or
equal to 0. You are to exactly reproduce the format of these logs. Write
your solution to printTwoDigit below.
8. Programming, 9 points. Write a static method called digitsInARow that takes
an integer n as a parameter and that returns the highest number of digits
that appear in a row in the base-10 representation of n. For many numbers
the answer will be 1 because they don't have adjacent digits that match.
But for a number like 3555585, the answer is 4 because there are four
occurrences of the digit 5 that appear in a row. Below are sample calls on
the method.
Method Value Method Value
Call Returned Call Returned
------------------------------- -------------------------------
digitsInARow(0) 1 digitsInARow(8823) 2
digitsInARow(18) 1 digitsInARow(777) 3
digitsInARow(394) 1 digitsInARow(82888) 3
digitsInARow(99) 2 digitsInARow(7111171) 4
digitsInARow(8229) 2 digitsInARow(233333888) 5
You are NOT allowed to use a String to solve this problem. You may assume
that the value passed to the method is greater than or equal to 0.
Write your solution to method digitsInARow below.
Stuart Reges
Last modified: Fri Sep 16 15:35:56 PDT 2011