Programmeringsteknik med C och Matlab



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

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

TDIU01 - Programmering i C++, grundkurs

1 Funktioner och procedurell abstraktion

SMD 134 Objektorienterad programmering

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Tentamen OOP

Övningar Dag 2 En första klass

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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

Föreläsning 1 & 2 INTRODUKTION

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

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

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 A. Johan Eliasson

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

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

*Pekarvärden *Pekarvariabler & *

Grundläggande programmering med C# 7,5 högskolepoäng

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Att använda pekare i. C-kod

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

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

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Objektorienterad programmering i Java

Sätt att skriva ut binärträd

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 3.1: Datastrukturer, en översikt

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

TDIU01 - Programmering i C++, grundkurs

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Föreläsning 2: Avlusning och antilustekniker

Grunderna i stegkodsprogrammering

Uttryck och villkor. Föreläsning 2

Introduktion till algoritmer - L0 - Grunder i C++ Matematikgymnasiet, Läsåret L0 - Grunder i C++

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

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Chapter 3: Using Classes and Objects

KPP053, HT2015 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

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

Parameteröverföring. Exempel. Exempel. Metodkropp

"if"-satsen. Inledande programmering med C# (1DV402)

Instuderingsfrågor till Steg 1

Uttryck och villkor. Föreläsning 2

DD1361 Programmeringsparadigm. Carina Edlund

Föreläsning 6: Introduktion av listor

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

Programmeringsuppgifter 1

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

För att skriva data till skärmen ( konsolen) används objektet System.out tillsammans med metoden println eller print.

Föreläsning 4: Poster

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

TDIU01 - Programmering i C++, grundkurs

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Objektorienterad programmering D2

4 Sammansatta datatyper

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010

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

Institutionen för datavetenskap 2014/15

Föreläsning 2 Programmeringsteknik och C DD1316

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Enkla datatyper minne

HI1025 Operativsystem, KTH Haninge, VT2012

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

DD1314 Programmeringsteknik

Introduktionslaboration

Programmeringsteknik med C och Matlab

Tentamen i Programmering grundkurs och Programmering C

C++ Slumptalsfunktioner + switch-satsen

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

Textsträngar från/till skärm eller fil

Planering Programmering grundkurs HI1024 HT 2014

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Föreläsning 6 pekare och pekare tillsammans med arrayer

2.1 Variabler. 2.2 Regler för namngivning i C. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 2

Variabler och konstanter

TAIU07 Matematiska beräkningar med Matlab

Hjälpmedel för kompilatorkonstruktion, DVB004

Funktioner och programstruktur. Föreläsning 5

En kort text om programmering i C.

Funktioner och programstruktur. Föreläsning 5

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

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

Programmering i C, 7,5 hp

a), c), e) och g) är olikheter. Av dem har c) och g) sanningsvärdet 1.

5 Grundläggande in- och utmatning

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

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

MMA132: Laboration 1 Introduktion till MATLAB

Objektorienterad Programmering (TDDC77)

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

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Dynamisk HTML JavaScript och webbläsarens objektmodell

Transkript:

Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32

Mer organisatoriskt Imorgon: Datorintro i lab Logga in Hitta er hemkatalog Ansluta till institutionens linux-servrar Öppna en editor Etc. Information om institutionens datorsystem: http://www.cs.umu.se/information/datorguide/ Videos för den här kursen: http://.../information/datorguide/programeringsteknik.html Björklund (UmU) Programmeringsteknik 2 / 32

Mer organisatoriskt Vad går labbarna ut på? Arbeta med övningsuppgifter från hemsidan eller kursboken. Arbeta med de obligatoriska inlämningsuppgifterna. Möjlighet att fråga labhandledare. OBS! Gå till din egen grupps labtillfällen, inte andra gruppers. Björklund (UmU) Programmeringsteknik 3 / 32

Datatyper och variabler Datatyper En datatyp är ungefär vad den låter som: den beskriver en viss typ av data. I C finns ett antal inbyggda datatyper. Till att börja med nöjer vi oss med att använda tre av dem: Typ int char double Användning Heltal (integers) Tecken (characters) Flyttal (double precision floating point numbers) Vi talar om för datorn vilken typ viss data har för att den ska veta 1. hur mycket utrymme i minnet vår data behöver och 2. vilka operationer som kan användas för att manipulera den. Björklund (UmU) Programmeringsteknik 4 / 32

