2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det riktiga provet tar 45 minuter (en lektionstimme) och det är tillåtet med skriftliga hjälpmedel, dvs böcker, anteckningar m.m. Tänk på att om man måste leta i sitt material efter alla svar så hinner man inte med så många frågor! 1. Vilket värde har variabeln x efter exekvering av följande satser? int x = 5; x = x*x; Svar:... (1p) 2. Vilken typ ska variabeln svar ha för att if-satsen skall gå att kompilera utan fel? if (svar == 'J') : a) boolean b) char c) String Svar:... (1p) 3. Skillnaden mellan typerna int och long är att a) I variabler av typ long kan man lagra tal med decimaler (flyttal), i int-variabler kan man bara lagra heltal b) I long kan man lagra både heltal och flyttal och det kan man inte i int c) I long kan man lagra större heltal än i int d) Inget av svaren a) b) eller c) är rätt Svar:... (1p) 4. Satsen String test = "1234" + "2121"; är a) inte tillåten då man inte kan addera uttryck av typ String b) tillåten och gör att test får värdet "3355" c) tillåten och gör att test får värdet "12342121" Svar:... (1p) 1
5. Vad händer om man stavar fel i ett Javaprogram och skriver doble i stället för double vid deklaration av en flyttalsvarabel? doble yta = 0; a) Det går bra eftersom doble är väldigt likt double. b) Det går att kompilera och köra programmet så länge man inte använder variabeln yta. c) Programmet går att kompilera men inte att exekvera (köra) d) Programmet går inte att kompilera, och därmed inte att köra. Svar:... (1p) 6. Studera följande kodavsnitt och ange vilket av påståendena nedanför som är korrekt. int x = 0; while (x < 10) x++; System.out.println(x); a) 10 olika värden på x kommer att skrivas ut b) 10 likadana värden på x kommer att skrivas ut c) Ett värde på x kommer att skrivas ut d) Inga värden på x kommer att skrivas ut e) Koden kommer att resultera i en oändlig repetition och programmet måste avbrytas med Ctrl-C Svar:... (2p) 7. Antag att variabeln n ikodavsnitten nedan är deklarerad och har ett värde >0, t.ex. 5. Vilket av följande kodavsnitt gör att ett korrekt värde på n!, dvs 1Λ2Λ3Λ:::Λn beräknas och läggs i variabeln f? a) int f = 0; for (int k=1; k<=n; k++) f = f*k; b) int f = 1; for (int k=1; k<=n; k++) f = f*k; c) int f = 1; for (int k=1; k==n;) f = f*k; d) int f = 1; for (int k=1; k<n; k++) f = f*k; 2
Svar:... (2p) 3
8. Ett uttryck i Java av typen yyy.xxx() måste vara a) en deklaration b) en uppmaning att klassen xxx skall ärva från klassen yyy c) ett metodanrop d) en indentering Svar:... (1p) 9. Vilka värden har variablerna x och y efter nedanstående kodavsnitt? int x = 0, y = 0; if (x > 0) else x = 1; y = 1; x = 1; x = -1; y = -1; a) x=0, y=0 b) x=1, y=-1 c) x=-1, y=1 d) x=-1, y=-1 Svar:... (2p) 10. Vilken/vilka av följande sorters variabler och parametrar kan vara möjliga att använda inuti en metod? Obs! Mer än ett svar kan vara rätt här! a) klassvariabler b) instansvariabler c) lokala variabler d) formella parametrar Svar:... (2p) 11. Metoden kub deklareras int kub(int x) return x*x*x; I vilken/vilka av satserna nedan anropas metoden korrekt? (Alla saterna finns i metoder i samma klass som kub är definierad) Obs! Flera svar kan vara rätt här. a) int y = kub(5); //för att få 5 3 b) kub(7, 11); // för att få både 7 3 och 11 3 c) int z = kub(kub(4)); //för att få (4 3 ) 3 d) int x = 13; kub(); // för att få 13 3 e) System.out.println("Värdet av kuben är " + kub); Svar:... (2p) 4
12. Metoden Math.sin som beräknar värdet av sinusfunktionen är en a) Klassmetod b) Instansmetod c) Callback-metod Svar:... (1p) Klassen X deklareras så här: class X public static void y ()... public void z ()... private void w ()... // fler metoder I en main-metod som inte ligger i klassen X finns satsen X minx = new X(); 13. Hur ser ett korrekt anrop av metoden y från denna main-metod ut? a) y() b) X.y() c) minx.y() d) Det går ej att anropa y därifrån Svar:... (1p) 14. Hur ser ett korrekt anrop av metoden z från denna main-metod ut? a) z() b) X.z() c) minx.z() d) Det går ej att anropa z därifrån Svar:... (1p) 15. Hur ser ett korrekt anrop av metoden w från denna main-metod ut? a) w() b) X.w() c) minx.w() d) Det går ej att anropa w därifrån Svar:... (1p) 16. Nu vill vi använda klassen X i ett annat program där vi inte har skapat någon instans av X. Vilket av följande metodanrop är korrekt här? a) X.y(); b) X.z(); c) X.w(); Svar:...(1p) 5
17. Vilket av följande påståenden om konstruktormetoder är sant? a) Konstruktormetoden anropas varje gång ett objekt (en instans) av en klass skapas, dvs en gång per objekt. b) Konstruktormetoden anropas endast första gången en klass används i ett program, dvs högst en gång per program och klass. c) Konstruktormetoden anropas varje gång man ändrar i ett objekt. Svar:... (1p) 18. Med hjälp av ordet new skapas i Java a) en ny klass b) ett nytt objekt c) en ny textfil d) en ny typ e) en ny metod Svar:... (1p) Följande klass är tänkt att användas i en tillämpning där man räknar förekomsten av olika ord i en text. class Ord private String ordet; private int antal; Ord (String io) ordet = io; antal = 1; public void räkna () antal = antal +1; public String tostring () return ordet + " har förekommit " + antal + " gånger"; 19. Vad heter instansmetoderna hos klassen Ord? Svar:... (1p) 20. Hur många parametrar har konstruktorn i klassen Ord? Svar:... (1p) 6
21. Vilket/vilka av följande alternativ är korrekt(a) om man vill skapa en instans av klassen Ord? Obs! Flera svar kan vara riktiga. a) Ord t = new Ord("vårdagjämning"); b) Ord u = new Ord("fullmåne", 2) c) String w = "tupp"; Ord x = new Ord(w); d) Ord v = new Ord(); Svar:... (2p) 22. Deklarationen och initieringen int[] resultat = new int[10]; reserverar plats i minnet för a) en referensvariabel och 10 heltalsvariabler b) endast 10 heltalsvariabler c) endast en referensvariabel d) 11 referensvariabler e) Nej, det sker inte någon minnesreservation! Svar:... (2p) Några variabler deklareras och ges värden så här: String [] frukt, annanfrukt; frukt = new String [3]; frukt[0] = "Äpple"; frukt[1] = "Kiwi"; frukt[2] = "Päron"; annanfrukt = frukt; 23. Vilket påstående är sant om satsen frukt[5] = "Mango"; i anslutning till satserna ovan? a) Den satsen fungerar bra därför att vektorn frukt från början har standardstorleken 10. b) Satsen fungerar bra därför att vektorn frukt, som från början har tre platser, utvidgas vid behov med de platser som behövs. c) Satsen fungerar inte, vektorn har en fast storlek. Svar:... (1p) 24. Vad vet man om värdet av annanfrukt[1]? a) Värdet är odefinierat b) Värdet är "Äpple" c) Värdet är "Kiwi" d) Värdet är "Päron" Svar:... (1p) 7
I ett spelprogram representeras en orm som rör sig och växer i ett grafiskt fönster som en instans av ArrayList (eller Vector) där de ingående elementen är instanser av klassen Segment: Ormen skapas från början med ArrayList ormen = new ArrayList(); Därefter läggs 5 st instanser av Segment till ormen och detta är ormens tillstånd då spelet börjar. 25. Vilket eller vilka av följande alternativ är korrekta för att lägga ytterligare ett segment till ormen. Vi antar att klassen Segment har en parameterlös konstruktor. Obs! Flera svar kan vara riktiga. a) ormen[5] = new Segment() b) ormen[6] = new Segment() c) ormen.add(segment()); d) ormen.add(segment); e) ormen.add(new Segment()); f) Segment nästa = new Segment(); ormen.add(nästa); Svar:... (2p) 26. I spelet ingår att hela ormen ibland ändrar färg. I klassen Segment finns metoden bytfärgtill som har en parameter, den nya färgen. Vilket av följande kodavsnitt ändrar färg på hela ormen? a) b) c) for (int i=0; i<ormen.size(); i++) ormen[i].bytfärgtill(color.red); for (int i=0; i<ormen.size(); i++) ormen.bytfärgtill(color.red); for (int i=0; i<ormen.size(); i++) d) Segment s = (Segment) ormen.get(i); s.bytfärgtill(color.red); for (int i=0; i<ormen.size(); i++) Segment s = ormen[i]; s.bytfärgtill(color.red); Svar:... (2p) 8