Programmeren in C/If en loops

Uit Wikibooks
Naar navigatie springen Naar zoeken springen

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


If en else[bewerken]

Nog een belangrijk punt in programmeren. We maken nu geen heel nieuw programma, we breiden alleen het vorige een beetje uit.

Voorbeeld[bewerken]

C-code:

 #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()
 {
   int diameter; 
   int straal;
   int resultaat; /* oppervlakte is vervangen met resultaat */
   
   int optie;

   printf("Enter de diameter van de cirkel:\t"); 
   scanf("%d", &diameter); 

   /* en dan nu het nieuwe... */
   printf("Berekent u de oppervlakte[1] of de omtrek[2]:\t");
   scanf("%d", &optie);  /* na scanf wordt meteen gevraagd welke optie te kiezen*/

   /* HIER GAAT HET HOOFDSTUK OVER let dus goed op :P */
   if (optie == 1) /* deze code wordt alleen uitgevoerd als de optie 1 is: */
   {               /* begin van if (net als het bij main is, weet je nog?) */
      straal = diameter / 2;
      resultaat = PI * (straal * straal);     
                       /* straal ^ 2 dus */
   }               /* het einde van if */

   else            /*als de optie niet 1 was (omtrek dus) */
   {               /*begin van if */
      resultaat = PI * diameter;
   }               /* einde van if */
   
   if (optie == 1)
        printf("De oppervlakte van een cirkel met een diameter van %d is:\t%d\n", 
           diameter, resultaat); /* zie uitleg */

   else
        printf("De omtrek van een cirkel met een diameter van %d is:\t%d\n", 
           diameter, resultaat); /* zie uitleg */

   
   return 0; 
 }

Het Gebruik[bewerken]

Het gebruik van "if" is niet zo moeilijk: -Eerst typ je natuurlijk "if". -Daarna zet je tussen haakjes wanneer het door moet gaan -Curly bracket open -Je code -Curly bracket dicht

Lijst van Vergelijkingsoperatoren[bewerken]

Er zijn natuurlijk nog meer vergelijkingsoperatoren dan alleen '=='. Je wilt bijvoorbeeld ook weten of iets groter is, of kleiner. Hier is een lijst:

Wat                  Betekenis
==                   is gelijk aan (let op de dubbele =)
!=                   is niet gelijk aan
<                    is kleiner dan (links is kleiner dan rechts)
>                    is groter dan
<=                   kleiner dan of gelijk aan
>=                   groter dan of gelijk aan

1 en 0[bewerken]

In C, veel meer talen en zelfs wiskunde is 1 waar en 0 onwaar. Bijvoorbeeld, if(1) gebeurt dus altijd, want 1 is waar. if(0) dus nooit. Het gebeurt dus misschien wel eens dat je in een stukje code if(variabel) tegen komt. Als variabel 1 is, voert het programma het stukje code uit. Als het 0 is niet. In C is alles behalve 0 waar, dus als 'variabel' 3 is, is het ook waar. Meer algemeen beschouwt C elke waarde, verschillend van 0 als true.

Meerdere statements[bewerken]

Het is mogelijk om binnen een if statement meer dan een voorwaarde te verwerken in lijst, dit kan interessant zijn als je bijvoorbeeld een programma maakt, dat een stuk code bevat, dat alleen gedraaid wordt, als de gebruiker, zijn gebruikersnaam en bijbehorend password in tikt. Hiervoor kan men zogenaamde logische operatoren gebruiken, deze zijn and (&&), or (||) en not (!).

C-code:

#include <stdio.h>

/* voor strcmp, het vergelijken van strings, tekenreeksen, strcmp neemt twee argumenten, 
twee strings en zoekt de overeenkomsten met elkaar, als er geen verschillen zijn geeft 
strcmp 0 terug */

#include <string.h> 

int main()
{
        char gebruikersnaam[255]; /* Hier staat maak een rij met 255 characters, de c             
                                   representatie van een string. */
        char password[255];
        printf("Gebruikersnaam:");

        /* vraag een string aan de gebruiker en sla deze op in gebruikersnaam. */      
        
        scanf("%s", &gebruikersnaam); 
        printf("Welkom %s!\n Voer uw password in:", gebruikersnaam);

        /* Doe hetzelfde voor password: */

        scanf("%s", &password);
        
         /* hier staat als er GEEN(!) verschil is tussen password en declown EN(&&) er is            
         GEEN(!) verschil tussen gebruikersnaam en pipo, voer dan de volgende code uit... */
        
        if (((!strcmp(password,"declown")) && (!strcmp(gebruikersnaam, "pipo"))))
         {
                printf("Correct.\n");
                return 0;
         } 
        else
         { /* en anders.. */
                printf("Niet correct. Ik ga het allemaal tegen de systeembeheerder zeggen.\n");
                return -1;
         }
/* Dit punt wordt nooit bereikt */
return 0;
}

Waarheidtabellen[bewerken]

Waarheidtabellen zijn een manier om de werking van een logische operator weer te geven. Zoals hierboven beschreven, betekent 1 waar en 0 onwaar. Als we twee statements ( a en b) nemen en deze testen op hun 'waarheid' hebben we dus twee mogelijke uitkomsten, als we dit samen met het resultaat van de operator zetten hebben we een zogenaamde waarheidstabel.

