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

Posted mingc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法分析(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

以上是关于数据结构与算法分析(C语言描述)习题1.3的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

推荐 3 个学习C语言算法与习题的平台

C语言100个经典算法源码片段