2D1339 Programkonstruktion för F1, ht 2004 Kontrollskrivning 1 Onsdag 24/11 2004 kl 11.15 12.00 Endast ett svar är rätt på varje fråga! Om mer än ett svar givits blir det noll poäng på frågan. Alla skriftliga hjälpmedel är tillåtna 10 rätt av 15 möjliga ger säkert godkänt (gränsen kan bli lägre men ej högre). Skriv alla svar på svarsblanketten! 1. Vilken av följande datatyper bör användas för variabler som skall innehålla människors längder uttryckta i meter? A) char B) double C) int D) long 2. Vad blir utskriften från följande programavsnitt om x ges värdet 1, dvs första satsen är int x = 1;? int x =...; if (x > 10) { System.out.print("ETT "); else if (x > 0) { System.out.print("TU "); System.out.print("TRE "); System.out.println(); A) TU TRE B) ETT TU C) ETT TU TRE D) TRE 3. Vad blir utskriften från programavsnittet i föregående uppgift om x ges värdet 0 från början, dvs första satsen är int x = 0;? A) Det blir ingen utskrift B) ETT TU C) TRE D) TU TRE 4. Vilket värde har variabeln y efter nedanstående kodavsnitt är exekverat? int y = 1; int n = 5; while (n > 0) { y = y*2; n = n-1; A) y=1 B) y=2 C) y=32 D) y=64 1
5. Hur många gånger anropas metoden doit i kodavsnittet nedan? for (int k = 1; k<10; k=k+3) { doit(); A) 0 B) 2 C) 3 D) 9 6. Följande kodavsnitt exekveras i en main-metod. Utskriften består av asterisker men vilket mönster bildar asteriskerna? int[] b = {7,1,1,4,1,1,7; for (int i=0; i<b.length; i++) { for (int j=1; j<=b[i]; j++) System.out.print("*"); System.out.println(); A) En regelbunden 7-hörning B) En rektangel C) Bokstaven F D) Bokstaven E 7. Vilket påstående om programmet nedan är riktigt? class Funk { public static void main (String[] x) { System.out.println(funk(funk(funk(0)))); static int funk (int n) { return 3*n + 1; A) Raden med System.out.println(...) genererar felmeddelande från kompilatorn. B) Programmet går att kompilera och köra men ger ingen utskrift C) Programmet går att kompilera och köra och ger utskriften 1 D) Programmet går att kompilera och köra och ger utskriften 13 8. Vilket av följande påståenden om metoder i Java är sant? A) I en metoddeklaration står det alltid void eller int före metodnamnet. B) Alla metoder måste innehålla en return -sats C) En metod kan deklareras (definieras) inuti en annan metod. D) En metod måste deklareras (definieras) inuti en klass. 2
9. Vilket av följande programavsnitt hittar det minsta värdet i den indicerade variabeln (vektorn) v samt dess index i vektorn utan att ändra något i v?efter programavsnittet är exekverat skall det minsta värdet ligga i variabeln min och indexet till minsta värdet ska finnas i variabeln k. A) for (int i=1; i< v.length; i++) { int min = v[0]; int k = 0; if (v[i] < min) { else { v[i] = min; B) int min = v[0]; int k = 0; for (int i=1; i< v.length; i++) { if (v[i] < min) { k = i; else { min = v[0]; k = 0; C) int min = v[0]; int k = 0; for (int i=1; i< v.length; i++) { if (v[i] < min) { k = i; D) int min = v[0]; int k = 0; for (int i=1; i< v.length; i++) { if (v < min) { else { k = i; 3
10. Metoden fa skall kunna anropas så som följande två exempel visar. Vilken av metoddefinitionerna nedan stämmer med anropsexemplen? Ex1: double koktemp = fa(100); Ex2: System.out.println(fa(39.9) + " grader Fahrenheit är hög feber för en vuxen"); A) void fa (double x) { return 9*x/5 + 32; B) double fa (double c) { return 9*c/5 + 32; C) void fa (double c, double f) { f = 9*c/5 + 32 D) double fa (double c) { koktemp = 9*c/5 + 32 11. Metoden calc har följande metodhuvud: void calc (double x, double y, int n) I vilket av alternativen nedan anropas metoden felaktigt A) double y = calc (0.3, 0.4, 5) B) calc (0.1, 0.5, 10); C) calc (Math.sin(0.78), 3, (int) Math.PI) D) double z = Math.sin(0.78); double t = 3; int u = (int)math.pi; calc (z, t, u); 4
12. Följande programavsnitt beräknar och skriver ut en rad med tal. Vilken? int m=6; int t = m, tal = 1; System.out.print(tal + " "); for (int n=1; n<=m; n++) { tal = tal*t/n; System.out.print(tal + " "); t = t-1; System.out.println(); A) 1 6 15 20 15 6 1 B) 1 6 30 120 360 720 720 C)1111111 D)1621000 13. I en Applet skall ett antal koncentriska (med samma mittpunkt) cirklar med varierande radie ritas. Metoden drawoval i klassen Graphics skall användas. I appleten deklareras instansvariablerna radie som innehåller alla radierna samt x0 och y0 som är mittpunkt för alla cirklarna. Endast en av paintmetoderna nedan ritar de begärda cirklarna. Vilken? int[] radie = {10, 20, 50, 80, 95; int x0 = 150, y0 = 150; A) public void paint (Graphics g) { for (int i = 0; i< radie.length; i++) { int r = radie[i]; int xco = x0-r; int yco = y0-r; drawoval(g, xco, yco, 2*r, 2*r); B) public void paint (Graphics g) { for (int i = 0; i< radie.length; i++) drawoval(g, x0-radie[i], y0-radie[i], radie[i], radie[i]); C) public void paint (Graphics g) { for (int i = 0; i< radie.length; i++) { int r = radie[i]; g.drawoval(x0-r, y0-r, 2*r, 2*r); D) public void paint (Graphics g) { for (int i = 0; i< radie.length; i++) g.drawoval(2*radie[i], 2*radie[i], x0, y0); 5
14. Vilket av följande påståenden om Java-metoders parametrar är sant? Aktuell parameter är samma sak som anropsparameter. A) Varje metod måste ha minst en parameter. B) En formell parameter till en metod kan vara ett uttryck. C) En aktuell parameter till en metod kan vara ett uttryck. D) Om en metod har en formell parameter som heter x så måste motsvarande aktuella parameter också heta x. 15. Appleten nedan är tänkt att rita en tjusig stjärnhimmel som består av en svart bakgrund med små vita cirklar i slumpmässiga positioner och storlekar. Programmet går att kompilera utan fel men appletfönstret blir enfärgat, utan små stjärnor. Vad är det för fel? import java.awt.*; import java.applet.*; public class Stars extends Applet { int N = 700; public void paint (Graphics myg) { myg.setcolor(color.black); myg.fillrect(0,0,600,600); myg.setcolor(color.white); for (int i=0; i<n; i++) { int xpos = (int) Math.random()*600; int ypos = (int) Math.random()*600; int diam = (int) Math.random()*5; myg.filloval(xpos, ypos, diam, diam); A) Graphics-parametern till paintmetoden måste heta g. Med namnet myg blir det en helt annat paint-metod som inte kan anropas av Java-systemet. B) Färgen måste sättas till Color.white direkt före varje anrop av ritmetoden filloval annars gäller standardfärgen svart och vi får svarta prickar på svart bakgrund. Det räcker inte att göra myg.setcolor(color.white) före for-slingan. C) Eftersom alla ritmetoder i klassen Graphics, t.ex. filloval skall ha koordinater angivna i meter kommer stjärnorna att ritas långt utanför det synliga fönstret, koordinatvärdena kan ju vara upp till 599 meter. D) Alla värden på xpos, ypos och diam blir 0 inuti for-satsen p.g.a att uttrycket (int) Math.random() är 0. Ovaler med diameter 0 (i position 0,0) syns inte. 6