Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Relevanta dokument
TDIU01 - Programmering i C++, grundkurs

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Klassdeklaration. Metoddeklaration. Parameteröverföring

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Programmeringsteknik med C och Matlab

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Lathund. C för inbyggda system

Repetition C-programmering

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Introduktion C-programmering

SMD 134 Objektorienterad programmering

6.1 Kompilering och lite grundläggande information

Enkla datatyper minne

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Data, typ, selektion, iteration

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Övning från förra gången: readword

Lathund. Pacific C för MS-DOS

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

C++ - En introduktion

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

F5: Högnivåprogrammering

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Variabler och konstanter

F5: Högnivåprogrammering

Parameteröverföring. Exempel. Exempel. Metodkropp

Programmeringsteknik I

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Lathund. C för inbyggda system

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Användarhandledning Version 1.2

TDIU01 - Programmering i C++, grundkurs

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Övning2. Variabler. Data typer

Planering Programmering grundkurs HI1024 HT 2014

TDDC77 Objektorienterad Programmering

Beräkningsvetenskap föreläsning 2

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Programmering i C, 7,5 hp

F4. programmeringsteknik och Matlab

1 Funktioner och procedurell abstraktion

Översikt över Visual Basic

Objektorienterad programmering Föreläsning 4

Språket Python - Del 1 Grundkurs i programmering med Python

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

TDDC76 - Programmering och Datastrukturer

DD1361 Programmeringsparadigm. Carina Edlund

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Programmering A. Johan Eliasson

Planering Programmering grundkurs HI1024 HT TIDAA

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

En kort text om programmering i C.

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

C-programmering, föreläsning 1 Jesper Wilhelmsson

C++ Slumptalsfunktioner + switch-satsen

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Visual Basic, en snabbgenomgång

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Pascal... Pascal. Pascal... Pascal...

Föreläsning 7. Nyckelord I Java. Uttryck. Uttryck, Operatorer Och Kontrollflöden

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Föreläsning 3: Booleans, if, switch

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

C konstruerades i början på sjuttiotalet av Dennis Ritchie vid Bell Laboratories.

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Pekare och arrayer. Indexering och avreferering

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

C++-programmets beståndsdelar

Heltalsrepresentation. Fler byggstenar. Overflow och Underflow. TvŒ-komplement. FlyttalsvŠrden. Fyra heltalstyper. Tecken-bit

Grunderna i stegkodsprogrammering

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper

Föreläsning 3-4 Innehåll

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

2 Pekare och dynamiska variabler.

Planering Programmering grundkurs HI1024 HT data

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Programmering för språkteknologer I, VT2012. Rum

TDIU01 - Programmering i C++, grundkurs

Funktionens deklaration

Att använda pekare i. C-kod

Transkript:

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära konstruktionen utan att behöva skriva maskinkod C är i det närmaste industristandard I och med detta är C ett språk som varje teknolog bör vara bekant med Detta kapitel är tänkt att introducera den oinvigde programmeraren i C Beskrivningen är mycket kortfattad och absolut inte tillräcklig för att kunna skriva program i C För att skriva fungerande program rekommenderas boken The C Programming Language av Kerninghan & Ritchie C är ett svagt typat språk till skillnad från Pascal och Simula Stark typning innebär att funktioner, procedurer och operatorer definierade för en viss datatyp endast kan användas på data av samma typ I C finns en möjlighet att definiera exempelvis en pekare till vad som helst och använda denna pekare till heltal och pekare till flyttal Detta betyder att C program har hög flexibilitet men svårfunna programmeringsfel Ett enkelt C-program kan se ut enligt nedan; #include constantsh #define ANTAL 10 char tecken; /* Globala variabel */ main() /* Huvudprogram */ int x,y,sum /* Lokala variabler */ x=y=0; /* Satser */ sum=rakna(x,y); /* Funktionsanrop */ /* Satser */ /* Slut på main */ int rakna(int k, int r) /* Funktionen rakna */ int res; /* Satser */ return(res); /* returnera beräknat värde */ 1

