Weblessen.nl - Voor iedereen die wat wil leren..


C

Index
C Index
Voorwoord
De eerste stap
Een inleiding tot C
Programma besturing
Toekennen en Logisch vergelijken
Funkties en Variabelen
Defines en Macros
Strings en Tabellen
Pointers
Standaard Invoer / Uitvoer
Bestands Invoer / Uitvoer
Structuren en Unions
Dynamisch ngeheugen aanvragen
Karakter- en bitmanipulatie

Appendix
Hungarian Notation
Voorbeeldprogramma's
Totaal programma
Scherm- en bestands beschrijvingen
Aanpassingen voor VM/CMS

Programma besturing

 

De WHILE lus

De programmeertaal C heeft verschillende structuren beschikbaar voor iteraties en beslissingen. We zullen die in deze les gaan bestuderen, te beginnen met de while lus. De while lus blijft verwerken zolang een bepaalde conditie WAAR is. Zodra de conditie ONWAAR wordt, eindigt de verwerking van de lus. While doet dus precies wat het statement zegt, doe zolang. Bestudeer nu het programma WHILE.C. main () { int punten; punten = 0; while (punten < 60) { printf ("Het totaal aantal punten is %d \n", punten); punten = punten + 10; } } We zien dat het programma begint met de declaratie van de integer variabele punten binnen het hoofdblok. De variabele krijgt de waarde nul. Dan komen we bij de while lus zelf.

De syntax van de while statement is zoals we hem hier zien. Het gereserveerde woord while wordt gevolgd door een voorwaarde tussen haakjes. Zolang nu de voorwaarde tussen haakjes waar is, worden alle statements die tussen de accolades staan uitgevoerd.

In dit geval wordt de waarde van de variabele punten opgehoogd tot en met 60 en stopt de verwerking. Het programma zal verder gaan met het statement volgend op de while, in dit geval einde programma.

Hetgeen tussen haakjes staat is de voorwaarde, de conditie, waarover later meer. Neem voorlopig aan dat de conditie waar of niet waar oplevert.

Enkele dingen moeten nog worden opgemerkt over de while lus. Ten eerste, als de variabele punten bij aanvang van de lus reeds de waarde 60 of hoger had, wordt geen enkel statement tussen de accolades uitgevoerd. Het is dus mogelijk dat de statement van de while lus nul keer worden verwerkt. Ten tweede, als de variabele punten in het geheel niet wordt opgehoogd, krijgt men een eindeloze lus. In zo'n geval zal het programma niet eindigen. Ten slotte, als er maar een enkel statement in de lus staat, mogen de accolades worden weggelaten.

Compileer en test dit programma nu.


De DO-WHILE lus

Een variatie op de while lus is de do-while lus, hetgeen bestudeerd kan worden met programma DOWHILE.C. main () { int punten; punten = 0; do { printf ("Het totaal aantal punten is %d \n", punten); punten = punten + 10; } while (punten < 60); } Dit programma is vrijwel gelijk aan het vorige programma. Het verschil bestaat hieruit dat de do-while lus begint met het gereserveerde woord do. De statements die herhaald moeten worden uitgevoerd staan ook hier tussen accolades. Achter de sluit accolade staat de voorwaarde voorafgegaan door het gereserveerde word while. Ook hier de voorwaarde tussen haakjes.

De statements in de lus worden uitgevoerd totdat de conditie niet waar wordt. Het programma wordt dan voortgezet met het statement volgend op de do-while. Omdat voor de do-while geldt dat de test achteraf wordt gedaan, zullen de statements binnen de lus altijd minstens een maal worden uitgevoerd. Ten tweede, als de variabele punten nooit wordt opgehoogd, zal de verwerking niet eindigen. Tenslotte geldt ook hier dat accolades niet nodig zijn, als er maar een statement in de lus staat.

Compileer en test het programma.

Opmerking: Het is uiteraard toegestaan om een lus binnen een andere lus te programmeren (nesten).


De FOR lus

De for lus is niet iets nieuws, maar een andere manier om de while lus te schrijven. De for gedraagt zich dus als de while. Bestudeer nu het programma FORLOOP.C als voorbeeld van een programma met daarin een for lus.

De for lus bestaat uit het gereserveerde woord for gevolgd door een tamelijk uitgebreide expressie tussen haakjes. De expressie is opgebouwd uit drie delen die worden gescheiden door punt-komma's.

main () { int index; char worp[6][2]; for (index = 1; index < 6; index = index + 1) { strcpy (worp[index], "."); } /* endfor */ } Het eerste deel bevat de expressie index = 1 en draagt zorg voor de nodige initialisatie. Alle expressies die in dit deel voorkomen, worden uitgevoerd voordat de statements van de eigenlijke for lus zelf worden uitgevoerd. In principe mogen er heel veel initialisatie stappen worden geprogrammeerd op deze plek, echter maak er een gewoonte van dit deel eenvoudig en overzichtelijk te houden. Indien er meerdere stappen worden geprogrammeerd dan moeten deze worden gescheiden door een komma.

Het tweede deel, hier de expressie index < 6, is de test die wordt uitgevoerd voordat aan de doorgang door de lus wordt begonnen. Het mag elk soort expressie zijn die na evaluatie een WAAR of een ONWAAR oplevert.

Het derde deel, hier de expressie index = index + 1, wordt uitgevoerd telkens na een doorgang door de lus. Als de lus niet wordt doorlopen, worden ook de statements van dit deel niet uitgevoerd. Er mogen ook hier, net als in het eerste deel, meerdere statements staan, die worden gescheiden door een komma.

De for() expressie wordt vervolgens gevolgd door een (1) statement. Dit mag uiteraard een groep zijn. Dit statement of deze groep statements wordt bij elke lus doorgang uitgevoerd. In de programmeertaal C is het bijna altijd zo dat een enkel statement mag worden vervangen door een groep statements omgeven door accolades.

Compileer en test dit programma nu.


Het IF statement

Bestudeer nu het programma IFELSE.C als voorbeeld van een programma met een beslissing, de if. Het programma bevat twee statements, een zonder en een met een else tak.

Laten we het eerste statement bekijken. Het begint met het gereserveerde woord if gevolgd door een expressie tussen haakjes. De expressie wordt ge‰valueerd. Wanneer deze WAAR is, wordt het enkele statement op de volgende regel uitgevoerd. Indien de expressie ONWAAR is, wordt dat statement overgeslagen.

Ook hier geldt weer dat het enkele statement mag wordt vervangen door een groep, bestaande uit een of meerdere andere statements omgeven door accolades.

main () { int score = 100; int persrec = 200; if (score > persrec) printf ("Je hebt je persoonlijk record verbeterd !!!\n", score); if (score > persrec) printf ("Score: *** %04d *** \n", score); else printf ("Score: %04d \n", score); } De expressie score > persrec vraagt eenvoudig af of de waarde van de huidige score groter is dan die van het persoonlijk record van de speler.

Het tweede if statement is vrijwel gelijk aan de eerste, echter nu is het uitgebreid met het gereserveerde woord else. Als na evaluatie de expressie WAAR is wordt de eerste printf uitgevoerd. Als deze ONWAAR is wordt de tweede printf uitgevoerd. Er wordt dus altijd iets afgedrukt, terwijl in het eerste geval er soms wel en soms niet iets wordt afgedrukt.

Beide vormen hebben zo hun eigen toepassing binnen een programma. Het tweede if statement wordt hier toegepast om de score extra te accentueren, wanneer deze boven het persoonlijk record uitkomt.

Compileer en test nu dit programma.


Het BREAK en CONTINUE statement

Bestudeer het programma BREAKCON.C als voorbeeld van het break en continue statement. Het programma bevat twee bijna identieke iteraties. main () { int xx; for (xx = 5; xx < 15; xx = xx + 1) { if (xx == 10) break; printf ("In het 'BREAK' deel; xx heeft de waarde %d\n", xx); } for (xx = 5; xx < 15; xx = xx + 1) { if (xx == 10) continue; printf ("In het 'CONTINUE' deel; xx heeft de waarde %d\n", xx); } } In de eerste iteratie staat een if die een break aanroept als xx de waarde 10 bereikt. Het break statement heeft als eigenschap uit de lus van een iteratie te springen en het programma te vervolgen met het eerste statement na de lus. De lus wordt daarmee (voortijdig) be‰indigd. Het is een waardevol statement in die situaties waar je uit de lus van een iteratie wil springen afhankelijk van de waarde van een bepaald resultaat dat in de lus zelf wordt berekend.

De tweede iteratie bevat een continue statement. Dit statement heeft als eigenschap uit de lus van een iteratie te springen, maar de lus niet te be‰indigen. Het programma wordt vervolgd met het eerste statement in de lus. Als xx de waarde 10 bereikt, zal het programma naar het begint van de lus springen en doorgaan. Het effect zal zijn dat alle waarden worden afgedrukt, behalve de waarde 10.

Compileer en test dit programma om te zien of het werkt zoals je denkt.


Het SWITCH statement

Bestudeer nu het programma SWITCH.C om een indruk te krijgen van een van de sterkste structurerings primitiva van de programmeertaal C, de switch. De switch is niet echt ingewikkeld, dus laat je er niet door afschrikken.

Het statement begint met het gereserveerde woord switch gevolgd door een variabele tussen haakjes. De waarde van deze variabele, in het voorbeeld opdracht, bepaald naar welke tak van de verwerking wordt gesprongen. Vervolgens worden een aantal takken van verwerking opgenomen tussen accolades. Het gereserveerde woord case gevolgd door een getal gevolgd door een dubbele punt wordt gebruikt om zo'n tak aan te geven. De tak die zal worden doorlopen, is degene waarvan het getal overeenkomt met de waarde van de variabele.

main () { int opdracht; switch (opdracht) { case 1: printf ("Verwerk 'vooruit bladeren' opdracht ...\n"); break; case 2: printf ("Verwerk 'achteruit bladeren' opdracht ...\n"); break; case 3: case 4: case 9: printf ("Stop de verwerking.\n"); break; default: printf ("Dit is een onbekende opdracht !!!\n"); break; } } Als in het voorbeeld programma opdracht de waarde 2 heeft, zal de tekst Verwerk 'achteruit bladeren' opdracht ... worden afgedrukt. De break zal er vervolgens voor zorgen dat uit de switch wordt gesprongen.

Zodra een verwerkings-tak wordt gevonden, zullen de statements in die tak worden uitgevoerd totdat een break wordt gevonden of totdat het programma door de laatste tak valt. Dit laatste is belangrijk om te onthouden.

Als opdracht de waarde 3 heeft, zullen de statements na case 3: worden uitgevoerd. Hier echter staan de eerste statements pas na case 9:. Het gevolg is dat de tekst Stop de verwerking. wordt afgedrukt en het programma verder gaat na de switch.

De verschillende takken mogen in elke willekeurige volgorde staan. Als een tak niet wordt gevonden, wordt het deel achter default: uitgevoerd. Als opdracht de waarde 16 heeft, zal de tekst Dit is een onbekende opdracht !!! worden afgedrukt.

Tenslotte nog een opmerking. De hiervoor behandelde statements mogen alle binnen elkaar genest worden of in elke volgorde na elkaar geprogrammeerd worden.

Compileer en test dit programma.


Een voorbeeld programma

Bestudeer nu het programma PVK.C. Het programma lost het probleem op van een boer die naar de markt gaat. Hij heeft honderd gulden en daarvoor moet hij precies honderd beesten kopen. Een paard kost vijftien gulden, een varken kost een gulden en de kippen kosten een kwartje. De vraag is hoeveel paarden, varkens en kippen moet hij kopen. Er is een (1) oplossing. Onderstaand het C programma. main () { int paard, varken, kip, beesten; float bedrag, subtot; printf ("PAARDEN VARKENS KIPPEN BEDRAG \n"); printf ("------- ------- ------- ------- \n"); /* Ga uit van het duurste beest, het paard ... */ for (paard = 1; paard <= (100.00 / 15.00); paard++) { subtot = paard * 15.00; /* Varieer dan met het aantal mogelijke varkens ... */ for (varken = 1; varken <= ((100.00 - subtot) / 1.00); varken++) { kip = 100 - paard - varken; /* Wat is nu het totaal bedrag aan beesten ... */ bedrag = subtot + varken * 1.00 + kip * 0.25; /* Indien buiten de grenswaarden, dan het volgende varken ... */ if (((100.00 - 0.50) > bedrag) || (bedrag > (100.00 + 0.50))) continue; /* Indien tussen de grenswaarden, druk dan af ... */ printf ("%6d %6d %6d %6.2f", paard, varken, kip, bedrag); /* BINGO !!! */ if (bedrag == 100.00) printf (" <===="); /* Sluit de print-regel af */ printf ("\n"); } /* endfor */ } /* endfor */ } Er is hier gekozen voor declaratie van variabelen van eenzelfde type op een regel. Wat verder opvalt is dat het commentaar met de statements is uitgelijnd. Commentaar en statements zijn bij elkaar gehouden door het gebruik van blanco regels. Statement groepen zijn twee spaties ingesprongen, zodat te zien is wat respectievelijk tot de for's en wat tot de if's behoort.

Het programma genereert mogelijke aankopen en berekent daarvan het aankoopbedrag. Als dit bedrag niet te veel afwijkt van honderd gulden wordt de samenstelling afgedrukt. De afwijking in het voorbeeld is vijftig cent. In het geval het aankoopbedrag precies op honderd gulden uitkomt, wordt een pijl naast de samenstelling afgedrukt.

Compileer en test het programma. Controleer of het werkt zoals hierboven beschreven.



Webdesign

Maak van Weblessen.nl uw startpagina!
Plaats Weblessen.nl bij uw favorieten. Neem contact met me op.
Heb je een Hosting?
Geef hier jouw mening over jouw web hosting

Webadres.info: Goede domeinnaam kiezen

Gesponsorde links:
Budget Webhosting
Web2host.nl
10eurohost.nl
Denit Hosting Solutions
YourHosting.nl
Starthosting.nl
Eduvision.nl
Educruitment.nl
Webadres.info


De link top 5:
Gratis Computercursussen
WebmasterStartpagina
MijnStartpagina.nu
Bluebird Animatie
Anouksweb
Link aanmelden
Alle Partners

Webmasterwoordenboek
A | B | C | D | E | F
G
| H | I | J | K | L | M
N
| O | P | Q | R | S | T
U | V | W | X | Y | Z

Films vanavond op Tv:

De klok:

(advertentie)

HTML leren
PHP cursus
XML lessen
XHTML les
CSS leer
leer C
REXX online
Red Hat Linux cursus