1 00:00:00,000 --> 00:00:02,360 >> DAVID J. MALAN: Som du säkert vet, temperaturer mäts med hjälp av 2 00:00:02,360 --> 00:00:04,360 olika skalor i olika delar av världen. 3 00:00:04,360 --> 00:00:09,370 Till exempel är 212 grader Fahrenheit 100 grader Celsius och 32 grader 4 00:00:09,370 --> 00:00:11,810 Fahrenheit är 0 grader Celsius. 5 00:00:11,810 --> 00:00:14,230 Skulle det inte vara trevligt om vi hade en dator program som tillät oss att 6 00:00:14,230 --> 00:00:16,950 konvertera från, säg, Fahrenheit till Celsius? 7 00:00:16,950 --> 00:00:18,510 >> Tja, kan vi skriva det programmet. 8 00:00:18,510 --> 00:00:24,350 Låt oss först börja med omfattar cs50.h, så att vi kan använda en funktion som kallas 9 00:00:24,350 --> 00:00:28,610 få flyta, som liksom få int, får en tal från användaren, men denna gång en 10 00:00:28,610 --> 00:00:31,440 flyttal - en med en decimal. 11 00:00:31,440 --> 00:00:34,840 >> Vi inkluderar även standard io.h så att vi har tillgång till 12 00:00:34,840 --> 00:00:36,230 funktioner som utskrift f.. 13 00:00:36,230 --> 00:00:40,000 Och låt oss också förklara huvud på det vanliga sättet. 14 00:00:40,000 --> 00:00:42,675 >> Låt oss nästa fråga användaren om en temperatur i Fahrenheit. 15 00:00:42,675 --> 00:00:46,050 16 00:00:46,050 --> 00:00:49,220 Låt oss nu faktiskt få den temperaturen från användaren, först genom 17 00:00:49,220 --> 00:00:52,910 förklara en variabel som heter f av typen float. 18 00:00:52,910 --> 00:00:56,750 En flottör, återigen, vilket innebär en variabel som lagrar ett flyttalsvärde, 19 00:00:56,750 --> 00:00:58,200 en med en decimal. 20 00:00:58,200 --> 00:01:01,780 >> Låt oss ge den avkastning värde få flyta. 21 00:01:01,780 --> 00:01:06,080 Och sedan ska vi göra lite aritmetik på det, först förklara en annan flottör 22 00:01:06,080 --> 00:01:11,690 kallas C för Celsius och butik i C Resultatet av några vanliga aritmetik. 23 00:01:11,690 --> 00:01:19,060 5.0 dividerat med 9.0 gånger F minus 32,0. 24 00:01:19,060 --> 00:01:23,440 >> Låt oss nu skriva ut resultatet av denna beräkning. 25 00:01:23,440 --> 00:01:24,730 procent f - 26 00:01:24,730 --> 00:01:27,890 betecknar en platshållare för flyttal - 27 00:01:27,890 --> 00:01:31,680 kommatecken C för att skriva ut temperaturen i Celsius. 28 00:01:31,680 --> 00:01:33,000 Låt oss spara mitt sista. 29 00:01:33,000 --> 00:01:38,220 Kompilera med F till C. Kör programmet med punkt snedstreck F till C. 30 00:01:38,220 --> 00:01:39,940 >> Och låt oss prova de vanliga temperaturer. 31 00:01:39,940 --> 00:01:45,820 212 grader i Fahrenheit är 100 grader Celsius. 32 00:01:45,820 --> 00:01:50,090 32 grader i Fahrenheit är 0 grader i Celsius. 33 00:01:50,090 --> 00:01:54,240 >> Nu kan förfina programmet lite bit inte ut riktigt lika många 0 s 34 00:01:54,240 --> 00:01:55,820 efter det decimal. 35 00:01:55,820 --> 00:01:57,940 För att göra detta, kommer jag att gå tillbaka till linje 11. 36 00:01:57,940 --> 00:02:03,430 Och i stället för att bara ange procent f, Jag ska istället specificera, säg, 37 00:02:03,430 --> 00:02:08,800 0.1 f, informera utskrifts f att jag bara vill skriva ut ett flyttal 38 00:02:08,800 --> 00:02:11,750 till en värde efter decimal. 39 00:02:11,750 --> 00:02:13,630 >> Låt oss spara om mitt program. 40 00:02:13,630 --> 00:02:19,680 Kompilera om det med make F till C. Därefter kör den med prick snedstreck F till C. Och 41 00:02:19,680 --> 00:02:24,910 låt oss försöka igen med, säg, 212, vilket ger mig 100,0. 42 00:02:24,910 --> 00:02:28,360 >> Nu är det värt att notera att jag gjorde något mycket medvetet i linje 9. 43 00:02:28,360 --> 00:02:35,830 Lägg märke till hur jag skrev 5 är 5,0, 9 som 9,0, och till och med 32 som 32,0. 44 00:02:35,830 --> 00:02:39,000 Tja, två av dessa värden först var mycket medvetet valt att vara 45 00:02:39,000 --> 00:02:42,200 flyttalsvärden, inte bara för att konsekvens med resten 46 00:02:42,200 --> 00:02:42,940 av mitt program - 47 00:02:42,940 --> 00:02:45,110 som tydligt rör flytande punktvärden - 48 00:02:45,110 --> 00:02:50,210 utan för att det visar sig att C, om du dela upp en int annan int, den 49 00:02:50,210 --> 00:02:54,350 vilket svar du kommer att få är själv en int, även om det innebär 50 00:02:54,350 --> 00:02:57,450 att behöva kasta bort allt efter decimalkommat. 51 00:02:57,450 --> 00:03:04,990 >> Med andra ord, om jag ändrar detta 5,0 till 5 eller detta 9,0-9 och sedan spara om 52 00:03:04,990 --> 00:03:10,550 mitt program, kompilera med make F till C, och sedan köra den med punkt snedstreck F 53 00:03:10,550 --> 00:03:15,310 till C och skriv in en ingång som 212, märker att det svar jag ska 54 00:03:15,310 --> 00:03:17,860 få den här gången är faktiskt helt fel. 55 00:03:17,860 --> 00:03:23,570 0.0 är inte rätt examen i Celsius som 212 Fahrenheit. 56 00:03:23,570 --> 00:03:24,500 >> Tja, vad som händer? 57 00:03:24,500 --> 00:03:29,410 Tja, i linje 9, eftersom 5 är nu en heltal och eftersom 9 är nu en 58 00:03:29,410 --> 00:03:34,810 heltal, resultatet matematiskt bör vara 0,5555 och så vidare. 59 00:03:34,810 --> 00:03:39,120 Men eftersom resultatet, enligt C: s regler, måste vara en int, att 60 00:03:39,120 --> 00:03:44,020 0,5555 kastas bort, lämnar oss med bara 0. 61 00:03:44,020 --> 00:03:48,600 >> Så till slut, slutar jag upp att multiplicera helt oavsiktligt 0 gånger f minus 62 00:03:48,600 --> 00:03:52,830 32,0, vilket är oavsett vad alltid kommer att ge mig 0. 63 00:03:52,830 --> 00:03:56,930 Så kom ihåg, helst med flyttalsvärden i närheten av 64 00:03:56,930 --> 00:03:59,860 Ints, kanske du inte nödvändigtvis få svaret så du förväntar dig. 65 00:03:59,860 --> 00:04:04,220 Och så se till att använda, som jag gjorde i första fallet, flyttalsvärden 66 00:04:04,220 --> 00:04:06,530 hela för att undvika sådana problem. 67 00:04:06,530 --> 00:04:08,267