Vilken typ har följande uttryck

UMEÅ UNIVERSITET
Datavetenskap
041201
TENTAMEN
Programmeringsmetodik C för KV och Kemi - C,
Datum
Tid
Hjälpmedel
Antal uppgifter
Totalpoäng
•
•
•
•
•
:
:
:
:
:
5p
041201
14 - 20
Inga
9
40(halva poängtalet krävs normalt för godkänt)
Börja varje uppgift på nytt papper.
Skriv ditt namn och uppgiftens nummer på varje papper.
Skriv bara på ena sidan av papperet.
Sortera dina papper efter uppgiftsnummer.
Kryssa för de uppgifter du lämnar in.
• Ange vilken kurs ni läser på försättsbladet (KV/Kemi)
• Lösningarna skall vara snyggt och prydligt nedskrivna. Tankegången
skall vara lätt att följa. Alla antaganden som inte är uppenbara skall
redovisas. Kommentera källkod.
Tips!
• Försök på alla uppgifter! Observera att uppgifterna inte är ordnade
efter svårighetsgrad.
• Uppgifter kan vara felformulerade, fråga om du är osäker eller tycker
att något verkar konstigt (jag kommer förbi ca 16:30).
• Redovisa dina resonemang så är det lättare att bortse från skrivfel.
• Om du inte kommer ihåg den exakta syntaxen, så gör ett antagande
och redovisa detta.
• Det är viktigt att du löser den givna uppgiften!
UMEÅ UNIVERSITET 901 87 UMEÅ
Johan Eliasson Tel.: 070-2378695 e-mail: [email protected]
Tentamen: Programmeringsmetodik – C för KV och Teknisk kemi
041201
Lycka till!
Uppgift 1. (5p)
I denna uppgift ska ni skriva en funktion som vänder på innehållet i en sträng.
Anropar man tex funktionen med strängen "Hej" så skall den efter anropet till
funktionen vara "jeH". Funktionen ska överenstämma med nedanstående
funktionsprototyp.
void rev_str(char *str);
Uppgift 2. (4p)
Givet följande deklarationer:
enum day {Mon,Tue,Wed,Thu,Fri,Sat,Sun};
struct date {
int day,month,year;
enum day day_name;
char month_name[4]; /* Jan, Feb, Mar, etc */
};
int main(void) {
struct date *myDate;
myDate=malloc(sizeofstruct date);
Skriv de satser som behövs för att sätta alla värden i den struct som myDate pekar på
till de som gäller för dagens datum.
Uppgift 3. (2p)
Skriv om följande for-loop som en while-loop. Samma värden skall skrivas ut och
variabeln i skall ha samma värde efter loopen.
for(i=1;i<=32;i*=2)
{
printf("%d\n",i);
}
Uppgift 4. (3+1+1=5p)
a)
Skriv en funktion som löser samma problem som makrot nedan.
#define swap(x,y) {int tmp=x;x=y;y=tmp;}
b) Ge ett exempel där din funktion används.
c) Ge ett exempel där makrot används
Uppgift 5. (4p)
Vad gör följande funktioner/operatorer? Ge exempel på hur de kan användas.
a) sprintf
b) +=
2
Tentamen: Programmeringsmetodik – C för KV och Teknisk kemi
041201
c) calloc
d) fclose
Uppgift 6. (5p)
Skriv en rekursiv funktion som adderar två positiva heltal. Du får endast använda dig
av operatorerna ++, --, = och ==. (-2p om ni skriver en funktion som inte är
rekursiv)
Uppgift 7. (4p)
Vilken datatyp och vilket värde har följande uttryck. Om uttrycket innehåller ett
syntaxfel eller resulterar i ett programkörningsfel (run-time error) så ange vilken typ
av fel det blev i stället för värde och datatyp.
Direkt innan den plats i koden där uttrycken ska beräknas finns följande
variabeldeklarationer:
int d=7;
int *x=NULL;
int *y=&d;
a) 1+2/(3+4)
b) (*x) + d
c) 1 + -2
d) (*y) % 5
Uppgift 8. (2+2+2=6p)
a) Varför bör man oftast undvika globala variabler.
b) Varför är dokumentation och kommentering av kod viktigt
c) Varför allokerar man ibland minne dynamiskt.
Uppgift 9 (5p)
I vissa applikationer är det ibland användbart att koda tal mha BCD kodning (Binary
Coded Decimal), där fyra bitar används för att reprecentera en decimal siffra (till
skillnad från sättet vi har sett att heltal lagras i normala fall). En 32 bitars variabel kan
då användas till att lagra ett åttasiffrigt tal. Tex skulle talet 123 lagras som det binära
talet nedan:
0000 0000 0000 0000 0000 0001 0010 0011
De 4a bitarnas värde:
1
2
3
Er uppgift är att skriva en funktion int toBCD(int value) som tar ett tal
value och konverterar det till motsvarande tal i BCD-format (lagrat i en int). Ni
kan anta att talet value inte är negativt.
Till er hjälp så får ni följande funktion som tar tre parametrar:
 digit en siffra (0-9)
3
Tentamen: Programmeringsmetodik – C för KV och Teknisk kemi


041201
pos den position som siffran ska ha i resultatet. Varje position består av 4a
bitar och parametern pos kan alltså endast anta värdena 0-7
en pekare result. Siffran digit stoppas in på positionen pos i det tal som
result pekar på.
void ins_bcd(int *result,int digit,int pos)
{
*result |= value << (4*pos);
}
4