Thema indholdsfortegnelse -- Tastaturgenvej: 'u'    Næste slide i denne lektion -- Tastaturgenvej: 'n'Introduktion til programmering i C
1.  Variable og assignment

Dette er starten af det faglige indhold i første lektion af 'Programmering i C'. Før dette følger et antal mere praktiske slides, som vi ikke har medtaget i denne 'tematiske udgave' af materialet.

Vi starter med at se på variable og assignments. Dette er meget centrale elementer i enhver form for imperativ programmering. Vi slutter dette afsnit med et første kig på datatyper.

1.1 Assignment1.3 Assignments af formen i = i + 1
1.2 Initialisering1.4 Et første blik på datatyper i C
 

1.1.  Assignment
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

Tænk på variable som små kasser, hvori computeren kan placere forskellige værdier når programmet kører. Ændringer af kassernes værdier foregår gennem de såkaldte assignment kommandoer. På dansk vil vi ofte bruge betegnelsen tildelinger for assignments.

Variable er pladser i lageret, hvis værdier kan ændres ved udførelse af assignment kommandoer.

Alle variable skal erklæres før brug.

Her og i det følgende vil en mørkeblå boks med hvid skrift være præcise definitioner af faglige termer. Her definerer vi 'variabel' og 'assignment'.

En variabel er en navngiven plads i computerens arbejdslager, som kan indeholde en værdi af en bestemt type.

Et assignment er en kommando, som ændrer værdien af en variabel.

Tilsvarende vil gule bokse med sort skrift være syntaktiske definitioner. Syntaksen af et programmeringssprog beskriver lovlige strukturer af bestemte udtryksformer. Herunder ser vi at en type (et typenavn) kan efterfølges af et antal (her n) variable. Dette introducerer variablene, hvilket er nødvendigt inden disse kan anvendes til noget som helst. Det angiver også, hvilken slags (hvilken type) af værdier variablene kan antage.


type variable1, variabel2..., variablen; 
variablei = expression;
Syntaks 1.1    

I sidste linie af syntaks boksen ser vi strukturen af et assignment: var = udtryk. Vi taler om en variabel på venstre side af = og et udtryk på højresiden. Udtrykket beregnes, og udtrykkets værdi placeres i variablen på venstresiden. C er speciel derved, at var = udtryk faktisk er et udtryk, som har en værdi. I forhold til denne tankegang er = en operator, ligesom + og - . Mere om dette i afsnit 3.1.

I program 1.1 ser vi på et eksempel med variablene course, classes, students og average_pr_class alle af typen int. Dette er den røde del. Typen int betegner integers, altså heltal (negative såvel som positive). I den blå del ser vi et antal assignments til disse variable. De tre første er udprægede initialiseringer (se afsnit 1.2 ). I det sidste assignment tilskriver vi variablen average_pr_class kvotienten mellem students og classes. Bemærk her at I C er students / classes heltalsdivision: Indholdet af students (et heltal) heltalsdivideres med indholdet af classes (et andet tal). Som et eksempel på heltalsdivision har vi at 7 / 3 er 2. Mere om dette i kapitel 2. Tallet som er gemt i variablen average_pr_class udskrives i den grå del. printf kommandoer diskuteres i kapitel 4.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void) {

  int course, classes, students, average_pr_class;

  course = 1;
  classes = 3;
  students = 301;

  average_pr_class = students / classes;

  printf("There are %d students pr. class\n", average_pr_class);
  
  return 0;
}
Program 1.1    Et simplet program med variable og assignments.

I program 1.2 viser vi en variant af programmet, hvor initialiseringerne af variablene er foretaget sammen med variabelerklæringerne. Sådanne erklæringer og initialiseringer er ofte bekvemme. De to programmer er iøvrigt ækvivalente.

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main(void) {

  int course = 1, classes = 3, students = 301, average_pr_class;

  average_pr_class = students / classes;

  printf("There are %d students pr. class\n", average_pr_class);
  
  return 0;
}
Program 1.2    En variation af programmet.

 

1.2.  Initialisering
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

Vi omtalte allerede initialiseringer i afsnit 1.1 Her vil vi gøre lidt mere ud af begrebet, og vi vil 'moralisere' over vigtigheden af at initialisere alle variable.

Enhver variabel bør eksplicit tildeles en startværdi i programmet

Ved initialisering forstås tilskrivning af en startværdi til en variabel

