Programmeren in C/Basis

Uit Wikibooks
Ga naar: navigatie, zoek

Programmeren in C

Inleiding
  1. Inleiding Redelijk ontwikkeld. Revisiedatum: 23 oktober 2007
  2. De compiler Redelijk ontwikkeld. Revisiedatum: 23 oktober 2007

Bewerkingen

  1. Basis Goed ontwikkeld. Revisiedatum: 23 oktober 2007
  2. Stijl en structuur Redelijk ontwikkeld. Revisiedatum: 23 oktober 2007
  3. Datatypes Goed ontwikkeld. Revisiedatum: 11 november 2007
  4. Berekeningen In ontwikkeling. Revisiedatum: 23 oktober 2007
  5. If en loops Goed ontwikkeld. Revisiedatum: 23 oktober 2007
  6. Arrays en pointers Redelijk ontwikkeld. Revisiedatum: 24 oktober 2007
  7. Functies Goed ontwikkeld. Revisiedatum: 23 oktober 2007
  8. File handling In ontwikkeling. Revisiedatum: 23 oktober 2007

Overige

  1. Bestanden Redelijk ontwikkeld. Revisiedatum: 23 oktober 2007
  2. C-Preprocessor (CPP) Redelijk ontwikkeld. Revisiedatum: 23 oktober 2007
  3. Struct
  4. Expressies


In dit hoofdstuk leer je over de basis van C namelijk invoer, uitvoer en het werken met variabelen.

Hello world[bewerken]

Zoals gebruikelijk bij het leren van een programmeertaal, beginnen we met het maken van een programma dat "Hello, world!" naar de outputstream (meestal de terminal) schrijft. Sla onderstaande broncode op als helloworld.c (gebruik voor C broncode de extensie .c) en compileer het.

C-code: Hello, world!

#include <stdio.h>
int main(void)
{
   printf("Hello, world!");
   return 0;
}

De eerste regel importeert een header-file. Hiermee geeft u aan dat u standaard Input en Output functies wilt gebruiken. Dit is een standaard onderdeel van de C-Compiler en biedt een reeks functies en definities voor het openen en sluiten van en schrijven naar streams.

De tweede regel declareert (maakt) een functie met de naam 'main'. Dit is het standaard startpunt (entry point) voor elk C-programma. De definitie geeft aan dat het resultaat van de functie een integer (geheel getal) is. Dit getal, de termination-code, wordt gebruikt om aan te geven of de uitvoering van het programma succesvol was of dat er een fout is opgetreden tijdens de uitvoering.

Een uitgebreidere uitleg vindt u in het hoofdstuk functies.

De derde regel geeft het begin van een blok code aan. Een blok wordt omsloten door accolades ({ en }). Tussen deze twee wordt de inhoud van de functie main gedefinieerd.

De vierde regel roept de functie printf op. Hiermee wordt de zin "Hello World!" naar stdout (Standard Output) geschreven. Meestal komt dat neer op de (virtuele) terminal; het beeldscherm (min of meer).

Regel vijf beeindigt de functie. De nul geeft aan dat er geen problemen zijn opgetreden.

Regel zes sluit het blok code af.

Commentaar[bewerken]

Je kunt in C net zoals vrijwel alle andere programmeertalen commentaar toevoegen aan jouw programmacode. Je kunt dan zeggen wat bepaalde delen van jouw programmacode doet zodat je dat later makkelijk kunt achterhalen.

C-code: Commentaar

/* commentaar */

Commentaar moet je plaatsen tussen "/*" en "*/". Dit soort van commentaar kan meerdere regels lang zijn.

C-code: Commentaar

/* commentaar commentaar commentaar commentaar
   commentaar commentaar commentaar commentaar 
*/

Naast het commentaar voor meerdere regels kun je een ander soort commentaar gebruiken voor slechts één regel namelijk //

C-code: Commentaar

//commentaar commentaar commentaar commentaar

Let op: // is recent toegevoegd aan C en sommige compilers ondersteunen dit nog niet.

Variabelen[bewerken]

Een variabele is een stukje data dat de computer onthoudt en waar je waarden aan kunt toekennen. Variabelen zijn heel belangrijk in C. Er zijn verschillende soorten variabelen. Je hebt bijvoorbeeld char waar je karakters en andere waarden van één byte in opslaat en je hebt int waar je nummers (integers) in opslaat.

Hier is een lijst met de meest voorkomende soorten variabelen

Naam Gebruikt voor Aantal bytes* Aantal bits* Teken
char Letters en kleine getallen 1 8 %c
short (int) Vrij kleine getallen 2 16 %d
int Normale getallen (integers) 4 32 %i
long (int) Grote getallen 8 64 %d
float Gebroken getallen 4 32 %f
double Gebroken getallen met extra precisie 8 64 %g

*Dit zijn gebruikelijke waarden bij 32-bits programma's. Sommige compilers kunnen hiervan afwijken.

Variabelen (behalve gebroken getallen) kunnen signed of unsigned zijn.

