[Muusika mängib] ZAMYLA CHAN: Kas sa pigem saada 10000000 $ kohe ja vastu penni iga päev kuus, kus iga järgnev päev, saate kahekordistada penni te saanud päev varem? In penne, me läheme tõestada, miks sa peaksid kindlasti võtta penni. Sinu ülesanne on kirjutada pennies.c-- programm, mis kõigepealt küsib kasutajalt kuidas mitu päeva on kuul ja küsib, kui palju penne kasutaja saab esimesel päeval. Seejärel tuleks kava arvutada summa, et kasutajal on kogunenud lõpus kuu ja näitab seda. Saame murda selle programmi üles sisse paar ülesandeid. Me peame küsima Mitme kasutaja sisendite - päeva ja kuud, ja penne aasta esimesel päeval. Meil on vaja jälgida, kui palju raha kasutaja on ja mida ajakohastatakse iga päev, kahekordistades summa penni, et nad saavad. Ja lõpuks, me printida oma lõplik kogumaksumus, dollarites. Räägime kasutaja sisend esimene. Ma lähen avama apples.c, lühike programm, mis tegeleb koos sisendid ja väljundid. Ülaosas siin, olen lisanud mõned raamatukogude, et mul on vaja - CS50 raamatukogu ja standard I / O teek. Ma trükkida kiire abil printf funktsioon standard I / O teek. Kuid tegelik õhutusel kasutaja juhtub järgmise kooskõlas käesoleva GetInt funktsiooni CS50 raamatukogu. GetInt saab panus kasutaja ja tagab, et sisend on täisarv. Nii et ma salvestada kasutaja sisestatud täisarv i, lahutada 1 I, ja siis prindi välja uue väärtuse, kui i. Pärast koostamise apples.c abil käsk "teha õunad," Mul on käivitatava faili õunad. Running, et ma sisend 1. Programm ütleb mulle, et Mul on 0 õunad jäänud. Ja nii, et töötas ootuspäraselt. Teeme tee see uuesti ja sisend negatiivne 1. Nüüd, millel on negatiivne summa õunad ei ole tegelikult mõtet, kuid Programm võtab, sest negatiivne 1, noh, see on täisarv. Ja nüüd programmi või koletis sees programm sööb negatiivne õun, ja nüüd on mul negatiivne 2 õunad. Hm, nii et see on üks õppetund - kuigi GetInt funktsioon ja seotud funktsioone, nagu GetFlow või GetString saada õige andmetüüp, siis veenduma, et sisend muudab tunne oma programmi. In penne, ta ei tee lihtsalt kiire jaoks täisarv, peate tegema Veenduge, et kasutaja sisestatud täisarv mis mõtet antud kontekstis. Kuu võib olla ainult 28, 29, 30 või 31 päeva. Tahame pidevalt nõuda kehtiv täisarv. Kui nad input täisarv väljaspool meie tunnustatud piirides, siis me sundinud neid uuesti ja uuesti, kuni sa meile kehtiv täisarv. Meenuta "korrata kuni" blokeerida Scratch? Võite teha sarnane konstruktsioon C kasutades "while" loop või "tee-kui" loop. Samas loop struktuur on tingimus mis peavad olema täidetud keha loop täita. See peaks vaatama natuke sarnased, sest tingimus on nagu Scratch plokid nurgad ja läheb sulgudes ning "kui" loop. Nii on see tingimus kontrollida, kas täisarv on sees asjakohane piire. Võite paluda täisarv kasutades GetInt ja seejärel täita oma "kui" loop, korrates kiire ja trükkimine juhiseid, kui sisend ei kehti. Teine võimalus, et tagada õige kasutaja sisend on kasutada "tee-kui" loop, mis on väga sarnane Kuigi silmus. "Tee-kui" loop täidab kood kehas ones ja seejärel kontrolli kas tingimus on täidetud või mitte. See on kasulik saada kasutaja sisend, sest sa tead, et sa pead ajendab neid vähemalt üks kord. Kui tingimus ei ole täidetud, programm täidab rida pärast oma "tee-kui" loop. Kui tingimus on täidetud, kuigi loop kordub "Tee-kui" loop kinnitamise kasutaja sisend välja midagi sellist. Kinnitan muutuja n, GetInt ja korrake kuni n on kehtiv. Ja selles protsessis, ma selgitasin, oli kasutades täisarv-andmetüüp, mis saad kasutada päeva kuus. Aga me teame, et mitmed penni kuhjuma kiiresti, nii et salvestada suuremaid numbreid kasutada andmetüübi Longlong, kuid pidage meeles, sama põhimõtte kinnitamine kehtib. Awesome, nii et kui meil on kaks kehtivat sisendeid kasutaja - päeva kuu ja penne esimesel päeval - saame liikuda onto järgmise programmi osa. Esimene päev, kasutaja algab aga palju penne nad määratletud ja summa penne et nad saada järgmisel päeval on kahekordistunud. Seega on mõistlik jälgida nende kahe summa - kui palju raha kasutaja on ja kuidas palju penne nad anda. Nüüd teeme midagi 28-31 päeva on korduv, niiet kasutada "poolt" silmuse korrata üle päeva kuu, ajakohastamise ja kogu senti summa iga kord. "Sest" loop süntaks sisaldab järgmine - käivitamise, tingimusel, ja uuendatud. Sinu "poolt" loop initsialiseerida muutuja, kui see kõigepealt siseneb loop. Kui tingimus on täidetud, keha of loop täidab. Hiljem uuendus täidab. Kui tingimus on siiski täidetud, loop täidab ja ajakohastada ja Kordan, et nii kaua, kui teie seisund TRUE. Siin on "poolt" loop, mis jagab täisarv p 2, kokku 10 korda. Vaadake, kuidas ma kuulutatud täisarv p väljaspool minu "for" loop, nii et täisarv võib olla kättesaadav väljaspool "for" loop. Pärast kuu on möödas, on aeg öelda kasutaja, kui palju raha olen saanud. Per spec, sa pead ütlema kasutaja mitu dollarit, mitte kui palju penni, mis neil on. Aga seni, kui olete hoidnud silma peal kokku ja penne kasutades LongLongs, mis on täisarve. Seal on 100 penni $ 1, ainult juhul, kui arvu penne on mitmekordselt 100, peate esindama koma. Kahekordistunud AUTOTYPE võimaldab sa seda teha. Niisiis, kuidas me teisendada esindada penni dollarit? Võtame pilk pi.c. See programm võtab longlong big_pi ja jagab seda 100000 ja prindib tulemuse viis kohta pärast koma. Kui me tahtsime näidata nelja kohaga kohti, siis saame lihtsalt asendada see number siin. Teeme salvestada, kompileerida pi ja siis näha tulemust, mida me oodata, et oleks 3,1415 - Esimese viie numbrit pi. See ei ole küll. Ja miks? Noh, kuna big_pi on longlong, mis on täisarv, mis ei jälgima koma. Muutmine Pean teha on jagunemisel. Pean enamus topelt siin enne jagamisel, sest kahekordistab ei suuda arvet koma. Ja ma lisada uus rida siin paremat formaati. Ja siin me oleme seda - 3,1416. Te võite märgata, et see prindib 3,1416 asemel 3,1415 ootuspäraselt. Ongi, sest see pööret jagunemise protsessi, mitte lihtsalt ürita väärtus. Nüüd siis peaks olema võimalik välja trükkida lõplik kogumaksumus õigesti, mis lõpeb programmi. Palju õnne. Minu nimi on Zamyla. Ja see oli penni. [Muusika mängib]