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