近似与精确——《狂人C》习题解答15(第三章习题5)_第1页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、近似与精确狂人c习题解答15(第三章习题5)题目:先前有一个农民,死后留下15头牛,他在遗书中写到:"妻子:分给所有牛的半数再加半头;长子:分给剩下的牛的半数再加半头;次子:分给剩下的牛的半数再加半头;长女:分给最后剩下的。"编程求长女得到了几头牛。 这是一个容易的学校算术问题: 15头牛的一半是7又1/2 ,再加半头得8,这是妻子所得。剩下7头 7头牛的一半是3又1/2 ,再加半头得4,这是长子所得。剩下3头 3头牛的一半是1又1/2 ,再加半头得2,这是次子所得。剩下1头 因而长女所得为1头。 但是假如写出如下的代码,则最多只能得60分。 ilude stdio.h i

2、nclude stdlib.h define zongshu 15. /总数:留下15头牛 define fenpei_bl .5 /分配比例: 半数 define ewai_tj .5 /额外添加:半头 int main( vo ) double qizi , zhangzi , cizi , zhangnv ; /妻子、长子、次子、长女所得 double shengyu = zongshu ; /剩余的数量 qizi = shengyu * fenpei_bl + ewai_tj ; /妻子所得 shengyu -= qizi ; /剩余的数量 zhangzi = shengyu * fe

3、npei_bl + ewai_tj ; /长子所得 shengyu -= zhangzi ; /剩余的数量 cizi = shengyu * fenpei_bl + ewai_tj ; /长子所得 shengyu -= cizi ; /剩余的数量 zhangnv = shengyu ; /长女:分给最后剩下的 printf("长女得到了%f头牛n" , zhangnv ) ; system("pause"); return 0; 输出:长女得到了1.000000头牛 由于,第一,这个结果仅仅表示长女得到的牛数约等于1头;其次,代码并没有真正实现前面的算术

4、运算过程。譬如 qizi = shengyu * fenpei_bl + ewai_tj ; 所表示的含义仅仅是一些近似的值的一个近似运算,而非前面算术运算过程中的精确运算。由于就其本质和普遍情形来讲,实浮点类型的数据只是对实数的一个近似表示,这注定实浮点类型的运算也只是一种近似运算。只不过在本题目中,近似的精度很高,计算结果恰好和精确的结果全都而已。假如把程序视为对笔算过程的精确模拟的话,明显前面一段代码并不符合要求。 在计算机中,惟独整数类型是对整数集合子集的近似表示。所以假如希翼精确地模拟笔算过程就只能用整数类型。然而笔算过程涉及到了分数。在数学中,分数也是一种精确表示,然而在c语言中却

5、并没有与之对应的 分数类型 。 没有相应的数据类型怎么办?答案很容易:没有这种类型就制造这种数据类型。为制造性提供了广大的发挥空间是c语言的特点和魅力,也恰恰是编程的乐趣之一。 因为分数是由分子、分母两个部分组成,而分子、分母都是整数,因而可以用两个整数类型的数据来表示分数。对于这样的数据,c语言并没有提供挺直的运算,这种 分数 的运算需要自己用c语言所提供的运算模拟。 例如,若计算a/b+c/d,则无法通过一次 + 运算完成,只能分两次计算出和的分子 b*c+d*c 及和的分母 a*c 。 根据这种方法得到的代码是 include stdio.h include stdlib.h defin

6、e zongshu_fz 15 /总数的分子 define zongshu_fm 1 /总数的分母 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 , /长子所得的分母和分子 cizi_fm , cizi_fz , /次子所得的分母和分子 zhangnv

7、_fm , zhangnv_fz ; /长女所得的分母和分子 int shengyu_fm = zongshu_fm , /剩余的数量的分母 shengyu_fz = zongshu_fz ; /剩余的数量的分子 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 ;

8、 /剩余的数量 shengyu_fm *= qizi_fm ; zhangzi_fz = shengyu_fz * ewai_tj_fm /长子所得 + 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 ; /剩余的数量 shengyu_fm *= zhangzi_fm ; cizi_fz = shengyu_fz * ewai_

9、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 ; /剩余的数量 shengyu_fm *= cizi_fm ; zhangnv_fz = shengyu_fz ; /长女所得 zhangnv_fm = shengyu_fm ; printf("长女得到了%d又%d/%d头牛n" , shengyu_fz/shengyu_fm , shengyu_f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论