Programmeringsspråket C

Like dokumenter
Programmeringsspråket C

Programmeringsspråket C

Dagens tema. Oppsummering om assemblerspråk. Programmering i C. Bakgrunn. Et minimalt eksempel med forklaring. Datatyper i C.

IN 147 Program og maskinvare. Velkommen til IN 147. Program- og maskinvare

Anbefalt litteratur: Pensum-bøker: Forelesere: Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Velkommen til INF1060. Introduksjon til operativsystemer og datakommunikasjon

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

IN 147 Program og maskinvare

Del 1 En oversikt over C-programmering

Kapittel 1 En oversikt over C-språket

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

IN 147 Program og maskinvare

Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Vektorer. Dagens tema. Deklarasjon. Bruk

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

INF 1000 høsten 2011 Uke september

Dagens tema INF2270. Cs preprosessor. Separat kompilering av C funksjoner. C og minnet. Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

IN 147 Program og maskinvare

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Dagens tema INF1070. Vektorer (array-er) Tekster (string-er) Adresser og pekere. Dynamisk allokering

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Programmeringsspråket C Del 2. Michael Welzl

Programmeringsspråket C Del 2

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

Forelesning inf Java 4

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Dagens tema. Mer om C Enkle datatyper Sammensatte datatyper: Vektorer og matriser Tekster Mengder Strukturer Unioner Ringbuffere

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Forelesning inf Java 5

Forelesning inf Java 5

Grunnleggende programmering i C

Programmeringsspråket C Del 3

Hvordan en prosessor arbeider, del 1

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Programmeringsspråket C Del 3

Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin.

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Dagens tema: Datastrukturer

2 Om statiske variable/konstanter og statiske metoder.

En oppsummering (og litt som står igjen)

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen

Dagens tema. Kort repetisjon om rutiner. Programmering i C Variable og adresser. Vektorer. Tekster. Preprosessoren. Separat kompilering

Velkommen til INF1060 høsten 2017

Dagens tema INF1070. Signaturer. Typekonvertering. Pekere og vektorer. struct-er. Definisjon av nye typenavn. Lister

GJØVIK INGENIØRHØGSKOLE

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Velkommen til INF2100 Jeg er Dag Langmyhr

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

UNIVERSITETET I OSLO

Programmering i C++ Løsningsforslag Eksamen høsten 2005

2 Om statiske variable/konstanter og statiske metoder.

Løsningsforslag ukeoppg. 3: sep (INF Høst 2011)

Dagens tema Kapittel 8: Objekter og klasser

I dag skal vi se på. INF 1000 (uke 2) Variabler, tilordninger og uttrykk. Gruppene starter denne uken! Klart for første oblig

Feilmeldinger, brukerinput og kontrollflyt

Del 4 Noen spesielle C-elementer

Signaturer. Dagens tema. En vanlig feil int-funksjon. Dette kan noen ganger gi rare feilmeldinger: INF1070 INF1070 INF1070 INF1070

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

INF1000 (Uke 4) Mer om forgreninger, While-løkker

IN 211 Programmeringsspråk. Java. på 20 enkle ark. spesielt for de som kan. Simula. (og gjerne litt C) Ark 1 av 20

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

INF1000 : Forelesning 3

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Feilmeldinger, kontrollflyt og void-metoder

Cs preprosessor. Dagens tema. Betinget kompilering

In105 Programmering i Java de første skritt

Løsningsforslag til 2. del av Del - EKSAMEN

Eksamen IN1010/INF1010 våren 2018

Programmering Høst 2017

Kapittel 9: Sortering og søking Kort versjon

INF1000 : Forelesning 1 (del 2)

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Del 3. Pekere RR 2016

Transkript:

Programmeringsspråket C Bakgrunn Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI standard i 1988; omtrent alle følger den nå. I 1999 kom C99, men ikke alle følger den. Vi vil derfor stort sett ignorere den. Formål: Kunne programmere oversiktlig; lettlest kode. Tilgang til maskinens ressurser. Lite maskinavhengige programmer. Kompakte programmer. Raske programmer. Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 1 av 16

Cs fortrinn Mulig å skrive raske programmer. Gode muligheter for strukturering av data og program. Svært kompakt kode: Pascal C n := n+1; A[++n] *= 3.1; A[n] := A[n]*3.1; Mulig å skrive elegante, oversiktlige og portable programmer. Fast standard (ANSI C) fra høsten 1988. Finnes overalt. Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 2 av 16

Cs svake sider Ofte lite portable hvis man ikke tenker på det mens man koder; bedre etter ANSI C. C tilbyr programmereren større frihet. Kompilatoren vil dog oppdage færre av de feil programmereren gjør. Muligheter for kryptisk kode: A[*(*x)++ = y] += 4; Å programmere i Java er som å kjøre en Volvo stasjonsvogn; den duver rolig av gårde på veien, men man kommer trygt frem. Å programmere i C er som å kjøre en Ferrari; den kan gå uhyggelig fort i svingene, men man havner av og til i grøften. ukjent opphavsmann I C er det viktigere at det går fort enn at svaret blir riktig! Dag Langmyhr En skrivefeil i C er ingen feil; det er bare et annet program. enda en ukjent meningsytrer Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 3 av 16

Hvorfor er det nyttig å lære C? Det er flere grunner: C er blant de aller mest utbredte språket i dag. C brukes i svært mange større programmeringsprosjekter. C og Unix er uløselig knyttet sammen. Med C kan man skrive raskere kode enn med de fleste andre språk. Med C kan man skrive svært kompakt kode (dvs bruke lite minne). Programmering i C gir en følelse av hvorledes datamaskinen fungerer. Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 4 av 16

