Skriftlig tentamen för kursen DV017A Inledande programmering i Java A Skrivtid 4 timmar 09.00 13.00 Instruktioner Detta är en tentamen som består av fleralternativsfrågor. Här är några viktiga punkter: Riv försiktigt loss svarsprotokollet på sista sidan Läs igenom tentan och markera era svar i svarsprotokollet och givetvis även i kryssrutorna i tentan om ni vill komma ihåg hur ni har svarat. Fyll i med tydliga kryss! Antalet korrekta alternativ på en fråga kan variera (0 6 kryss). Alla frågor ger maximalt 2 poäng då svaret är helt korrekt. En poäng delas ut för ett svar med minst ett korrekt markerat alternativ och högst ett uteblivet eller felmarkerat alternativ. Inga minuspoäng delas ut. Om inga andra instruktioner ges i en fråga skall du markera de påståenden som du anser vara sanna. Kom ihåg att ange namn och personnummer på svarsprotokollet och kontrollera att ni har fört in era svar på rätt sätt. Det är det ifyllda svarsprotokollet som skall lämnas in! Själva tentan får ni gärna behålla. Ett facit publiceras snart efter tentan, vilket gör att ni själva kan beräkna era poäng. Inga hjälpmedel tillåtna LYCKA TILL! Jonas Boustedt Telefon: 070 6766998 Högskolan i Gävle Akademin för teknik och miljö 1
Fråga 1 Med en kommandotolk vill du arbeta med källkodsfilen Nerdo.java. Vad gäller? a. Du kan kompilera din kod med kommandot: javac nerdo b. Du kan kompilera din kod med kommandot: javac Nerdo.java c. Du kan kompilera din kod med kommandot: javac Nerdo.class d. Du kan köra din kod med kommandot: java Nerdo (men bara om Nerdo innehåller en main-metod) e. Du kan köra din kod med kommandot: java Nerdo.java f. Du kan köra din kod med kommandot: java Nerdo.class Fråga 2 Analysera koden och tänk dig att den körs. Markera sanna påståenden: int a = 1, b = 2; a = b; b = a; System.out.println( a = + a +, b = + b); a. Utskriften blir: a = 1, b = 2 b. Utskriften blir: a = 2, b = 1 c. Utskriften blir: a = 1, b = 1 d. Utskriften blir: a = 2, b = 2 e. Utskriften blir: a = a, b = b f. Utskriften blir: a = b, b = a Fråga 3 Analysera koden och tänk dig att den körs. Markera sanna påståenden: int a = 2, b = 2; a++; ++b; System.out.println( a = + a +, b = + b); a. Utskriften blir: a = 2, b = 3 b. Utskriften blir: a = 3, b = 3 c. Utskriften blir: a = 1, b = 1 d. Utskriften blir: a = 3, b = 2 e. Utskriften blir: a = a, b = b f. Utskriften blir: a = 21, b = 12 Fråga 4 Analysera koden och tänk dig att den körs. Markera sanna påståenden: int a = 1, b = 1; a = ++b + a; b = b + a++; System.out.println( a = + a +, b = + b); a. Utskriften blir: a = 3, b = 3 b. Utskriften blir: a = 3, b = 4 c. Utskriften blir: a = 4, b = 4 d. Utskriften blir: a = 2, b = 2 e. Utskriften blir: a = a, b = b f. Utskriften blir: a = 4, b = 5 Högskolan i Gävle Akademin för teknik och miljö 2
Fråga 5 Analysera koden och tänk dig att den körs. Markera sanna påståenden: int a = 1, b = 2, c = 3; a += 10; b *= 10; c = b % a; System.out.println( a = + a +, b = + b +, c = + c ); a. När variabeln a skrivs ut visas värdet 10 b. När variabeln a skrivs ut visas värdet 11 c. När variabeln b skrivs ut visas värdet 20 d. När variabeln b skrivs ut visas värdet 10 e. När variabeln c skrivs ut visas värdet 11 f. När variabeln c skrivs ut visas värdet 9 Fråga 6 Analysera koden och tänk dig att den körs. Markera sanna påståenden: double d = 2 + 3 * 2-5 / 2 + ( 5.0 / 2 ); a. Kompileringsfel: kompilatorn vet inte i vilken ordning beräkningarna ska göras. b. Variabeln d initieras till 5.0 c. Variabeln d initieras till 8.0 d. Variabeln d initieras till 8.5 e. De två divisionerna ger två skilda värden f. Det krävs fler parenteser för att undvika kompileringsfel Fråga 7 Vilka alternativ visar primitiva typer i Java a. java.lang.string b. byte, char c. java.util.scanner d. int, float, double e. java.lang.math f. boolean Fråga 8 Vilka påståenden är sanna för begreppet variabel? double 12tunnor; double tunnor12; double tunnor13 = 75.1; int tunnor12 = 5; a. Det är ok att en variabel heter 12tunnor b. Det är ok att en variabel heter tunnor12 c. Man kan välja om en variabel ska initieras eller inte när den deklareras d. I samma scope (kodblock) kan en variabel deklareras om från en typ till en annan (se tunnor12) e. Efter initiering kan en variabels värde ändras (med tilldelningar) när programmet exekveras f. Variabelns typ bestämmer vilken sorts värden som kan lagras i variabeln Högskolan i Gävle Akademin för teknik och miljö 3
Fråga 9 Titta på koden och markera sanna påståenden: class X private static int q = 4; public static void main(string [] args) q = sqr( q + 1); System.out.print( q + ); public static int sqr(int q) System.out.print( q + ); return q*q; a. En variabel som är deklarerad i en klass, utanför en metod, är åtkomlig för alla metoder i klassen b. En lokal variabel överskuggar en global varabel med samma namn c. Utskriften när programmet körs blir: 4 4 d. Utskriften när programmet körs blir: 25 5 e. Utskriften när programmet körs blir: 16 4 f. Utskriften när programmet körs blir: 5 25 Fråga 10 Antag att en variabel deklareras inuti en metod. Vilka påståenden är sanna i detta sammanhang? a. En annan metod kan komma åt exakt samma variabel om den deklareras med samma namn där b. En annan metod får deklarera en variabel med samma namn, men det är inte samma variabel c. Variabeln lever endast då metoden exekveras. Vid nästa metodanrop skapas variabeln på nytt d. Variabeln lever under hela programmets körtid och kommer ihåg sitt värde mellan metodanropen e. Om metoden redan har en parametervariabel med samma namn får man ett kompileringsfel f. Det är ok att ha parametervariabler och lokala variabler med samma namn Fråga 11 Markera korrekt deklarerade/implementerade metoder: a. public void foo( int a, b, c) System.out.println( a + b + c ); b. public void bar( int a, int b, int c) System.out.println( a + b + c ); return; c. public void zoo( int a, int b, int c) System.out.println( a + b + c ); d. public void boo( int a, int b, int c) return a + b + c; e. public int goo( int a, b, c) return a + b + c; f. public int goo( int a, int b, int c) return a + b + c; Fråga 12 Markera de kodrader som ger upphov till kompileringsfel a. int i = 1.9; b. double a = 1; c. double b = (int) 1.0; d. boolean c = 18; e. char ch = A ; f. float f = 1.0; Högskolan i Gävle Akademin för teknik och miljö 4
Fråga 13 Markera de påståenden som är korrekta för koden och sammanhanget nedan: System.out.print( Mata in första betyget (A-E): ); char b1 = (char)system.in.read(); System.out.print( Mata in andra betyget (A-E): ); char b2 = (char)system.in.read(); a. Variabeln b2 kommer inte att innehålla ett betygstecken ( A E ) efter att sista raden har körts b. System.in.read() kan inte ge upphov till några undantagsfall (exception). c. Det är onödigt att skriva (char) framför System.in.read() i detta fall. d. Användaren får skriva in ett betyg, men hinner sidan inte skriva in nästa betyg e. Ett tryck på tangenten <ENTER> genererar i sig minst ett tecken (beroende på operativsystem) f. System.in.read() är lämplig att använda även för att läsa in decimaltal, t.ex. 3.141592 Fråga 14 Markera det som är sant för klassen java.util.scanner i Java, samt det sammanhang som ges nedan: Scanner scan = new Scanner(System.in); String line = scan.nextline(); double d = scan.nextdouble(); // A user enters: Hejbaberiba 123.9 765.99 a. Variabeln line = Hejbaberiba, variabeln d = 123.9 b. Variabeln line = Hejbaberiba 123.9, variabeln d = 765.99 c. Man läser in data från standard input med koden i exemplet d. Man läser in data från filen System.in med koden i exemplet e. Ett objekt av typen Scanner kan läsa data från en sträng (String) om man vill f. Ett objekt av typen Scanner kan användas för att läsa data från en textfil om man vill Fråga 15 Markera korrekta sätt formulera uttryck som beräknar ett sanningsvärde för villkoren att värdet av alla variablerna a, b, c ska vara större än 0, dessutom att a är minst, b mittemellan och c störst. a. boolean svar = 0 < a < b < c; b. boolean svar = 0 > a > b > c; c. boolean svar = a > 0 && b > 0 && c > 0 && a < b && b < c; d. boolean svar = a > 0 && b > a && c > b; e. boolean svar = a > 0 b > a c > b; f. boolean svar =!( c <= b b <= a a <= 0); Fråga 16 Markera de påståenden som är sanna. a. En if-sats används för att upprepa en kodsekvens ända tills villkoret inte länge gäller b. En if-sats anger villkoret som måste vara uppfyllt för att ett stycke kod skall exekveras c. Med if-else-satsen väljs och körs antingen den ena eller den andra kodsekvensen, aldrig båda d. If-satsen kan endast styra en kodrad. Vill man styra flera krävs flera if-satser. e. En if-sats kan endast hantera heltalsvärden f. En if-sats kräver en villkorsuttryck, d.v.s., ett logiskt uttryck som är sant eller falskt Högskolan i Gävle Akademin för teknik och miljö 5
Fråga 17 Studera koden. Vad händer när programmet körs vad skrivs ut? double rand = Math.random() * 100; // mellan 0 och 100 (ej inklusive 100) if( rand > 50 ) System.out.println( Över 50! ); if( rand > 70) System.out.println( Över 70! ); System.out.println( Grattis! ); a. Om rand = 51 blir utskriften: Över 50! b. Om rand = 69 blir utskriften: Över 50! samt Grattis! c. Om rand = 75 blir utskriften: Över 50! samt Över 70! samt Grattis! d. Om rand = 11 blir det ingen utskrift alls e. Om rand = 80 blir utskriften: Över 70! samt Grattis! f. Om rand = 50 blir utskriften: Grattis! Fråga 18 Studera koden. Markera de påståenden som stämmer? if( a == b ) if(b == c) if(c == d) System.out.println( Lika! ); a. Om a=1 och b=1 och c=2 och d=2 blir utskriften: Lika! b. Koden kan skrivas om: if(a==b==c==d) System.out.println( Lika! ); c. Det blir kompieringsfel eftersom det saknas block ( måsvingar ) d. Koden kan skrivas om: if(a==b c==d) System.out.println( Lika! ); e. Koden kan skrivas om: if(a==b && b==c && c==d) System.out.println( Lika! ); f. Endast om variablerna a, b, c, d har samma värde blir utskriften: Lika! Fråga 19 Studera koden. Vad händer när programmet körs vad skrivs ut? double age = Math.random() * 100; // mellan 0 och 100 (ej inklusive 100) if( rand > 12.0 ) System.out.println( Tonåring! ); else if(age > 19.0) System.out.println( Ung vuxen! ); else if(age > 29.0) System.out.println( Mogen! ); else System.out.println( Barn! ); a. Om age = 30.0 blir utskriften: Mogen! b. Om age = 25.0 blir utskriften: Ung vuxen! c. Om age = 13.0 blir utskriften: Tonåring! d. Om age = 12.0 blir utskriften: Barn! e. Om age = 89.0 blir utskriften: Tonåring! f. Om age = 98.0 blir utskriften: Mogen! Högskolan i Gävle Akademin för teknik och miljö 6
Fråga 20 Antag att a, b, c är heltalsvariabler. Studera koden och markera de påståenden du tycker är korrekta. if( a < b ) c = a; else c = b; a. Koden räknar ut det största värdet i variablerna a och b och kopierar detta till variabeln c. b. Koden räknar ut det minsta värdet i variablerna a och b och kopierar detta till variabeln c. c. Koden kan skrivas enklare: c = if(a < b)? a : b; d. Koden kan skrivas enklare: c = (a < b)? a : b; e. Variabeln c kommer garanterat att tilldelas ett av värdena i a och b f. Endast om a är mindre än b kommer c att tilldelas det minsta värdet Fråga 21 Studera koden. Antag att de fem talen som slumpas är 1, 13, 20, 30, 5. Vad gäller? for(int i=0 ; i<5 ; i++) int age = 1 + (int)(0.5 + Math.random() * 100); // 1-100 switch(age) case 1: System.out.print( B ); case 13: System.out.print( T ); break; case 20: System.out.print( U ); case 30: System.out.print( M ); default: System.out.print(? ); break; a. Utskriften blir: BTTUM?M?? b. Utskriften blir: BTUMB c. Utskriften blir: BTUM? d. Satsen switch kan endast användas på värden av heltalstyp såsom int (och dit räknas även char) e. Satsen switch kan användas på alla primitiva typer f. Ett break innebär att programflödet hoppar ut switch-satsen Fråga 22 boolean s1 = false, s2 = false; for(int a = 0; a<2; a++) for(int b = 0; b<2; b++) System.out.print( (s1 && s2) + + (s1 s2) + ); s2 =!s2; s1 =!s1; a. Den här koden går inte att kompilera b. Den här koden går att kompilera och köra c. Utskrift: false false false true false true true true d. Utskrift: false false false false true true true true e. Utskrift: false false false false false false false false f. Alla kombinationer av möjliga värden på s1 och s2 har testats Högskolan i Gävle Akademin för teknik och miljö 7
Fråga 23 Vad händer? int v = 2; while(v < 5) System.out.println( v * v ); v = v + 1; a. Första utskriften blir 4 b. Andra utskriften blir 9 c. Tredje utskriften blir 4; d. Tredje utskriften blir 16 e. Första utskriften blir 1 f. Det blir en oändlig loop Fråga 24 Analysera koden och markera korrekta påståenden: int i = 0; final int J = 4; do i = i + 1; System.out.print( i ) while( i < j ); a. Utskrift: 01234 b. Utskrift: 1234 c. Utskrift: 0123 d. Utskrift: 123 e. Om J skulle initieras till 0 skulle ingenting skrivas ut f. J är en konstant. Fråga 25 Vad skrivs ut? for(int i = 10; i>0 ; i--) System.out.print( --i ); a. 10 11 12 13 14 15 16 17 18 19 b. 9 8 7 6 5 4 3 2 1 c. 97531 d. 987654321 e. 0123456789 f. 108642 Högskolan i Gävle Akademin för teknik och miljö 8
Fråga 26 int n = 0; do System.out.print( (n/3 + 1) * (n%3 + 1) + ); while(++n < 9); a. Utskrift: 1 2 3 2 4 6 3 6 9 b. Utskrift: 1 2 3 2 4 6 3 6 c. Utskrift: 1 2 3 2 4 6 3 6 9 4 d. Det blir en oändlig utskrift e. I exemplet förekommer heltalsdivision vars resultat är ett heltal f. % är den så kallade modulusoperatorn, som beräknar resten vid heltalsdivision Fråga 27 Studera koden och markera korrekta påståenden. System.out.print( A ); for(int i=0;i<2;i++) ; System.out.print( B ); System.out.print( B ); for(int i=0;i<1;i++) System.out.print( A ); a. Utskriften blir: ABBBBA b. Ett semikolon ( ; ) räknas som en sats i sig själv eftersom den är en satsavslutare c. Utskriften blir: AA d. Utskriften blir: ABBA e. Utskriften blir: ABBBA f. En sammansatt sats innebär att flera satser skrivs i samma kolumn Fråga 28 Betrakta följande funktion. Vilka påståenden är korrekta (lämpliga)? public static int [] xuyrazt( int [] a ) int [] r = new int[a.length]; for(int i = 0 ; i<a.length; i++) r[i] = a[a.length-i-1]; return r; a. Denna funktion returnerar en exakt kopia av den array (vektor) som skickas in som parameter b. Denna funktion returnerar en array som har sina element i omvänd ordning relativt den inskickade c. Ett lämpligt namn på denna funktion istället för xuyrazt vore copyarray d. Ett lämpligt namn på denna funktion istället för xuyrazt vore reversearray e. Denna kod är felaktig. Mär man skapar en array måste ett konstant värde anges, tex new int[5] f. Denna kod är korrekt, men om man skickar in null som argument så sker ett runtime exception Högskolan i Gävle Akademin för teknik och miljö 9
Fråga 29 Betrakta koden och markera korrekta påståenden om klassen java.lang.string (String): String str1 = new String( LaTeX ); String str2 = str1.touppercase(); String str3 = str2.tolowercase(); System.out.println(str1 + str2 + str3); a. En sträng i Java är mutable, d.v.s. det går att ändra på ett strängobjekt b. En sträng i Java är immutable, d.v.s. det går inte att ändra på ett strängobjekt c. Utskriften blir: LATEX latex latex d. Utskriften blir: LaTeX LaTeX LaTeX e. Utskriften blir: LaTeX LATEX latex f. Utskriften blir: latex latex latex Fråga 30 Betrakta koden och markera korrekta påståenden om klassen java.lang.string (String): String str1 = new String( LaTeX ); int len = str1.length(); String str2 = str1.substring(2); str2 = str2.substring(1,2); System.out.println(str2 + S + len); a. substring(med en parameter) och substring(med två parametrar) skapar nya strängobjekt b. Utskriften blir: LaLaS 5 c. Utskriften blir: TeXaS 5 d. Utskriften blir: LaLaS 7 e. Metoden length() returnerar strängobjektets längd f. Metoden length() returnerar höjden på den font som används i texten. Fråga 31 Markera alla sanna påståenden (Exceptions i Java) a. Kod där RuntimeException kan uppstå kräver inte att man använder try/catch eller throws b. Om en metod innehåller System.in.read(); (som kan skapa ett IOException) så måste denna kod läggas i ett try-block, följt av en catch. Det finns inget annat sätt att få koden körbar. c. En metod som deklarerats med throws kan anropas antingen i en try-klausul eller i en metod som också deklarerats med throws d. Koden: String s = null; s.length(); ger ett exception e. Koden: String s = ; s.length(); ger ett exception f. Koden: String s = exception ; s.length(); ger ett exception Fråga 32 Vilka av alternativen kan i Java-sammanhang användas för att beskriva begreppet "metod"? a. En referensvariabel (pekare) b. En annat namn (inom objektorienterad programmering) för begreppen procedur eller funktion c. Ett visst strukturerat sätt att arbeta d. En instans av ett arv e. En publik metod är en operation som ett objekt tillhandahåller till omvärlden f. En privat metod kan inte anropas från kod som inte tillhör samma klass som metoden tillhör Högskolan i Gävle Akademin för teknik och miljö 10
Fråga 33 Markera sanna påståenden. I Java gäller att en instans av en klass (ett objekt): a. bara är ett annat namn för klassen b. har ett eget unikt minnesutrymme för sina instansvariabler, d.v.s. sina attribut c. kan anta värdet null d. kan endast refereras av en referensvariabel åt gången e. inte kan förekomma i mer än ett exemplar åt gången (samtidigt) f. kan skapas med operatorn new Fråga 34 Vilka påståenden är sanna för referensvariabler? (i Java) a. En referensvariabel kan referera till ("peka på") olika objekt under samma programkörning b. En referensvariabel kan referera till alla typer av objekt c. En referensvariabel är antingen null eller så innehåller den adressen till ett objekt d. Tilldelningen a = b innebär att objektet b kopieras till objektet a e. En referensvariabel kan sättas till null f. Referensvariabels typ avgör vilka objekt den kan referera till OBS! Rättningsprotokoll skall bifogas tentan. Fyll i svaren i protokollet! Dubbelkolla! Högskolan i Gävle Akademin för teknik och miljö 11
Högskolan i Gävle Akademin för teknik och miljö 12
Svarsprotokoll för tentamen i kursen: DV017A, "Inledande programmering i Java, A" Datum: 2010-08-21 Lärare: Jonas Boustedt Mobil: 070 6766998 Sätt tydliga kryss i rutorna! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 a a b b c c d d e e f f 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 Eventuella kommentarer Studentens namn: Studentens personnummer: Studentens namnteckning: Inlämningstid: