[Musikk spilles] ZAMYLA CHAN: Ville du heller motta $ 10,000,000 akkurat nå, eller motta pennies hver dag i måneden, der hver påfølgende dag, får du doble mengden av pennies deg mottatt dagen før? I pennies, skal vi bevise hvorfor du bør definitivt ta pennies. Din jobb er å skrive pennies.c-- et program som først ber brukeren om hvordan mange dager det er i måneden og deretter spør hvor mange pennies brukeren vil få på den første dagen. Programmet skal da beregne beløpet som brukeren vil ha samlet ved slutten av de måned og vise det. Vi kan bryte dette programmet opp inn i et par oppgaver. Vi må be om flere bruker innganger - dager og måneder, og pennies på første dag. Vi trenger å holde styr på hvor mye penger brukeren har og oppdatere den hver dag, har dobbel mengde pennies som de mottar. Og til slutt skriver vi deres Endelig pris, i dollar. La oss takle brukerundersøkelser først. Jeg kommer til å åpne opp apples.c, kort program som omhandler med innganger og utganger. På toppen her, har jeg tatt med noen av bibliotekene som jeg trenger - CS50 bibliotek og en standard I / O-bibliotek. Jeg skriver ut en melding ved hjelp av printf funksjon fra standard I / O-bibliotek. Men selve brukeren ikke blir spurt skjer i den neste linje med denne GetInt funksjon i CS50 biblioteket. GetInt henter input fra brukeren og sikrer at den er et heltall. Så jeg lagre brukerens innspill til heltall i, trekker en fra i, og deretter skrive ut den nye verdien hvis jeg. Etter kompilering apples.c bruker kommandoen "make epler," Jeg har en kjørbare filen epler. Kjører det, vil jeg inngang 1. Programmet forteller meg at Jeg har 0 epler igjen. Og slik at arbeidet som forventet. Så la oss kjøre dette igjen og innspill negativ en. Nå, ha en negativ mengde epler egentlig ikke fornuftig, men Programmet godtar det, fordi negative 1, vel, er det et heltall. Og nå programmet eller monster inne i programmet spiser en negativ eple, og nå har jeg negative 2 epler. Hm, er slik at en leksjon - selv om den GetInt funksjon og relaterte funksjoner, som GetFlow eller GetString få riktig datatype, du må sørge for at inngangen gjør sans for programmet. I pennies, vil det ikke gjøre bare en rask for et heltall, må du gjøre sikker på at brukeren innganger et heltall som gir mening gitt kontekst. Måned kan bare ha 28, 29, 30 eller 31 dager. Vi ønsker å kontinuerlig kreve et gyldig heltall. Hvis de skrive inn et heltall utenfor vår aksepterte grenser, vil vi be dem igjen og igjen, inntil du gi oss en gyldig heltall. Recall "gjenta til" blokkere i bunnen av? Du kan lage en lignende konstruksjon i C ved hjelp av en "mens" loop eller "do-while" loop. Mens loop strukturen har en tilstand som må være oppfylt for at legeme av sløyfen for å utføre. Dette bør se litt like ut, fordi tilstanden er akkurat som den Scratch blokker med vinklene og går inn i brakettene av "når"-løkke. Slik at tilstanden vil sjekke om heltallet er innenfor de riktige grenser. Du kan be heltall ved hjelp GetInt og deretter gjennomføre "mens" loop, gjenta rask og utskrift instruksjoner, mens input er ikke gyldig. En annen måte å sikre korrekt brukerundersøkelser er ved hjelp av en "gjør-mens" loop, noe som er svært lik en Mens sløyfe. Det "gjør-mens" loop utfører koden inni kroppen seg og deretter sjekker om vilkåret er oppfylt eller ikke. Dette er nyttig for å skaffe brukerundersøkelser, fordi du vet at du trenger å be dem minst én gang. Dersom vilkåret ikke er oppfylt, vil programmet vil utføre linjen etter din "gjør-mens" loop. Dersom betingelsen er oppfylt skjønt, løkken vil gjenta En "gjør-mens" loop for å validere brukeren innspill vil se omtrent slik ut. Jeg erklærer en variabel n, GetInt, og deretter gjenta til n er gyldig. Og denne prosessen, jeg forklarte, brukte heltallet-datatype, hvilken du vil bruke for de dagene i måneden. Men vi vet at antall pennies vil hope seg opp raskt, så for å lagre større tall, bruker datatype Longlong, men husk det samme prinsippet om validering gjelder. Awesome, så når vi har to gyldige innspill fra brukeren - dager i måneden og de pennies på den første dagen - vi kan gå til neste en del av programmet. Den første dagen, starter brukeren Men mange pennies de spesifiserte og mengden av øre at de motta den neste dag blir fordoblet. Derfor er det fornuftig å holde styr av disse to beløpene - hvor mye penger brukeren har og hvordan mange pennies de vil bli gitt. Nå gjør noe i 28 til 31 dager er repeterende, så la oss bruke en "for" loop for å iterere over dagene i måned, oppdatere den totale og penny beløp hver gang. "For" loop syntaks inneholder følgende - en initialisering, en tilstand, og en oppdatering. Din "for" loop vil starte en variabel, da den først ført inn i sløyfen. Hvis betingelsen er oppfylt, kroppen av loopen skal utføre. Etterpå vil oppdateringen utføre. Dersom tilstanden fortsatt er oppfylt, det Løkken vil utføre og oppdatere, og gjenta, så lenge tilstanden din evalueres til sant. Her er en "for" loop som deler en heltall p av to totalt 10 ganger. Legg merke til hvordan jeg erklærte heltall p utenfor min "for" sløyfe, slik at heltall kan være tilgjengelig utenfor "for" loop. Etter måned har gått, er det på tide å fortelle brukeren hvor mye penger de har fått. Per spec, må du fortelle brukeren hvor mange dollar, ikke hvor mange pennies, de har. Men så langt har du holdt orden på totalt og de pennies hjelp LongLongs, som er hele tall. Det finnes 100 pennies til $ 1, så med mindre antall øre er et multiplum av 100, må du representerer desimaler. Den doblet AUTOTYPE tillater deg å gjøre dette. Så hvordan konverterer vi gjør fra å representere pennies til dollar? La oss ta en titt pi.c. Dette programmet tar en Longlong big_pi og deler det med 100.000, og skriver resultatet til fem desimaler. Hvis vi ønsket å vise fire desimal steder, så kan vi bare erstatte dette nummer her. Så la oss lagre, sammenstille pi, og deretter se resultatet, som vi forventer å være 3,1415 - de fem første sifrene i pi. Det er ikke skjønt. Og hvorfor? Vel, fordi big_pi er en Longlong, som er et helt tall, som ikke ruster holde oversikt over desimaler. Modifikasjonen jeg trenger å gjør er i divisjonen. Jeg må kaste til en dobbel her før dele, fordi dobler ikke kan holde spore desimaler. Og jeg kommer til å legge en ny linje her for bedre formatering. Og her har vi det - 3,1416. Du kan legge merke til at det skrives ut 3,1416 istedenfor 3,1415 som forventet. Det er fordi det runder i løpet av divisjon prosess, i motsetning til bare avkorting av verdi. Nå bør du være i stand til å skrive ut endelige totale riktig, som slo programmet. Gratulerer. Mitt navn er Zamyla. Og dette var pennies. [Musikk spilles]