Zenderruis en testbeeld I only replaced the index.html
Jun 02
    Change language to:
# Introductie in C programmeren
# door po0h
# voor Mostly-Harmless

#####   Woordje Vooraf #####

- geschiedenis van c
- werking van een source code
- werking van een compiler
- gebruik van een compiler

#####   Het Begin   #####

Bij het programmeren in C beginnen we met het declareren van zogenaamde
"header" files.
Header files bevatten koppelingen naar library files waar de instructies
staan voor functies
die later in het programma weer gebruikt worden. Het klinkt misschien erg
ingewikkeld, maar
hier hoef je je nog even niet druk over te maken.

Het declareren van header files kan er zo uitzien: "#include <stdio.h>". de
"#" voor "include" staat voor een preprocessor directive. Dit betekend dat
het als eerste verwerkt wordt in het programma. Hierna komt meestal de
"main" functie van een programma. Deze kan eruit zien als: "int main()". De
"int" voor de main()  betekend dat als de main() verwerkt is, dat het dan
terug keert als een integer variable om te vertellen hoe het programma is
be-eindigd. Daarom moet je ook altijd: "return 0" aan het einde van de
main() zetten. Dit geeft dan aan het besturingsysteem door dat het programma
normaal is uitgevoerd. Soms wordt er ook gebruik gemaakt van: "void main()".
Deze heeft dan geen return adres en zal ook werken, maar is niet gelijk aan
de
ANSI standaard dus zal ik die hier ook niet bespreken.

Dit brengt ons naar het volgende simpele programma:

----- 01. start code prog1.c -----

#include <stdio.h>

int main()
{
	printf("Ik doe geen hallo wereld!");
    	return 0;
}

----- 01. einde code prog1.c -----

"#include <stdio.h>" en "int main()" moeten nu een beetje duidelijk zijn.
Het nieuwe dat je als eerste tegenkomt zal de "{" zijn. De "{" staat voor
begin en "}" staat voor eind. Dit is nodig om in dit geval
aan te geven dat de functie "main()" uit meerdere instructies bestaat. Zo
ziet de compiler dat alle regels tussen de "{" en de "}" bij de functie
"main()" horen. Het volgende nieuwe is de "printf" functie. Functies
zijn bij elkaar gegroepeerde programmacode. De programmertaal C bevat bevat
standaard dus een aantal functies, maar deze zijn ook makkelijk zelf te
schrijven. Hier komen we later op terug. Je moet goed onthouden dat functies
altijd afgesloten moeten worden met een ";". Maar dit zul je in het begin
toch tig keer vergeten :) (dit was bij mij het geval tenminste).

Door de functie "printf()" wordt er "Ik doe geen hallo wereld!" getoond bij
het uitvoeren van het programma.
In "printf()" kun je verschillende escape sequences zetten. Dit zijn een
soort hulpmiddelen bij het weergeven
van een output. Een tabel van de meest gebruikte escape sequences:

        \a              Maakt een interne piep
        \b              Geeft een backspace
        \n              Nieuwe lijn (enter)
        \r              Carriage return (Zet de cursor aan het begin van de
lijn)
        \t              Tab
        \v              Verticale tab (Cursor verplaatst 1 lijn)
        \\              Backslash
        \'              Apostrophe
        \"              Dubbele quotes
        \?              Question mark
        \0              Null byte (is een 0)
        \O              Octale nummers (base 8)
        \xH             Hexadecimale nummers (base 16)

----- 02. start code prog2.c -----

#include <stdio.h>

int main()
{
	printf("Dit is regel1\nDit is regel2\n");
    	return 0;
}

----- 02. einde code prog2.c -----

Geeft als output:

[po0h@mabel c]$ ./prog1
Dit is regel1
Dit is regel2
[po0h@mabel c]$

#####   Variablen   #####

Een variable is een bepaald gebied in het geheugen van de computer waarin je
tijdelijk een waarde kunt opslaan. Ik denk dat dit goed uit te leggen is met
het volgende rekensommetje:

a=2
b=3

a+b=c

hoeveel is c?

Dit zullen jullie allemaal wel herkennen. Je onthoudt dat a de waarde 2
bevat, daarna onthoud je dat b de waarde 3 bevat. Als je dit doet staat er
eigenlijk 2+3 waarbij de uitkomst (c) dus 5 is. Zo werken variablen
eigenlijk ook. Bij programmeertalen kun je niet alleen een nummer in een
variable zetten, maar ook bijvoorbeeld een letter of een zin. Er bestaan dus
verschillende variablen.

Een veel voorkomende variable is het Integer variable (in c aangegeven als
"int"). Hier kun je getallen in stoppen die je later weer kunt verwerken in
bijvoorbeeld een rekensom (wat we eigenlijk hierboven gedaan hebben). Zo is
er ook een variable waarbij je een letter, woord of zin in kan zetten. Deze
wordt "char"
genoemd. Je zou hier ook een getal in kunnen zetten, maar de computer ziet
dit dan als een karakter. Hiermee zou je bijvoorbeeld dan niet kunnen
rekenen. Hier even een lijstje met de meest voorkomende variablen

	naam:		type:				bereik:
	--------	------------------------	---------------------------------
	char		karakter			alle karakters en cijfers (worden als een string gezien)
	double		dubbele pressisie float		ver achter de komma
	float		pressisie float			kan een getal met waardes achter de komma aan
	int		getal(len)			-2147483648 tot 2147483647
	long		lange integer			-2147483648 tot 2147483647
	short		korte integer			-32768 tot 32767

Als je een variable wilt gebruiken moet je deze eerst declareren. Hierbij
geef je eerst op wat voor type variable je wilt gebruiken met daarachter de
naam. Dit zou er dus zo kunnen uitzien: "int a;". Hier staat dus
dat variable "a" een integer variable is. Hierna kun je de variable een
waarde geven door: "a = 1" in te
voeren. Nu zouden we dus ons rekensommetje hierboven na kunnen spelen met
het programmeren:

#include <stdio.h>

int main()
{
	int a;
	int b;
	int c;

	a = 2;
	b = 3;
	c = a + b;

	return 0;
}

Dit is allemaal wel leuk en aardig, maar zo kunnen we de uitkomst niet op
het scherm zien. Daarvoor moeten we weer beroep doen op de functie
"printf()". Om de waarde van de variable weer te geven met "printf()" maak
je gebruik van "conversion characters". Dit zijn de %i, %f en %c in het
volgende programma. bij conversion characters gebruik je een elke keer als
je een variable declareerd een komma om de namen van de variablen te
onderscheiden. Als er 1 variable moet worden weergegeven met de functie
"printf()" moet je dit zo doen:

  printf("Dit is een voorbeeld van het gebruik van %i variable", een);

Hier zal voor de plaats %i het integer variable komen die de naam "een"
heeft

Om weer door te gaan op ons rekensommetje hierboven heb ik het volgende
programma geschreven:

#include <stdio.h>

int main()
{
	int a, b, c;

	a = 2;
	b = 3;
	c = a + b;

	printf("De waarde van variable c is nu %i\n", c);

	return 0;
}

Je ziet hier weer iets nieuws namelijk: "int a, b, c;". Dit is een manier om
sneller een aantal variablen met hetzelfde type te declareren.

Een voobeeld van het gebruik van meerdere (typen) variablen:

#include <stdio.h>

int main()
{
    	int   x;
    	float y;
    	char  z;

    	x = 1;
    	y = 1.234;
    	z = 'A';

    	printf("Mijn verschillende type variablen: %i, %f, %c \n",x,y,z);

    	return 0;
}

----- einde code prog3.c -----

Geeft als output weer:

[po0h@mabel c]$ ./prog3
Mijn verschillende type variablen: 1, 1.234000, A
[po0h@mabel c]$

Hier een lijstje met veel voorkomende conversion karakters:

	conversion char		type variable
	----------------	------------------
        %c              	Single character
        %d              	decimal numbers
        %e              	Floating point in scientific notation
        %f              	Floating point
        %lf             	Double
        %Lf             	Long double
        %g              	Uses either %e or %f, based on which is shorter
        %i              	Integer
        %o              	Unsigned octal integer
        %s              	String of text
        %u              	Unsigned integer
        %x              	Unsigned hexadecimal integer

Je kunt ook aangeven hoevel spaties het getal mag bevatten. Dit kun je doen
door middel van
een getal tussen de "%" en het type variable te plaatsen.

----- 04. begin code prog4.c -----

#include <stdio.h>

int main()
{
        int   x = 2;
        int   y = 1000;
        float z = 1.12345;

        printf("%5d, %1d, %.1f\n", x,y,z);

        return 0;
}

----- 04. einde code prog4.c ----

Hier zeg je dat het decimale variable x tenminste 5 spaties moet bevatten.
Om af te ronden achter de komma
kun je bv: "%.1f\n" gebruiken. Hier geef je aan dat de variable z maar
maximaal 1 getal achter de komma mag
bevatten. Als het getal groter is dan de aangegeven spaties negeerd het
programma de spatie. Bij het afkappen
van getallen die ook waardes achter de komma bevatten worden deze getallen
wel afgekapt.

TIP: Je ziet hier dat ik voor variables gebruik maak van letters. Doe niet
in een "serieus" programma vooral niet! Gebruik duidelijk namen zodat je
gelijk herkend waarvoor dat variable staat. Ik zal ook verder in de
documentatie "duidelijke" namen gebruiken.

Voor het gebruiken van user input kun je de functie "scanf()" gebruiken. Je
kunt dan de user input als een
variable opslaan.

	char naam[20];
	scanf("%s", &naam);

Hier zet "scanf()" de user input in de varaible "naam". Je zou dus hierna de
user input weer kunnen weergeven met "printf()". De "&naam" wil zeggen dat
het de input moet worden opgeslagen op de locatie waar het variable "naam"
is opgeslagen.

----- 05. begin code prog5.c -----

#include <stdio.h>

int main()
{
	char naam[21];
	printf("Wat is je naam?\n");
	scanf("%20s", &naam);
	printf("Dus je naam is %s\n", naam);

	return 0;
}

----- 05. einde code prog5.c -----

Dit zal dus als output weergeven:

[po0h@mabel c]$ ./prog5
Wat is je naam?
Twan
Dus je naam is Twan
[po0h@mabel c]$

Je ziet in de code dat ik 21 karakters heb gereserveerd voor variable "naam"
en daarna "%20s" doe. Dit wil zeggen dat ik dat ik 20 karakters van de
ingevoerde karakters gebruik en de rest afkap. Dit doe ik, omdat er anders
een stack-overflow kan ontstaan (met dank aan ilja en Quux :). Als je hier
meer informatie over wilt hebben kun je de documentatie over buffer
overflows raadtplegen. De mensen die opletten zullen merken dat er een
verschil zit tussen 21 en 20. Dit is omdat het afgesloten wordt met een NULL
byte.

##### Operators en Operands #####

Hier zal ik beginnen met een voorbeeld van een programma die getallen bij
elkaar optelt.

----- 06. begin code prog6.c

#include <stdio.h>

int main()
{
        int getal1;
        int getal2;
	int uitkomst;

        printf("Getal 1 is: ");
        scanf("%d", &getal1);
        printf("Getal 2 is: ");
	scanf("%d", &getal2);

        uitkomst = (getal1+getal2);

        printf("De som van %d en %d is %d\n", getal1, getal2, uitkomst);

        return 0;
}

----- 06. einde code prog6.c -----

Hier worden eerst 3 integer variablen aangemaakt. Daarna wordt de user input
gescanned en in variable
"getal1" en "getal2" gezet. Door middel van "getal1" en "getal2" wordt de
uitkomst berekend door:

	uitkomst = (getal1+getal2);

en daarna wordt de uitkomst weergegeven door de functie "printf()".

In C kun je makkelijk getallen latten op- en aflopen. Dit kun je doen door
bijvoorbeeld het
variable getal zo te gebruiken:

	getal++

Dit staat gelijk aan getal=getal+1. Zo zijn er ook nog een paar operators
die sommen verkorten:

	Gebruik		Staat gelijk aan
	-------- 	------------------
        x += 5;         // x = x + 5;
        x -= 5;         // x = x - 5;
        x *= 5;         // x = x * 5;
        x /= 5;         // x = x / 5;

##### IF ... ELSE struktuur #####

Het mooiste met programmeren is natuurlijk het vergelijken van waardes. Zo
kun bijvoorbeeld gegevens invoer
controleren en controleren op fouten. Je bent bijvoorbeeld een spelletje aan
het spelen waarbij je een auto moet besturen. Als je op de rechter pijl
drukt gaat die auto (zou je in ieder geval verwachten) naar rechts.
zo zou je de if structuur ongeveer kunnen zien.

De structuur van if ... else ziet er in c zo uit:

        if( condition ) statement1;
        else statement2;

Om meerdere statemants in de "if" te zetten moet je een begin een einde
declareren.
Dit kan zo gedaan worden:

        if( condition )
        {
                statement1;
                statement2;
        }
        else statement3;

Door de "{" en de "}" geef je een begin een einde aan voor de lus.

Een voorbeeld van een programma die de if ... else lus gebruikt:

----- 07. begin code prog7.c ------

#include <stdio.h>

int main()
{
	int getal1;
	int getal2;

	getal2 = (3);

	printf("Voer het getal 3 in: ");
	scanf("%d", &getal1);

	if (getal2==getal1)
	  printf("Dit was goed!\n");
	else
	  printf("Dit was fout!\n");

	return 0;

}