Kommentarer till programmet: include: Till C finns ett bibliotek med diverse standardfunktioner eller funktioner programmeraren själv har skapat, så kallade include-filer Kommando till förprocessorn define: Definierar ett macron I exemplet betyder detta att ANTAL ersätts med 10 i programmet Kommando till förprocessorn Kommentarer: Allt mellan /* och */ betraktas som kommentarer globala variabler: Variabler definierade utanför main betraktas som globala Dessa gäller överallt main: Själva huvudprogrammet lokala variabler: Variabler definierade i en funktion betraktas som lokala Dessa gäller endast i funktionen Tilldelning: = är tecknet för att tilldela en variabel något värde Avsluta satser: ; är tecknet som avslutar en sats Sammansatta satser: och används för att knyta samman flera satser till ett block Jämför Pascal s begin och end Funktionsanrop: En funktion anropas med funktionsnamnet och eventuella argument Funktioner: int talar om vad för datatyp funktionen returnerar Variablerna k,r är lokala och av samma typ som x,y res är returnerat värde och av samma typ som sum 001 Typer, Uttryck och Operatorer Det finns ett fåtal datatyper i C char Tecken, oftast 8 bitar int Heltal, storleken beror på maskinen float Flyttal double Dubbel flyttal Till dessa kan knytas ett antal giltiga förtyper short halverar antal bitar till integer long fördubblar antal bitar till integer signed Med teckenbit unsigned Utan teckenbit 2

Exempel: Om inget anges till kompilatorn (Kap??) gäller för -68 char = unsigned short int: 8 bitar utan tecken int = signed int: 16 bitar med tecken unsigned int : 16 bitar utan tecken long int = signed long int : 32 bitar med tecken unsigned long int : 32 bitar utan tecken Pekare Alltid 32 bitar utan tecken Konstanter En heltalskonstant skrives: Decimalt 65 Oktalt Inleds med 0 Exempelvis: 0101 Hexadecimalt Inleds med 0x Exempelvis: 0x41 Flyttal anges med decimalpunkt Exempelvis: 655 En teckenkonstant skrives med tecknet inom Exempelvis: A En teckensträng skrives inom Exempelvis: Hej Varje teckensträng avslutas med NULL (0x00) Matematiska operatorer + Addition - Subtraktion * Multiplikation / Heltalsdivision % Modulo division Jämförelseoperatorer > Större än >= Större än eller lika med < Mindre än <= Mindre än eller lika med == Logiska operatorn LIKA MED!= Logiska operatorn ICKE LIKA MED Logiska operatorn ELLER && Logiska operatorn OCH 3

Bitoperatorer & OCH ELLER ˆ Exklusiv ELLER << Vänsterskift >> Högerskift Komplement 002 Funktioner Funktioner i C bryter ner och förenklar stora program C program består oftast av många små funktioner (eventuellt i olika filer, det finns länkare), för att hanteringen av programmet skall bli enklare En funktion skapas genom att skriva den enligt prototypen; (parameterlista) satser resultattyp funktionsnamn Resultattyp är vilken datatyp funktionen returnerar Returneras inget används void och skrives inget blir resultatet int Funktionsnamnet är upp till programmeraren Parameterlistan innehåller vilka parametrar funktionen anropas med Man måste ange typen för varje parameter Om funktionen saknar parametrar används typen void Exempel: Funktionen kalle anropas med int k, char c och returnerar inget void kalle(int k, char c) int n; /* En lokal variabel, gäller endast i funktionen */ sats; sats; return; Anropet av funktionen kalle; kalle(2, A ); 4

Exempel: En liknande funktion som kalle men pelle returnerar en int int pelle(int k, char c) int n; /* En lokal variabel, gäller endast i funktionen */ sats; sats; return(n); Anropet av funktionen pelle; r=pelle(2, A ); /* r och pelle måsta vara av samma typ (int) */ 003 Flödeskontroll Flödeskontroll används i C för att beskriva alternativa vägar som programmet kan ta Allmänt gäller att alla satser kan göras sammansatta med (jmf Pascal s begin) och (jmf Pascal s end) if-satsen Det vanligaste sättet att åstadkomma alternativa vägar i ett program är med ifsatsen if (uttryck) sats Om uttryck är sant (inte noll) utföres sats(er) Exempel: if ( teck == A ) /* Om teck s innehåll är lika med ett A */ k = 2; /* Tilldela k värdet 2 */ b = teck; /* Flytta teck s innehåll till b */ En annan version av if har formen if (uttryck) sats 1 else sats 2 Om uttryck är sant (inte noll) utföres sats 1 annars sats 2 5

