Introduktion til C programmering Rasmus Erik Voel Jensen Uge 17 voel@math.ku.dk
Dagens forelæsning Formalia Indledende programmering, main, include, printf, variable, scanf, if-else, statements, eksempler på tavle Teori: Sprog og maskiner C som sprog imperativt, kompileret, eksplicit statisk typet og maskinnært Værktøj, igang i praksis 1
Kursets formål, omfang, indhold og fokus Basal C-programmering 2,5 ects = 5 7½ time/uge, heraf 4 45min forelæsning og øvelser. Praktisk implementation/kendskab, learning by doing Teoretisk fundament, smagsprøver på underliggende matematik Anvendelighed beregninger, cairo, datalogisk forståelse Sjovt og smukt 2
Litteratur Absolute Beginner s Guide to C grundbog, pensum/kursusniveau, forklarer grundigt og er rimeligt let læst dos, imperativ Online dokumentation api, man-pages, kdevelop K&R: The C programming language Bogen om C, forudsætter kendskab til programmering, supplerende litteratur 3
Ugeopgaver, forelæsninger og øvelser Ugeopgaver, obligatoriske, learning by doing, eksperimentér, egne idéer, grupper, opgave per person, afleveres per mail (voel@math. ku.dk) inden Søndag, angiv holdnummer. Opgaver; sværhedsgrad, omfang Noter; stikord, spørgsmål, kommentarer Forelæsning: Grundlæggende programmering og teoretiske tangenter. Blandet niveau, 1-2 timer og umiddelbart derefter øvelser Øvelser: Arbejd med ugeopgaverne, individuel feedback og hjælp fra instruktor 4
Foreløbig kursusplan Uge 17-19. Grundlæggende C programmering, kontrolflow og arrays, funktioner og api. Bog del 1, 2, 3, 5. Programmeringssprog, binære tal, interface implementation Uge 20-21. Pointere og stakke, sortering og søgning. Bog del 4. Maskinmodeller, algoritmer og datastrukturer Uge 22-24. Projekt, samt repetetion og uddybning 5
NB: Holdtidspunkt Grupper Aftal møde Navne 6
Dagens forelæsning Formalia Indledende programmering, main, include, printf, variable, scanf, if-else, statements, eksempler på tavle Teori: Sprog og maskiner C som sprog imperativt, kompileret, eksplicit statisk typet og maskinnært Værktøj, igang i praksis 7
Hvad er et program Computer vs. mennesker Tal, logik Sekventiel udførsel, opskrift Bogstaveligt, - ingen fejltolerance 8
Hello World... /* Simple program that prints a greeting to the screen */ #include <stdio.h> /* needed for printf */ int main(int argc, char** argv) { printf("hello world!\n"); return 0; } 9
...Hello World /* Kommentarer */ int main(...) {...} hovedfunktion, startpunkt printf(...) udskrivning "tekstreng hvor \n betyder linjeskift" statements; Detaljer: #include <standardbiblioteker> og return 0 printf... udskriv heltal, %d udskriv flydende kommatal, %f 10
Hello World... /* Simple program that prints a greeting to the screen */ #include <stdio.h> /* needed for printf */ int main(int argc, char** argv) { printf("hello world!\n"); printf("... and hello %d %f\n", 17, 41.99999999); return 0; } 11
Eksempel med variable... /* just some semirandom calculations */ #include <stdio.h> int main(int argc, char** argv) { int i, j; float f; f = 0.2617994; j = 11000; scanf("%d", &i); j = j + i * i - 33; printf("%d\n%f\n", j*j, f * i); return 0; } 12
...eksempel med variable int og float - deklarering af variable. Heltal og flydende kommatal. andre typer: double, char, short, long og henholdsvis signed og unsigned. Ændring fra bog: heltal < 2.147.483.648 scanf indlæsning, omvendt printf. Bemærk & tildeling =, almindelige regneoperationer + - * / % 13
Eksempel med if-else... #include <stdio.h> int main(int argc, char** argv) { int svar, resultat = 17 * 42; printf("hvad er 17*42?\n"); if(scanf("%d", &svar)!= 1) { printf("et tal tak!\n"); } else if(svar == resultat) { printf("korrekt udregnet!\n"); } else if(svar < resultat) { printf("nej, 17*42 er mere end det...\n"); } else { printf("nej, du gættede for højt...\n"); } return 0; } 14
...eksempel med if-else if(betingelse) {så... } else {ellers... } { blok; statements...; } Sammenligning ==!= < > >= <= Tildeling = vs. sammenligning == ikke ligning Flydende tal og sammenligninger. 15
Dagens forelæsning Formalia Indledende programmering, main, include, printf, variable, scanf, if-else, statements, eksempler på tavle Teori: Sprog og maskiner C som sprog imperativt, kompileret, eksplicit statisk typet og maskinnært Værktøj, igang i praksis 16
Hvad er en computer CPU, registre og hukommelse. C vs. maskinkode Gå til næste instruktion, læs og udfør, ad nauseum Eksempel: 1 = load, 2 = store,..., 7 = float division, 8 = compare,..., 17 = jump if not equal,... Registre 1-4, instruktionsposition. int i = 20; if(i!= 0) { i = 100 / i; }... 143 144 145 146 147 148... 712 (i) 713...... 1 712 2 8 2 0 17 3 1 713 3 7 3 2 2 2 712 2... 20 100... 17
Sprog maskinkode Oversættelse fra tekstfil til maskinkode Preprocessor, oversætter, linker gcc -o programnavn kildekode.c gcc -Wall -g -o programnavn kildekode.c Oversættelse, fortolkning, just-in-time kompilering 18
Programmeringssprog Syntaks vs. semantik; C: printf("hello World\n"); scheme: (display "Hello World\n") java: System.out.println("Hello World"); python: print "Hello World" dansk: Skriv Hello World på skærmen Typesystem: Eksplicit vs. implicit, statisk vs. dynamisk Eksplicit lagerstyring vs. garbage collection Maskinnært vs. højere niveau (højniveau vs. assembler) Generelt systemprogrammeringssprog, vs. scripting (python, ruby, lua) vs. domænespecifikke sprog (maple, octave, R, SQL) Imperativt vs. objektorienteret (java, ecmascript) vs. funktionsorienteret (sml, haskell, lisp, scheme, λ-kalkyle) vs. deklarativt (prolog) 19
Dagens forelæsning Formalia Indledende programmering, main, include, printf, variable, scanf, if-else, statements, eksempler på tavle Teori: Sprog og maskiner C som sprog imperativt, kompileret, eksplicit statisk typet og maskinnært Værktøj, igang i praksis 20
Værktøj, igang i praksis Redigér, oversæt, kør kræver blot en editor (e.g. emacs) og en c-compiler (e.g. gcc) kan installeres under windows via cygwin. Integreret udviklingsmiljø kdevelop under linux lettere at bruge, automatisk oversættelse, automake etc. Start af projekt i kdevelop: Menu: Project New Project... Vælg C, Simple Hello world program, og indtast programnavn, og hvor i jeres hjemmekatalog programmet skal ligge next, next, next, next, finish. 21
Kdevelop fortsat [F8] oversætter programmet. Svar Run them hvis den spørger om den skal køre automake etc. [shift] + [F9] kører programmet, hvis der er lavet ændringer oversætter den det først. Vinduet under programteksten, er uddata fra oversætteren. Hvis der er fejl i programmet, så det ikke kan oversætte, vil der her stå årsagen. Klik på fejlbeskeden for at gå til pågældende linje i programmet Debug ([F9]), breakpoints (højreklik, toggle breakpoint), stepping. 22
Øvelser Gruppearbejde, taktisk vs. strategisk (extreme programming) Linux - vælg kde-session ved login, kdevelop i menu Litteratur: Kapitel 2: main Kapitel 3 /*Kommentarer*/ Kapitel 4 printf Kapitel 5 variable int, float Kapitel 8 scanf Kapitel 9 aritmetik Kapitel 11 if else 23
Dagens forelæsning Formalia Indledende programmering, main, include, printf, variable, scanf, if-else, statements, eksempler på tavle Teori: Sprog og maskiner C som sprog imperativt, kompileret, eksplicit statisk typet og maskinnært Værktøj, igang i praksis 24