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

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

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

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

TDIU01 - Programmering i C++, grundkurs

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

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

Repetition C-programmering

Loopar och datatyper. Föreläsning 3

Strängar. Strängar (forts.)

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

Planering Programmering grundkurs HI1024 HT 2014

Introduktion C-programmering

En kort text om programmering i C.

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

Data, typ, selektion, iteration

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

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

Loopar och datatyper. Föreläsning 3

Klassdeklaration. Metoddeklaration. Parameteröverföring

SMD 134 Objektorienterad programmering

(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

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

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

Variabler och konstanter

Planering Programmering grundkurs HI1024 HT TIDAA

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

Objektorienterad Programmering (TDDC77)

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

6.1 Kompilering och lite grundläggande information

Objektorienterad Programmering (TDDC77)

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

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

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

Enkla datatyper minne

Programmeringsteknik med C och Matlab

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

Planering Programmering grundkurs HI1024 HT data

F4. programmeringsteknik och Matlab

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

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Föreläsning 3-4 Innehåll

TDIU01 - Programmering i C++, grundkurs

Exempel på ett litet Ada-program

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

Vad var C? okontrollerade brutala typomvandlingar tillåts. void * typinformation kvar, vild adressering, arraygränser, odenierade variabelvärden...

Lathund. Pacific C för MS-DOS

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

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

DD1361 Programmeringsparadigm. Carina Edlund

Övning2. Variabler. Data typer

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

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

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Omtentamen i Programmering C, Fri, Kväll,

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

Programmering i C, 7,5 hp

Programmering A. Johan Eliasson

Variabler använder man sig av för att under programkörningen spara data eller information i primärminnet. En variabel har typ, namn och värde.

Parameteröverföring. Exempel. Exempel. Metodkropp

Tentamen i Programmering grundkurs och Programmering C

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

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

Typkonvertering. Java versus C

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011,

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

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

Heltal(int) Programmeringsteknik 54

OOP Objekt-orienterad programmering

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Tentamen i Programmering grundkurs och Programmering C

F5: Högnivåprogrammering

Tentamen i Programmering grundkurs och Programmering C

1 Funktioner och procedurell abstraktion

F5: Högnivåprogrammering

Programmering i C. Christer Sandberg, Gunilla Eken, Stefan Bygde Olof Andersson Linus Källberg Caroline Uppsäll Johan Hägg

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

Tentamen i Programmering grundkurs och Programmering C

Föreläsning 2. Operativsystem och programmering

Introduktionslaboration

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Tentamen i Programmering grundkurs och Programmering C

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

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

C++ - En introduktion

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

#include <stdio.h> #include <string.h>

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDIU01 - Programmering i C++, grundkurs

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.

Hantering av textsträngar och talsträngar. William Sandqvist

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

Tentamen ID1004 Objektorienterad programmering December 15, 2012

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

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

Innehållsförteckning

OOP Objekt-orienterad programmering

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Transkript:

C-programmering Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur I Bilting, Skansholm: Vägen till C I Kernighan, Ritchie: The C Programming Language, Second edition, På nätet nns också t ex http://computer.howstuworks.com/c.htm () Aug 23, 2008 1 / 52

Vad är C? I Imperativt programmeringsspråk I Satser (kommandon) som utförs i sekvens I Data (variabler) som manipuleras I Funktioner med sidoeekter I Ofta iterationer (loopar) I Maskinnära men maskinobereoende (nåja... ) I minnesadresser, adressaritmetik I bitmanipulering I... I Litet, primitivt I Likheter med språk som Pascal och Fortran () Aug 23, 2008 2 / 52

Historik I Utformades ursprungligen av Dennis Ritchie 1972 för implementering operativsystem och andra systemprogram I Unix skrevs tidigt om i C I ANSI-standard från 1989 (ANSI-C) I Reviderad standard från 1999 (C99) I Inspirerat språk som C++ och Java () Aug 23, 2008 3 / 52

Jämförelse med ML I C är imperativt, ML är funktionellt I Språken har ganska olika syntax I C är statiskt typat: alla variabler har en typ I C är svagt typat: vissa typomvandlingar görs automatiskt och okontrollerade brutala typomvandlingar tillåts I C har ingen list-typ I I C kan man arbeta med minnesadresser (pekare) I Minneshanteringen i C måste ofta göras explicit I C kompileras till maskinkod medan ML ofta interpreteras (på någon nivå) I Det görs vanligen ingen runtime-kontroll när C-program exekverar (vild adressering, arraygränser, odenerade variabelvärden... ) () Aug 23, 2008 4 / 52

När, till vad och varför används C I För att vara nära maskinvaran (delar av OS, drivrutiner,... ) I Inbyggda system (t ex tvättmaskiner, bränslestyrning... ) I Tids- och/eller minneskritiska tillämpningar I När inga andra språk nns eller går att använda (litet språk - nns för alla processorer, kan köras på nakna system) I Programmering av parallelldatorer (Typiskt med C, C++ eller Fortran). (OpenMP nns bara för dessa språk) Dessutom är det en grund för förståelse av i första hand C++ () Aug 23, 2008 6 / 52

Exempel Ett program som skriver ut texten Hello, world /* hello.c Ett första, klassiskt exempel på ett C-program */ #include <stdio.h> int main() { printf("hello, world\n"); return 0; () Aug 23, 2008 8 / 52

Exempel: iteration, variabler /* squares.c Program som skriver en tabell över kvadrater av talen 1, 2,... 10 */ #include <stdio.h> int main() { int i = 1; while ( i<=10) { printf( "%d \t %d\n", i, i*i ); i = i + 1; return 0; () Aug 23, 2008 10 / 52

Kompilering bellatrix$ ls squares.c bellatrix$ cat squares.c /* squares.c Program som skriver en tabell över kvadrater av talen 1, 2,... 10 */ #include <stdio.h> int main() { int i = 1; while ( i<=10 ) { printf( "%d \t %d \n", i, i*i); i = i + 1; return 0; bellatrix$ gcc squares.c bellatrix$ ls a.out* squares.c () Aug 23, 2008 12 / 52

Exekvering bellatrix$ a.out 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100 bellatrix$ () Aug 23, 2008 14 / 52

Exempel: era funktioner /* factorial.c */ Program som tabullerar fakultetsfunktionen #include <stdio.h> int factorial(int n) { int result = 1; while ( n > 0 ) { result = result*n; n = n - 1; return result; int main() { int i = 0; while ( i<=15 ) { printf( "%2d %12d \n", i, factorial(i)); i = i + 1; return 0; () Aug 23, 2008 16 / 52

Exempel: rekursion, villkorssats /* factorialrec.c Program som tabullerar fakultetsfunktionen Rekursiv version. */ #include <stdio.h> int factorial(int n) { if ( n<=0 ) return 1; else return n*factorial(n-1); int main() { int i = 0; while ( i<=15 ) { printf( "%2d %12d \n", i, factorial(i)); i = i + 1; return 0; () Aug 23, 2008 18 / 52

Exempel: Läsa och skriva tecken /* cat1.c Kopierar standard input till standard output */ #include <stdio.h> int main() { int c; c = getchar(); while ( c!= EOF ) { putchar(c); c = getchar(); return 0; () Aug 23, 2008 20 / 52

Exempel: Läsa och skriva tecken version 2 /* cat2.c Kopierar input till output. Version 2 */ #include <stdio.h> int main() { int c; while ( (c = getchar())!= EOF ) putchar(c); return 0; () Aug 23, 2008 22 / 52

Exempel: Ett program som räknar tecken och rader #include <stdio.h> int main() { int c; int nchars = 0, nlines = 0; while ( (c = getchar())!= EOF ) { ++nchars; if ( c == '\n' ) { ++nlines; printf( "Tecken: %d \nrader: %d \n", nchars, nlines ); return 0; () Aug 23, 2008 24 / 52

Sammanfattning I Ett C-program består av en eller era funktioner som lagras på en (eller era) ler I Kommentarer omges med /* och */. Från och med C99 kan // användas för kommentar till radslut (som C++ och Java) I #include <stdio.h> för att kunna använda biblioteksfunktioner för in- och utmatning (printf, getchar, putchar, EOF) I En C-funktion har en returtyp, ett namn, en parameterlista och en funktionskropp I Funktionskroppen kan innehålla variabeldeklarationer och satser. I Semikolon (;) används för att avsluta deklarationer och satser. I Filerna kan innehålla deklarationer utanför funktionerna. () Aug 23, 2008 26 / 52

Sammanfattning forts I Varje l måste kompileras innan programmet kan exekveras I Exekveringen börjar i funktionen med namnet main I Variabler måste deklareras med typ och namn I Variabler tilldelas värden (av rätt typ) med tilldelningssatser I Satser i en funktion utförs i tur och ordning I Satser för selektion: if (samt switch) I Satser repetition: while (samt for och do-while). I Aritmetiska operatorer: + - * / ++ med era () Aug 23, 2008 27 / 52

if-satsen Två varianter: och if ( u ) s 1 där if ( u ) s 1 else s 2 I u är ett uttryck av godtycklig typ och I s, s1, s 2 är vardera en sats Uttrycket u tolkas som false om det är 0, 0.0, eller NULL (pekare) annars som true. Om man vill ha era satser för s 1 och s 2 som sätter man dem inom klammerparenteser ({ och ) () Aug 23, 2008 29 / 52

for-satsen Iterationssats med syntaxen: for ( u 1 ; u 2 ; u 3 ) s Funktionen kan uttryckas med while-satsen: u 1 ; while ( u 2 ) { s; u 3 ; Vanligt ideom för att upprepa något ett visst antal gånger. T ex: for ( i = 1 ; i<10 ; i++ ) { s; () Aug 23, 2008 31 / 52

Datatyper I void I skalära typer I aritmetiska typer I heltalstyper char, short int, long int, long long int I pekare (ev. unsigned) I yttalstyper float, double, long double I arrayer (egentligen ingen egen typ - snarast en pekare) I sammansatta typer struct Obs: ingen typ för logiska värden (true, false)! () Aug 23, 2008 32 / 52

Heltalstyperna Vanliga storlekar och talområden: long int 4 2 31 till 2 31 1 short int 2 2 15 till 2 15 1 unsigned long int 4 0 till 2 32 1 unsigned short int 2 0 till 2 16 1 signed char 1-128 till 127 unsigned char 1 0 till 255 Typen int är normalt liktydigt med long eller short int (implementationsberoende) Typen char är vanligen liktydigt med unsigned char () Aug 23, 2008 33 / 52

Konstanter Heltalskonstanter decimal form 3, 8, -255 oktal form 003, 010, -0377 Flyttalskonstanter Skrivs med decimalpunkt och/eller exponent -1.5,.26, 100., 0.57721566 1e10, 0.5e2, 1e-10 () Aug 23, 2008 35 / 52

Teckentypen char Typen char är en heltalstyp och teckenkonstanter är ett sätt att skriva små heltal. Man kan således räkna direkt med tecken: char toupper(char c) { /* Om c är en gemen så returneras motsvarande VERSAL */ if ( c>='a' && c <='z' ) return c + 'A' - 'a'; else return c; () Aug 23, 2008 37 / 52

Biblioteket ctype.h Detta bibliotek innehåller representationsoberoende funktioner för att klassicera tecken: #include <ctype.h> int isalpha(int c); int isdigit(int c); int isalnum(int c); int isspace(int c); int isupper(int c); int islower(int c); int isprint(int c); int iscntrl(int c); int tolower(int c); int toupper(int c); Dessa funktioner kunde, med fördel, använts i era av de ovanstående exemplen. () Aug 23, 2008 39 / 52

Exempel: Skriv ut en ascii-tabell /* Program som skriver en tabell över teckenkoder */ int main() { char c; for ( c = ' '; c<127; c++ ) printf( "%d \t %c \n", c, c ); return 0; (I ascii-koden är blanktecknet det första tryckbara och (126) det sista tryckbara) () Aug 23, 2008 41 / 52

Alla variabler måste typdeklareras Exempel: int i, j, k; float x, y; char c; short int p, q; unsigned short int r; unsigned char ch; int start = 0, stop = 10; char c=getchar(); Deklarationerna måste ligga först i ett block som denieras av ett { - par (C99-standarden tillåter deklarationer även bland de utförande satserna) () Aug 23, 2008 43 / 52

Typkonverteringar I Vid operander med olika typer sker automatiska konverteringar från trängre typer till vidare type I Tilldelningar från vidare typer till trängre typer kan ge varningar men är inte illegala I Explicita typkonverteringar med casts : (typ) uttryck Exempel: y = power( (float) i, n ); () Aug 23, 2008 45 / 52

Formaterad utmatning printf( formatsträng, värde, värde,... ) Några formatspecikationer: %d int %ld long int %u unsigned int %lu unsigned long int %o int oktal form %x int hexadecimal form %c char %f double decimalform %e double exponentform %g double decimal- eller exponentform %s teckensträng () Aug 23, 2008 46 / 52

Formatterad utmatning forts Specikationerna förses med attribut för att specicera, fältbredd, antal decimaler, justering mm: /* formatexample.c - Demonstrerar användning av formatkoder */ #include <stdio.h> int main() { float x; for (x=0; x<=10.; x++) { printf(" %2.0f %8.4f %12.4e\n", x, sin(x), exp(x)); /* Output: 0 0.0000 1.0000e+00 1 0.8415 2.7183e+00 2 0.9093 7.3891e+00 3 0.1411 2.0086e+01 4-0.7568 5.4598e+01 5-0.9589 1.4841e+02 6-0.2794 4.0343e+02 7 0.6570 1.0966e+03 8 0.9894 2.9810e+03 9 0.4121 8.1031e+03 10-0.5440 2.2026e+04 */ () Aug 23, 2008 48 / 52

Inläsning av tal Funktionen scanf för formaterad inläsning. Exempel: int main() { float x; int n; printf("ge x och n: "); scanf("%f %d", &x, &n ); printf( "%f upphöjt till %d är %f", x, n, power(x,n) ); return 0; () Aug 23, 2008 50 / 52

Några fakta om funktioner I Alla funktioner är på samma nivå dvs funktionsdenitioner kan inte innehålla lokala funktioner I En funktion har noll eller era parametrar av godtycklig typ I Vid anrop måste parametrarna överensstämma i ordning, antal och typ Viss automatisk typkonvertering kan dock ske. I Parameteröverföringen sker enligt call by value I En funktion kan vara av typen void som anger att den inte returnerar något värde () Aug 23, 2008 51 / 52

I Funktioner kan returnera skalära värden och poster (struct) men ej arrayer I Funktioner returnerar ett värde av typen int om inget annat sägs I Lokala variabler dör vid return (om ej static) I För att en funktion skall kunna anropas måste den vara känd. Känd kan den bli genom en denition eller en deklaration: typ namn( parameterlista ); typ namn( void ); () Aug 23, 2008 52 / 52