>> [Musik Spela]
>> ZAMYLA CHAN: Skulle du hellre ta emot $ 10.000.000 just nu eller ta emot
pennies varje dag i månaden, där varje påföljande dag, får du
dubbla mängden pennies du fick dagen innan?
I pennies, kommer vi att bevisa varför du bör
definitivt ta pennies.
Ditt jobb är att skriva pennies.c--
ett program som först frågar användaren hur många dagar det är i månaden och
frågar sedan hur många pennies användaren kommer att få på den första dagen.
Programmet ska sedan beräkna belopp som användaren kommer att ha
ackumulerats i slutet av månad och visa den.
>> Vi kan bryta detta program upp i ett par uppgifter.
Vi måste fråga efter flera användare ingångar -
dagar och månader, och pennies den första dagen.
Vi måste hålla koll på hur mycket pengar användaren har och uppdatera den varje
dag, fördubbling av mängden pennies som de får.
Och slutligen, ut vi deras slutsumman, i dollar.
>> Låt oss ta itu med användarens input först.
Jag kommer att öppna upp apples.c, kort program som behandlar
med in-och utgångar.
På toppen här, har jag inkluderat några av de bibliotek som jag behöver -
CS50: s bibliotek och en standard I / O-bibliotek.
Jag skriver ut en prompt med printf funktion från
standard I / O-bibliotek.
Men själva uppmaning av användaren händer i nästa rad med detta
GetInt funktion i CS50 biblioteket.
>> GetInt erhåller inmatning från användaren och säkerställer att ingången är ett heltal.
Så jag lagra användarens input till heltal Jag, subtrahera 1 från I, och därefter
skriva ut det nya värdet om jag.
Efter sammanställning apples.c hjälp av Kommandot "gör äpplen," Jag har en
körbar fil äpplen.
Köra det ska jag ingång 1.
Programmet berättar att Jag har 0 kvar äpplen.
Och så som fungerade som förväntat.
>> Så låt oss köra detta igen och input negativ 1.
Nu, med en negativ mängd äpplen inte riktigt vettigt, men
Programmet accepterar det, eftersom negativa 1, ja, det är ett heltal.
Och nu programmet eller monster inuti programmet äter en negativ
äpple, och nu har jag negativa 2 äpplen.
Hm, är så att en lektion -
även om getInt funktion och relaterade funktioner, såsom GetFlow eller
GetString få rätt datatyp, du måste se till att ingången gör
meningsfullt för ditt program.
>> I ören, kommer det inte bara en fråga för ett heltal, måste du göra
Kontrollera att användaren matar in ett heltal det vettigt med tanke på sammanhanget.
Månad kan bara ha 28, 29, 30, eller 31 dagar.
Vi vill ständigt kräva ett giltigt heltal.
Om de ange ett heltal utanför vår accepterade gränser, ska vi få dem
och om igen, tills du ge oss en giltig heltal.
>> Minns "upprepa tills" Block i början?
Du kan göra en liknande konstruktion i C med hjälp av en "tag" loop
eller "do-while" loop.
While-slingan strukturen har ett tillstånd som måste uppfyllas för att
kropp av slingan att köras.
>> Det ska se ut lite liknande, eftersom villkoret är precis som
Scratch block med vinklarna och går i fästena
av "medan" loop.
Så att villkoret kommer att kontrollera om heltalet är inom
lämpliga gränser.
Du kan uppmana heltal med getInt och sedan köra din "tag"
slinga, upprepa uppmaningen och utskrift instruktioner, medan den ingående
är inte giltigt.
>> Ett annat sätt att säkerställa korrekt inmatning är att använda en "do-while" loop,
som är mycket likt en while-slinga.
Den "do-while" loop exekverar koden Inuti kroppen ettor och sedan checkar
om villkoret är uppfyllt eller inte.
Detta är användbart för att erhålla användardata, eftersom du vet att du behöver
att uppmana dem minst en gång.
Om villkoret inte är uppfyllt, programmet kommer att utföra raden efter
din "do-while" loop.
Om villkoret är uppfyllt om, slingan kommer att upprepa
>> En "do-while" loop för att validera användaren ingången ser ut ungefär så här.
Jag deklarerar en variabel n, getInt, och sedan upprepa tills n är giltig.
Och denna process, förklarade jag, använde heltalet-datatypen, som
du kommer att använda för de dagar i månaden.
Men vi vet att antalet pennies kommer tornar upp snabbt, så för att
lagra större siffror, använd datatypen LongLong, men kom ihåg samma
Principen om validering tillämpas.
>> Awesome, så när vi har två giltiga input från användaren -
dagar i månaden och penni den första dagen -
vi kan gå vidare till nästa del av programmet.
Den första dagen, börjar användaren med Men många pennies de specificerade
och mängden pennies som de ta emot nästa dag fördubblas.
Så det är klokt att hålla koll av dessa två belopp -
hur mycket pengar användaren har och hur många pennies de ska ges.
>> Nu, göra något för 28 till 31 dagar är repetitiva, så låt oss använda ett "efter"
slinga för att iterera över dagarna i månad, uppdaterar den totala och öre
belopp varje gång.
"För" loop syntax innehåller följande -
en initiering, ett tillstånd, och en uppdatering.
Din "för" loop kommer initiera en variabel, när det
först kommer in i slingan.
Om villkoret är uppfyllt, kroppen av slingan ska köras.
Efteråt kommer uppdateringen exekvera.
Om villkoret är fortfarande uppfyllt, det loop kommer att utföra och uppdatera, och
upprepa, så länge ditt tillstånd utvärderas till true.
>> Här är en "för" loop som delar en heltal p av 2 totalt 10 gånger.
Notera hur jag förklarade heltal p utanför mitt "för" slinga, så att
heltal kan vara tillgängliga utanför "för" loop.
När månaden har gått, är det dags talar om för användaren hur mycket pengar
de har fått.
Per spec, måste du tala om för användaren hur många dollar, inte hur många
pennies, de har.
Men än så länge har du hållit koll på totalt och pennies hjälp LongLongs,
vilka är heltal.
>> Det finns 100 pennies till $ 1, så om inte antalet pennies är en
multipel av 100, måste du representerar decimaler.
Den fördubblade AUTOTYPE tillåter dig att göra detta.
Så hur omvandlar vi företräda pennies till dollar?
>> Låt oss ta en titt pi.c.
Detta program tar ett LongLong big_pi och dividerar det med 100.000, och skriver ut
resultatet till fem decimaler.
Om vi ​​ville visa fyra decimaler ställen, så vi kan bara ersätta denna
numret här.
Så låt oss spara, kompilera pi, och sedan se resultatet, som vi
förväntar sig att bli 3,1415 -
de första fem siffrorna av pi.
>> Det är inte dock.
Och varför?
Jo, eftersom big_pi är en LongLong, som är ett heltal, som inte kommer
hålla reda på decimaler.
Modifieringen jag behöver gör är i divisionen.
Jag måste kasta en dubbel här innan dela, eftersom dubbel inte kan hålla
spåra decimaler.
Och jag kommer att lägga till en ny rad här för bättre formatering.
>> Och här har vi det -
3,1416.
Du kanske märker att det skrivs 3.1416 istället för 3,1415 som förväntat.
Det är eftersom det rundor under division process, i motsats till bara
trunkera värdet.
Nu bör du kunna skriva ut slutliga totala korrekt, vilket avslutar
programmet.
>> Grattis.
Mitt namn är Zamyla.
Och detta var pennies.
>> [Musik Spela]