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