01.09.2013 Views

Introduktion til C programmering

Introduktion til C programmering

Introduktion til C programmering

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

∗ voel@math.ku.dk<br />

<strong>Introduktion</strong> <strong>til</strong> C <strong>programmering</strong><br />

Rasmus Erik Voel Jensen ∗<br />

Uge 17


• Formalia<br />

Dagens forelæsning<br />

• Indledende <strong>programmering</strong>, main, include, printf, variable, scanf,<br />

if-else, statements, eksempler p˚a tavle<br />

• Teori: Sprog og maskiner – C som sprog – imperativt, kompileret,<br />

eksplicit statisk typet og maskinnært<br />

• Værktøj, igang i praksis<br />

1


Kursets form˚al, omfang, indhold og fokus<br />

• Basal C-<strong>programmering</strong><br />

• 2,5 ects = 5–7 time/uge, heraf 4×45min forelæsning og øvelser.<br />

• Praktisk implementation/kendskab, learning by doing<br />

• Teoretisk fundament, smagsprøver p˚a underliggende matematik<br />

• Anvendelighed – beregninger, cairo, datalogisk forst˚aelse<br />

• Sjovt og smukt<br />

2


Litteratur<br />

• Absolute Beginner’s Guide to C – grundbog, pensum/kursusniveau,<br />

forklarer grundigt og er rimeligt let læst – dos, imperativ<br />

• Online dokumentation – api, man-pages, kdevelop<br />

• K&R: The C programming language – Bogen om C, forudsætter<br />

kendskab <strong>til</strong> <strong>programmering</strong>, supplerende litteratur<br />

3


Ugeopgaver, forelæsninger og øvelser<br />

• Ugeopgaver, obligatoriske, learning by doing, eksperimentér, egne<br />

idéer, grupper, opgave per person, afleveres per mail (voel@math.<br />

ku.dk) inden Søndag, angiv holdnummer.<br />

– Opgaver; sværhedsgrad, omfang<br />

– Noter; stikord, spørgsm˚al, kommentarer<br />

• Forelæsning: Grundlæggende <strong>programmering</strong> og teoretiske tangenter.<br />

Blandet niveau, 1-2 timer og umiddelbart derefter øvelser<br />

• Øvelser: Arbejd med ugeopgaverne, individuel feedback og hjælp<br />

fra instruktor<br />

4


Foreløbig kursusplan<br />

• Uge 17-19. Grundlæggende C <strong>programmering</strong>, kontrolflow og arrays,<br />

funktioner og api. Bog del 1, 2, 3, 5. Programmeringssprog,<br />

binære tal, interface – implementation<br />

• Uge 20-21. Pointere og stakke, sortering og søgning. Bog del 4.<br />

Maskinmodeller, algoritmer og datastrukturer<br />

• Uge 22-24. Projekt, samt repetetion og uddybning<br />

5


NB: Holdtidspunkt<br />

Grupper<br />

Aftal møde<br />

Navne<br />

6


• √ Formalia<br />

Dagens forelæsning<br />

• Indledende <strong>programmering</strong>, main, include, printf, variable, scanf,<br />

if-else, statements, eksempler p˚a tavle<br />

• Teori: Sprog og maskiner – C som sprog – imperativt, kompileret,<br />

eksplicit statisk typet og maskinnært<br />

• Værktøj, igang i praksis<br />

7


• Computer vs. mennesker<br />

• Tal, logik<br />

• Sekventiel udførsel, opskrift<br />

Hvad er et program<br />

• Bogstaveligt, - ingen fejltolerance<br />

8


Hello World...<br />

/* Simple program that prints a greeting to the screen */<br />

#include /* needed for printf */<br />

int main(int argc, char** argv) {<br />

printf("Hello world!\n");<br />

return 0;<br />

}<br />

9


• /* Kommentarer */<br />

...Hello World<br />

• int main(...) {...} – hovedfunktion, startpunkt<br />

• printf(...) – udskrivning<br />

• "tekstreng hvor \n betyder linjeskift"<br />

• statements;<br />

• Detaljer: #include og return 0<br />

• printf ... udskriv heltal, %d – udskriv flydende kommatal, %f<br />

10


Hello World...<br />

/* Simple program that prints a greeting to the screen */<br />

#include /* needed for printf */<br />

int main(int argc, char** argv) {<br />

printf("Hello world!\n");<br />

printf("... and hello %d %f\n", 17, 41.99999999);<br />

return 0;<br />

}<br />

11


Eksempel med variable...<br />

/* just some semirandom calculations */<br />

#include <br />

int main(int argc, char** argv) {<br />

int i, j;<br />

float f;<br />

f = 0.2617994;<br />

j = 11000;<br />

scanf("%d", &i);<br />

j = j + i * i - 33;<br />

printf("%d\n%f\n", j*j, f * i);<br />

return 0;<br />

}<br />

12


...eksempel med variable<br />

• int og float - deklarering af variable. Heltal og flydende kommatal.<br />

• andre typer: double, char, short, long og henholdsvis signed og<br />

unsigned.<br />

• Ændring fra bog: heltal < 2.147.483.648<br />

• scanf indlæsning, omvendt printf. Bemærk &<br />

• <strong>til</strong>deling =, almindelige regneoperationer + - * / %<br />

13


#include <br />

Eksempel med if-else...<br />