De eerste waarheids tabel is van de and (&&) operator.

>

AND

Zoals je ziet is er eigenlijk niets vreemds aan. Laten we het eens testen met een uitspraak. Als ik genoeg geld en tijd heb, ga ik naar Spanje. Als ik níet genoeg tijd of geld heb, dan ga ik niet. Zoals je ziet is het dus ook geldig in onze gewone taal. De drie andere operatoren zijn or, xor en not. Hoewel xor niet in C is ingebouwd is het toch een hele nuttige. Xor, uitgeschreven exlusive or, is gedefinieerd als, of uitspraak 1 is waar of uitspraak 2 is waar, maar niet uitspraak 1 en 2.


OR XOR NOT

Switch[bewerken]

Als je iets maakt met heel veel if en else kan het soms verwarrend worden om te lezen. Daarom is er een switch gemaakt. Zie hier het voorbeeld:

C-code:

int optie;
printf("Optie:\t");
scanf("%d", &optie);
switch(optie)
{
case 1: /* als optie de waarde heeft van 1 */
        /* hier de code */
        break;   /* als hier geen break stond, ging switch verder naar wat er achter
                    case 2 en verder stond. */
case 2: /* hier de code */
        break;

case 3: /* etc, etc. */
        break;

default: /* als optie niet 1, 2 of 3 was */
         /* doe dit en dat */
}

Loops[bewerken]

Er zijn drie soorten loops: while, do-while en for. Die zorgen ervoor dat iets blijft gebeuren, zolang de conditie van de loop waar is. De condities zijn eigenlijk precies hetzelfde als in if-condities.

Hoe te gebruiken[bewerken]

De while loop:

C-code:

 while(/*conditie hier*/)
 {
    /* code hier */
 }

voorbeeld while loop:

C-code:

 int x=0;
 while(x<10)
 {
  printf("x is nu:%d\n",x);
  x=x+1;
 }

De do-while loop:

C-code:

 do
 {
    /* code hier */
 } while(/*conditie hier*/);

voorbeeld do-while loop:

C-code:

 do
 {
    printf("x is nu: %d\n",x);
 } while(x<10)

De for loop:

C-code:

 for(/*initialatie*/; /*conditie*/; /*optelling*/)
 {
    /* code hier */
 }

Uitleg[bewerken]

De while loop is simpel. Je geeft een conditie tussen de haakjes en hij voert het uit zolang het waar is. Zorg er wel voor, dat die conditie verandert (of kan veranderen, door input bijv.), als je geen gebruik maakt van een break (zie verder) om de loop vroegtijdig te beëindigen. Anders stopt de loop niet en loopt je programma klem. Als het je bedoeling is om programma's vast te laten lopen en daarmee ook computers, ga dan hier naartoe.

De werking van de do-while loop is identiek aan die van de while loop op volgend verschil na: aangezien de test op de conditie na de uitvoering van de code gebeurt, wordt deze laatste minstens éénmaal uitgevoerd.

De for loop is ingewikkelder. Een voorbeeld van hoe het eruit zou zien:

C-code:

for(int i = 0; i < 10; i++) /* Opmerking: i++ betekent i += 1 betekent i = i + 1 */
{                               /*        dat verhoogt i dus met 1.   */                     
    /* code hier */
}

We beginnen tussen de haakjes met int i = 0; De for loop maakt een int die i heet (i is heel gebruikelijk, samen met j en k) en de waarde 0 heeft. Puntkomma. Dan een conditie: zolang i lager is dan 10. Puntkomma weer. Daarna staat i++. Voordat de for-loop opnieuw begint doet hij in dit geval i++. De for loop voert dus de code uit, doet 1 bij i, en begint weer opnieuw zolang i lager is dan 10. Deze for loop doet wat er in de code staat dus 10 keer. Daarna wordt i vernietigd en kan je die dus niet meer gebruiken. In een while loop zou je precies hetzelfde kunnen doen als dat een for loop doet, maar in een for loop zet je alles kort bovenaan en hoef je je er verder geen zorgen meer over te maken.

Break en Continue[bewerken]

Soms kan het gebeuren dat je een loop wil afsluiten voordat de conditie onwaar is geworden of dat je de loop opnieuw wil beginnen. Als je de loop wilt stoppen, gebruik je (drie keer raden..) break. Als je de loop opnieuw wilt beginnen, gebruik je continue.

Een voorbeeld wanneer je de break kan gebruiken, is bij een menu.

C-code:

int optie;

while(1) /* 1 is waar, dus deze loop gaat altijd door */
{
    printf("Kies 1 voor blabla\n");
    /* en natuurlijk de rest van je menu */
    printf("Kies 0 om te stoppen\n"); 

    scanf("%d", &optie);

    if(optie == 0)
         break;

     switch(optie)
     {
          case 1: /* kijk terug in het boek als je het switch  systeem niet kent */

         /* enzovoort, enzovoort */
     } /* einde switch */

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