Initialisering er altså tilskrivning af initielle (start) værdier til de variable, som vi introducerer (erklærer). En god måde at anskueliggøre vigtigheden af initialiseringer kan ses gennem et eksempel, hvor vi undlader at gøre det. I program 1.3 ser vi et sådant eksempel, hvor variablen classes er uinitialiseret. Bortset fra den uinitialiserede variabel er programmet næsten identisk med program 1.1. I program 1.4 viser vi programmets output. Værdien af classes er et meget stort tal, som vi ikke kan genkende. Forklaringen er, at indholdet er classes er det tilfældige lagerindholde, som befinder sig det sted i RAM lageret, hvor variablen classes er blevet placeret.

I stedet for at få adgang til tilfældig data i uinitialiserede variable ville det have været bedre at få en særlig udefineret værdi tilbage, en fejlværdi, eller slet og ret at stoppe programmet som følge af at der tilgås en uinitialiseret variabel. Det sker ikke i C, men andre programmeringssprog er mere hjælpsomme i forhold til programmøren, som naturligvis ønsker at opdage den slags fejl i programmet.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(void) {

  int course, classes, students, average_pr_class;

  course = 1;
  /* classes uninitialized */
  students = 301;


  average_pr_class = students / classes;

  printf("There are %d students pr. class\n", average_pr_class);
  printf("course: %d, classes: %d, students: %d\n", 
          course, classes, students);
  
  return 0;
}
Program 1.3    Et program med en uinitialiseret variabel.

1
2
There are 0 students pr. class
course: 1, classes: 1107341000, students: 301
Program 1.4    Program output.

Hvis man undlader at initialisere variable risikerer man at der opstår tilfældige fejl, når man kører programmet

 

1.3.  Assignments af formen i = i + 1
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

Vi vil nu se på assignments, hvor variablen på venstresiden af assignment symbolet = også optræder i udtrykket på højre side. Mere specifikt forekommer dette i i = i + 1.

Der er ofte behov for at tælle en variabel op eller ned.

Dermed optræder variablen både på venstre og højre side af assignmentsymbolet

Herunder forklarer vi trinvis hvad der sker når assignmentet i = i + 1 udføres i en situation, hvor i indledningsvis er 7.

  • Antag at i har værdien 7

  • Beregning af i = i + 1

    • Udtrykket i + 1 på venstre side af assignmentsymbolet beregnes til 8

    • Værdien af variablen i ændres fra 7 til 8

I program 1.5 har vi et lille program med variablene i, j og k . I de tre farvede assignments tælles disse op og ned. Først tælles i op fra 3 til 4 Dernæst tælles j ned fra 7 til 3 (idet i jo er 4). Endelig gøres k 3 gange større (idet j jo netop har fået værdien 3). Dermed ender k med at være 27. Når man kører programmet får man output som kan ses i program 1.6.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main(void) {

  int i = 3, j = 7, k = 9;

  i = i + 1;
  j = j - i;
  k = k * j;

  printf("i: %d, j: %d, k: %d\n", i, j, k);
  
  return 0;
}
Program 1.5    Et program med forskellige optællinger og nedtællinger.

1
i: 4, j: 3, k: 27
Program 1.6    Output fra ovenstående program.

 

1.4.  Et første blik på datatyper i C
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

En datatype er en mængde af værdier. Dette vil vi se meget mere til i en senere del af materialet. I tabel 1.1 ser vi en oversigt over forskellige typer af heltal, reelle tal, tegn og tekststrenge. Vi har allerede mødt typen int tidligere. Disse typer ses i spil i program 1.7 Læg lige mærke til endelserne (suffixes) ala L i 111L. Dette betyder 111 opfattet som en Long.

C understøtter forskellige fundamentale datatyper

Konkrete typer Eksempler på værdier
Heltal int
short
long
10
5
111L
Reelle tal double
float
long double
10.5
5.5F
111.75L
Tegn char 'A'
'a'
Tekststrenge char * "Computer"
"C"
Tabel 1.1    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(void) {

  int i = 10;
  short j = 5;
  long k = 111L;

  double x = 10.5;
  float y = 5.5F;
  long double z = 111.75L;

  char c = 'A';
  char d = 'a';

  char *s = "Computer", *t = "C";  

  return 0;
}
Program 1.7    Illustration af konkrete typer i et C program.

Hvis man indleder et tal med et 0 har man bedt om oktal notation. Tilsvarende, hvis man indleder et tal med 0x har man bedt om hexadecimal notation. Vi kommer stærkt tilbage til hvad dette betyder senere i materialet (se afsnit 16.5).

Foruden de forskellige typer af tal understøtter C også heltal i oktal og hexadecimal notation (eksempelvis 0123 og 0x1bc ).

Genereret: Onsdag 7. Juli 2010, 15:10:00
Thema indholdsfortegnelse -- Tastaturgenvej: 'u'    Næste slide i denne lektion -- Tastaturgenvej: 'n'