Programmering E 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för: Tentamen TE081B El2 Tentamensdatum: 2012-04-13 Tid: 900 1300 Hjälpmedel: Kursbok Kelley, Pohl: A Book on C, Fourth Edition Tillåtet med anteckningar i kursboken. Obs! Inget annat hjälpmedel än kursboken är tillåtet. Totalt antal poäng på tentamen: 50 poäng För att få respektive betyg krävs: 3 = 20 poäng, 4 = 30 poäng, 5 = 40 poäng Allmänna anvisningar: Anslag av resultat: senast 2012-05-04 Lös en uppgift per blad, gärna abc etc. på samma sida. Viktigt! Glöm inte att skriva namn på alla blad du lämnar in. Lycka till! Ansvarig lärare: Anders Mattsson 033-435 46 28
1 Deluppgifter a e a Vilket tal returneras i satsen return (htal1 > htal2); om htal1 är mindre än htal2? b Skriv en funktionsprototyp till en funktion uppgift_b som har tre inparametrar (ett heltal och två flyttal) och som returnerar ett flyttal. c Beskriv utförligt hur värdet på variabeln i ändras. Hur många gånger genomlöps loopen? i = 2, j = 100; while (i < j) i *= 2*i; i -= 5; printf("%4d%4d\n", i, j); d Skriv om följande sats med if-else-satsen k = (i < j)? i : (i == j)? i + 5 : j; e Vad är en väsentlig skillnad mellan värdeanrop (call-by-value) och referensanrop (call-by-reference)? 1 p 1 p 2 Deluppgifter a b a Skriv en funktion differens som tar emot två heltal och returnerar talens differens. Ge exempel på hur ett korrekt funktionsanrop till funktionen kan skrivas. b Vad utför funktionen calculate? Beskriv instruktion för instruktion. void calculate(float flt [], int nr) int i = 0; float sum = 0; for ( ; i < nr; i++) if (flt[i] > 4.0) sum += flt[i]; printf("%7.2f\n", sum); 3 Skriv ett C-program som med hjälp av while- eller for-sats summerar alla heltal mellan 10 och 110 samt skriver ut talens summa och antal termer som summeras. 4 Skriv ett C-program som efterfrågar sidan i en kvadrat och beräknar och skriver ut omkrets och area för kvadraten. Sidan är inte begränsad till att vara ett heltal. Bortse från enheter. 1
5 Deluppgifter a d a Vad skrivs ut vid programkörning? int i, j; for (i = 9, j = 8; i * j > 50; ) i += j; j -= 3; printf("%3d%3d\n", i, j--); b Vad skrivs ut vid programkörning? int int_flt[] = 21, 22, 23, 24, 25; int *ip; ip = &int_flt[2]; printf("%3d%3d\n", *(int_flt + 2), *ip); printf("%3d%3d\n", *ip - 1, *int_flt + 1); c Vad skrivs ut vid programkörning? int a = 17, b = 4, c, d, e; c = a >> b; d = a b; printf("%3d%3d\n", c, d); e = (a += (b * 2)); printf("%3d\n", e); d Vad skrivs ut vid programkörning? Du matar in följande sträng Mata in en sträng: Tentamen void skriv_tkn(char *s, int i) if (!(*s)) return; skriv_tkn(s+1, i+1); if (i <= 3) printf("%c", *s); char str[80]; printf("\nskriv en sträng: "); gets(str); skriv_tkn(str, 0); return 0; 2
6 Skriv en funktion omforma som tar emot en sträng och skriver ut den tecken 4 p för tecken på så sätt att gemener skrivs som VERSALER, i övrigt oförändrat. Ge exempel på hur ett korrekt funktionsanrop till funktionen kan skrivas. Pekare ska användas annars noll poäng. Bortse från problematiken med åäöåäö. Ledning: Använd t ex något av de makron som finns i ctype.h. Exempel på utskrift vid programkörning Mata in textrad: Sistatenta 13 april SISTATENTA 13 APRIL 7 Berätta kortfattat med ett enkelt kodexempel hur skrivning och läsning till/från binärfiler går till och hur direktaccess av filer kan ske. 8 En datafil 'text.txt' placerad i aktuell katalog har innehållet 4 p Memories are classified in a number of ways. Some memories utilize semiconductor devices and are called semiconductor memories. Others utilize magnetic materials. Skriv ett C-program som läser filen text.txt tecken för tecken och räknar ut summan av antalet bokstäver a, b och c (endast gemener (små bokstäver) ska räknas). Resultatet presenteras på skärmen. 9 Komplettera i funktionen main så att utskrift endast av den äldsta personens namn och ålder sker. Använd en postpekarvarabel pp och piloperatorn (->). struct ptype char name[15]; int age; ; int main() struct ptype pvar[5] = "Adam", 37, "Beda", 36, "Calle", 23, "Donald", 43, "Erik", 35 ; struct ptype *pp; Här skrivs kod (dock på löst papper!) Utskrift vid programkörning Donald 43 10 Redogör för hur en enkellänkad lista kan definieras med hjälp av en post (struct), och hur en sådan lista kan användas. Ge enkla kodexempel. 3
11 Skriv ett C-program som läser in en följd av positiva tal. Inläsningen ska 4 p avbrytas då ett negativt tal matas in. Därefter sker utskrift av de två största talen som matades in. 4