Exempel: if ( teck == A ) /* Om teck är lika med ett A */ k = 2; /* Tilldela k värdet 2 */ b = teck; /* Flytta teck till b */ else /* Om teck inte är lika med ett A */ teck = B ; /* Tilldela teck tecknet B */ while-, do-while-sats Ett sätt att åstadkomma repetition är med while-satsen Den allmänna formen är; while (uttryck) sats Så länge uttryck är sant, utföres sats Tänk på att om uttryck är falskt från början utföres inte sats Exempel: Så länge int n är mindre än eller lika med 10, räkna ner int k n=0; while (n <= 10) k--; n++; Jämfört med; do sats while (uttryck); vilken alltid utföres minst en gång och testas därefter Sammanfattning: I while testas först uttrycket och sats(er) utföres om sant, medan i do-while testas uttrycket efter varje utförd sats(er) Lägg märke till var ett semikolon avslutar satsen for-satsen Den allmänna formen för for-satsen är; for (uttryck 1;uttryck 2;uttryck 3) for är ekvivalent med följande while-sats uttryck 1 while (uttryck 2) sats uttryck 3; uttryck 1 utföres en gång före första varvet uttryck 2 utföres först en gång på varje varv och är det uttryck som styr repetitionens fortsättning uttryck 3 utföres sist på varje varv Oftast används for när det finns behov av att räkna upp/ner på varje varv 6

Exempel: Skriv ut k s värde från 0 till 99 for (k=0; k < 100; k++) printf( K-antal=%x\n,k); switch-satsen switch är en naturlig sats att använda i flervalssituationer i stället för if Den allmänna formen är; switch (uttryck) case konst : sats case konst : sats case konst : sats default : sats Beroende på utfallet av variablen uttryck (jämfört med konst), utföres de olika satserna Satsen efter default utföres om inga av case-satserna blir uppfyllda Exempel: c är av typen char Testa vilket tecken det är och addera till ett värde till int k beroende på tecknet switch (c) case A : k=k+1; break; /* Om c == A öka k med ett */ case B : k=k+2; break; /* Om c == B öka k med två */ case C : k=k+3; putc(c); break;/* Om c == C öka k med tre, skriv c */ default : k=0; break; /* Om c!= (A B C) sätt k = 0 */ Exekveringen av break medför att switch-satsen avbrytes Finns det inget break fortsätter exekveringen med nästa sats vilket inte var meningen i detta fallet break, continue Ibland är det nödvändigt (jämför switch) att avbryta exekveringen av en slinga utan att fullfölja break-satsen förorsakar att den innersta loopen (for, while, do eller switch) avbryts omedelbart continue är mycket likt break Skillnaden är att continue avbryter bara pågående iteration i for, while och do 7

004 Pekare, fält och poster En pekare i C är referenser (adresser) till objekt (minnesutrymme) Pekarvariabler deklareras enligt: int *ip; En pekare som pekar på en integer char *ip; En pekare som pekar på ett tecken Fält är ett sätt att lagra ett antal värden av samma typ under samma namn Ett fält deklareras enligt: int iflt[10]; Ett heltalsfält med tio element char buf[100]; Ett teckenfält med 100 element OBS! Fälten s index börjar på noll OBS! Poster i C kallas struct På samma sätt som i fält vill man lagra variaber under samma namn, men i struct kan dessa vara av olika typer Exempel: struct bok char titel[50], författare[100]; int antal sidor,pris; float vikt; ; All hantering av pekare, fält och poster hänvisas till R&K och finessen med dessa vilket förtydligar användbarheten 005 Fallgropar Det finns ett antal vanliga fel i C Tilldelning skrivs med ett likhetstecken Likhetstest skrivs med två likhetstecken Skilj mellan logiska operationerna && och och motsvarande bitoperationer & och Första elementet i ett fält börjar på noll Blanda inte ihop pekarens värde (pek) och värdet av pekaren (*pek) Teckensträng ( hello ) avslutas med NULL, ej att förväxla med teckenkonstanten ( A ) Samma typer på bägge sidor av tilldelningstecknet?? case i switch-satsen avslutas inte med ett break 8