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

Opgaveløsning:
Ordningen af betingelser i en if-else kæde


Det foreslåede program

#include <stdio.h>

int main(void) {

  int percent, grade;

  printf("How many percent? ");
  scanf("%d",&percent);

  if (percent >= 10)
    grade = 3;
  else if (percent >= 40)
    grade = 5;
  else if (percent >= 50)
    grade = 6;
  else if (percent >= 58)
    grade = 7;
  else if (percent >= 66)
    grade = 8;
  else if (percent >= 74)
    grade = 9;
  else if (percent >= 82)
    grade = 10;
  else if (percent >= 90)
    grade = 11;
  else grade = 0; 

  printf("%d percent corresponds to the Danish grade %d\n\n", 
          percent, grade);
  
  return 0;
}

er ikke korrekt. Det første tilfælde indfanger alle de andre tilfælde. Derfor vil vi aldrig komme ind i tilfælde 2 - 8. Vi kommer dog ind i den sidste else-del, hvis (percent < 10).

Moralen er at de logiske udtryk skal ordnes så de mest specielle tilfælde (snævre tilfælde) håndteres før de mere generelle tilfælde (de bredere tilfælde).

I dette eksempel er tilfældet (percent >= 90) mere snævert end tilfældet (percent >= 82).