----- 07. einde code prog7.c -----

In dit programma wordt getal2 vergeleken met de invoer van de gebruiker
(getal1). Als deze aan elkaar gelijk is ("==") wordt er "Dit was goed!"
weergegeven. Is deze niet gelijk aan elkaar dan wordt er "Dit was fout!"
weergegeven. Er staat dus letterlijk:

Als getal2 gelijk is aan getal1, print dan "Dit was goed!".
Anders print "Dit was fout!".

De output van het programma kan dus zijn:

[po0h@mabel c]$./prog7
Voer het getal 3 in: 3
Dit was goed!
[po0h@mabel c]$

Hier is een overzicht met de symbolen die gebruikt kunnen worden om
statemants te vergelijken:

	symbool		betekenis
	-------		-----------
	<		kleiner dan
	>		groter dan
	<=		kleiner dan of gelijk aan
	>=		groter dan of gelijk aan
	==		gelijk aan
	!=		niet gelijk aan

Hier is een programma die de invoer getallen met elkaar vergelijkt:

----- 08. begin code prog8.c -----

#include <stdio.h>

int main()
{
	int getal1;
	int getal2;

	printf("Voer het eerste getal in: ");
	scanf("%d", &getal1);

	printf("Voer het tweede getal in: ");
	scanf("%d", &getal2);

	if (getal1==getal2)
	  printf("De getallen zijn gelijk aan elkaar\n");
	else if (getal1>getal2)
	  printf("Getal %d is groter dan getal %d\n", getal1, getal2);
	else if (getal1<getal2)
	  printf("Getal %d is kleiner dan getal %d\n", getal1, getal2);

	return 0;
}

----- 08. einde code prog8.c -----

Hier wordt het getal dat als eerste ingevoerd wordt door de gebruiker
(getal1) vergeleken met
het tweede getal (getal2). Een uitvoer van het programma zou kunnen zijn:

[po0h@mabel c]$ ./prog8
Voer het eerste getal in: 3
Voer het tweede getal in: 2
Getal 3 is groter dan getal 2
[po0h@mabel c]$

##### FOR ... loop #####

De for loops worden gebruikt om een bepaalde functie of functies een aantal
keer te
herhalen. Een for loop ziet er zo uit:

        for( initialize; while this is true; do this )
                statement;

Meestal wordt eerst een waarde aan het variable gegeven ("initialize").
Daarna wordt er een
voorwaarde op gegeven. Als deze voorwaarde juist is dan gaat de loop door.
Wordt deze onjuist
zal de loop stoppen. Als derde wordt er aangegeven wat er met het variable
moet worden gedaan.

----- 09. begin code prog9.c -----

#include <stdio.h>

int main()
{
	int i;

	for(i=0;i<10;i++)
	  printf("De waarde is nu %d\n", i);

	return 0;
}

----- 09. einde code prog9.c -----

Door dit programma kun je goed zien wat er nou gebeurd. Aan de variable "i"
wordt de waarde van "0"
gegeven. In het begin van de for loop is "i" dus "0". Zolang "i" kleiner is
dan "10" wordt de functie
"printf()" uitgevoerd. Als deze 1 keer is uitgevoerd wordt variable "i"
steeds met 1 verhoogd. Je
krijg dus dit als output:

[po0h@mabel c]$ ./prog9
De waarde is nu 0
De waarde is nu 1
De waarde is nu 2
De waarde is nu 3
De waarde is nu 4
De waarde is nu 5
De waarde is nu 6
De waarde is nu 7
De waarde is nu 8
De waarde is nu 9
[po0h@mabel c]$

##### WHILE ... loops #####

Het principe van de while loop is eigenlijk hetzelfde als de for loop. De
loop gaat door als de statement
waar is en anders stopt het programma. Hier een simpel programmatje waarbij
je zelf kunt bepalen hoe vaak
je een bepaalde zin wil afdrukken:

----- 10. begin code prog10.c -----

#include <stdio.h>

int main()
{
	int i;

	printf("Aantal herhalingen: ");
	scanf("%d", &i);

	while(i--)
	  printf("allemaal aapjes!\n");

	return 0;
}

----- 10. einde code prog10.c -----

Hier geef je dus eerst een waarde aan variable "i". De while lus zal stoppen
als de waardo van "i" "0" is.
Elke keer als de functie in de while loop wordt uitgevoerd wordt variable
"i" met 1 verkleind.

written by Remko

Leave a Reply