日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

近似与精确——《狂人C》习题解答15(第三章习题5)

發(fā)布時(shí)間:2024/6/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 近似与精确——《狂人C》习题解答15(第三章习题5) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:從前有一個(gè)農(nóng)夫,死后留下15頭牛,他在遺書(shū)中寫(xiě)到:"妻子:分給全部牛的半數(shù)再加半頭;長(zhǎng)子:分給剩下的牛的半數(shù)再加半頭;次子:分給剩下的牛的半數(shù)再加半頭;長(zhǎng)女:分給最后剩下的。"編程求長(zhǎng)女得到了幾頭牛。

??? 這是一個(gè)簡(jiǎn)單的小學(xué)算術(shù)問(wèn)題:
??? 15頭牛的一半是7又1/2 ,再加半頭得8,這是妻子所得。剩下7頭
??? 7頭牛的一半是3又1/2 ,再加半頭得4,這是長(zhǎng)子所得。剩下3頭
??? 3頭牛的一半是1又1/2 ,再加半頭得2,這是次子所得。剩下1頭
??? 因而長(zhǎng)女所得為1頭。

??? 但是如果寫(xiě)出如下的代碼,則最多只能得60分。

#include <stdio.h> #include <stdlib.h>#define ZONGSHU 15. //總數(shù):留下15頭牛 #define FENPEI_BL .5 //分配比例: 半數(shù) #define EWAI_TJ .5 //額外添加:半頭 int main( void ) {double qizi , zhangzi , cizi , zhangnv ; //妻子、長(zhǎng)子、次子、長(zhǎng)女所得 double shengyu = ZONGSHU ; //剩余的數(shù)量 qizi = shengyu * FENPEI_BL + EWAI_TJ ; //妻子所得shengyu -= qizi ; //剩余的數(shù)量zhangzi = shengyu * FENPEI_BL + EWAI_TJ ; //長(zhǎng)子所得shengyu -= zhangzi ; //剩余的數(shù)量cizi = shengyu * FENPEI_BL + EWAI_TJ ; //次子所得shengyu -= cizi ; //剩余的數(shù)量zhangnv = shengyu ; //長(zhǎng)女:分給最后剩下的printf("長(zhǎng)女得到了%f頭牛\n" , zhangnv ) ;system("PAUSE"); return 0;}

輸出:長(zhǎng)女得到了1.000000頭牛

??? 因?yàn)?#xff0c;第一,這個(gè)結(jié)果僅僅表示長(zhǎng)女得到的牛數(shù)約等于1頭;第二,代碼并沒(méi)有真正實(shí)現(xiàn)前面的算術(shù)運(yùn)算過(guò)程。譬如
??? qizi =? shengyu * FENPEI_BL +? EWAI_TJ ;
??? 所表示的含義僅僅是一些近似的值的一個(gè)近似運(yùn)算,而非前面算術(shù)運(yùn)算過(guò)程中的精確運(yùn)算。因?yàn)榫推浔举|(zhì)和普遍情形來(lái)講,實(shí)浮點(diǎn)類(lèi)型的數(shù)據(jù)只是對(duì)實(shí)數(shù)的一個(gè)近似表示,這注定實(shí)浮點(diǎn)類(lèi)型的運(yùn)算也只是一種近似運(yùn)算。只不過(guò)在本題目中,近似的精度很高,計(jì)算結(jié)果恰好和精確的結(jié)果一致而已。如果把程序視為對(duì)筆算過(guò)程的精確模擬的話,顯然前面一段代碼并不符合要求。
??? 在計(jì)算機(jī)中,只有整數(shù)類(lèi)型是對(duì)整數(shù)集合子集的近似表示。所以如果希望準(zhǔn)確地模擬筆算過(guò)程就只能用整數(shù)類(lèi)型。然而筆算過(guò)程涉及到了分?jǐn)?shù)。在數(shù)學(xué)中,分?jǐn)?shù)也是一種精確表示,然而在C語(yǔ)言中卻并沒(méi)有與之對(duì)應(yīng)的“分?jǐn)?shù)類(lèi)型”。
??? 沒(méi)有相應(yīng)的數(shù)據(jù)類(lèi)型怎么辦?答案很簡(jiǎn)單:沒(méi)有這種類(lèi)型就創(chuàng)造這種數(shù)據(jù)類(lèi)型。為創(chuàng)造性提供了廣闊的發(fā)揮空間是C語(yǔ)言的特點(diǎn)和魅力,也恰恰是編程的樂(lè)趣之一。
??? 由于分?jǐn)?shù)是由分子、分母兩個(gè)部分組成,而分子、分母都是整數(shù),因而可以用兩個(gè)整數(shù)類(lèi)型的數(shù)據(jù)來(lái)表示分?jǐn)?shù)。對(duì)于這樣的數(shù)據(jù),C語(yǔ)言并沒(méi)有提供直接的運(yùn)算,這種“分?jǐn)?shù)”的運(yùn)算需要自己用C語(yǔ)言所提供的運(yùn)算模擬。
??? 例如,若計(jì)算a/b+c/d,則無(wú)法通過(guò)一次“+”運(yùn)算完成,只能分兩次計(jì)算出和的分子“b*c+d*c”及和的分母“a*c”。
??? 按照這種辦法得到的代碼是

