DAVID J. Malan: Kiel vi probable scias, temperaturoj estas mezuritaj per malsamaj skaloj en malsamajn partoj de la mondo. Ekzemple, 212 gradoj Fahrenheit estas 100 gradoj Celsius kaj 32 gradoj Fahrenheit estas 0 gradoj Celsius. Ĉu ne estus agrable, se ni havis komputilo Programo kiu ebligis al ni konverti de, ni diru, Fahrenheit al Celsius? Nu, ni povas skribi tiun programon. Ni unue komencu per inkluzivi cs50.h, tial ke ni povas uzi funkcio nomita get kaleŝego, kiuj, kiel get int, ricevas numeron de la uzanto, sed ĉi tiun fojon glitpunkta nombro - unu kun dekuma punkto. Ni ankaŭ inkludas normon io.h por ke ni havu aliron al funkcioj kiel presita f. Kaj ni ankaŭ deklaras ĉefajn en la kutima maniero. Ni sekvanta instigas la uzanton por a temperaturo en Fahrenheit. Ni nun vere akiri tiu temperaturo de la uzanto, unue por deklari variablon nomitan f de tipon float. A kaleŝego, denove, signifanta variablo kiu stokas glitpunkta valoro, kun dekuma punkto. Ni atribuas al ĝi la reveno valoro de Get flosas. Kaj do ni faru iom de aritmetiko sur ĝi, unue deklari alian float nomata C por Celsius kaj vendejo en C la Escepte de kelkaj komunaj aritmetikaj. 5.0 dividita per 9,0 fojojn F minus 32,0. Ni nun presi la rezulton de tiu kalkulado. procento f - montrante, a lokokupilo por glitpunktaj valoro - komo C por presi la temperaturo en gradoj. Ni savu mian finon. Kompili kun F al C. Ruli la programo kun skalara oblikvo F al C. Kaj ni provu tiujn komunajn temperaturojn. 212 gradoj en Fahrenheit Estas 100 gradoj Celsius. 32 gradoj en Fahrenheit estas 0 gradoj en Celsius. Nun lasas fajnigi tiun programon iom iom por ne presi tiom da 0 estas post tio dekuma loko. Por fari tion, mi tuj reiru al linio 11. Kaj anstataŭ nur specifi procento f, Mi tuj anstataŭe specifi, diru, 0.1 f, informante print f, ke mi nur deziras presi glitpunkta valoro al unu valoro post la dekuma loko. Ni resave mia programo. Rekompili ĝin per ŝminko F al C. Tiam rerun ĝin per skalara oblikvo F al C. Kaj ni reprovi kun, ni diru, 212, kiu donas al mi 100.0. Nun estas notinde, ke mi faris iu tre intence en linio 9. Rimarku kiel mi skribis 5 estas 5.0, 9 kiel 9,0, kaj eĉ 32 kiel 32.0. Nu, la du unuaj de tiuj valoroj estis tre intence elektita al esti glitpunktaj valoroj, ne nur ĉar de coherencia kun la resto de mia programo - kiu klare implicas flosanta punkto valoroj - sed ĉar ĝi rezultas ke C: Se vi dividu an int per alia int, la rezultan respondon vi tuj akiri estas mem an int, eĉ se tio signifas devi forĵetu ĉio post la dekuma punkto. En aliaj vortoj, se mi ŝanĝos ĉi 5.0 al 5 aŭ ĉi 9.0 ĝis 9 kaj poste resave mia programo, rekompili kun make F al C, kaj tiam re-ruli ĝin per skalara oblikvo F al C kaj tipon de enigo de kiel 212, rimarki, ke la respondon mi tuj get ĉi tempo estas vere tre malbone. 0.0 ne estas la korekta grado en Celsius kiel 212 Fahrenheit. Nu, kio okazas? Nu, en la linio 9, ĉar 5 estas nun entjera kaj ĉar 9 estas nun entjera, la rezulto matematike devus esti 0,5555 kaj tiel plu. Sed ĉar la rezulto, laŭ C la reguloj, devas esti int, ke 0,5555 gets forĵetiĝas, lasante al ni nur 0. Do, en la fino, mi finas multiplikante tute hazarde 0 fojojn f minus 32.0, kiu estas ne gravas ĉiam tuj donu al mi 0. Do memoru, iam uzi glitpunktaj valoroj en proksimeco de ints, vi eble ne nepre ricevi la respondon tiom vi atendas. Kaj do atentu uzi, kiel mi faris en la unua kazo, glitpunktaj valoroj tra eviti tiajn demandojn.