[Muziek] ZAMYLA CHAN: Zou u eerder ontvangen $ 10.000.000 nu of ontvangen centen elke dag van de maand, waarin elke volgende dag, ontvangt u dubbele van het bedrag van de centen u ontving de dag ervoor? In centen, gaan we bewijzen waarom u zou moeten zeker neem de centen. Jouw taak is om te schrijven pennies.c-- een programma dat het eerst vraagt ​​de gebruiker hoe vele dagen zijn er in de maand en vraagt ​​dan hoeveel centen de gebruiker ontvangt op de eerste dag. Het programma moet dan berekenen de bedrag dat de gebruiker zal gecumuleerde einde van de maand en weer te geven. We kunnen dit programma breken in een paar taken. We zullen moeten vragen om meerdere gebruikers ingangen - dagen en maanden, en penningen op de eerste dag. We moeten om bij te houden hoeveel geld de gebruiker heeft en update het elke dag verdubbeling van de hoeveelheid centen die zij ontvangen. En tot slot, we drukken hun eindtotaal, in dollars. Laten we pakken gebruikersinvoer eerste. Ik ga openstellen apples.c, kort programma dat zich bezighoudt met in-en uitgangen. Op de top hier, heb ik wat opgenomen van de bibliotheken die ik nodig heb - Bibliotheek CS50's en een standaard I / O-bibliotheek. Ik druk een prompt met behulp van de printf functie van de standaard I / O library. Maar de eigenlijke opdracht van de gebruiker gebeurt in de volgende regel met deze GetInt functie in het CS50 bibliotheek. GetInt krijgt input van de gebruiker en zorgt ervoor dat de component een geheel getal is. Dus ik invoer van de gebruiker op te slaan in integer i, 1 aftrekken van de i, en dan afdruk van de nieuwe waarde als ik. Na het compileren apples.c met behulp van de commando "appels te maken," Ik heb een uitvoerbaar bestand appels. Lopen dat, ik zal ingang 1. Het programma vertelt me ​​dat Ik heb 0 appels vertrokken. En dus dat werkte zoals verwacht. Dus laten we opnieuw uit te voeren deze en input negatief 1. Nu, met een negatief bedrag van appels niet echt zinvol, maar het programma aanvaardt, omdat negatieve 1, goed, het is een geheel getal. En nu het programma of het monster binnen het programma eet een negatieve appel, en nu heb ik negatieve 2 appels. Hm, dus dat is een les - hoewel de functie en getInt gerelateerde functies, zoals GetFlow of GetString krijgen de juiste data type, je moeten ervoor zorgen dat de input maakt gevoel voor uw programma. In centen, zal het niet doen alleen een prompt voor een geheel getal, moet u ervoor of de gebruiker voert een integer dat logisch gezien de context. Maand kan slechts 28, 29, 30 of 31 dagen. We willen voortdurend de vraag een geldige integer. Als ze een geheel buiten onze inbreng geaccepteerde grenzen, zullen we hen vragen opnieuw en opnieuw, totdat je geven ons een geldige integer. Herinneren aan de "repeat totdat" blokkeren Scratch? U kunt een vergelijkbaar construct maken in C met behulp van een lus "terwijl" of 'do-while "lus. De while-lus structuur heeft een aandoening waaraan moet worden voldaan voor de body van de lus uit te voeren. Dit moet er een beetje vergelijkbaar, omdat de aandoening is net als de Scratch blokken met de hoeken en gaat in de beugels van de lus "terwijl". Zodat de conditie zal controleren of de integer binnen de juiste grenzen. U kunt het gehele getal met getInt prompt en voer vervolgens uw "terwijl" lus, het herhalen van de prompt en druk instructies, terwijl de ingang is niet geldig. Een andere manier om de correcte invoer van de gebruiker te waarborgen is met behulp van een "do-while" lus, dat is zeer vergelijkbaar met een While-lus. De 'do-while "lus voert de code in het lichaam en die vervolgens controleert of aan de voorwaarde is voldaan of niet. Dit is nuttig voor het verkrijgen van gebruikersinvoer, omdat je weet dat je nodig hebt om ze prompt ten minste een keer. Als de voorwaarde niet is voldaan, wordt het programma zal de lijn uit te voeren na je "do-while" lus. Als de aandoening al wordt voldaan, de lus wordt herhaald Een 'do-while "lus voor het valideren van de gebruiker inbreng zal er ongeveer zo uitzien. Ik verklaar een variabele n, getint, en Vervolgens herhalen totdat n geldig is. En dit proces, legde ik uit, werd met behulp van de integer data type, dat je zult gebruiken voor de dagen van de maand. Maar we weten dat het aantal centen zal snel opstapelen, dus om slaan grotere aantallen, gebruik het gegevenstype Longlong, maar vergeet niet het zelfde principe van de validatie van toepassing is. Geweldig, dus zodra we hebben twee geldige input van de gebruiker - dagen in de maand en de centen op de eerste dag - we kunnen verplaatsen naar de volgende onderdeel van het programma. De eerste dag begint de gebruiker met hoeveel centen ze gespecificeerd en het bedrag van de centen die ze ontvangen de volgende dag wordt verdubbeld. Dus is het zinvol om bij te houden van deze twee bedragen - hoeveel geld heeft de gebruiker en hoe veel centen zullen ze worden gegeven. Nu, iets te doen voor 28 tot 31 dagen is repetitief, dus laten we gebruik maken van een "voor" lus te itereren over de dagen in de maand, het bijwerken van de totale en de penning bedragen elke keer. "Want" loop syntax bevat de volgende - een initialisatie, een voorwaarde, en een update. Uw lus "voor" zal initialiseren een variabele, wanneer eerst in de beugel. Als de voorwaarde is voldaan, het lichaam van de lus zal uitvoeren. Daarna zal de update uit te voeren. Als de aandoening is nog steeds voldaan, de lus zal uitvoeren en bijwerken, en herhalen, zolang uw conditie de waarde true. Hier is een "voor" lus die een verdeelt integer p door 2 in totaal 10 keer. Merk op hoe ik verklaarde de integer p buiten mijn lus "voor", zodat de integer kan toegankelijk zijn buiten de lus "voor". Nadat de maand voorbij is, is het tijd om de gebruiker te vertellen hoeveel geld ze hebben gekregen. Per de spec, moet u de gebruiker vertellen hoeveel dollars, niet hoeveel centen, ze hebben. Maar tot nu toe, je hebt spoor van de gehouden totaal en de centen met LongLongs, die zijn gehele getallen. Er zijn een 100 centen tot $ 1, dus tenzij het aantal centen is een veelvoud van 100, moet u vertegenwoordigen decimalen. De verdubbelde autotypie laat u om dit te doen. Dus hoe kunnen we omzetten van die centen tot dollars? Laten we eens een kijkje pi.c. Dit programma neemt een Longlong big_pi en deelt het door 100000, en drukt het resultaat tot vijf decimalen. Als we wilden tot vier cijfers geven plaatsen, dan kunnen we alleen maar de plaats van dit nummer hier. Dus laten we redden, compileren pi, en dan is het resultaat te zien, die wij verwachten dat 3,1415 - de eerste vijf cijfers van pi. Het is niet anders. En waarom? Nou, omdat big_pi is een Longlong, die een geheel getal is, welke niet bijhouden van decimalen. De wijziging moet ik maken is in de divisie. Ik moet hier cast een dubbele vóór verdelen, want dubbelspel niet kunnen houden bijhouden van decimalen. En ik ga een nieuwe regel toe te voegen hier voor een betere opmaak. En hier hebben we het - 3,1416. U zult merken dat deze wordt afgedrukt 3,1416 in plaats van 3,1415 zoals verwacht. Dat is omdat het ronden op de divisie proces, in tegenstelling tot alleen afkappen van de waarde. Nu moet je in staat om het af te drukken eindtotaal correct, dat eindigt het programma. Gefeliciteerd. Mijn naam is Zamyla. En dit was pence. [Muziek]