Introduktion til C programmering
Introduktion til C programmering
Introduktion til C programmering
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