Introduktion C-programmering



Relevanta dokument
Repetition C-programmering

Grundläggande C-programmering del 1 - För maskinorienterad programmering

Grundläggande C-programmering del 1 - För maskinorienterad programmering

Grundläggande C-programmering

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

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

TDDC77 Objektorienterad Programmering

Introduk)on C- programmering

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

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

Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe

Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe

En kort text om programmering i C.

TDIU01 - Programmering i C++, grundkurs

Introduk)on C-programmering

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

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Föreläsning 10. Pekare (Pointers)

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

Funktionens deklaration

Föreläsning 4. Val, boolska värden, läsbarhet, osv

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

6.1 Kompilering och lite grundläggande information

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Det finns många flaggor till g++,

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

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

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

TDIU01 - Programmering i C++, grundkurs

Poster ( structar ) Postdeklarationer

Programmering av inbyggda system. Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10

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

Tentamen Grundläggande programmering

C++ - En introduktion

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

Grundkurs Programmering

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Objektorienterad programmering Föreläsning 4

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

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

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

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

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

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

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

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

Obligatorisk uppgift 5

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

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

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

Uttryck och villkor. Föreläsning 2

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

Vad har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar.

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

Pekare och arrayer. Indexering och avreferering

Programmeringsteknik med C och Matlab

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

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?

Övning2. Variabler. Data typer

TDDC76 - Programmering och Datastrukturer

Grundläggande datalogi - Övning 1

Föreläsning 2 Programmeringsteknik och C DD1316

Uttryck och villkor. Föreläsning 2

Exempel på ett litet Ada-program

F4. programmeringsteknik och Matlab

Grundläggande C-programmering del 4 Mer programstruktur samt Dynamisk minnesallokering Ulf Assarsson

Imperativ programmering. Föreläsning 2

Att använda pekare i. C-kod

Föreläsning 3. Programmering, C och programmeringsmiljö

Objektorienterad Programmering (TDDC77)

Programmering i C, 7,5 hp

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Enkla datatyper minne

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson.

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Innehållsförteckning

Tentamen ges för: Tentamensdatum: Tid:

Logik och kontrollstrukturer

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

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

SMD 134 Objektorienterad programmering

Data, typ, selektion, iteration

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Administration. EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment

*Pekarvärden *Pekarvariabler & *

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

C++-programmets beståndsdelar

Planering Programmering grundkurs HI1024 HT 2014

Programmeringsteknik I

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

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

TDIU01 - Programmering i C++, grundkurs

C++ - En introduktion

Transkript:

Introduktion C-programmering Viktor Kämpe

C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. 2

C Standarder 1978, K&R C (Kernighan & Ritchie) 1989, C89/C90 (ANSI-C) 1999, C99 (Rev. ANSI-standard) 2011, C11 (Rev. ANSI-standard) 3

Hello world! program #include <stdio.h> int main() { printf( Hello World!\n"); return 0; 4

