Opgaver i denne lektion   Gå til annoteret slide, hvor denne opgave er tilknyttet -- Tastaturgenvej: 'u'   Alfabetisk indeks   Kursets hjemmeside   

Opgaveløsning:
Et program der adderer tre heltal


#include <stdio.h>

int main(void) {

  int sum1 =    10  +   11  +  12,
      sum2  =  010 +   011 +  012,
      sum3  = 0x10 +  0x11 + 0x12;

  printf("sum1 =  %d\n", sum1);
  printf("sum2 =  %d\n", sum2);
  printf("sum3 =  %d\n", sum3);

  return 0;
}

Tallet 010, skrevet som en konstant i et C kildeprogram betegner et tal i det oktale talsystem. Det tilsvarende decimale tal er 8. Tilsvarende svarer det oktale tal 011 til 9, og 012 til 10 i det sædvanlige decimale talsystem. Tallet 0x10 er et hexadecimalt tal når det optræder i et C kildeprogram. Tallet svarer til det decimale tal 16.


#include <stdio.h>

int main(void) {

  int x, y, z, sum;

  printf("Enter three integers: ");
  scanf("%d %d %d", &x, &y, &z);

  sum =    x + y + z;

  printf("sum =  %d\n", sum);

  return 0;
}

Hvis vi indtaster 010, 011 og 012 som input til ovenstående program får vi resultatet 33. Samme input opnås med 10, 11 og 12. Når vi indlæser heltal med konverteringsspecifikationen %d i scanf, kan vi ikke umiddelbart angive oktale tal.


#include <stdio.h>

int main(void) {

  int x, y, z, sum;

  printf("Enter three integers: ");
  scanf("%o %o %o", &x, &y, &z);

  sum =    x + y + z;

  printf("sum =  %d\n", sum);

  return 0;
}

Ovenstående version viser at konverteringsspecifikationen %o i scanf fortolker input som oktale tal. Det er ligegyldigt om der indlæses 010 eller 10. Resultatet svarer i begge tilfælde til det decimale tal 8.


#include <stdio.h>

int main(void) {

  int x, y, z, sum;

  printf("Enter three integers: ");
  scanf("%o %o %o", &x, &y, &z);

  sum =    x + y + z;

  printf("sum =  %o\n", sum);

  return 0;
}

Hvis der indlæses 10, 11 og 12 som input til ovenstående program udskrives resultatet 33. Internt adderes de tre decimale heltal 8, 9 og 10. Summen af disse er 27 som svarer til det oktale tal 33. Regn selv efter!