Als een getal signed is kan het zowel positief als negatief zijn. Unsigned getallen kunnen alleen positief zijn. Daarentegen kan een unsigned variabele wel tweemaal zo grote getallen bevatten.

Standaard zijn variabelen unsigned.

C-code: Variabelen

#include <stdio.h> /*Zoals altijd..*/

int main(void)
{
    int OnzeInt   = 5;  /* we maken een integer die 'OnzeInt' heet en de waarde
                         van 5 heeft. In C betekent '=' altijd 'geef de waarde van'*/
    char OnzeChar = 'a';  /* we maken een character die 'OnzeChar' heet en de waarde
                          'a' heeft. Let op dat er aan allebei de kanten een enkel 
                          aanhalingsteken staat */
    int AnderInt  = 2;
    
    
    printf("OnzeChar =\t%c \n", OnzeChar); /* Kijk onderaan code */
    printf("OnzeInt  =\t%d \n", OnzeInt);  /* Hiervoor ook       */
    
    OnzeInt  =   OnzeInt - AnderInt; /* Dit wordt dus 3:  5 - 2 = 3. 
                    Hier hoef je geen int meer voor te zetten: we veranderen
                    de waarde, we maken geen nieuwe */
    OnzeChar = 'b'; /* Hier dus ook niet, wel nog steeds de enkele aanhalingstekens */
    
    printf("OnzeChar =\t%c \n", OnzeChar);
    printf("OnzeInt  =\t%d \n", OnzeInt);  
    
    return 0;
 }

Oke.. ik hoop dat het meeste duidelijk is, maar hoe ik met de functie printf variabelen print, is niet erg duidelijk.

In deze regel: printf("OnzeChar =\t%c \n", OnzeChar); staat ongeveer in het midden '%c'. Dat teken vervangt zich met wat er achter de string, na de komma staat. In dit geval dus 'OnzeChar'. Bij de regel daarna staat er geen %c, maar %d. Dat komt omdat er achter de komma geen character staat, maar een decimaal (getal). Voor characters gebruik je dus '%c' en voor getallen '%d'.

Er is nu al een hoop informatie besproken. Probeer er maar eens een programma mee te maken, dan zul je zien dat het best moeilijk wordt, zeker omdat als je ook maar iets fout typt, het meteen niet meer lukt. Let er ook op dat C "case-sensitive" is. Dat betekent dat AnderInt niet hetzelfde is als aNdErInT en printf ook niet hetzelfde als Printf. Dit wordt al makkelijker als je onthoudt dat alle commando's als printf en #include, met kleine letters worden geschreven.

Input[bewerken]

Nu wordt het pas echt programmeren (heb ik dan nog niks bereikt? wil je zeggen, maar nu worden (hopelijk) de programma's handig om te gebruiken). We gaan een programma maken die de de oppervlakte van een cirkel uitrekent. Eerst vragen we om de diameter en dan passen we de formule toe.

C-code: Input

#include <stdio.h> /* moet ik het nog uitleggen :P */
#define PI 3.14  /* weer wat nieuws: hiermee geef je PI de waarde van 3.14 voor
                  het programma begint. Die waarde kan niet veranderd worden */
int main(void)
{
 int diameter; /* zoals je ziet, kan je ook een variabele maken zonder hem eerst een
               waarde te geven. De waarde geef je hem later. */
 double straal;
 double oppervlakte;
 
 printf("Type de diameter van de cirkel:\t"); /* tab om het mooi te maken */
 scanf("%d", &diameter); /* dit is de nieuwe functie die ik straks zal uitleggen */
  
 /* Voor iedereen die niet heeft opgelet op school: oppervlakte = pi * straal^2
       en straal is de helft van de diameter                                    */
  
 straal = diameter / 2;
 
 oppervlakte = PI * (straal * straal);
                    /* straal ^ 2 dus */
  
  
 /* Bedenk zelf maar een manier om het resultaat te laten zien :P
    Moet niet zo moeilijk zijn als je het vorige onderwerp hebt begrepen */
  
 return 0; /* had je natuurlijk ook zelf kunnen bedenken.. */
}

Merk op dat deze code alleen werkt voor even-getallen.

Dan nu waar we dit voor gemaakt hebben: de input. Om de lengte van de diameter te krijgen, gebruikten we scanf.

C-code: Input

scanf("%d", &diameter);

Tussen dubbele aanhalingstekens, staat %d. Dat betekent (zoals je hopelijk al geraden hebt) dat er een decimaal verwacht wordt. Daarna, achter de komma, staat een ampersand (&) met daarachter waar de input in moet worden opgeslagen. Als we functies en pointers hebben gehad, leer je waarom er een ampersand voor 'diameter' komt, maar dat is nu niet belangrijk. Zorg er gewoon voor dat je het niet vergeet :P.
Probeer nu, als oefening, een programma te maken dat uitrekent hoeveel rente je krijgt.
Je kan natuurlijk ook een karakter als input geven. Dan gebruik je dus scanf ("%c", &SlaHierOp). Je kan niet meerdere karakters als input geven, aangezien een char maar 1 karakter kan bevaten. Later, met arrays, kan dat wel, maar dat is een ander verhaal.

Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.