>> [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]