1 00:00:00,000 --> 00:00:02,360 >> DAVID J. MALAN: Som du sikkert vet, temperaturen måles 2 00:00:02,360 --> 00:00:04,360 ulike skalaer i forskjellige deler av verden. 3 00:00:04,360 --> 00:00:09,370 For eksempel, er 212 grader Fahrenheit 100 grader Celsius og 32 grader 4 00:00:09,370 --> 00:00:11,810 Fahrenheit er 0 grader Celsius. 5 00:00:11,810 --> 00:00:14,230 Ville det ikke vært fint om vi hadde en datamaskin program som tillater oss å 6 00:00:14,230 --> 00:00:16,950 konvertere fra, sier Fahrenheit til Celsius? 7 00:00:16,950 --> 00:00:18,510 >> Vel, kan vi skrive det programmet. 8 00:00:18,510 --> 00:00:24,350 La oss først starte med inkluderer cs50.h, slik at vi kan bruke en funksjon kalt 9 00:00:24,350 --> 00:00:28,610 få flyte, som i likhet med get int, får en tall fra brukeren, men denne gangen en 10 00:00:28,610 --> 00:00:31,440 flyttall - en med en desimal. 11 00:00:31,440 --> 00:00:34,840 >> La oss også omfatte standard io.h slik at vi har tilgang til 12 00:00:34,840 --> 00:00:36,230 funksjoner som print f. 13 00:00:36,230 --> 00:00:40,000 Og la oss også erklære hoved på vanlig måte. 14 00:00:40,000 --> 00:00:42,675 >> La oss neste be brukeren om en temperatur i Fahrenheit. 15 00:00:42,675 --> 00:00:46,050 16 00:00:46,050 --> 00:00:49,220 La oss nå faktisk får den temperaturen fra brukeren, først ved 17 00:00:49,220 --> 00:00:52,910 erklære en variabel kalt f av type float. 18 00:00:52,910 --> 00:00:56,750 En flottør, igjen, noe som betyr en variabel som lagrer et flyttall, 19 00:00:56,750 --> 00:00:58,200 en med en desimal. 20 00:00:58,200 --> 00:01:01,780 >> La oss gi den avkastningen Verdien av get float. 21 00:01:01,780 --> 00:01:06,080 Og så la oss gjøre et lite regnestykke på det, først erklære en annen float 22 00:01:06,080 --> 00:01:11,690 kalt C for Celsius og butikk i C Resultatet av noen felles aritmetikk. 23 00:01:11,690 --> 00:01:19,060 5,0 delt på 9,0 ganger F minus 32,0. 24 00:01:19,060 --> 00:01:23,440 >> La oss nå skrive ut resultatet av denne beregning. 25 00:01:23,440 --> 00:01:24,730 prosent f - 26 00:01:24,730 --> 00:01:27,890 betegner en plassholder for flyttall - 27 00:01:27,890 --> 00:01:31,680 komma C for å skrive ut temperaturen i Celsius. 28 00:01:31,680 --> 00:01:33,000 La oss redde mitt endelige. 29 00:01:33,000 --> 00:01:38,220 Kompilere med F til C. Kjør programmet med dot slash F til C. 30 00:01:38,220 --> 00:01:39,940 >> Og la oss prøve de vanlige temperaturer. 31 00:01:39,940 --> 00:01:45,820 212 grader i Fahrenheit 100 grader Celsius. 32 00:01:45,820 --> 00:01:50,090 32 grader i Fahrenheit er 0 grader i Celsius. 33 00:01:50,090 --> 00:01:54,240 >> Nå kan avgrense dette programmet litt litt ved å ikke skrive ut ganske så mange 0-er 34 00:01:54,240 --> 00:01:55,820 etter at desimal. 35 00:01:55,820 --> 00:01:57,940 For å gjøre dette, kommer jeg til å går tilbake til linje 11. 36 00:01:57,940 --> 00:02:03,430 Og i stedet for å bare spesifisere prosent f, Jeg kommer til å beskrive nærmere, sier, 37 00:02:03,430 --> 00:02:08,800 0,1 f, informere print f at jeg bare ønsker å skrive ut et flyttall 38 00:02:08,800 --> 00:02:11,750 til en verdi etter desimal. 39 00:02:11,750 --> 00:02:13,630 >> La oss resave mitt program. 40 00:02:13,630 --> 00:02:19,680 Rekompilere det med make F til C. Deretter kjør den med dot slash F til C. Og 41 00:02:19,680 --> 00:02:24,910 la oss prøve på nytt med, si, 212, som gir meg 100,0. 42 00:02:24,910 --> 00:02:28,360 >> Nå er det verdt å merke seg at jeg gjorde noe veldig bevisst på linje 9. 43 00:02:28,360 --> 00:02:35,830 Legg merke til hvordan jeg skrev 5 er 5,0, 9 som 9.0, og til og med 32 som 32,0. 44 00:02:35,830 --> 00:02:39,000 Vel, de to første av disse verdiene var veldig bevisst valgt å være 45 00:02:39,000 --> 00:02:42,200 flyt verdier, ikke bare fordi av konsistens med resten 46 00:02:42,200 --> 00:02:42,940 av mitt program - 47 00:02:42,940 --> 00:02:45,110 som klart innebærer flytende punkt verdier - 48 00:02:45,110 --> 00:02:50,210 men fordi det viser seg at C, hvis du dele en int av en annen int, den 49 00:02:50,210 --> 00:02:54,350 resulterer svaret du kommer til å få er selv en int, selv om det betyr 50 00:02:54,350 --> 00:02:57,450 å måtte kaste bort alt etter desimaltegnet. 51 00:02:57,450 --> 00:03:04,990 >> Med andre ord, hvis jeg endrer dette 5,0 til 5 or dette 9,0 til 9, og lagre deretter 52 00:03:04,990 --> 00:03:10,550 mitt program, rekompilere med make F til C, og deretter kjøre den med dot slash F 53 00:03:10,550 --> 00:03:15,310 til C og skriv inn en inngang på som 212, legge merke til at svaret jeg kommer til å 54 00:03:15,310 --> 00:03:17,860 får denne gangen er faktisk ganske galt. 55 00:03:17,860 --> 00:03:23,570 0,0 er ikke den riktige grad i Celsius som 212 Fahrenheit. 56 00:03:23,570 --> 00:03:24,500 >> Vel, hva er det som skjer? 57 00:03:24,500 --> 00:03:29,410 Vel, på linje 9, fordi 5 er nå en heltall og fordi 9 er nå en 58 00:03:29,410 --> 00:03:34,810 heltall, resultatet matematisk bør være 0,5555 og så videre. 59 00:03:34,810 --> 00:03:39,120 Men fordi resultatet ifølge C regler, må være en int, som 60 00:03:39,120 --> 00:03:44,020 0,5555 blir kastet bort, forlate oss med bare 0. 61 00:03:44,020 --> 00:03:48,600 >> Så til slutt, ender jeg opp med å multiplisere ganske uhell 0 ganger f minus 62 00:03:48,600 --> 00:03:52,830 32,0, som er uansett hva alltid kommer til å gi meg 0. 63 00:03:52,830 --> 00:03:56,930 Så husk, helst ved hjelp av flyt verdier i nærhet av 64 00:03:56,930 --> 00:03:59,860 ints, kanskje du ikke nødvendigvis få svar, slik du forventer. 65 00:03:59,860 --> 00:04:04,220 Og så passe på å bruke, som jeg gjorde i første tilfellet, flyttall verdier 66 00:04:04,220 --> 00:04:06,530 gjennom å unngå slike problemer. 67 00:04:06,530 --> 00:04:08,267