Programmering grundkurs och Programmering C
för D1 m fl, även distanskursen
lördag 8 mars 2008 kl 8:00 - 13:00
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
PRG045 Programmering C, provkod 0110 (och 0100, och 0101)
TDD121 Tillämpad datavetenskap A, provkod 0700 (och 0400)
TDP118 Programmering C, distans, provkod 0110 (och 0100)
Hjälpmedel: | Inga hjälpmedel. |
Poängkrav: |
Maximal poäng är 40.
För godkänt betyg (3 respektive G) krävs poäng. |
Resultat och lösningar: | Meddelas via e-post eller på kursens hemsida, http://www.aass.oru.se/~tpy/c/2007-2008-p2/, senast lördag 29 mars 2008. |
Å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) 8 - 4 - 2 - 1
b) 8 - 4 * 2 - 1
i = 0; k = 1; n = 5; while (i < n) { if (i > 2) i = i + 10; else i++; k++; }
Skriv därför ett komplett C-program som först läser in värdena på x, y och R, beräknar uttrycket, och till sist skriver ut uttryckets värde. Beräkningarna ska ske med flyttal.
Om deluttrycket xyR är mindre än noll, går uttrycket inte att beräkna. I så fall ska programmet inte försöka beräkna uttrycket, utan det ska i stället skriva ut ett informativt och rättvisande felmeddelande om saken.
Vi behöver en posttyp (med C-terminologi en struct) som ska beskriva en donation. Posten ska innehålla följande saker:
Definiera posttypen som ska användas för att lagra data om en donation. Den ska heta struct Donation.
Belopp: 100 dollar Givare: Caitlin Upton Stat: South Carolina
Du får själv välja om du vill att funktionshuvudet ska se ut så här:
struct Donation las_donation()
eller så här:
void las_donation(struct Donation *p)
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. |
Örebro universitet ska köpa MacBook Air till alla studenter. Denna dator är så tunn att det inte får plats någon nätverkskontakt, utan den har bara trådlöst nätverk. Därför behövs fler basstationer för trådlöst nät. För att spara pengar ska man köpa en enda stor basstation. Men var ska den sitta?
En lunchrast, strax efter att de nya datorerna delats ut, går man därför runt och antecknar var alla studenter sitter. Deras positioner noteras som en x- och en y-koordinat, i något koordinatsystem. Den bästa platsen för basstationen hittar man genom att beräkna medelvärdet av alla dessa koordinater. (Summera alla x-koordinater, och dela med antalet. Detta ger x-koordinaten för basstationens placering. Gör sedan samma sak för y-koordinaterna.)
Skriv ett C-program som låter användaren mata in x- och y-koordinater för studenternas positioner. Koordinaterna ska hanteras som flyttal. Inmatningen avslutas genom att användaren anger punkten (0, 0). Därefter ska programmet tala om den sökta placeringen för basstationen.
Det finns 10 frågor på kursvärderingen, som alla kan besvaras med ett betyg på 1 (dåligt) till 4 (bra). Programmet ska fråga efter antalet inlämnade kursvärderingar. Utmatningen från programmet ska bestå av (det framslumpade) utfallet på de olika frågorna, bestående av antalet av varje betyg (1-4) och medelvärdet.
Exempel på hur utmatningen från programmet skulle kunna se ut:
Ange antalet kursvärderingar: 10 Fråga 1, antal 1:or: 5, antal 2:or: 1, antal 3:or: 1, antal 4:or: 3, medelvärde: 2.20 Fråga 2, antal 1:or: 8, antal 2:or: 1, antal 3:or: 0, antal 4:or: 1, medelvärde: 1.40 Fråga 3, antal 1:or: 7, antal 2:or: 1, antal 3:or: 1, antal 4:or: 1, medelvärde: 1.60 Fråga 4, antal 1:or: 3, antal 2:or: 0, antal 3:or: 5, antal 4:or: 2, medelvärde: 2.60 Fråga 5, antal 1:or: 8, antal 2:or: 1, antal 3:or: 0, antal 4:or: 1, medelvärde: 1.40 Fråga 6, antal 1:or: 0, antal 2:or: 7, antal 3:or: 2, antal 4:or: 1, medelvärde: 2.40 Fråga 7, antal 1:or: 2, antal 2:or: 4, antal 3:or: 0, antal 4:or: 4, medelvärde: 2.60 Fråga 8, antal 1:or: 6, antal 2:or: 1, antal 3:or: 2, antal 4:or: 1, medelvärde: 1.80 Fråga 9, antal 1:or: 9, antal 2:or: 0, antal 3:or: 0, antal 4:or: 1, medelvärde: 1.30 Fråga 10, antal 1:or: 2, antal 2:or: 5, antal 3:or: 1, antal 4:or: 2, medelvärde: 2.30
Summan av antalet 1:or, 2:or, 3:or och 4:or på varje fråga måste stämma med det angivna antalet kursvärderingar, och medelbetyget ska vara rätt.
Använd anropet rand() för att få ett stort, slumpmässigt heltal. Innan man använder den funktionen första gången i programmet, bör slumptalsgeneratorn initieras, till exempel med anropet srand(time(NULL));