1 00:00:00,000 --> 00:00:02,360 >> DAVID J. MALAN: Come probabilmente sapete, Le temperature sono misurate utilizzando 2 00:00:02,360 --> 00:00:04,360 scale differenti nei vari parti del mondo. 3 00:00:04,360 --> 00:00:09,370 Ad esempio, 212 gradi Fahrenheit è 100 gradi centigradi e 32 gradi 4 00:00:09,370 --> 00:00:11,810 Fahrenheit è 0 gradi Celsius. 5 00:00:11,810 --> 00:00:14,230 Non sarebbe bello se avessimo un computer programma che ci ha permesso di 6 00:00:14,230 --> 00:00:16,950 convertire da, diciamo, Fahrenheit a Celsius? 7 00:00:16,950 --> 00:00:18,510 >> Beh, possiamo scrivere quel programma. 8 00:00:18,510 --> 00:00:24,350 Vediamo prima Cominciamo con includono cs50.h, in modo che possiamo utilizzare una funzione chiamata 9 00:00:24,350 --> 00:00:28,610 ottenere galleggiante, che, come get int, ottiene un numero da parte dell'utente, ma questa volta un 10 00:00:28,610 --> 00:00:31,440 numero in virgola mobile - uno con un punto decimale. 11 00:00:31,440 --> 00:00:34,840 >> Facciamo includono inoltre io.h di serie in modo da avere accesso alle 12 00:00:34,840 --> 00:00:36,230 funzioni come la stampa f. 13 00:00:36,230 --> 00:00:40,000 E diciamo anche dichiarare principale nel solito modo. 14 00:00:40,000 --> 00:00:42,675 >> Facciamo il prossimo richiede all'utente di una temperatura in Fahrenheit. 15 00:00:42,675 --> 00:00:46,050 16 00:00:46,050 --> 00:00:49,220 Diamo ora effettivamente ottenere che la temperatura dall'utente, prima da 17 00:00:49,220 --> 00:00:52,910 dichiarazione di una variabile chiamata f di tipo float. 18 00:00:52,910 --> 00:00:56,750 Un galleggiante, di nuovo, il che significa che una variabile memorizza un valore in virgola mobile, 19 00:00:56,750 --> 00:00:58,200 uno con un punto decimale. 20 00:00:58,200 --> 00:01:01,780 >> Assegniamo così il ritorno valore get float. 21 00:01:01,780 --> 00:01:06,080 E allora facciamo un po 'di aritmetica su di esso, prima dichiarando un altro galleggiante 22 00:01:06,080 --> 00:01:11,690 denominata C per Celsius e conservare in C, il risultato di qualche aritmetica comune. 23 00:01:11,690 --> 00:01:19,060 5.0 diviso per 9,0 volte F meno 32,0. 24 00:01:19,060 --> 00:01:23,440 >> Passiamo ora stampare il risultato di questo calcolo. 25 00:01:23,440 --> 00:01:24,730 cento f - 26 00:01:24,730 --> 00:01:27,890 significare un segnaposto per valore in virgola mobile - 27 00:01:27,890 --> 00:01:31,680 comma C per stampare il temperatura in gradi Celsius. 28 00:01:31,680 --> 00:01:33,000 Salviamo la mia finale. 29 00:01:33,000 --> 00:01:38,220 Compilare con F a C. Eseguire il programma con il puntino barra F a C. 30 00:01:38,220 --> 00:01:39,940 >> E proviamo quelli comuni temperature. 31 00:01:39,940 --> 00:01:45,820 212 gradi di Fahrenheit è di 100 gradi Celsius. 32 00:01:45,820 --> 00:01:50,090 32 gradi Fahrenheit è 0 gradi Celsius. 33 00:01:50,090 --> 00:01:54,240 >> Ora lascia perfezionare questo programma un po ' bit non stampa abbastanza come molti di 0 34 00:01:54,240 --> 00:01:55,820 dopo quella decimale. 35 00:01:55,820 --> 00:01:57,940 Per fare questo, ho intenzione di torna alla linea 11. 36 00:01:57,940 --> 00:02:03,430 E piuttosto che specificare cento f, Io vado a specificare, invece, per esempio, 37 00:02:03,430 --> 00:02:08,800 0.1 f, f informare la stampa che ho solo desidera stampare un valore in virgola mobile 38 00:02:08,800 --> 00:02:11,750 per un valore dopo il punto decimale. 39 00:02:11,750 --> 00:02:13,630 >> Facciamo salvare nuovamente il mio programma. 40 00:02:13,630 --> 00:02:19,680 Ricompilare con make F a C. Quindi eseguire nuovamente con dot barra F a C. E 41 00:02:19,680 --> 00:02:24,910 cerchiamo di riprovare con, diciamo, 212, che mi dà 100.0. 42 00:02:24,910 --> 00:02:28,360 >> Ora vale la pena notare che ho fatto qualcosa di molto deliberatamente in linea 9. 43 00:02:28,360 --> 00:02:35,830 Notate come ho scritto 5 è 5.0, 9 come 9.0, e addirittura 32 come 32,0. 44 00:02:35,830 --> 00:02:39,000 Beh, i primi due di quei valori erano molto deliberatamente scelto di essere 45 00:02:39,000 --> 00:02:42,200 valori in virgola mobile, non solo perché della coerenza con il resto 46 00:02:42,200 --> 00:02:42,940 del mio programma - 47 00:02:42,940 --> 00:02:45,110 che si riferiscono chiaramente galleggiante valori in virgola - 48 00:02:45,110 --> 00:02:50,210 ma perché si scopre che C, se si suddividere un int da un altro int, l' 49 00:02:50,210 --> 00:02:54,350 conseguente risposta che si vuole ottenere è per sé un int, anche se questo significa 50 00:02:54,350 --> 00:02:57,450 dover buttare via tutto dopo il punto decimale. 51 00:02:57,450 --> 00:03:04,990 >> In altre parole, se cambio il 5.0 a 5 o questo 9,0-9 e quindi salvare nuovamente 52 00:03:04,990 --> 00:03:10,550 il mio programma, ricompilare con make F a C, e poi ri-eseguirlo con barra dot F 53 00:03:10,550 --> 00:03:15,310 a C e digitare un ingresso 'come 212, notare che la risposta che ho intenzione di 54 00:03:15,310 --> 00:03:17,860 ottenere questa volta è in realtà abbastanza sbagliato. 55 00:03:17,860 --> 00:03:23,570 0.0 non è il giusto grado di Celsius come Fahrenheit 212. 56 00:03:23,570 --> 00:03:24,500 >> Ebbene, che cosa sta succedendo? 57 00:03:24,500 --> 00:03:29,410 Beh, in linea 9, perché 5 è ora un intero e perché 9 è ora un 58 00:03:29,410 --> 00:03:34,810 intero, il risultato matematicamente dovrebbe essere 0,5555 e così via. 59 00:03:34,810 --> 00:03:39,120 Ma poiché il risultato, secondo Le regole di C, deve essere un int, che 60 00:03:39,120 --> 00:03:44,020 0,5555 si butta via, lasciandoci con solo 0. 61 00:03:44,020 --> 00:03:48,600 >> Così, alla fine, finisco moltiplicando piuttosto accidentalmente 0 volte f meno 62 00:03:48,600 --> 00:03:52,830 32.0, che non importa quale andando sempre a darmi 0. 63 00:03:52,830 --> 00:03:56,930 Quindi tenere a mente, in qualsiasi momento utilizzando valori in virgola mobile in prossimità del 64 00:03:56,930 --> 00:03:59,860 int, non si potrebbe necessariamente ottenere la risposta in modo che ci si aspetta. 65 00:03:59,860 --> 00:04:04,220 E quindi aver cura di utilizzare, come ho fatto nel Valori primo caso, in virgola mobile 66 00:04:04,220 --> 00:04:06,530 tutto per evitare tali problemi. 67 00:04:06,530 --> 00:04:08,267