Академический Документы
Профессиональный Документы
Культура Документы
TENTAMEN
Kurskod:
D0017E
Kursnamn:
Introduktion till programmering fr ingenjrer
Tentamensdatum:
2015-12-21
Skrivtid:
4.0 h.
Tilltna hjlpmedel:
ordbok fr sprkversttning
Betygsgrnser:
vriga upplysningar:
Allmnna anvisningar
Kontrollera att du ftt samtliga uppgifter.
Besvara endast en uppgift per lsningsblad.
Skriv tydligt.
Efter tentamen
Tentamensresultatet syns Mina sidor p Studentwebben.
Examinationsresultat ska meddelas inom 15 arbetsdagar efter. Fr kurser med fler n 60 examinerande samt fr
distansutbildningar fr resultatet meddelas senast n 20 arbetsdagar efter.
Uppgift 1:
a) Ge exempel p minst fyra olika programmeringssprk frutom C. (2p)
b) Beskriv tv sorters loopar inom programmeringssprket C och ge korrekta
kodexempel p hur dessa kan anvndas. (1p)
c) Hur kan man kommentera kod i kllkod? Ge exempel p tv olika varianter. (2p)
Uppgift 2:
a) Vad r en rekursiv funktion? Frklara noggrant fr- och nackdelar och ge ett kortfattat
kodexempel p hur en rekursiv funktion kan anvndas. (1p)
b) Vad kallas ett programfel? Vad kallas konsten att hitta och tgrda dessa? (1p)
c) Namnge de tre olika kategorier programfel som man normalt talar om och frklara
kort hur dessa upptrder. (3p)
Uppgift 3:
a) Vad r det fr skillnad mellan lokala och globala variabler? Motivera fr- och
nackdelar med att anvnda respektive typ. (2p)
b) Vilka av fljande funktioner r korrekt resp. felaktigt implementerade? Motivera varje
enskild funktion och fresl ev. kodndringar. (3p)
// prints a string to screen
void printString(const char *string) {
while(*string) {
printf(%c\n, string);
}
}
// Prints an array of floats to the screen
void printFloatArray(const float *data, unsigned int len) {
while(len--) {
printf(%f\n, *data);
data++;
}
}
/* Negates all elements in array x and store results in y */
void negateFloatArray(float *y, const float *x, int len) {
int i;
for(i=0; i < len; i++) {
y[i++] = -1.0*x[i++];
}
}
Uppgift 4:
Denna uppgift handlar om pekare och lnkade listor. Utg frn nedanstende kod som
beskriver en lnkad lista.
struct ListEntry {
char *text;
struct ListEntry *next;
};
typedef struct ListEntry ListEntry;
int listLength(ListEntry *list);
void parseList(ListEntry *list);
int scanList(ListEntry *list);
b) Skriv en funktion int scanList(ListEntry_t *list) som gr igenom en lnkad lista och
returnerar lngden p den lngsta strngen i listan. Funktionen behver ej hantera fall
dr text r NULL. I denna funktion fr funktionen strlen(const char *s)
anvndas fr att berkna lngden p en strng. (4p)
Exemplet nedan visar en lista med tre element:
element
element
element
element
0:
1:
2:
3:
11 bytes, abcdefgijk !
42 bytes, All work and no play makes Jack a dull boy
3 bytes, hej
2 bytes, aa
Uppgift 5:
Att kunna arbete med strngar r mycket viktigt. Rita ut hur alla tecken ligger i minnet
fre och efter rtrim() och ltrim() har exekverat. Inga externa funktioner fr anvndas.
a) Frklara vad en strng i C r. Skriv en funktion void rtrim(char *str) som raderar alla
vita tecken (dvs tab \t och blanksteg och nyrad \n) frn slutet i en strng. (2p)
Ex: om str=test a \n fre anropet s kommer str
innehlla test a efter.
b) Skriv en funktion void ltrim(char *str) som raderar alla vita tecken (dvs tab \t och
blanksteg och nyrad \n frn brjan av en strng. (2p)
Ex: om str=\n test\n fre anropet s kommer str
innehlla test\n efter.
c) Skriv en funktion void trim(char *str) som raderar alla vita tecken (dvs tab \t och
blanksteg och nyrad \n frn brjan och slutet i en strng. Anvnd de tv
funktionerna ovan. (1p)
Ex: om str=\t this is a test \n fre anropet s kommer
str innehlla this is a test efter.
Appendix 1: ASCII-tabellen