C-språk/lect5/H98/GP HELTALSKONSTANTER 23 -45 1056 0 (heltalsvärdet 0) om ej annat har en heltalskonstant datatypen int 516000L har datatypen long int 45123U har datatypen unsigned int 412789UL har datatypen unsigned long int Obs! Även u,l kan användas specialfall: teckenkonstanter 'a' '0' (obs! '0' betecknar nolltecknet med ascii-koden 48) '\n' nyradstecken '\0' sluttecken i teckensträng ('\0' betyder tecknet med ascii-koden = 0) UPPRÄKNINGSTYPER symboliska heltalsväden ex. enum kort_farg {klover,ruter,hjarter,spader}; definierar uppräkningstypen kort_farg med 4 symboliska värden enum kort_farg farg1,farg2; variablerna farg1 och farg2 har datatypen enum kort_farg och kan således få klover, ruter, hjarter och spader som värden farg1=ruter; farg2=farg1; efter dessa satser har både farg1 och farg2 värdet ruter if-sats if (farg1==spader) printf("spader på hand\n"); C-språk/lect5/H98/GP for-sats int antal=0; for (farg1=klover; farg1<=spader;farg1++) antal++; /* for-satsen räknar färgernas antal */ enum kort_farg är egentligen en heltalstyp med fyra värden klover==0 ruter==1 hjarter==2 spader==3 även möjligt enum op {add=20,sub=25,mul=13,div=18}; enum op operator; operator=sub; /* samma resultat med operator=25; */ enum upp {a,b=10,c,d= -5,e}; 5 symboliska värden a==0,b==10,c==11,d== -5,e== -4 definieras regel: om symboliska enum-värden inte definieras används 0,1,2,… ett odefinierat enum-värde får följande heltalsvärde efter föregående enum-värde FLYTTALSTYPER (realtalstyper) float realtal representeras med 4 byte (32 bit) double realtal representeras med 8 byte (64 bit) long double realtal representeras med 16 byte (128 bit) 2 C-språk/lect5/H98/GP realtalskonstanter 567.3 1.0 0.35 3.11e5 (e5 betecken 10 upphöjt i potensen 5) 567.4 -4.56 -0.034E-5 (e och E kan användas synonymt) en realtalskonstant har datatypen double om ej annat anges 7.45f 34.07E-8F /* dessa konstanter har datatypen float */ (f och F kan användas synonymt) 7.12345678912334L 0.93432e50l /* dessa konstanter har datatypen long double */ (L och l kan användas synonymt) DATATYPOMVANDLINGAR a) automatisk i uttryck, som innehåller operander med olika datatyp sker datatypomvandlingen automatiskt och i allmänhet vettigt (regler: se Biltings bok) b) explicit (datatypnamn) uttryck uttryckets värde får den givna datatypen ex int a=5,b=8; float x; x=a/b; /* x får värdet 0.0 edtersom a/b leder till heltasdivision */ x=(float)a/b; /* x får nu värdet 0.625 eftersom a konverteras till 5.0 före divisionen */ x=a/1.0/b: /* även nu får x värdet 0.625 eftersom a/1.0 blir ett realtal som sedan divideras med heltalet b */ 3 C-språk/lect5/H98/GP OMVANDLINGSSPECIFIKATIONER (printf) %d %i %u %ld %li %lu heltal (int) heltal (int) heltal (unsigned int) heltal (long int) heltal (long int) heltal (unsigned long int) %c %s tecken (heltalvärde tolkas som ascii-kod för tecken) teckensträng (ett antal tecken med '\0' sist) %f %e %E %g realtal (double) utskrift i "vanlig" form med 6 decimaler realtal (double) utskrift i exponentform med6 decimaler som%e realtal (double) utskrift i exponentform eller "vanlig" form (automatisk anpassning) som %g som %f men datatyp long double som %e men datatyp long double som %Le som %g men datatyp long double som %Lg %G %Lf %Le %LE %Lg %LG fältbredd %8d %15f %.10f %20.10f heltal till höger i 8 teckenplatser realtal till höger i 15 teckenplatser realtal met 10 decimaler realtal med 10 decimaler till höger i 20 teckenplatser 4 C-språk/lect5/H98/GP OMVANDLINGSSPECIFIKATIONER (scanf) %d %u %ld %lu heltal (int) heltal (unsigned int) heltal (long int) heltal (unsigned long int) %c tecken (char) %s teckensträng (tecken före mellanslag, tab eller radbyte) '\0' placeras automatiskt till sist %e %f %g realtal (float) %le %lf %lg realtal (double) %Le %Lf %Lg realtal (long double) kommunikation med tangentbord och bildskärm med oktala / hexadecimala tal : se Biltings bok 5 C-språk/lect5/H98/GP TABELLER (BILTING: "fält") ex int tab[10], buffer[200],matris[4][3]; deklaration av 2 endimensionella heltalstabeller och en tvådimensionell heltalstabell (tabellstorlek inom hakparentes, tabellen matris har 4*3=12 tabell-element) tabell-element är åtkomliga med indexering som börjar med 0 tabellen tab består av heltalsvariablerna tab[0],tab[1],…,tab[9] tab[3]=5; /* det fjärde tabell-elementet i tab får värdet 5 */ matris[2] [0]=tab[2]; matris[1] betecknar en heltalstabell med 3 tabell-element Initialisering av en tabell int tab2[5] = { 3, 5, -6, 12, 0 }; int buffer[200] = {-5,0,12 }; endast buffer[0], buffer[1] och buffer[2] initialiseras teckentabell char namn[8]="maria"; /* teckentabellen namn är initialiserad till namn[0]=='m' namn[1]=='a' namn[2]=='r' namn[3]=='i' namn[4]=='a' namn[5]=='\0' */ 6