ebook img

Untitled - Wiskunde aan UGent PDF

271 Pages·2011·1.36 MB·Dutch
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Untitled - Wiskunde aan UGent

C Cursus door Geert Vernaeve voor Zeus WPI - Werkgroep Informatica (Universiteit Gent)  november  Copyright c , , , , Geert Vernaeve. (cid:13) Inleiding Woord vooraf ... a double pair of Joo Janta 200 Super-Chromatic Peril Sensitive Sunglasses, which had been specially designed to help people develop a relaxed attitude to danger. —Douglas Adams, “The Hitch Hiker’s Guide to the Galaxy” Deze cursus probeert niet-programmeurs een beetje wegwijs te maken in de taal C, maar heeft toch (hopelijk) voldoende extra materiaal aan boord om het ook voor wie al wat kan programmeren (niet noodzakelijk in C) interessant te houden. Dat extra materiaal zal ik telkens aanduiden met het (cid:127) symbool. Paragrafen die beginnen met zo’n “gevaarlijke bocht”-bord kunnen gerust over- geslagen worden door beginners, want dikwijls verwijs ik daarin naar verdere hoofdstukken. Niets belet avontuurlijke lezers al bij de eerste keer een glimp op te vangen van wat ko- men gaat ...Als je de cursus een tweede maal doorwerkt, kan je al eens wat meer op de “gevaarlijke bocht”-paragrafen letten om je kennis uit te diepen. Hier en daar zul je een OEFENING tegenkomen. Je zult sneller bijleren (en langer x onthouden wat je geleerd hebt) als je de opgaven zelf probeert uit te werken. Daarna kan je achteraan controleren of je antwoord juist was (of kijken wat je had moeten vinden, als je weinig inspiratie had). Je kan je vingers sparen en de programma’s uit deze cursus downloaden (zie D.2 voor § de juiste adressen). Telkens als er zo’n stukje programma komt, heb ik dat met het symbool aangeduid, samen met de bestandsnaam waarin je het kan vinden. Doelpubliek Deze tekst zou geschikt moeten zijn voor niet-programmeurs als cursus onder begeleiding van een meer ervaren programmeur, en ook als zelfstudiemateriaal voor zij die al enige basiskennis van programmeren (niet noodzakelijk in C) hebben. In principe kan je na de eerste twee hoofdstukken (waarin de allernoodzakelijkste ba- sis van C wordt uitgelegd) meteen verder springen naar een ander hoofdstuk (bijvoorbeeld hoofdstuk 5 als je snel met bestanden wil werken of hoofdstuk 10 als je een nukkig pro- gramma wil debuggen)—en dan natuurlijk doen alsof je neus bloedt als het woord “pointer” of “array” valt. In hoofdstuk 3 lees je alles over arrays, pointers, strings en hun onderlinge verbanden, die cruciaal zijn in C. Samen met hoofdstuk 2 vormt dit een stap-voor-stap uitleg van de taal C. 3  Hoofdstuk 4 gaat al meer over in naslag-stijl en behandelt de volledige syntax van C. Alle daarna komende hoofdstukken kunnen in willekeurige volgorde afgehandeld worden. Met dank aan . . . ‘Very deep,’ said Arthur, ‘you should send that in to the Reader’s Digest. They’ve got a page for people like you.’ —Douglas Adams, “The Hitch Hiker’s Guide to the Galaxy” Deze cursus zou nooit afgeraakt zijn (laat staan begonnen) zonder het aanhoudende aan- gedring van Roeland Mertens, waarvoor ik hem dan ook zeer erkentelijk ben, en zou veel minder goed geweest zijn zonder de opbouwende commentaar van Olivier Biot (die ook voor het nodige LATEX-truukwerk zorgde), Ivo De Decker, Rudy Gevaert, Ilse Lanszweert, An- nick Lootens, Filip Rooms, Nick Sabbe, Sven Van den Steene, John Van der Veen, Gregory Van Vooren, Dion Verbeke, Hans Vernaeve en Wim Woittiez. Tenslotte nog dank aan de Zeus Werkgroep Informatica aan de Universiteit Gent voor de motivatie en het voeren van reclamecampagnes voor de cursus. De ascii-tabel in Bijlage A is van de hand van Victor Eijkhout, die zijn vriendelijke toestemming gaf voor het overnemen ervan. Legalia (...) makes any claim, warranty, or representation, express or implied, that the products described in this manual are designed, intended, or authorized for use as components in systems intended for surgical implant in the body (...) —motorola/ibm, “PowerPCTM Microprocessor Family: The Progammer’s Reference Guide” Copyright(cid:13)c1997,1998,1999,2000,GeertVernaeve. Allerechtenvoorbehouden. Nietsuitdezeuitgavemagwordenverveelvoudigden/of openbaargemaaktdoormiddelvandruk,fotokopie,microfilm,geluidsband,elektronischopofwelkeanderewijzeookenevenminineenretrieval systeemwordenopgeslagenzondervoorafgaandeschriftelijketoestemmingvandeuitgever. Allegenoemdehandelsmerkenzijngedeponeerddoorhunrespectievelijkeeigenaar. RoodkapjeiseenhandelsmerkvanCharlesPerrault(–). Deuitgever neemt geen enkeleverantwoordelijkheid voor eventuelefoutenof onvolledighedeninditwerk, ofvoor schadediezou kunnen voortvloeiendoorhetgebruikvandeinformatiebevatinditwerk. Nietinslikken. Nietaanvuurblootstellen. Eerste uitgave:  december  ( pp.) Tweede uitgave:  november  ( pp.) Derde uitgave:  november  ( pp.) Hoofdstuk 1 De ontwikkelomgeving Onder ontwikkelomgeving verstaan we de programma’s die nodig zijn om een C listing “aan de praat” te krijgen. Een C programma wordt namelijk als een gewoon tekstbestand gemaakt (dus net zoals jeeen brief aanjegrootmoeder zouschrijven). Indie vorm kanhet programma niet gedraaid worden op een computer; probeer maar eens de brief aan je oma op te starten. Computers begrijpen immers alleen maar nulletjes-en-eentjes-salade: machinetaal. Het tekstbestand waar het C programma inzit, wordt ookwel de listing, broncode, source code ofkortweg code of source genoemd. Vandaar worden programmeurs ook wel coders genoemd. Omhet eenvoudig uit tedrukken: 00011010zoukunnen betekenen: “tel twee getallen bij elkaar op”, niet direkt een aangename manier van programmeren. Tot overmaat van ramp gebruiken niet alle processors dezelfde codes, dus 00011010 zou op een andere processor wel eens kunnen betekenen: “stop het programma”. Naast onhandig is machinetaal dus ook niet overdraagbaar (portabel): een programma dat draait op een systeem draait niet noodzakelijk op een ander. Gelukkig hoef je de taal van de microprocessor niet te begrijpen. Het tekstbestand dat je geschreven hebt, kan immers volautomatisch naar nulletjes en eentjes vertaald worden door een programma: de compiler. Het uiteindelijke resultaat van een compilatie wordt een uitvoerbaar programma (executable of binary) genoemd. Broncode Uitvoerbaar programma ◦ #include <stdio.h> ◦ 00110101001001010101011010010101011 Compiler 01001010101101111101001011110010101 ◦ void main(void) ◦ - 10010101001010111010000101110000000 ◦ { printf("Dag grootmoeder!\n"); ◦ 1010110101101100111100001001011001111001111010111001010111000011111011 ◦ } ◦ 11011010100100111100000110010111010 01001010000111110001010100110001011 ◦ ◦ 6 ? Editor (zie 1.1) § In deze context kom je af en toe de term IDE (Integrated Development Environ- ment) tegen, wat aanduidt dat compiler en een aantal hulpprogramma’s (editor, debugger, linker en wat weet ik niet nog allemaal) sterk met elkaar vervlochten (ge¨ıntegreerd) zijn; de compiler is bijvoorbeeld aan te roepen in een menu van de editor. In deze cursus ga ik echter van een eenvoudiger omgeving uit waarin editor en compiler eerder los van elkaar staan. 5  Hoofdstuk 1. De ontwikkelomgeving 1.1 De editor In principe zou je de listing met een tekstverwerker kunnen maken, maar dat is in feite schieten met een kanon op een mug. Je hebt als programmeur al die toeters en bellen (spellingscontrole, lettertypes, ...) nietechtnodig. DeCcompilerlusttrouwensalleenmaar “platte tekst”, d.i. tekst zonder lettertype-aanduidingen en dergelijke. Er zijn programma’s die specifiek gericht zijn op het bewerken van tekstbestanden (en die zijn dan ook een stuk kleiner dan een tekstverwerker): editors. Als editor zal ik in de voorbeelden pico gebruiken; de meeste andere editors werken op een gelijkaardige manier. Pico is op te starten door in de shell (het ding dat iets als $_ of C:\>_ zegt en waar je al je hartewensen in devorm van commando’s aan kwijtkunt) het commando pico bestandsnaam te tikken. Pico heeft echter de vervelende eigenschap regels die breder zijn dan het scherm in twee¨en te splitsen; dat kan je verhinderen door pico -w bestandsnaam te tikken. Eventueel kanjejeshell zoinstellen(doorwatmetaliasteprutsen) datde-wautomatischtoegevoegd wordt. (vi-gebruikers hebben d´a´ar althans geen last van :-) ) 1.2 De compiler Op de meeste unix systemen heet de standaard C compiler cc; in navolging hiervan noemen de verschillende compilerbakkers hun compilers bijvoorbeeld gcc (de gnu C compiler), bcc (Borland), enz. ... Ik zal in de voorbeelden altijd de gnu C compiler gebruiken, omdat die gratis verkrijg- baar is voor bijna alle soorten computers en besturingssystemen en bovendien bijzonder effici¨ente code genereert. In D.2 staat meer over waar je deze compiler kan vinden. § Meer over compileren vind je in 2.1.4. § 1.3 De shell Het is altijd handig om een paar commando’s te kennen om bestanden en dergelijke te manipuleren. Omdat dit geen cursus unix of ms-dos is, een heel beknopt overzichtje: 1. ls toont alle bestanden in de huidige directory (is te vergelijken met de dir van ms-dos). Meer info krijg je met ls -l. Je kan ook ´e´en of enkele bestanden bekijken; zo geeft ls *.c alle bestanden waarvan de naam op .c eindigt. 2. cd dirnaam “gaat in” een bepaalde directory. Om terug te keren, kan je cd .. gebruiken. 3. cp origineel kopie maakteennieuw bestanddatkopieheet enschrijft daarindezelfde inhoudalshet bestandorigineel; het resultaatistwee identieke bestanden. (Inms-dos is dat copy.) 4. rm bestandsnaam verwijdert een bestand. Meerdere bestanden ineens verwijderen kan met bv. rm *.o (verwijdert alle bestanden die op .o eindigen). Zeer gevaarlijk is natuurlijk rm * (in het bijzonder omdat de meeste unix-smaken niet vragen of je wel echt zeker bent, in tegenstelling tot bv. het ms-dos commando del ...) 1.4. Hulpprogramma’s  5. mv oudenaam nieuwenaam geeft een bestand of een directory een nieuwe naam. (Voor de dossers: ren.) Je kan ook een bestand naar een andere directory verplaatsen met mv. 6. mkdir dirnaam maakt een nieuwe directory aan in de huidige directory. 7. man commando geeft uitleg (de zogenaamde man page) over een bepaald shell- of C-commando. Als je info over een C-commando wilt dat toevallig ook de naam van een shell commando is (bijvoorbeeld printf) kan je met een bepaalde optie aangeven welke sectie van de man pages je wilt doorzoeken; onder Solaris gaat dat met de -s optie. De C commando’s zitten in sectie 3, dus: man -s3 printf (onder Linux: man 3 printf). De unix man pages zijn in de volgende secties onderverdeeld: Section Naam Omschrijving 1 User Commands Shell commando’s (bv. ls) 2 System Calls unix specifieke C functies (bv. fork) 3 C Library Functions/Subroutines Standaard C functies (bv. printf) Op de meeste systemen zijn er nog meer secties, maar die zijn niet steeds op dezelfde manier ingedeeld en ze zijn voor ons ook niet erg belangrijk. (Hoewel ... de spelletjes zitten in sectie 6.) 8. apropos commando geeft een lijst van alle man pages waarin het commando ver- noemd wordt. Dus als je niet precies weet in welke sectie printf weer te vinden is, geef je gewoon apropos printf. 1.4 Hulpprogramma’s Er bestaan een aantal handige hulpprogramma’s (tools) om het programmeren wat te ver- gemakkelijken (zoals debuggers, make, ...). Die zal ik in aparte hoofdstukken bespreken. In het begin zal je die trouwens nog niet echt nodig hebben, maar eens je wat grotere programma’s begint te schrijven, beginnen die hulpjes echt interessant te worden.  Hoofdstuk 1. De ontwikkelomgeving Hoofdstuk 2 Eenvoudige programmaatjes In dit hoofdstuk zie je net genoeg van C om aan pointers te kunnen beginnen. De volledige syntax van C wordt pas in hoofdstuk 4 uit de doeken gedaan. Hierdoor zijn sommige voorbeelden niet zo elegant en beknopt als ze zouden kunnen, waardoor je aanvankelijk een ietwat eenzijdige indruk van de taal C zou kunnen krijgen. De bedoeling van dit hoofdstuk is dat je zo snel mogelijk aan de slag kunt met C; de finesses komen later wel. 2.1 Het eerste programma Om vertrouwd te geraken met de ontwikkelomgeving, zullen we een eenvoudig program- maatje schrijven en compileren. Het eerste programma doet niets meer of minder dan een tekstje op het scherm afdrukken en stoppen. In C gaat dat ongeveer zo: #include <stdio.h> void main(void) { printf("Dag grootmoeder!\n"); } Dat heeft wel enige uitleg nodig. 2.1.1 Functies “Begin at the beginning,” the King said, very gravely, “and go on till you come to the end: then stop.” —Lewis Carroll, “Alice in Wonderland” De regel void main(void) geeft aan dat we een functie maken met als naam main. Deze regel heet de functiehoofding. Een functie is niets anders dan een hoop opdrachten (commands, statements) achter elkaar. Deopdrachten staantussen accolades eneindigen op een kommapunt (later hierover meer, in 2.4.1). § Even een dom voorbeeldje tussendoor: void snuitNeus(void) { zoekZakdoek(); 9

Description:
programmeren (niet noodzakelijk in C) interessant te houden. 5 als je snel met bestanden wil werken of hoofdstuk 10 als je een nukkig pro- . echt zeker bent, in tegenstelling tot bv. het ms-dos commando del ) .. Vlak vóór het eigenlijke compileren wordt het C programma door de preprocessor.
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.