Datatyper och variabler Variabler En variabel är en plats i datorns minne som används för att lagra data ett program behöver. Varje variabel har en typ. Variabler måste deklareras i programmet, så att kompilatorn vet att den måste reservera minnesutrymmet. Varje variabel har ett namn som vi själva väljer. int n; double x, y; char c; Björklund (UmU) Programmeringsteknik 5 / 32

Datatyper och variabler Variabelnamn Följande regler gäller för variabelnamn: 1. Namnet måste bestå uteslutande av engelska bokstäver, siffror och understreck. 2. Namnet får inte börja med en siffra. 3. Namnet får inte vara ett av C:s reserverade ord. 4. Namnet bör inte vara definierat i något av C:s standardbibliotek. Några exempel på tillåtna variabelnamn: tal1, tal2, inkomst_per_kapita, LOEN_PER_PERSON, n, c Namn kan vara hur långa som helst, men bara de första 31 tecknen räknas. Rekommendation Använd bara variabelnamn som hjälper dig och andra att komma ihåg till vad variabeln används. Björklund (UmU) Programmeringsteknik 6 / 32

Datatyper och variabler Tilldelning till variabler När vi deklarerat en variabel kan vi använda den för att lagra data: int n; double x, y; char c; n = 5; x = 1.41421356; c = B ; Att lagra ett värde i en variabel kallas att göra en tilldelning. Generellt har tilldelningar formen variabel = uttryck ; Uttrycket utvärderas, vilket ger ett värde som lagras i variabeln. Uttrycket måste ge ett värde av samma datatyp som variabeln. Observera att data som tidigare fanns lagrad i variabeln förstörs. Björklund (UmU) Programmeringsteknik 7 / 32

Datatyper och variabler Aritmetiska uttryck Aritmetiska uttryck byggs upp av variabler, konstanter och aritmetiska operatorer. Till operatorerna hör +, -, *, /, %. Operatorerna +, -, *, / kan användas för både flyttal och heltal. Om båda värdena är heltal blir resultatet ett heltal, annars ett flyttal. Observera att / med två heltal betyder heltalsdivision. Operatorn % är modulo-operatorn och ger resten vid heltalsdivision av två tal. Den kan alltså bara användas på heltal. Uttryck Värde Typ 1 + 2 3 int 1 + 2.0 3.0 double 1.4-2.4-1.0 double 14.0 / 5 2.8 double 14 / 5 2 int 14 % 5 4 int Björklund (UmU) Programmeringsteknik 8 / 32

Datatyper och variabler Variabler i uttryck. Mer tilldelningar När variabler används i stället för konstanter i uttryck används det värde som är lagrat i variabeln. int n, m; n = 5; m = n + 3; Värdet lagrat i m är nu 8. int n; n = 5; n = n + 3; Värdet lagrat i n är nu 8. Björklund (UmU) Programmeringsteknik 9 / 32

Datatyper och variabler Tilldelningar: initialisering och syntaktiskt socker Variabler kan också tilldelas i samband med att de deklareras. Detta kallas ofta initialisering. int n = 3, m = 4; I C kan vi också använda en hel del praktiska förkortningar i samband med variabeltilldelningar (s.k. syntaktiskt socker): Förkortning Uttydning n += 3 n = n + 3 n -= 3 n = n - 3 n *= 3 n = n * 3 n /= 3 n = n / 3 n++ n = n + 1 n-- n = n - 1 Björklund (UmU) Programmeringsteknik 10 / 32

Ett körbart C-program Vårt första C-program #include <stdio.h> int main(void){ int n; } /* Läs in ett heltal från användaren */ printf("skriv in ett heltal > "); scanf("%d", &n); /* Lägg till 1 till talet */ n++; /* Skriv ut det nya talet */ printf("talet efter ditt tal är %d\n", n); return 0; Björklund (UmU) Programmeringsteknik 11 / 32

Ett körbart C-program Vårt första C-program rad för rad #include <stdio.h> Säger till C:s preprocessor att vi kommer att använda funktioner från standardbiblioteket stdio (standard input/output library). int main(void){... } Varje C-programm måste ha en main-funktion som körs när programmet startar. Denna funktion har returtyp int, vilket betyder att den när den avslutas kommer att lämna ett heltal ifrån sig. Funktionen har inga inparametrar, vilket visas av ordet void När programmet startar och main anropas kommer all kod mellan { och } att köras. Björklund (UmU) Programmeringsteknik 12 / 32

Ett körbart C-program Vårt första C-program rad för rad int n; Definierar variabeln n som kan användas för att lagra heltal. /* Läs in ett heltal från användaren */... /* Lägg till 1 till talet */... /* Skriv ut det nya talet */ Det här är kommentarer som är till för att göra koden lättare att läsa för människor. Kompilatorn bortser från dem. Som kommentar räknas allt mellan /* och */. Björklund (UmU) Programmeringsteknik 13 / 32

