Beispielaufgaben zur Vorbereitung auf die Zwischenklausur

Werbung
Prof. Heike Wehrheim
und Mitarbeiter
Paderborn, den 5.11.2008
Beispielaufgaben zur Vorbereitung
auf die Zwischenklausur
Veranstaltung
Grundlagen der Programmierung 1
WS 2008/09
AUFGABE 1:
a) Sind die folgenden Zuweisungen korrekt und typverträglich oder führen sie zu einem
Compiler-Fehler? Sie müssen ihre Antwort nicht begründen.
i) int i = 17.0
ii) double d = 47.11F
iii) long v[i] = 47;
iv) boolean b = (5.0 * 5.0 == 25.0);
b) Geben Sie jeweils an, welchen Typ die folgenden Ausdrücke haben. Sie müssen ihre
Antwort nicht begründen.
i) (short) (byte) 17
ii) 0x1a2b3c4d
iii) 3141592E-6
c) Betrachten Sie das folgende Java-Quelltextfragment.
int a = 42;
int b = 17;
if ( a > 50)
System.out.println("Axel");
if ( b > 10 )
if ( a+b < 100 )
if ( a > b )
System.out.println("Britta");
else
System.out.println("Carsten");
else
System.out.println("Doris");
System.out.println("Erik");
Was gibt das obige Programmfragment auf der Standardausgabe aus?
AUFGABE 2:
a) Im folgenden Programmfragment soll vor dem Ziehen einer Wurzel geprüft werden, ob
die Zahl zwischen 0 und 400 liegt. Ist sie kleiner als 0, soll sie auf 0 gesetzt werden; ist
sie größer als 400, soll sie auf 400 gesetzt werden. Welche der Lösungen sind richtig,
welche falsch?
i) if ( zahl < 0 ) zahl = 0;
if ( zahl > 400 ) zahl = 400;
ii) if ( zahl < 0 ) zahl = 0;
else
if ( zahl > 400 ) zahl = 400;
iii) if ( zahl >= 0 )
if ( zahl > 400 ) zahl = 400;
else zahl = 0;
iv) if ( zahl >= 0 )
if ( zahl <= 400 )
else zahl = 400;
else zahl = 0;
b) Gegeben sei das folgende Java Programm. Welchen Output generiert das Programm?
public class Rek{
public static void main( String[] args ){
rek( 4 );
}
public static void rek( int z ){
z--;
System.out.println( z );
if ( z!=0 ) rek( z );
System.out.println( z );
}
}
AUFGABE 3:
Schreiben Sie eine Methode boolean diffTest( int a, int b, int c ), welche testet, ob
für drei ganze, positive Zahlen a, b und c gilt, dass eine der drei Zahlen die Differenz der
beiden anderen ist. Ist dies der Fall, soll die Methode den boolean-Wert true zurückgeben,
false sonst. Die folgende Tabelle zeigt einige Beispielergebnisse:
t1 t2 t3 diffTest( a, b, c )
5
7
9
false
15 25 40
true
15 15 15
false
2
3
1
true
AUFGABE 4:
Gegeben sei folgende Methode:
static void iterationWhile ( int i ) {
int j = 0;
while ( j < i ) {
System.out.print ( j + " " );
j++;
}
System.out.println();
}
Ersetzen Sie die while-Schleife durch eine for-Schleife! Das Verhalten des Programmes darf
sich dabei nicht ändern!
AUFGABE 5:
Vervollständigen Sie das unten stehende Programm, so dass es zwei boolsche Arrays a
und b mit der Länge 10 mit Zufallswerten auffüllt. Schreiben Sie auch die Methode int
sindGleich( boolean a[], boolean b[] ). Diese berechnet die Anzahl der Positionen,
an denen a und b denselben Wert haben. Z. B. wäre sindGleich bei
a: true false false false true true false true true false
b: false false false true true false false true true true
gleich 6.
Hinweis: Klasse Math aus Package java.lang:
Method Summary
public static void main ( String [] args ){
//Erzeugen Sie die boolschen Arrays a und b und füllen
//Sie diese mit Zufallswerten. Rufen sie anschließend
//die Methode sindGleich mit den Arrays a und b auf!
}
static int sindGleich( boolean a[], boolean b[] ){
//Ergänzen Sie hier den Rumpf der Methode sindGleich(...)!
}
AUFGABE 6:
Schreiben Sie eine Java-Methode boolean alleVerschieden( int[] a ), die prüft, ob die
Zahlen in einem als Parameter übergebenen int-Array alle paarweise voneinander verschieden sind. Die Methode gibt einen boolean-Wert zurück: true, wenn alle Zahlen paarweise
voneinander verschieden sind; false sonst.
AUFGABE 7:
Eine Methode teiler berechne für nichtnegative Zahlen n und Primzahlen p, wie oft sich n
ohne Rest durch p teilen lässt. Es ergeben sich beispielsweise die folgenden Werte:
teiler(18,3) = 2 (18:3=6 und 6:3=2)
teiler(27,5) = 0 (27:5 ergibt keine ganze Zahl)
teiler(16,2) = 4 (16:2=8, 8:2=4, 4:2=2, 2:2=1)
Schreiben Sie eine rekursive Methode int teilerRekursiv( int n, int p ) und eine
iterative Methode int teilerIterativ( int n, int p ), welche die obige Vorschrift berechnen. Sie können davon ausgehen, dass der Parameter p der Methode eine Primzahl ist.
AUFGABE 8:
Schreiben Sie eine rekursive Methode int exponentRek( int x, int k ) und eine iterative Methode int exponentIter( int x, int k ), die den Wert von xk berechnet. Sie
können davon ausgehen, dass k ≥ 0 ist.
AUFGABE 9:
Schreiben Sie eine Funktion celsiusToFahrenheit, die Celsiuswerte in Fahrenheitwerte umrechnet. Die Umrechnung soll nach dem Schema
f ahrenheit = ((celsius ∗ 9)/5) + 32
erfolgen. Fahrenheit und Celsius werden dabei als Gleitkommazahlen angegeben.
Schreiben Sie ferner eine main-Methode, welche eine Umrechnungstabelle von Celsius nach
Fahrenheit im Bereich von -10 bis +30 ◦ C in Schritten von 2 ◦ C ausgibt, verwenden Sie dazu
die vorher erstellte Funktion celsiusToFahrenheit.
Benutzen Sie den folgenden Programmrahmen und ergänzen Sie die Funktionsdefinition:
public class Fahrenheit {
public static void main(String[] args) {
//hier Quellcode einfuegen
}
public static __________ celsiusToFahrenheit(______________) {
//hier Quellcode einfuegen
}
}
Herunterladen