Del 1 En oversikt over C-programmering 1 RR 2016
Starten C ble utviklet mellom 1969 og 1973 for å re-implementere Unix operativsystemet. Er et strukturert programmeringsspråk, hvor program bygges opp av funksjoner/prosedyrer. C-kode mapper effektivt til maskinkode. Tillater hardware-nær koding med pekere. Ofte benyttet for programmering av mikrokontrollere, digitale signalprosessorer og IO-systemer. C er «utgangspunktet» for en rekke høynivåspråk som; C++, C#, Java, JavaScript, Python, PHP 2
Det første C programmet. /* Et program som skriver tekst til skjermen */ #include <stdio.h> // Inkluderer header fil int main() // main() er hvor programmet starter printf( Dette er et C program. ); return 0; 3
Header filer Headerfiler inneholder informasjon om funksjoner og data som er definert i C sitt standard library. F.eks må vi inkludere stdio.h for å benytte printf() funksjonen. Alle headerfiler har endelsen.h Som f.eks stdio.h math.h stdlib.h Ex: #include <stdio.h> 4
Grunnleggende datatyper char - holder tegn (ascii verdi), små heltall (-128 -> 127). int - heltall (16 bit eller 32 bit) float - desimaltall double - dobbel presisjon desimaltall void - verdiløs C har følgende modifikatorer signed både positive og negative tall unsigned bare positive tall long utvider tallområdet short krymper tallområdet long double - desimaltall med utvidet tallområde: 80 bit long int stort heltall : 32 bit 5
Datatyper Type Antall bit Verdi område char 8-128 til 127 int 16 (32) -32768 til 32767 float 32 ± (3.4 E-38 3.4 E 38) double 64 ± (1.7 E -308 1.7 E 308 ) void verdiløs 6
Utskrift til skjerm printf() #include <stdio.h> void main() int verdi; // Deklarerer en int variabel verdi = 111; // Tilordner en verdi printf( Verdien er: %d, verdi); return; // Kan utelates når void benyttes. %d angir heltallsformat. 7
Hvordan virker printf()? Funksjonen skriver tekst og verdier til skjerm. Benytter en format-spesifikator (format tegn %) for å angi datatypen som skal skrives ut. printf( Verdien er: %d, verdi); Format tegn: %d int (heltall) %f float (desimaltall) %c char (enkelt tegn) %s string (tekst streng) %p pointer (peker - adresse) 8
Eksempel med printf(). void main() char ch; float f; double d; ch='x'; f=100.123; d=987.654; printf("ch er %c, ", ch); printf("f er %f, ", f); printf("d er %f, ", d); Resultat: ch er X, f er 100.123000, d er 987.654000 9
scanf() Setningen scanf() benyttes for å lese data etter et gitt format fra tastaturet. Skal vi lese et heltall så benyttes formen; scanf( %d, &int_var); Det første argumentet angir formatet data skal tolkes med. I dette tilfelle som heltall, derfor %d. Det andre argumentet angir hvor innleste data skal legges. I dette tilfelle i en heltallsvariabel int_var. & tegnet angir at adressen til int_var benyttes. 10
Eksempel på bruk av scanf(). void main() int tall; float f; double d; printf("tast inn et heltall. "); scanf("%d", &tall); printf("tast inn desimaltall. "); scanf("%f", &f); printf("tall er %d. f er %f.", tall, f); 11
Operatorer I C er det flere grupper med operatorer Aritmetiske ( +, -, *, /, %, ++, --) Sammenligning ( <, >, <=, >=, ==,!= ) Logiske ( &&,,! ) Bitvise ( &,, ^, ~ ) ( og, eller, xor, enerkomplement)
Egen funksjon med parametere void mul(int x, int y); // prototyp til mul() void main() int i, j; mul(10, 20); i = 4; j = 5; mul(i, j); // Lokale variabler // funksjonskall // funksjonskall 13
Funksjonen mul() /* Funksjon som multipliserer to tall og skriver resultatet til skjerm. **************************************/ void mul(int x, int y) printf( x*y= %d, x*y ); return; // skriver ut resultatet 14
Funksjon med returverdi int mul(int x, int y); // prototyp til mul() void main() int i=4, j=5; printf( res = %d, mul(10, 20) ); printf( res = %d, mul(i, j) ); return; int mul(int x, int y) // her starter mul()funksjonen return (x*y); // retur med int verdi. 15
Valg og løkker i C. Valg 1. if - else 2. switch Løkker - gjentagelse av den samme blokken 1. for 2. while 3. do- while Program hopp 1. break 2. return
break setningen Når en break setning utføres inne i en løkke blir løkken umiddelbart avsluttet. int main(void) int tall; while (1) // uendelig løkke printf( Skriv et tall: ); scanf( %d, &tall); if (tall < 0) break; return 0; // hopper ut av løkka
switch - (multippelt valg). switch ( test uttrykk ) case konstant1: setning1; break; case konstant2: setning2; break; case konstant3: setning3; break;... default: default statement;
Eksempel på switch int main(void) int tall; printf("\nskriv inn et heltall: "); scanf("%d", &tall); switch (tall) case 1: printf("\ndu har tastet tallet 1.\n"); break; case 2: printf("\ndu har tastet tallet 2.\n"); break; case 3: printf("\ndu har tastet tallet 3.\n"); break; case 4: printf("\ndu har tastet tallet 4.\n"); break; default: printf("\ntallet er ikke mellom 1 og 4.\n"); return 0;
Uendelig løkke for(;;)... // uendelig løkke
Ny linje \n int main() printf( en\n ); printf( to\n ); printf( tre ); printf( fire\n ); return 0; // \n - linjeskift. Resultat en to trefire 21
Tegn-variabler i C char er datatypen for tegn char benytter en byte, tallområde -128 til 127. En char kan holde alle tegn som er definert i ASCII tabellen. Et lite eksempel: char ch1 = a,ch2 = 65; printf( %c %d %c %d,ch1,ch1,ch2,ch2); NB!! Legg merke til at et tegn angis mellom apostrofer. eks: char bokstav = G ;
Streng konstanter printf( Dette er en streng ); Tegnene som er omsluttet med anførselstegn er en streng konstant. Strenger lagres i datamaskinen som en serie (tabell) med ASCII char verdier. ASCII verdi null - avslutter alle strenger, og blir derfor kalt nulltermineringstegnet.
C nøkkelord I C er det definert 32 nøkkelord C nøkkelord og C syntaks er programmeringsspråket C. I C er det forskjell på store og små bokstaver. auto double int struct break else long switch case enum register typedef char extern return union const float short unsigne continue for signed void default goto sizeof volatile do if static while 24
C biblioteket Består av funksjoner som utfører en rekke oppgaver I/O operasjoner matematiske operasjoner manipulering av strenger pluss mye mer Absoluttverdi får vi med abs() og fabs() Kvadratrot får vi med sqrt() strcpy(), strcmp(). NB!! Husk å ta med riktige header-filer. Får feilmelding hvis «noe» mankerer. 25
Operatorer og prioritet Nivå Operatorer Assosiativitet 1 (). [] -> Venstre til høyre 2 * &! ~ ++ -- + - sizeof Høyre til venstre 3 * / % Venstre til høyre 4 + - Venstre til høyre 5 << >> Venstre til høyre 6 < <= > >= Venstre til høyre 7 ==!= Venstre til høyre 8 & Venstre til høyre 9 ^ Venstre til høyre 10 Venstre til høyre 11 && Venstre til høyre 12 Venstre til høyre 13?: Høyre til venstre 14 = *= /= %= += -= <<= >>= &= ^= = Høyre til venstre 15, Venstre til høyre