Ett körbart C-program Vårt första C-program rad för rad printf("skriv in ett heltal > "); Skriver ut texten Skriv in ett heltal > på skärmen. scanf("%d", &n); Läser vad användaren skriver in och lagrar det i variabeln n. Både printf och scanf är funktioner från stdio och vi kommer att lära oss mer om dem senare. Björklund (UmU) Programmeringsteknik 14 / 32

Ett körbart C-program Vårt första C-program rad för rad n++; Har samma effekt som n = n+1; printf("talet efter ditt tal är %d\n", n); %d är en platshållare för ett heltal och talar om för printf att den ska ta värdet av sitt andra argument och skriva ut där %d står. \n är en så kallad escape sequence och står för radbrytning (newline). Om värdet som lagras i variabeln n är 3 kommer kommandot alltså att skriva ut följt av en radbrytning. Talet efter ditt tal är 3 Björklund (UmU) Programmeringsteknik 15 / 32

Ett körbart C-program Vårt första C-program rad för rad return 0; Avslutar main-funktionen (och därmed programmet) med returvärde 0. I princip skulle vi kunna fånga upp returvärdet och använda det på något sätt, men här har vi inget behov av det. Det är etablerad praxis att låta main-funktionen returnera just 0 när dess returvärde inte spelar någon roll. Sammanfattning Vårt första program uppmanar användaren att skriva in ett heltal, läser talet och skriver ut det närmast större talet. Björklund (UmU) Programmeringsteknik 16 / 32

Ett körbart C-program Kompilera Antag att vi har sparat vårt program i fieln plus_ett.c. Vi kan då kompilera det med följande kommando: gcc -Wall plus_ett.c -o plus_ett gcc anropar Gnu Compiler Collection -Wall säger till kompilatorn att varna för allt som verkar suspekt (Warn All). plus_ett.c är filen vi vill ha kompilerad. Att den slutar med.c talar om för kompilatorn att det är ett C-program vi vill kompilera. -o plus_ett betyder att vi vill att filen med det körbara program som kompilatorn producerar ska heta plus_ett. Björklund (UmU) Programmeringsteknik 17 / 32

Funktioner Funktioner i C En funktion i C är ett stycke kod som tar ett specifikt antal inparametrar, var och en av en specificerad typ, gör beräkningar och returnerar ett värde av en specifik typ. Att använda sig av funktioner tjänar huvudsakligen två syften: Abstraktion: Kod som använder sig av, eller anropar funktionen behöver inte bry sig om hur funktionen beräknar sitt resultat. Om vi vill ändra sättet funktionen beräknar sitt resultat på, behöver vi bara göra det på ett ställe. Kodekonomi: Om du märker att du upprepar samma stycke kod på flera ställen i ett program hör det antagligen hemma i en funktion. Björklund (UmU) Programmeringsteknik 18 / 32

Funktioner Exempel int plus(int n, int m){ return n + m; } Ett klot med radie r har volym 4Πr 3 /3: double klotvolym(double radie){ double resultat; resultat = 4 * 3.1416; resultat *= radie * radie * radie; resultat /= 3; } return resultat; Björklund (UmU) Programmeringsteknik 19 / 32

Funktioner Funktionsdeklarationer Det vi just såg var två funktionsdefinitioner. Vi kan också deklarera funktioner utan att definiera dem: int plus(int n, int m); double klotvolym(double radie); En funktionsdeklaration kan ses som ett löfte: definitionen kommer att finnas någon annan stans. Björklund (UmU) Programmeringsteknik 20 / 32

Funktioner Funktionsanrop När vi väl definierat en funktion kan vi använda den. Det gör vi med funktionsanrop. plus(5,3); anropar funktionen plus med parametrarna 5 och 3. Anropet kommer att returnera värdet 8. Vi kan också använda variabler i funktionsanrop: plus(n, 3); Det värde funktionen får som parameter är värdet som är lagrat i variabel n inte variabeln själv. (Kom ihåg att en variabel är en plats i minnet.) Björklund (UmU) Programmeringsteknik 21 / 32

Funktioner Funktioner i tilldelningar Ett anrop till en funktion går också att använda som uttryck i en tilldelning: double klotvolym(double radie){... } int main(void){ double b; b = klotvolym(2.0); } return 0; För att tilldelningen ska fungera måste funktionens returtyp stämma överens med variabelns typ. Björklund (UmU) Programmeringsteknik 22 / 32