Integrerad utvecklings miljö (IDE) Kör Bygg T ex CodeLite som är gratis och open-source. (http://codelite.org/ ) 5

Från terminalen > gcc o hello.exe main.c > hello.exe Hello World! > Bygg Kör 6

Variabler #include <stdio.h> int x; int main() { char y; x = 32; y = 'a'; x = x + y; Typ Variabelnamn printf("x har nu värdet %i och y har värdet %i som kodar tecknet %c\n", x, (int)y, y); return 0; Utskrift: x har nu võrdet 129 och y har võrdet 97 som kodar tecknet a 7

Deklarationer och tilldelningar #include <stdio.h> int x; int main() { char y; x = 32; y = 'a'; Deklarationer Tilldelningar x = x + y; printf("x har nu värdet %i och y har värdet %i som kodar tecknet %c\n", x, (int)y, y); return 0; En deklarerad variabel som ännu inte tilldelats ett värde är oinitialiserad 8

Typkonverteringar #include <stdio.h> int x; int main() { char y; Implicit typkonvertering x = 32; y = 'a'; x = x + y; Explicit typkonvertering printf("x har nu värdet %i och y har värdet %i som kodar tecknet %c\n", x, (int)y, y); return 0; Typkonvertering kallas också cast, och man säger att man castar. 9

10

C89 deklarationer först #include <stdio.h> int x; int main() { x = 32; En tilldelning innan deklarationerna är EJ tillåtet enligt C89 char y = 'a'; x = x + y; printf("x har nu värdet %i och y har värdet %i som kodar tecknet %c\n", x, (int)y, y); return 0; Fungerar ibland ändå (t ex i CodeLite), men inte i XCC12 som vi ska använda senare. 11

Funktioner #include <stdlib.h> int foo(int x, char y) { int sum = 0; argument while(y-- > 0) { sum += x*y; return sum; Returvärde av returtyp Argumenten är pass-by value. int var1; char var2 = 7; var1 = foo(5, var2); var2 har fortfarande värdet 7 efter funktionsanropet 12

Synlighet/Visibility/Scope Global synlighet Fil synlighet Local synlighet (global scope) (file scope) (e.g. function scope) 13

Synlighet på fil nivå #include <stdlib.h> char x; int foo() { // x är synlig // y är inte synlig char y; 14

Synlighet på funktionsnivå #include <stdlib.h> char x; int foo(float x) { // argumentet x (float) är synligt 15

Synlighet på funktionsnivå #include <stdlib.h> char x; int foo() { int x = 4; return x; 16

Vilken synlighet har högst prioritet? #include <stdio.h> int x; int foo(int x) { if( x == 0 ){ int x = 4; return x; Ok enligt C99, men ej C89 return x; int main() { x = 1; x = foo(0); printf("x is %i", x); return 0; Vad är x? 17

Funktionsprototyper #include <stdio.h> // funktionsprototyp int foo(int x); int main() { printf("x is %i", foo(0)); return 0; int foo(int x) { // funktionskropp 18

Programstruktur // main.c #include <stdio.h> #include "foo.h" int main() { printf("x is %i, foo(0)); return 0; // foo.h int foo(int x); // foo.c #include <stdlib.h> int foo(int x) { if( x == 0 ){ int x = 4; return x; return x; c-fil Inkluderar header-fil header-fil Innehåller funktionsprototyper c-fil header-filen måste inte ha samma namn som c-filen, men det är enklare så. 19

Från källkod till exekverbar 1. Preprocessing 2. Kompilering 3. Länkning 20

Preprocessorn // main.c #include <stdio.h> #include "foo.h" Copy-paste av filer #define MAX_SCORE 100 #define SQUARE(x) (x)*(x) Find-and-replace av strängar int main() { printf("högsta möjliga poäng är %i\n", MAX_SCORE); printf("kvadraten av 3 är %i\n", SQUARE(1+2)); printf("x is %i", foo(0)); return 0; Preprocessorn arbetar på källkoden på textnivå. 21

Kompilering Processar en c-fil i taget Skapar en objektfil som innehåller: Maskinkod för instruktioner Symboler för addresser För funktioner/variabler i objektfilen. För funktioner/variabler i andra objektfiler/bibliotek. 22

Länkning Sätter samman (flera) objektfiler till en exekverbar fil (.exe). Översätter symbolerna till (relativa) adresser. 23

Aritmetiska operatorer Basic assignment Addition Subtraction Unary plus (integer promotion) +a Unary minus (additive inverse) -a Multiplication Division Modulo (integer remainder) Increment Decrement Prefix Postfix Prefix Postfix a = b a + b a - b a * b a / b a % b http://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#arithmetic_operators ++a a++ --a a-- 24

Jämförelseoperatorer Equal to Not equal to Greater than Less than Greater than or equal to a == b a!= b a > b a < b a >= b Less than or equal to a <= b http://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#comparison_operators.2frelational_operators 25

Logiska operatorer Logical negation (NOT)!a Logical AND Logical OR a && b a b http://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#logical_operators 26

Bit operationer Bitwise NOT ~a Bitwise AND Bitwise OR Bitwise XOR Bitwise left shift Bitwise right shift a & b a b a ^ b a << b a >> b http://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#bitwise_operators 27

Sammansatta tilldelsningsoperatorer Operator name Syntax Meaning Addition assignment a += b a = a + b Subtraction assignment a -= b a = a - b Multiplication assignment a *= b a = a * b Division assignment a /= b a = a / b Modulo assignment a %= b a = a % b Bitwise AND assignment a &= b a = a & b Bitwise OR assignment a = b a = a b Bitwise XOR assignment a ^= b a = a ^ b Bitwise left shift assignment a <<= b a = a << b Bitwise right shift assignment a >>= b a = a >> b http://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#compound_assignment_operators 28

If-else satser int x = -4; if( x == 0 ){ //... if( x ){ //... else { //... Utvärderar till falskt, kör ej. Utvärderas till sant, kör, ty ( x!= 0 ) Noll betraktas som falskt. Allt som är skilt från noll betraktas som sant. 29

Loopar int x = 5; int x = 5; while( x!=0 ) x--; while( x ) x--; int x; for( x=5; x; ) x--; Tre ekvivalenta loopar. Om inga måsvingar används så är loop-kroppen ett enda uttryck. 30

Nästa föreläsning: Pekare

Pekare Har ett värde och en typ Värdet är en minnesadress. Typen talar om vad som finns där. 32

Operatorer för pekare Operator name Syntax Array subscript a[b] Indirection ("object pointed to by a") *a Reference ("address of a") &a Structure dereference ("member b of object pointed to by a") Structure reference ("member b of object a") a->b a.b http://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#member_and_pointer_operators Sista operatorn är för att referera medlemmar av en struktur (struct), så ej en pekare operator. 33