>> DAVID J. MALAN: Som du säkert vet, temperaturer mäts med hjälp av
olika skalor i olika delar av världen.
Till exempel är 212 grader Fahrenheit 100 grader Celsius och 32 grader
Fahrenheit är 0 grader Celsius.
Skulle det inte vara trevligt om vi hade en dator program som tillät oss att
konvertera från, säg, Fahrenheit till Celsius?
>> Tja, kan vi skriva det programmet.
Låt oss först börja med omfattar cs50.h, så att vi kan använda en funktion som kallas
få flyta, som liksom få int, får en tal från användaren, men denna gång en
flyttal - en med en decimal.
>> Vi inkluderar även standard io.h så att vi har tillgång till
funktioner som utskrift f..
Och låt oss också förklara huvud på det vanliga sättet.
>> Låt oss nästa fråga användaren om en temperatur i Fahrenheit.
Låt oss nu faktiskt få den temperaturen från användaren, först genom
förklara en variabel som heter f av typen float.
En flottör, återigen, vilket innebär en variabel som lagrar ett flyttalsvärde,
en med en decimal.
>> Låt oss ge den avkastning värde få flyta.
Och sedan ska vi göra lite aritmetik på det, först förklara en annan flottör
kallas C för Celsius och butik i C Resultatet av några vanliga aritmetik.
5.0 dividerat med 9.0 gånger F minus 32,0.
>> Låt oss nu skriva ut resultatet av denna beräkning.
procent f -
betecknar en platshållare för flyttal -
kommatecken C för att skriva ut temperaturen i Celsius.
Låt oss spara mitt sista.
Kompilera med F till C. Kör programmet med punkt snedstreck F till C.
>> Och låt oss prova de vanliga temperaturer.
212 grader i Fahrenheit är 100 grader Celsius.
32 grader i Fahrenheit är 0 grader i Celsius.
>> Nu kan förfina programmet lite bit inte ut riktigt lika många 0 s
efter det decimal.
För att göra detta, kommer jag att gå tillbaka till linje 11.
Och i stället för att bara ange procent f, Jag ska istället specificera, säg,
0.1 f, informera utskrifts f att jag bara vill skriva ut ett flyttal
till en värde efter decimal.
>> Låt oss spara om mitt program.
Kompilera om det med make F till C. Därefter kör den med prick snedstreck F till C. Och
låt oss försöka igen med, säg, 212, vilket ger mig 100,0.
>> Nu är det värt att notera att jag gjorde något mycket medvetet i linje 9.
Lägg märke till hur jag skrev 5 är 5,0, 9 som 9,0, och till och med 32 som 32,0.
Tja, två av dessa värden först var mycket medvetet valt att vara
flyttalsvärden, inte bara för att konsekvens med resten
av mitt program -
som tydligt rör flytande punktvärden -
utan för att det visar sig att C, om du dela upp en int annan int, den
vilket svar du kommer att få är själv en int, även om det innebär
att behöva kasta bort allt efter decimalkommat.
>> Med andra ord, om jag ändrar detta 5,0 till 5 eller detta 9,0-9 och sedan spara om
mitt program, kompilera med make F till C, och sedan köra den med punkt snedstreck F
till C och skriv in en ingång som 212, märker att det svar jag ska
få den här gången är faktiskt helt fel.
0.0 är inte rätt examen i Celsius som 212 Fahrenheit.
>> Tja, vad som händer?
Tja, i linje 9, eftersom 5 är nu en heltal och eftersom 9 är nu en
heltal, resultatet matematiskt bör vara 0,5555 och så vidare.
Men eftersom resultatet, enligt C: s regler, måste vara en int, att
0,5555 kastas bort, lämnar oss med bara 0.
>> Så till slut, slutar jag upp att multiplicera helt oavsiktligt 0 gånger f minus
32,0, vilket är oavsett vad alltid kommer att ge mig 0.
Så kom ihåg, helst med flyttalsvärden i närheten av
Ints, kanske du inte nödvändigtvis få svaret så du förväntar dig.
Och så se till att använda, som jag gjorde i första fallet, flyttalsvärden
hela för att undvika sådana problem.