Kurt Nørmark
Institut for Datalogi, Aalborg Universitet
| Sammendrag Forrige lektion Næste lektion Stikord Referencer Indhold | Dette sæt af slides udgør den faglige introduktion til programmering i C. Lektion er koncentreret om udtryk, operatorer, assignment operatorerne, samt udskrivning og indlæsning. |
| Programbegrebet |
| Hello World i C Slide Indhold Stikord Referencer |
|
| Program: Hello World. |
|
| Program: Lærebogens første program - som vist på side 67. |
|
| Program: Lærebogens første program - nu OK. |
|
| Program: Lærebogens første program - dårlig stil. |
|
| Program: Lærebogens første program - små og store bogstaver i navne. |
|
| Observationer om de første programmer Slide Indhold Stikord Referencer |
|
|
| Programbeskrivelse og programudførelse Slide Indhold Stikord Referencer |
|
|
| En compiler Slide Indhold Stikord Referencer |
|
|
| En teksteditor Slide Indhold Stikord Referencer |
|
|
|
| Variable og Assignment |
| Assignment til variable Slide Indhold Stikord Referencer |
|
| Begrebet variabel: En variabel er en navngiven plads i computerens arbejdslager, som kan indeholde en værdi af en bestemt type. | ||
| Begrebet erklæring: En skal introduceres i en erklæring (declaration) - hvor også typen angives - inden den kan anvendes i kommandoer og udtryk. | ||
| Begrebet assignment: Et assignment er en kommando, som ændrer værdien af en variabel. |
| Syntax: |
|
| Program: Et simpelt program med variable og assignments. |
|
| Program: Program output. |
|
| Program: En variant af programmet som illustrerer 'små og store bogstaver' i variabelnavne. |
|
| Initialisering Slide Indhold Stikord Referencer |
|
| Begrebet initialisering: Ved initialisering forstås tilskrivning af en startværdi til en variabel |
| Program: En variation af programmet fra forrige slide. |
|
| Program: Et program med en uinitialiseret variabel. |
|
| Program: Program output. |
|
|
| Assignments af formen i = i + 1 Slide Indhold Stikord Referencer |
|
|
| Program: Et program med forskellige optællinger og nedtællinger. annotation |
|
| Program: Output fra ovenstående program. |
|
| Opgave 2.2. Anvendelse af assignments | Denne opave er lavet med det formål at du/I selv skal afklare nogle forhold om assignments. De fleste forhold vil blive diskuteret senere i lektionen. Og det er helt OK, i første omgang, blot at undre sig over nogle af de assignments, der bliver vist. I næste forelæsning vil vi sikkert vende tilbage til nogle af detaljerne, som du undrer dig over i denne opgave. Se på følgende program:
Forsøg på at forklare hver af de fire midterste programlinier, hvor de indgår et assignment. Skriv - i en kommentar efter hver line - de forventede værdier af v, w og r. Undersøg om der er nogle af linierne, der giver problemer i forhold til compilering. Forklar i så fald hvilke problemer der opstår (og udkommenter disse linier, så du kan komme videre i opgaven). Indsæt en passende printf kommando af v, w og r efter hvert assignment, som gerne skulle bekræfte de værdier af variablene, som du har forudsagt. |
| Variable og konstanter Slide Indhold Stikord Referencer |
|
| Program: Et program med flere symbolske konstanter. |
|
| Program: Et program uden brug af symbolske konstanter. |
|
| Program: Program output. |
|
| Program: De to matematiske konstanter pi og e, og forsøg på assignments til disse. |
|
|
| Et første blik på datatyper i C Slide Indhold Stikord Referencer |
|
| Tabel. |
|
|
| Program: Illustration af konkrete typer i et C program. |
|
|
| Opgave 2.4. Programmeringsstil | Et C program kan formateres på mange forskellige måder. Indrykning, tomme linier og ekstra mellemrum kan relativt frit tilføjes i ethvert C program. En bestemt programmeringsstil (programming style, coding style) giver anvisninger på, hvordan et program skal formateres. Dårlig og inkonsistent programmeringsstil hæmmer læsbarheden af et program. Formålet med denne opgave er at skabe bevidsthed om programmeringsstil. Emnet vil blive bragt op flere gange undervejs i kurset. Her er et eksempel på et program, som er formateret på en overordentlig uheldig måde:
Kan programmet oversættes? (Kopier det fra browseren over i en tekstfil via din teksteditor, og forsøg at oversætte programmet). Kan det køres? Diskuterer svaghederne i det viste program. Kan du/I forstå hvad der sker i programmet? Introducer en bedre programmeringsstil i programmet, ved udelukkende at ændre på 'white spacing' (indrykning, tomme linier, og antallet af mellemrum mellem programmets dele). Dette er en god øvelse, idet den tvinger jer til at tage stilling til rollen af hvert symbol I møder, uafhængig af hvordan symbolet indgår i opstillingen af programmet. Compileren arbejder på samme måde - i det mindste i udgangspunktet. Lav endelig en version af programmet, som giver endnu større læsbarhed ved f.eks. at ændre på variabelnavngivning. Du må også gerne ændre på promten og øvrige udskrifter i programmet. Der er mange ressourcer af programmeringsstil (i C) på nettet. Læs indledningsvis Wikipedia's artikel om emnet. |
| Opgave 2.4. Et program der adderer tre heltal | Denne opgave er lavet for at du skal undre dig over hvad du oplever i de givne programmer. Dernæst skal du forsøge at forstå det. Detaljerne fremgår ikke nødvendigvis af lærebogen. Se på følgende program, som adderer tre heltal:
Oversæt og kør programmet. Forklar programmets opførsel. Kør dernæst programmet
og indlæs tallene 010, 011, og 012. Indlæs også 10, 11 og 12. Forklar resultaterne. Kør så programmet
med samme input som ovenfor. Forklar hvad placeholderen %o i scanf gør i forhold til %d. Og kør så sluttelig følgende program med 10, 11 og 12 som input
Kør det også med følgende input: 12 13 14. Forklar hvad du oplever. Har du forstået reglerne? Leg gerne med variationer. |
| Udtryk og Operatorer |
| Udtryk Slide Indhold Stikord Referencer |
| Begrebet udtryk: Et udtryk er et programfragment der beregnes med henblik på at opnå en værdi, som tilhører en bestemt type. Et udtryk sammensættes af operatorer og operander. |
| Antag at både x og y er af typen int, at værdien af x er 14 og at y er 3: |
| Tabel. Forskellige udtryk med udtrykkenes typer og værdier. |
|
|
|
| Beregning af sammensatte udtryk Slide Indhold Stikord Referencer |
|
|
|
|
| Prioritering af operatorer Slide Indhold Stikord Referencer |
|
| Tabel. En operatorprioriteringstabel for udvalgte operatorer. |
|
| Associering af operatorer Slide Indhold Stikord Referencer |
|
|
| Program: Et C program med udtrykket 10 - 1 - 9 / 3 / 2. |
|
| Program: Output fra ovenstående program. |
|
|
| Operator tabel for C Slide Indhold Stikord Referencer |
| Tabel. Den fulde operator prioriteringstabel for C. |
|
| Assignment operatorer i C |
| Eksempler på assignments i C Slide Indhold Stikord Referencer |
|
| Program: Assignments på formen a = b = c = d = 7. |
|
| Program: Assignments på formen a = (b = 2) + (c = 3) - (d = 1). |
|
| Program: Assignments på formen a++, ++b, c-- og --d. |
|
| Program: Assignments ækvivalente til forrige eksempel. |
|
| Program: Assignments på formen a += 1 og c -= 1. |
|
| Program: Assignments samme form - men lidt mere generelt. |
|
| Program: Assignments på formen a++, ++b, c-- og --d - den fulde sandhed. |
|
| Assignments i C Slide Indhold Stikord Referencer |
|
| Opgave 2.5. Increment og decrement operatorerne | Se på følgende program, som indholder en række increments og decrements:
Lav en skrivebordsudførelse af programmet, og forklar hvad der udskrives i de tre kald af printf. I en skrivebordsudførelse gennemgås programmets enkelte trin manuelt - med papir og blyant eller ved en tavle - uden først at køre programmet på en computer. Når du er færdig med skrivebordsudførelsen, anbefales at du sammenligner dine resultater med den det resultat du får ved at køre programmet på din computer. |
| Udskrivning og Indlæsning |
| Udskrivning med printf Slide Indhold Stikord Referencer |
|
| Program: Udskrivning af variable af forskellige typer med printf. |
|
| Program: Output fra ovenstående program. |
|
|
|
| Indlæsning med scanf Slide Indhold Stikord Referencer |
|
| Program: Indlæsning og summering af tal. |
|
|
|
| Opgave 2.6. Indlæsning af doubles | Følgende simple program forsøger på at indlæse tre tal af typen double, beregne deres gennemsnit, og udskrive dette resultat:
Prøverkør programmet, og forklar hvorfor det ikke virker efter hensigten. Ret programmet, så det virker. Når du har forstået problemet, så prøv meget gerne forskellige andre variationer af tilsvarende fejl. Læs evt. på side 81 af lærebogen Problem Solving and Program Design in C, 6th edition for at forstå udfordringen. |
| Et input output eksempel Slide Indhold Stikord Referencer |
| Program: Et program der beregner arealet af en cirkel. |
|
| Program: Samme program med farvede fremhævninger af placeholders i format strengen printf og scanf. |
|
| Program: Input til og output fra programmet. |
|
| Program: Alternativ udgave af programmet - mere kompleks brug af format strengen. |
|
| Program: Alternativ udgave med farvede fremhævninger af kontrolstreng og parametre til printf. |
|
| Program: Input til og output fra det alternative program. |
|
| Opgave 2.8. Timer, minutter og sekunder | Skriv et C program, som indlæser et helt antal sekunder og som omregner dette tal til timer, minutter og sekunder på sædvanlig vis. Her er eksempler på input og ønsket output:
|
| Opgave 2.8. Erfaringer med scanf | Formålet med denne opgave er at give jer erfaring med formateret input med scanf funktionen fra stdio bibliotektet. Der vises et antal programmer herunder, hvor hvert program indlæser nogle data med scanf. Der gives et antal forslag til input linier. I skal afprøve hvert problem et antal gange, med den foreslåede input. I hvert tilfælde skal I forklare hvad der indlæses, og hvilken værdi der returneres af kaldet af scanf. Endvidere er det helt fint at variere både programmerne og input, for at få endnu mere indsigt og erfaring! I lærebogen kan du læse om scanf side 85 - 87. Jeg kan også anbefale afsnittet Formatted Input (scanf) fra Steve Summit's noter om C programmering (introductory og intermediate) som beskriver flere variationer af scanf end lærebogen. Her er første version af programmet, som indlæser tegn:
Afprøv programmet med følgende input (i et tilsvarende antal kørsler af programmet). Forklar dine observationer: abcd ab a b c d Her er næste version af programmet, som indlæser heltal:
Afprøv programmet med følgende input (i et tilsvarende antal kørsler af programmet). Forklar dine observationer: 123 456 123 456 123.456 123-456 123_456 123 Her er endnu en version af programmet, som indlæser heltal. I denne version er der foretaget en lille forandring af kontrolstrengen af scanf:
Afprøv programmet med følgende input (i et tilsvarende antal kørsler af programmet). Forklar dine observationer: 123;456 123; 456 123 ; 456 123:456 123.456; Og endnu en version af programmet, som indlæser heltal. Igen er der i denne version foretaget en mindre forandring af kontrolstrengen af scanf:
Afprøv programmet med følgende input (i et tilsvarende antal kørsler af programmet). Forklar dine observationer: 123 456 123abe456 123 abe 456 123 kat 456 -123abe-456 I den sidste version indlæser vi doubles:
Afprøv programmet med følgende input (i et tilsvarende antal kørsler af programmet). Forklar dine observationer: 12.34 56.78 12.34 56.78 12.34.56.78 12.34 56 . 78 12 34 012 034 12,34 .12e3 .4e-2 12a34 12-34 12 - 34 |
| Opgaver og praktiske detaljer |
| Om opgaverne - generelt Slide Indhold Stikord Referencer |
|
|
| Om opgaverne - i dag Slide Indhold Stikord Referencer |
|
|
|
| Feedback Slide Indhold Stikord Referencer |
|
|
Kapitel 2: Introduktion til C
Kursets hjemmeside Forfatteren's hjemmeside Om frembringelsen af disse sider Forrige lektion (top) Næste lektion (top) Forrige lektion (bund) Næste lektion (bund)
Genereret: 1. oktober 2012, 15:04:13