Programmering grundkurs och Programmering C
för D1 m fl, även distanskursen
fredag 15 januari 2010
Gäller som tentamen för:
DT1016 Datateknik A, Programmering grundkurs, provkod 0100
DT1007 Datateknik A, Tillämpad datavetenskap, provkod 0410
DT1006 Datateknik A, Programmering C, distans, provkod 0100
Hjälpmedel: | Inga hjälpmedel. |
Poängkrav: |
Maximal poäng är 40.
För godkänt betyg (3 respektive G) krävs 23 poäng. För den som följt campuskursen hösten 2009 ger varje i tid inlämnad inlämningsuppgift med deadline en extra poäng. Den som inte gått campuskursen hösten 2009 får dessa (tre) extrapoäng ändå. |
Resultat och lösningar: | Meddelas via e-post eller på kursens hemsida, http://www.aass.oru.se/~tpy/c/2009-2010-p2/, senast lördag 6 februari 2010. |
Återlämning av tentor: | Efter att resultatet meddelats kan tentorna hämtas på institutionen. Man kan också få sin rättade tenta hemskickad. |
Examinator och jourhavande: | Thomas Padron-McCarthy, telefon 070-73 47 013. |
Prioritet | Kategori | Operator | Associativitet |
---|---|---|---|
Högsta | Unära postfixoperatorer | (), [], ->, ., ++, -- | vänster |
Unära prefixoperatorer | !, ++, --, +, -, *, &, sizeof, (typ) | höger | |
Multiplikation mm | *, /, % | vänster | |
Addition mm | +, - | vänster | |
Jämförelser | <, <=, >=, > | vänster | |
Likhetsjämförelser | ==, != | vänster | |
Logiskt OCH | && | vänster | |
Logiskt ELLER | || | vänster | |
Lägsta | Tilldelning | =, +=, -=, *=, /=, %= | höger |
a) 1 - 2 - 3 + 4
b) 1 - 2 * 3 + 4
c) 1 / 2 + 3 % 4
x = 1.0; y = 2.0; z = 3; if (x < y + z) z = z * 2; while (x < y + 1) { x = x * y; z = z + 1; }
I den här och alla andra uppgifter på tentan gäller: Om du ska använda något från en tidigare uppgift eller deluppgift, till exempel anropa en funktion som skrevs i den tidigare uppgiften, så behöver du inte skriva samma kod igen. Du får också göra uppgiften även om du inte gjort den tidigare uppgiften. |
a) Ange värdet på x, y och z när följande kod har körts.
p1 = &x; *p1 = 3.14; p2 = &y; *p2 = *p1 * 2; p1 = &z; *p1 = *p2; p1 = p2;
b) Vad pekar p1 respektive p2 nu på?
Vi ska bara anropa varje funktion en gång, så det finns alltså bara ett enda testfall per funktion. Försök göra dessa två testfall så bra som möjligt!
Fig. 1. Ett stort monster. |
Fig. 2. Ett litet monster. |
Vi ska göra ett spel med monster i. Uppgifter om monstren ska lagras i poster ("structar") av typen struct Monster. En monsterpost innehåller monstrets namn. Namnet är ett enda ord utan mellanslag, och kan innehålla upp till tio tecken, som i Stor-Fulis, men inte Makro-Fulis. Monstret har också en tuffhet, som är ett flyttal, och ett antal tänder, som är ett heltal.
Definiera posttypen struct Monster.
Namn: Uschlo Tuffhet: 12.50 Tänder: 300
Du får själv välja om du vill att funktionshuvudet ska se ut så här:
struct Monster las_monster()
eller så här:
void las_monster(struct Monster *p)
Exempel:
Monstret Varvulven har 36 tänder och tuffheten 99.2 Monstret Hajen har 100 tänder och tuffheten 30.5. Varulven attackerar Hajen, och träffar. Efter attacken har Hajen tuffheten -5.5. Det betyder också att Hajen dog, eftersom dess tuffhet nu är mindre än noll.
Tips: Funktionen rand returnerar ett slumpmässigt heltal.
Funktionen attackera ska ta två monsterposter (eller pekare till dem) som argument: det attackerande monstret, och det attackerade monstret.
Kom ihåg: Om du ska använda något från en tidigare uppgift eller deluppgift, till exempel anropa en funktion som skrevs i den tidigare uppgiften, så behöver du inte skriva samma kod igen. Du får också göra uppgiften även om du inte gjort den tidigare uppgiften. |
Om filen inte går att öppna, ska programmet skriva ut ett felmeddelande om detta, och sen avslutas.
Börja med att läsa in monstren till en array av monsterposter. Det ska få plats högst 1000 monster i arrayen. Om det finns fler monster på filen, ska de ignoreras, men programmet ska också skriva ut en varning om detta.
Om filen inte går att öppna, ska programmet skriva ut ett felmeddelande om detta, och sen avslutas.
Därefter ska monstren attackera varandra, och detta ska fortsätta tills det bara finns ett enda levande monster kvar. Avslutningsvis ska det levande monstrets data skrivas ut.
Du får själv välja hur man bestämmer vilka monster som attackerar, och hur de väljer sina offer. Man kan slumpa fram det, eller alltid låta det första levande monstret i arrayen attackera det andra, eller hur du vill.
Programmet ska använda sig av funktionerna attackera, lever och visa_monster.