数据结构与算法分析(C语言描述)习题1.3

题目:只使用处理I/O的printDigit函数,编写一个过程以输出任意实数。

思路:取得数的整数部分()和小数部分()。整数部分直接用类型强制转换,然后用数减去整数部分得到小数部分。

1.打印整数部分;

void printOut(int n)
{
    if (abs(n) >= 10)
    {
        printOut(n / 10);
        printDigit(abs(n % 10));
    }
    else
        printDigit(n);
}

至于printDigit(),感觉有点鸡肋。为了迎合题目,加上了。

void printDigit(int n)
{
    printf("%d", n % 10);
}

2.如果小数部分不为0,则将小数点后六位转换成整数部分,将之打印。结束。

for (int i = 0; i < 6; i++)        //小数点后六位转化为整数
    decPart *= 10;

intPart = abs((int)decPart);
printOut(intPart);                 //打印转化后的小数部分

完整代码如下:

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <math.h>
 5
 6 void printDigit(int n);
 7 void printOut(int n);
 8
 9 int main(void)
10 {
11     double n, decPart;                    //数和小数部分
12     int intPart;                          //整数部分
13
14     n = -214748.3647;
15     intPart = (int)n;
16     decPart = n - (double)intPart;
17
18     printOut(intPart);
19     if (decPart)
20     {
21         printf(".");
22
23         for (int i = 0; i < 6; i++)        //小数点后六位转化为整数
24             decPart *= 10;
25
26         intPart = abs((int)decPart);
27         printOut(intPart);                 //打印转化后的小数部分
28     }
29
30     system("pause");
31     return 0;
32 }
33
34 /*打印整数*/
35 void printOut(int n)
36 {
37     if (abs(n) >= 10)
38     {
39         printOut(n / 10);
40         printDigit(abs(n % 10));
41     }
42     else
43         printDigit(n);
44 }
45
46 /*打印1位*/
47 void printDigit(int n)
48 {
49     printf("%d", n % 10);
50 }

为什么只打印小数点后6位,而不是全部——万一输入的数有8位小数呢?我们知道,大部分浮点数保存在计算机中都只是一个近似值,对小数部分有截位或进位。比如输入123.123123,内部可能存为123.12312300000001。所以只取前6位的。如果使用精确数值类型,就可以有效地避免这种精度丢失的问题。

如果您有更好的算法,欢迎交流。与前辈和爱好者学习是我的荣幸。谢谢!

最后,附上我参考的一位前辈的文章链接:

http://blog.csdn.net/fuzhengchao/article/details/7634589

时间: 2024-11-06 06:46:27

数据结构与算法分析(C语言描述)习题1.3的相关文章

《数据结构与算法分析—C语言描述》pdf

下载地址:网盘下载 内容简介 编辑 <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括.由于<数据结构与算法分析:C语言描述(原书第2版)>选材新颖,方法实用,题例丰富,取舍得当.<数据结构与算法分析:C语言描述(原书第2版)>的目的是培养学生良好的程序设计技巧和熟练的算

数据结构与算法分析 c语言描述 pdf 高清下载

网盘下载:数据结构与算法分析 c语言描述 pdf 高清下载 – 易分享电子书PDF资源网 作者: [美] Mark Allen Weiss 出版社: 机械工业出版社 副标题: C语言描述 原作名: Data Structures and Algorithm Analysis in C:Second Edition 译者: 冯舜玺 出版年: 2004-1-1 页数: 391 定价: 35.00元 装帧: 平装 内容简介 · · · · · · 本书是<Data Structures and Alg

数据结构与算法分析_Java语言描述(第2版)pdf

下载地址:网盘下载 本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计). 随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也不断增长.本书将算法分析与最有效率的Java程序的开发有机地结合起来,深入分析每种算法,并细致讲解精心构造程序的方法,内容全面.缜密严格. 第3版的主要更新如下: ? 第4章包含AVL树删除算法的实现. ? 第5章进行了全面修订和扩充,现在包含两种较

《数据结构与算法分析Java语言描述》PDF文件免费下载

