1 00:00:00,000 --> 00:00:02,360 >> DAVID J. MALAN: Όπως ίσως γνωρίζετε, Οι θερμοκρασίες μετρώνται χρησιμοποιώντας 2 00:00:02,360 --> 00:00:04,360 διαφορετικές κλίμακες σε διαφορετικούς μέρη του κόσμου. 3 00:00:04,360 --> 00:00:09,370 Για παράδειγμα, 212 βαθμούς Fahrenheit είναι 100 βαθμούς Κελσίου και 32 βαθμούς 4 00:00:09,370 --> 00:00:11,810 Fahrenheit είναι 0 βαθμούς Κελσίου. 5 00:00:11,810 --> 00:00:14,230 Δεν θα ήταν ωραίο αν είχαμε έναν υπολογιστή πρόγραμμα που μας επέτρεψε να 6 00:00:14,230 --> 00:00:16,950 μετατρέψετε από, ας πούμε, Fahrenheit σε Κελσίου; 7 00:00:16,950 --> 00:00:18,510 >> Λοιπόν, μπορούμε να γράψουμε αυτό το πρόγραμμα. 8 00:00:18,510 --> 00:00:24,350 Ας ξεκινήσουμε με την πρώτη να περιλαμβάνει cs50.h, έτσι ώστε να μπορούμε να χρησιμοποιήσουμε μια συνάρτηση που ονομάζεται 9 00:00:24,350 --> 00:00:28,610 πάρετε πλωτήρα, ο οποίος, όπως get int, παίρνει ένα αριθμό από τον χρήστη, αλλά αυτή τη φορά μια 10 00:00:28,610 --> 00:00:31,440 Αριθμός κινητής υποδιαστολής - ένα με ένα δεκαδικό ψηφίο. 11 00:00:31,440 --> 00:00:34,840 >> Ας περιλαμβάνουν επίσης στάνταρ io.h έτσι ώστε να έχουμε πρόσβαση σε 12 00:00:34,840 --> 00:00:36,230 λειτουργίες όπως η εκτύπωση f. 13 00:00:36,230 --> 00:00:40,000 Και ας επίσης να κηρύξει κατά τον συνήθη τρόπο. 14 00:00:40,000 --> 00:00:42,675 >> Ας επόμενη προτρέπει το χρήστη για θερμοκρασία σε βαθμούς Φαρενάιτ. 15 00:00:42,675 --> 00:00:46,050 16 00:00:46,050 --> 00:00:49,220 Ας δούμε τώρα πραγματικά να πάρει την θερμοκρασία αυτή από τον χρήστη, πρώτα από 17 00:00:49,220 --> 00:00:52,910 με την οποία μια μεταβλητή που ονομάζεται στ τύπου float. 18 00:00:52,910 --> 00:00:56,750 Ο πλωτήρας, πάλι, που σημαίνει ότι μια μεταβλητή που αποθηκεύει ένα Μιατιμήκινητήςυποδιαστολής, 19 00:00:56,750 --> 00:00:58,200 ένα με ένα δεκαδικό ψηφίο. 20 00:00:58,200 --> 00:01:01,780 >> Ας αναθέσει την επιστροφή αξία του get float. 21 00:01:01,780 --> 00:01:06,080 Και τότε ας κάνουμε ένα κομμάτι της αριθμητικής σε αυτό, το πρώτο που κηρύσσει μια άλλη float 22 00:01:06,080 --> 00:01:11,690 που ονομάζεται C για Κελσίου και κατάστημα στην C το αποτέλεσμα κάποιας κοινής αριθμητικής. 23 00:01:11,690 --> 00:01:19,060 5.0 διαιρείται με 9,0 φορές F μείον 32,0. 24 00:01:19,060 --> 00:01:23,440 >> Ας τώρα να εκτυπώσετε το αποτέλεσμα του παρόντος υπολογισμού. 25 00:01:23,440 --> 00:01:24,730 τοις εκατό στ - 26 00:01:24,730 --> 00:01:27,890 σηματοδοτώντας ένα σύμβολο κράτησης θέσης για Μιατιμήκινητήςυποδιαστολής - 27 00:01:27,890 --> 00:01:31,680 κόμμα C για να εκτυπώσετε το θερμοκρασία σε βαθμούς Κελσίου. 28 00:01:31,680 --> 00:01:33,000 Ας σώσει την τελική μου. 29 00:01:33,000 --> 00:01:38,220 Συντάξτε με F έως C. Εκτελέστε το πρόγραμμα με dot κάθετος F έως C. 30 00:01:38,220 --> 00:01:39,940 >> Και ας προσπαθήσουμε αυτές τις κοινές θερμοκρασίες. 31 00:01:39,940 --> 00:01:45,820 212 βαθμούς Φαρενάιτ είναι 100 βαθμούς Κελσίου. 32 00:01:45,820 --> 00:01:50,090 32 βαθμούς Fahrenheit είναι 0 βαθμούς Κελσίου. 33 00:01:50,090 --> 00:01:54,240 >> Τώρα αφήνει να βελτιώσετε αυτό το πρόγραμμα λίγο λίγο με το να μην την εκτύπωση τόσο πολλά τα 0 34 00:01:54,240 --> 00:01:55,820 μετά από αυτή την δεκαδικό ψηφίο. 35 00:01:55,820 --> 00:01:57,940 Για να το κάνετε αυτό, θα πάω να να επιστρέψετε στην γραμμή 11. 36 00:01:57,940 --> 00:02:03,430 Και όχι μόνο προσδιορίζει τοις εκατό f, Πάω να καθορίσετε αντί, ας πούμε, 37 00:02:03,430 --> 00:02:08,800 0,1 f, ενημερώνοντας εκτύπωσης που μόνο στ θέλετε να εκτυπώσετε ένα Μιατιμήκινητήςυποδιαστολής 38 00:02:08,800 --> 00:02:11,750 σε μία τιμή μετά το δεκαδικό ψηφίο. 39 00:02:11,750 --> 00:02:13,630 >> Ας αποθηκεύσετε ξανά το πρόγραμμά μου. 40 00:02:13,630 --> 00:02:19,680 Επαναμεταγλωττίστε με make F έως C. Στη συνέχεια, ξανατρέχετε με dot κάθετο F έως C. Και 41 00:02:19,680 --> 00:02:24,910 ας επαναλάβετε με, ας πούμε, 212, που μου δίνει 100,0. 42 00:02:24,910 --> 00:02:28,360 >> Τώρα αξίζει να σημειωθεί ότι το έκανα κάτι πολύ σκόπιμα γραμμή 9. 43 00:02:28,360 --> 00:02:35,830 Παρατηρήστε πως έγραψα 5 είναι 5,0, 9 ως 9.0, και ακόμη και 32 ως 32,0. 44 00:02:35,830 --> 00:02:39,000 Λοιπόν, οι δύο πρώτες από αυτές τις τιμές ήταν πολύ σκοπίμως επέλεξε να 45 00:02:39,000 --> 00:02:42,200 τιμές κινητής υποδιαστολής, όχι μόνο επειδή συνέπειας με την υπόλοιπη 46 00:02:42,200 --> 00:02:42,940 του προγράμματός μου - 47 00:02:42,940 --> 00:02:45,110 το οποίο περιλαμβάνει σαφώς κυμαινόμενο τιμές σημείο - 48 00:02:45,110 --> 00:02:50,210 αλλά επειδή αποδεικνύεται ότι C, Αν διαιρέσει μια int int από ένα άλλο, το 49 00:02:50,210 --> 00:02:54,350 προκύπτουσα απάντηση που πρόκειται να πάρει είναι ίδια int, ακόμη και αν αυτό σημαίνει 50 00:02:54,350 --> 00:02:57,450 ότι πρέπει να πετάξουν τα πάντα μετά την υποδιαστολή. 51 00:02:57,450 --> 00:03:04,990 >> Με άλλα λόγια, αν μπορώ να αλλάξω αυτό το 5,0 έως 5 ή αυτό το 9,0 έως 9 και στη συνέχεια αποθηκεύστε πάλι 52 00:03:04,990 --> 00:03:10,550 το πρόγραμμά μου, recompile με τη μάρκα F σε C, και στη συνέχεια εκτελέστε ξανά με dot κάθετος F 53 00:03:10,550 --> 00:03:15,310 στο C και το είδος σε μία είσοδο, όπως 212, παρατηρήσετε ότι η απάντηση θα πάω να 54 00:03:15,310 --> 00:03:17,860 να πάρει αυτή τη φορά είναι πραγματικά εντελώς λάθος. 55 00:03:17,860 --> 00:03:23,570 0.0 δεν είναι ο σωστός βαθμός στον Κελσίου και Φαρενάιτ 212. 56 00:03:23,570 --> 00:03:24,500 >> Λοιπόν, τι συμβαίνει; 57 00:03:24,500 --> 00:03:29,410 Λοιπόν, στη γραμμή 9, γιατί 5 είναι τώρα ακέραιος και επειδή 9 είναι τώρα 58 00:03:29,410 --> 00:03:34,810 ακέραιος, το αποτέλεσμα μαθηματικά θα πρέπει να είναι 0,5555 και ούτω καθεξής. 59 00:03:34,810 --> 00:03:39,120 Αλλά επειδή το αποτέλεσμα, σύμφωνα με την Κανόνες Γ, πρέπει να είναι int, ότι 60 00:03:39,120 --> 00:03:44,020 0.5555 παίρνει ρίχνονται μακριά, αφήνοντας μας με μόλις 0. 61 00:03:44,020 --> 00:03:48,600 >> Έτσι, στο τέλος, καταλήγω πολλαπλασιάζοντας εντελώς τυχαία 0 φορές στ μείον 62 00:03:48,600 --> 00:03:52,830 32.0, η οποία είναι δεν έχει σημασία τι πάντα θα μου δώσει 0. 63 00:03:52,830 --> 00:03:56,930 Έτσι, να έχετε κατά νου, κάθε φορά χρησιμοποιώντας τιμές κινητής υποδιαστολής σε εγγύτητα 64 00:03:56,930 --> 00:03:59,860 ints, ίσως όχι απαραίτητα πάρετε την απάντηση, έτσι ώστε να περιμένετε. 65 00:03:59,860 --> 00:04:04,220 Και γι 'αυτό προσέχετε να χρησιμοποιήσει, όπως έκανα και στην πρώτη περίπτωση, οι τιμές κινητής υποδιαστολής 66 00:04:04,220 --> 00:04:06,530 για να αποφευχθεί το οποιοδήποτε τέτοιου είδους ζητήματα. 67 00:04:06,530 --> 00:04:08,267