(SDU Logo) Institut for Matematik og Datalogi
Syddansk Universitet Institut for Matematik og Datalogi

Fagrådets sommerkursus i C

Tid, sted og format

Kurset finder sted fra mandag d. 12 juli til og med fredag d. 16. juli. Som udgangspunkt vil der være undervisning fra kl. 10:15 til 12, og have opgaveløsning fra kl. 12:15 til 14. Undervisningen vil finde sted i U49 (lokalet under terminalrummet), og opgaveløsningen vil finde sted i selve terminalrummet.

Litteratur og nyttige links

Den gamle C-bog er stadig ganske nyttig og god:
Brian W. Kernighan, Dennis Ritchie, The C Programming Language, 2. eds., Prentice Hall, 1988
Der findes desuden flere C-bøger på Internettet, blandt andre denne og denne (her er beskrivelsen af extern og static omfattende).
Kommandoen man 3 printf for information omkring printf. Tilsvarende for scanf eksistrerer.
Matin Ehmsen har tidligere undervist et C-kursus. Dagsedlerne, hvor der også er opgaver, kan findes her.
Standard Library: link
GNU Make: link

Dagsedler

Mandag

Undervisningen kommer til at omhandle basal syntaks i C, med vægt på forskellene fra Java. Vi vil desuden også gennemgå basal brug af funktioner og compiling af programmer.
materiale

Opgaver

  1. Lav et simpelt program der blot udskriver "Hello World" efterfulgt af et linjeskift.
  2. Lav et program der konverterer temperaturer fra fahrenheit til celcius. Temperaturen i fahrenheit skal kunne indlæses som kommandolinjeargument og ved brug af scanf. Formlen for konvertering er C = 5/9 * (F - 32)
  3. Lav et program der udregner og udskriver det n'te Fibonacci tal, hvor n er givet enten som kommandolinjeargument eller bliver indlæst via scanf. Der er mulighed for både at implementere det ved iteration og med rekustion, men lav gerne begge versioner.
  4. Lav et funktion der udregner længden af en tekststreng (et char array termineret med \0).
  5. Project Euler

Tirsdag

Undervisningen kommer til at omhandle pointers, og deres relation til arrays og funktioner.
materiale

Opgaver

  1. Implementer funktioner til at: vende en tekststreng (reverse), udtage en delstreng givet ved startindeks og længde (substring), sammensætte to strenge, søge efter en delstreng.
  2. Implementer en af følgende sorteringsalgoritmer: bubble sort, heap sort, merge sort, quick sort (evt. randomiseret), selection sort, insert sort.
  3. Bonus: implementer flere sorteringsalgoritmer og sammenlign hastigheden af de forskellige implementeringer, ved brug af kommandoen time. (Eks: time ./mySortProgram i en terminal)
  4. Implementer en min/max heap
  5. Evt. overskydende opgaver fra tidligere dage, og Project Euler

Onsdag

Undervisningen kommer til at omhandle C's hukommelsesmodel, deriblandt heap, stack, dynamisk (de)allokering af plads samt structs og unions.
materiale

Opgaver

  1. Implementer en dobbelthægtet liste.
  2. Implementer et binært søgetræ til heltal.
  3. Bonus: læs om funktionspointere og lav et generisk binært søgetræ hvor brugeren giver en pointer til sammenligningsfunktionen.
  4. Lav et program der via dynamisk programmering udregner den længste fælles delstreng af to strenge (Longet Common Subsequence).
  5. Evt. overskydende opgaver fra tidligere dage, og Project Euler

Torsdag

Undervisningen kommer til at omhandle metoder til at gøre det nemmere at lave større projecter: typedef, preprocessor, makefiles, standard biblioteker. Desuden kommer vi ind på scopes, man pages og generelt input og output.
materiale

Opgaver

  1. Opsplit løsningerne til nogle af de tidligere opgaver således at generel funktionalitet blandt andet nemmere kan genbruges i andre projekter. (eks: min/max heap, sorteringsfunktioner, strengefuniktioner, diverse datastrukturer)
  2. Lav makefiles til ovenstående.
  3. Udvid det binære søgetræ til at rød-sort-træ (eller en anden type selvbalancerende træ).
  4. Læs om funktionspointere og lav et generisk binært søgetræ hvor brugeren giver en pointer til sammenligningsfunktionen.
  5. Evt. overskydende opgaver fra tidligere dage, og Project Euler

Fredag

Undervisnignen kommer til at omhandle test og debugging, og evt. en smule om Netbeans og Eclipse.
materiale

Opgaver

  1. Opgaver fra tidligere dage.
  2. Benyt Valgrind til at fjerne memory leaks fra løsningerne til tidligere opgaver.