Funktioner void Det går också att skriva funktioner som inte tar någon indata och inte returnerar någonting: void hej(void){ printf("hej Världen!\n", n); } Funktioner som inte returnerar något kallas ofta procedurer. Generellt schema returtyp funktionsnamn(typ 1 namn 1,, typ n namn n) { lokala variabeldeklarationer beräkningar } Björklund (UmU) Programmeringsteknik 23 / 32

Funktioner Boolska test Boolska test (döpta efter den engelske matematikern George Boole 1815-1864) är uttryck som returnerar ett Boolskt värde, dvs antingen sant eller falskt. Boolska test använder sig ofta av villkors-operatorer. De vanligaste villkorsoperatorerna < mindre än > större än <= mindre än eller lika med >= större än eller lika med == lika med!= inte lika med Om n och m är variabler av typen int, så returnerar uttrycket n >= m sant om värdet som sparats i n är minst lika stort som värdet som lagrats i m. Annars returnerar uttrycket falskt. Björklund (UmU) Programmeringsteknik 24 / 32

Funktioner Boolska värden i C C har ingen egen datatyp för de Boolska värdena sant och falskt. I stället används int. Värdet 0 representerar falskt. Alla andra värden representerar sant (oftast används värdet 1). En vanlig felkälla n == 5; är ett boolskt test, som returnerar sant eller falskt (beroende på värdet lagrat i variabeln n). n = 5; är en tilldelning, som lagrar värdet 5 i variabeln n. Björklund (UmU) Programmeringsteknik 25 / 32

Funktioner Kombinationer av Boolska test Ibland kan vi vilja uttrycka saker som om 5 > n och i q eller om p 4. I C åstadkommer vi det med hjälp av de Boolska operatorerna && (och), (eller) och! (inte): (5 > n && i <= q)! (p == 4) Låt A och B vara godtyckliga Boolska uttryck. Uttryck Uttydning Sant om A && B A och B A och B båda är sanna A B A eller B minst en av A och B är sann!a inte A A inte är sant Björklund (UmU) Programmeringsteknik 26 / 32

Funktioner Att välja vilka satser som ska utföras Ett program som alltid utför exakt samma operationer, oavsett indata, kan visserligen vara användbart, men kan sällan göra något riktigt intressant. Antag att vi vill skriva en funktion som returnerar absolutbeloppet av ett flyttal. double absolutevalue(double x){???? } Vi vill säga något i stil med om x 0, returnera x, annars x. Vi vill alltså, beroende på ett variabelvärde kunna välja vilken sats programmet ska utföra. Generellt sett kan val bero på indata eller på värden programmet redan beräknat. Björklund (UmU) Programmeringsteknik 27 / 32

Funktioner if-satser Den enklaste konstruktionen för att uttrycka ett val i C är if-satser. double absolutevalue(double x){ if( x >= 0 ) return x; } return -x; Satsen return x; utförs om villkoret x >= 0 är uppfyllt (sant). Björklund (UmU) Programmeringsteknik 28 / 32

Funktioner Syntax för if-satser Det generella schemat för if-satser är C-syntax if( VILLKOR ) SATS; eller, om vi vill ha mer än en sats utförd, C-syntax if( VILLKOR ){ SATS1; SATS2;... } Björklund (UmU) Programmeringsteknik 29 / 32

Funktioner Enten - Eller Ofta vill vi inte bara att vissa satser ska utföras om villkoret är uppfyllt, utan också att andra satser ska utföras om villkoret inte är uppfyllt. void printparity(int n){ if( (n % 2) == 0 ) printf( The number is even.\n ); else printf( The number is odd.\n ); } Björklund (UmU) Programmeringsteknik 30 / 32

Funktioner Nästlade if-satser Det finns inget som hindrar att satsen som följer if eller else är en if-sats: if( n == 0 ) if ( m > 1 ) return m; if( n >= 0 ) printf( The number n is non-negative. ); else if( m < 0 ) printf( Both numbers are negative.\n ); else printf( Only n is negative\n ); Björklund (UmU) Programmeringsteknik 31 / 32

Funktioner Sammansatta Boolska uttryck som villkor Koden if( n == 0 ) if ( m > 1 ) return m; gör samma sak som if ( n == 0 && m > 1 ) return m; Generellt sett kan vilket uttryck som helst som returnerar en int användas som villkor, till exempel anrop till funktioner med returtyp int. Björklund (UmU) Programmeringsteknik 32 / 32