int main(int argc, char** argv) {<br />

int svar, resultat = 17 * 42;<br />

printf("Hvad er 17*42?\n");<br />

if(scanf("%d", &svar) != 1) {<br />

printf("Et tal tak!\n");<br />

} else if(svar == resultat) {<br />

printf("Korrekt udregnet!\n");<br />

} else if(svar < resultat) {<br />

printf("Nej, 17*42 er mere end det...\n");<br />

} else {<br />

printf("Nej, du gættede for højt...\n");<br />

}<br />

return 0;<br />

}<br />

14


...eksempel med if-else<br />

• if(betingelse) {s˚a ... } else {ellers ... }<br />

• { blok; statements...; }<br />

• Sammenligning == != < > >=


• √ Formalia<br />

Dagens forelæsning<br />

• √ Indledende <strong>programmering</strong>, main, include, printf, variable, scanf,<br />

if-else, statements, eksempler p˚a tavle<br />

• Teori: Sprog og maskiner – C som sprog – imperativt, kompileret,<br />

eksplicit statisk typet og maskinnært<br />

• Værktøj, igang i praksis<br />

16


Hvad er en computer<br />

• CPU, registre og hukommelse. C vs. maskinkode<br />

• G˚a <strong>til</strong> næste instruktion, læs og udfør, ad nauseum<br />

• Eksempel: 1 = load, 2 = store, ..., 7 = float division, 8 = compare,<br />

..., 17 = jump if not equal, ... Registre 1-4, instruktionsposition.<br />

• int i = 20; if(i != 0) { i = 100 / i; }<br />

... 143 144 145 146 147 148 ... 712 (i) 713 ...<br />

... 1 712 2 8 2 0 17 3 1 713 3 7 3 2 2 2 712 2 ... 20 100 ...<br />

17


Sprog → maskinkode<br />

• Oversættelse fra tekstfil <strong>til</strong> maskinkode<br />

• Preprocessor, oversætter, linker<br />

• gcc -o programnavn kildekode.c<br />

• gcc -Wall -g -o programnavn kildekode.c<br />

• Oversættelse, fortolkning, just-in-time kompilering<br />

18


Programmeringssprog<br />

• Syntaks vs. semantik; C: printf("Hello World\n"); scheme:<br />

(display "Hello World\n") java: System.out.println("Hello World");<br />

python: print "Hello World" dansk: Skriv Hello World p˚a skærmen<br />

• Typesystem: Eksplicit vs. implicit, statisk vs. dynamisk<br />

• Eksplicit lagerstyring vs. garbage collection<br />

• Maskinnært vs. højere niveau (højniveau vs. assembler)<br />

• Generelt system<strong>programmering</strong>ssprog, vs. scripting (python, ruby,<br />

lua) vs. domænespecifikke sprog (maple, octave, R, SQL)<br />

• Imperativt vs. objektorienteret (java, ecmascript) vs. funktionsorienteret<br />

(sml, haskell, lisp, scheme, λ-kalkyle) vs. deklarativt<br />

(prolog)<br />

19


• √ Formalia<br />

Dagens forelæsning<br />

• √ Indledende <strong>programmering</strong>, main, include, printf, variable, scanf,<br />

if-else, statements, eksempler p˚a tavle<br />

• √ Teori: Sprog og maskiner – C som sprog – imperativt, kompileret,<br />

eksplicit statisk typet og maskinnært<br />

• Værktøj, igang i praksis<br />

20


Værktøj, igang i praksis<br />

• Redigér, oversæt, kør – kræver blot en editor (e.g. emacs) og en<br />

c-compiler (e.g. gcc) – kan installeres under windows via cygwin.<br />

• Integreret udviklingsmiljø – kdevelop under linux – lettere at bruge,<br />

automatisk oversættelse, automake etc.<br />

• Start af projekt i kdevelop:<br />

– Menu: ”Project”→ ”New Project...”<br />

– Vælg ”C”, ”Simple Hello world program”, og indtast programnavn,<br />

og hvor i jeres hjemmekatalog programmet skal ligge<br />

– next, next, next, next, finish.<br />

21


Kdevelop fortsat<br />

– [F8] oversætter programmet. Svar ”Run them”hvis den spørger<br />

om den skal køre automake etc.<br />

– [shift] + [F9] kører programmet, hvis der er lavet ændringer oversætter<br />

den det først.<br />

– Vinduet under programteksten, er uddata fra oversætteren. Hvis<br />

der er fejl i programmet, s˚a det ikke kan oversætte, vil der her<br />

st˚a ˚arsagen. Klik p˚a fejlbeskeden for at g˚a <strong>til</strong> p˚agældende linje i<br />

programmet<br />

– Debug ([F9]), breakpoints (højreklik, toggle breakpoint), stepping.<br />

22


Øvelser<br />

• Gruppearbejde, taktisk vs. strategisk (extreme programming)<br />

• Linux - vælg kde-session ved login, kdevelop i menu<br />

• Litteratur: Kapitel 2: main – Kapitel 3 /*Kommentarer*/ – Kapitel<br />

4 printf – Kapitel 5 variable int, float – Kapitel 8 scanf – Kapitel<br />

9 aritmetik – Kapitel 11 if else<br />

23


• √ Formalia<br />

Dagens forelæsning<br />

• √ Indledende <strong>programmering</strong>, main, include, printf, variable, scanf,<br />

if-else, statements, eksempler p˚a tavle<br />

• √ Teori: Sprog og maskiner – C som sprog – imperativt, kompileret,<br />

eksplicit statisk typet og maskinnært<br />

• √ Værktøj, igang i praksis<br />

24

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!