Et minimalt eksempel «Alle» lærebøker i programmering har med følgende lille eksempel: #include <stdio.h> int main(void) { printf("hallo, alle sammen!\n"); (Det var Kernighan & Ritchies første bok om C som startet denne moten!) I Java ser programmet slik ut: class Hello { public static void main(string args[]) { System.out.println("Hallo, alle sammen!"); Kompilering Følgende kommando kan brukes for å kompilere programmet: gcc hallo.c o hallo Det kompilerte programmet kjøres med hallo./hallo Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 5 av 16

Forklaring Program Et program er en liste av deklarasjoner av variable og funksjoner: Java Klasse deklarasjoner C Deklarasjoner Hovedprogrammet «Hovedprogrammet» er en funksjon ved navn main: Java C public static void main(... ) { int main(void). {. Store og små bokstaver Det er forskjell på store og små bokstaver i C. MAIN, Main og main er tre helt ulike navn. Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 6 av 16

Funksjoner En C funksjon ligner veldig på en metode i Java. Den består alltid av fire deler: type på returverdien. Hvis ingen returverdi, skrives void. navn på funksjonen. parameterliste med typeangivelse av hver parameter. Til forskjell fra Java: hvis det ikke er noen parametre, skrives void. kroppen som er selve funksjonen. Den er omsluttet av { og. Returverdien angis med en return setning. Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 7 av 16

Tekstkonstanter Tekstkonstanter skrives med " foran og bak. Java C "En tekst" "En tekst" I C kan vi legge inn spesialtegn i teksten; det vanligste er \n som angir linjeskift. Java C "Hei!\n" "Hei!\n" Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 8 av 16

Utskrift Utskrift skjer via kall på funksjonen printf. Eventuelt linjeskift legges inn i teksten. Java C System.out.print("Hei, "); printf("hei, "); System.out.println("dere!"); printf("dere!\n"); Utskrift av tall Med %d i teksten kan man angi at det skal settes inn et tall. Dette tallet må komme senere i parameterlisten. Java C System.out.println(a + " og " + b); printf("%d og %d\n", a, b); Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 9 av 16

Heltall i C På samme måte som Java har C diverse heltallstyper: Navn Alternativt Ant byte signed char char 1 unsigned char char 1 short signed short 2 unsigned short 2 int signed int 2 4 unsigned int unsigned 2 4 long signed long 4 unsigned long 4 Standarden sier at det er udefinert om char betyr signed char eller unsigned char så det varierer. Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 10 av 16

Operatorer Aritmetiske operatorer C har de vanlige aritmetiske operatorene: + Addisjon Subtraksjon * Multiplikasjon / Divisjon % Modulo (rest ved divisjon) Disse kan også brukes til oppdatering av variable: Koden...... gir det samme som... a += x; a = a + x; a = x; a = a x;.. Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 11 av 16

Sammenligninger Sammenligningsoperatorene er også de samme som i Java. == Likhet!= Ulikhet < Mindre enn <= Mindre enn eller lik > Større enn >= Større enn eller lik Disse operatorene gir 1 om sammenligningen holder og 0 ellers. NB! Ikke bland sammen = og ==! Logiske verdier Før C99 fantes ingen type boolean i C! I stedet brukes heltall der 0 er false og alle andre verdier er true. Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 12 av 16

Logiske operatorer {! a a && b a b { { 1 om a = 0 0 ellers 1 om a 0og b 0 0 ellers 1 om a 0eller b 0 0 ellers Maskeoperatorer ~ not & and or ^ xor NB! Det er forskjell på logiske og maskeoperatorer! For eksempel er 1 && 4 gir 1 1 & 4 gir 0 Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 13 av 16

Et litt større eksempel #include <stdio.h> /* Hvor mange hele fot utgjør disse tommene? */ int finn_fot(int tommer) { return tommer/12; /* Hvor mange rene tommer er det i dette målet? */ int rene_tommer(int tommer) { int fot = tommer/12; return tommer 12*fot; int main(void) { int tom; printf("angi et mål i tommer: "); scanf("%d", &tom); while (tom!= 0) { if (tom > 0 && tom <= 999) printf("%5d tommer = %d fot %d tommer\n", tom, finn_fot(tom), rene_tommer(tom)); else printf("programmet godtar kun verdier 0 999!\n"); printf("gi et nytt mål i tommer (0 for avslutning): "); scanf("%d", &tom); Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 14 av 16

Kommentarer Kommentarer omgis av /* og */. De kan stå hvor som helst. Deklarasjon av variable Variable kan deklareres først i en funksjon eller mellom funksjonene. En deklarasjon består av tre deler: Variabelens type. Variabelens navn. Flere variable kan deklareres, adskilt av komma. En initialverdi for sistnevnte variabel; kan droppes. En variabel uten angitt initialverdi får en tilfeldig startverdi. Innlesning Til innlesning brukes scanf. Første parameter angis hva som skal leses inn: %c for tegn, %d for heltall og %f for flyt tall. Legg merke til & foran variabelnavnet; den må være der. Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 15 av 16

Setninger Tilordning I C og Java brukes = for tilordning. If setninger If setninger er som de fleste andre språk. While løkker While løkker er også som i de fleste andre språk. Lagring av tegn C har ingen egen type for å lagre tegn (som char i Java). I stedet benyttes heltall. Hvilken koding som brukes, vil variere fra én maskin til en annen. I den vestlige verden brukes stort sett nå ISO 8859 1, også kjent som ISO Latin 1; om noen år blir det Unicode. Dag Langmyhr,Ifi,UiO: Forelesning 15. januar 2007 Ark 16 av 16