#include <stdio.h> #include <stdlib.h>#define ZONGSHU_FZ 15 //總數(shù)的分子 #define ZONGSHU_FM 1 //總數(shù)的分母 #define FENPEI_BL_FZ 1 //分配比例的分子 #define FENPEI_BL_FM 2 //分配比例的分母 #define EWAI_TJ_FZ 1 //額外添加的分子 #define EWAI_TJ_FM 2 //額外添加的分母 int main( void ) {int qizi_fm , qizi_fz , //妻子所得的分母和分子 zhangzi_fm , zhangzi_fz , //長(zhǎng)子所得的分母和分子cizi_fm , cizi_fz , //次子所得的分母和分子 zhangnv_fm , zhangnv_fz ; //長(zhǎng)女所得的分母和分子 int shengyu_fm = ZONGSHU_FM , //剩余的數(shù)量的分母shengyu_fz = ZONGSHU_FZ ; //剩余的數(shù)量的分子 qizi_fz = shengyu_fz * EWAI_TJ_FM //妻子所得+ shengyu_fm * FENPEI_BL_FM * FENPEI_BL_FZ; qizi_fm = shengyu_fm * FENPEI_BL_FM * EWAI_TJ_FM ; shengyu_fz = shengyu_fz * qizi_fm - qizi_fz * shengyu_fm ; //剩余的數(shù)量shengyu_fm *= qizi_fm ; zhangzi_fz = shengyu_fz * EWAI_TJ_FM //長(zhǎng)子所得+ shengyu_fm * FENPEI_BL_FM * FENPEI_BL_FZ; zhangzi_fm = shengyu_fm * FENPEI_BL_FM * EWAI_TJ_FM ; shengyu_fz = shengyu_fz * zhangzi_fm - zhangzi_fz * shengyu_fm ; //剩余的數(shù)量shengyu_fm *= zhangzi_fm ; cizi_fz = shengyu_fz * EWAI_TJ_FM //次子所得+ shengyu_fm * FENPEI_BL_FM * FENPEI_BL_FZ; cizi_fm = shengyu_fm * FENPEI_BL_FM * EWAI_TJ_FM ; shengyu_fz = shengyu_fz * cizi_fm - cizi_fz * shengyu_fm ; //剩余的數(shù)量shengyu_fm *= cizi_fm ; zhangnv_fz = shengyu_fz ; //長(zhǎng)女所得zhangnv_fm = shengyu_fm ;printf("長(zhǎng)女得到了%d又%d/%d頭牛\n" , shengyu_fz/shengyu_fm , shengyu_fz % shengyu_fm , shengyu_fm ) ;system("PAUSE"); return 0;}

輸出:長(zhǎng)女得到了1又0/16384頭牛

??? 這是一個(gè)精確的結(jié)果。
??? 【注:學(xué)習(xí)了控制語(yǔ)句和函數(shù)理論之后,后一個(gè)代碼可以進(jìn)一步改進(jìn)。】

?

轉(zhuǎn)載于:https://www.cnblogs.com/KBTiller/archive/2011/09/24/2189685.html

總結(jié)

以上是生活随笔為你收集整理的近似与精确——《狂人C》习题解答15(第三章习题5)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。