דוד י מלאן: כפי שאתה בוודאי יודע, טמפרטורות נמדדות באמצעות סולמות שונים בשונה חלקים של העולם. לדוגמא, 212 מעלות פרנהייט היא 100 מעלות צלזיוס ו32 מעלות פרנהייט היא 0 מעלות צלסיוס. האם לא יהיה זה נחמד אם היה לנו מחשב תכנית שאפשרה לנו להמיר מ, נגיד, פרנהייט לצלזיוס? ובכן, אנחנו יכולים לכתוב תכנית ש. בואו נתחיל קודם עם כולל cs50.h, כדי שנוכל להשתמש בפונקציה שנקראת להגיע לצוף, אשר, כמו int גט, מקבל מספר מהמשתמש, אך הפעם מספר נקודה צפה - אחד עם נקודה עשרונית. בואו גם כוללים io.h הסטנדרטי כך שיש לנו גישה ל פונקציות כמו f הדפסה. ובואו גם להכריז עיקרי בדרך הרגילה. בואו הבא לבקש מהמשתמש טמפרטורה בפרנהייט. בואו עכשיו ממש מקבל טמפרטורה זו מהמשתמש, לראשונה על ידי הכרזה על משתנה בשם f של הטיפוס float. לצוף, שוב, כלומר, משתנה ש מאחסן ערך נקודה צפה, אחד עם נקודה עשרונית. בואו להקצות את התמורה ערך של מצוף גט. ואז בואו נעשה קצת חשבון על זה, והכריז לצוף אחר ראשון C קרא לצלזיוס ולאחסן ב-C תוצאה של חשבון משותף. 5.0 מחולקים 9.0 פעמים F מינוס 32.0. בואו עכשיו להדפיס את התוצאה חישוב זה. ו אחוזים - המסמנים מיקום עבור ערך נקודה צפה - C הפסיק להדפיס טמפרטורה בצלזיוס. בואו להציל אותי סופי. לקמפל עם F לג על הפעלה התכנית עם F לוכסן הנקודה לג ובואו ננסה נפוץ אלה טמפרטורות. 212 מעלות בפרנהייט הוא 100 מעלות צלזיוס. 32 מעלות בפרנהייט היא 0 מעלות בצלזיוס. כעת מאפשר לחדד את התכנית הזו קטנה קצת בכך שלא מדפיס 0 של די רב לאחר שהמקום עשרוני. כדי לעשות זאת, אני הולך אחזור לשורה 11. ולא רק לציין ו אחוזים, אני הולך לציין במקום, נניח, 0.1 f, f הדפסה ליידע שרק רוצה להדפיס ערך נקודה צפה לערך אחד אחרי הנקודה העשרונית. בואו שמרו מחדש את התכנית שלי. הדר מחדש את זה עם F איפור לג אז להפעיל מחדש את זה עם F לוכסן הנקודה לג ו בואו לנסות שוב עם, נניח, 212, אשר נותן לי 100.0. עכשיו זה ראוי לציין כי אני עשיתי משהו מאוד במתכוון בקו 9. שים לב איך כתבתי 5 הוא 5.0, 9 כ9.0, ואפילו 32 כ32.0. ובכן, שני הראשונים של ערכים אלה היו נבחר מאוד במכוון להיות ערכי נקודה צפה, לא רק בגלל עקביות עם שאר התכנית שלי - אשר בבירור כרוך צף ערכי נקודה - אלא משום שמתברר שC, אם אתה לחלק int ידי int אחר, תשובה וכתוצאה מכך אתה הולך לקבל היא עצמו int, גם אם זה אומר יש לזרוק את כל מה לאחר הנקודה העשרונית. במילים אחרות, אם אני משנה את זה ל5.0 5 או 9.0 זה עד 9 ולאחר מכן שמור התכנית שלי, הידור מחדש עם F איפור ל-C, ולאחר מכן להפעיל מחדש את זה עם לוכסן נקודת F ל-C וסוג בקלט כמו 212, שם לב שהתשובה שאני הולך מקבל הפעם הוא דווקא די בסדר. 0.0 היא לא המידה הנכונה ב צלזיוס כ212 צלזיוס. ובכן, מה קורה? ובכן, בשורה 9, כי 5 הוא עכשיו שלם וכי 9 הוא עכשיו מספר שלם, התוצאה מבחינה מתמטית צריך להיות .5555 וכן הלאה. אבל בגלל התוצאה, על פי הכללים של C, צריך להיות int, כי 0.5555 מקבל נזרקו משם, משאיר אותנו רק עם 0. אז בסופו של הדבר, אני בסופו של הכפלה די בטעות 0 פעמים F מינוס 32.0, וזה לא משנה מה הולך תמיד לתת לי 0. אז לעשות לזכור, כל עת באמצעות ערכי נקודה צפה בסמיכות ints, ייתכן שלא בהכרח לקבל את התשובה כל כך צפוי. וכך לטפל לשימוש, כפי שעשיתי ב ערכי מקרה ראשון, נקודה צפה לאורך כל כדי למנוע בעיות מסוג זה.