图书简介: 本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计). 随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也不断增长.本书把算法分析与最有效率的Java程序的开发有机地结合起来,深入分析每种算法,内容全面.缜密严格,并细致讲解精心构造程序的方法. 图书目录部分截图: 结语:总结 数据结构与算法分析需要这份PDF文档的朋友,欢迎加Q群:219571750,免费领取,

《数据结构与算法分析:C语言描述_原书第二版》CH2算法分析_课后习题_部分解答

对于一个初学者来说,作者的Solutions Manual把太多的细节留给了读者,这里尽自己的努力给出部分习题的详解: 不当之处,欢迎指正. 1.  按增长率排列下列函数:N,√2,N1.5,N2,NlogN, NloglogN,Nlog2N,Nlog(N2),2/N,2N,2N/2,37,N2logN,N3.指出哪些函数以相同的增长率增长. 答:排列如下2/N < 37 < √2 < N < NloglogN < NlogN < Nlog(N2) < Nlog2

《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes

表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了生命. 本章学习重点: 理解抽象数据类型(ADT)的概念 学习如何对表进行有效的操作 熟悉栈ADT及其在实现递归方面的应用 熟悉队列ADT及其在操作系统和算法设计中的应用 ADT 抽象数据类型(abstract data type)是一个操作的集合,是数学的抽象,在ADT中不涉及如何实现操作的集合,这可以看作是模块化设计的扩充. 对于每

数据结构与算法分析_Java语言描述(第2版)高清版pdf免费下载

下载地址:网盘下载 备用地址:网盘下载 内容简介编辑“数据结构”是计算机专业的基础与核心课程之一,Java是现今一种热门的语言.本书在编写过程中特别考虑到了面向对象程序设计(OOP)的思想与Java语言的特性.它不是从基于另一种程序设计语言的数据结构教材简单地“改编”而来的,因此在数据结构的实现上更加“地道”地运用了Java语言,并且自始至终强调以面向对象的方式来思考.分析和解决问题.本书是为数据结构入门课程(通常课号是CS-2)而编写的教材.作者Frank Carrano在编写过程自始至终特别

《数据结构与算法分析 C语言描述》读书笔记——分治算法

书中用求解最大子序列和的方式介绍了分治算法(divide-and-conquer) 分治算法是一种相对快速的算法 运行时间为O(logN) 最大子序列和的问题如下: 给出一组整数 A1  A2 … AN 求∑jk=i Ak 若所有整数均为负 则最大子序列和为0 e.g. 输入-2, 11,-4, 13, -5, -2 输出20(A2到A4) 分治算法就如同字面描述的一样 先分再治 分 指的是将问题分为两部分几乎相同的子问题 进行递归求解 治 指的是将 分 的解通过简单的手段合并 得到最终解 对于

【数据结构与算法分析——C语言描述】练习1.1——选择问题

本部分内容来自http://www.cnblogs.com/mingc,笔者在此只用于整理学习. 问题描述:编写一个程序解决选择问题.令k=N/2.画出表格显示你的程序对于N为不同值时的运行时间. 理解:设有一组N个数确定其中第k个最大者,称选择问题(selection problem) 思路:读入前k个数到临时数组tmp(并按降序排列).然后逐个读取后续数字X,当X大于第k个数时,将其加入数组tmp(并按降序排列).最后返回位置k-1上的值 #include <stdio.h> #inclu

数据结构与算法分析-c语言描述版 mark allen weiss

指出依序访问图4-61中的伸展树中关键字3,9,1,5后的结果. 图4-61 1.原理 这里主要涉及到两种旋转方式: 1)之子型旋转 2)一字型旋转 这两种方式实际有一点差别: 之子型旋转是两次单旋转的组合,而且都可以看成是将目标节点父节点的选转(后面实例进行说明) 而一字型旋转时目标节点的祖父节点的的旋转后再加上父节点的旋转(后面实例进行说明). 因此书中所指的标准AVL双旋转可以分解为两步进行. 2.习题旋转步骤: 1)3节点的访问 第一步:节点3-2-4 之字形 :父节点的旋转,因此 2-