求解释《数据结构与算法——C语言描述》习题1.3
//习题1.3 只使用处理I/O的PrintDigit函数,编写一个过程以输出任意实数#include <stdio.h>
#define PrintDigit( Ch ) ( putchar( ( Ch ) + '0' ) )
void PrintInt(unsigned int N)/* Print nonnegative N */
{
if (N >= 10)
PrintInt(N / 10);
PrintDigit(N % 10);
}
void PrintOut(double N,int accuracy)
{
if (N < 0){
putchar('-');
N = -N;
}
int n = (int)N;
PrintInt(n);
double decimal = N - n;
if (decimal > 0){
putchar('.');
double add = 0.5;
for (int i = 0; i < accuracy; i++) {
add /= 10;
}
N += add;
for (int i = 0; i < accuracy; i++){
decimal *= 10;
}
PrintInt(decimal);
}
}
int main()
{
PrintOut(1208.123456,3);
putchar('\n');
return 0;
}
我想知道这个函数的实现原理,求大佬解答。 本帖最后由 墨羽岚 于 2020-3-11 22:04 编辑
程序有一点小错误啊,倒数12行重复定义了i,把int去掉吧。
调用库函数<include.h>
定义函数PrintDigit(Ch)为(putchar(Ch)+'0') (以数字形式输出Ch)
定义PrintInt函数(运算对象为无符号整型数N)/*用以输出非负数N*/
{
当N>=10时
再次对N/10(N去掉个位数后的数)进行PrintInt函数操作;
对N%10(N的个位数)使用PrintDigit函数;
}
定义PrintOut函数(运算对象为双精度型数N,整型数accuracy(即精确度))
{
当N<0时
{
输出负号;
将N的相反数重新赋值给N;
}
定义一个整型数n,并将对N进行int操作(向下取整)后的值赋初值给n;
对n使用PrintInt函数;
定义一个双精度型数demical(小数),并将N-n的值赋初值给demical;
若demical>0
{
输出小数点符号;
定义双精度型数add且初值为0.5;
定义整型数i,且赋初值0给i,当i<accuracy时,进行以下循环体并在每次循环后自动加1
{
将add除以10后的值重新赋值给add;
}
赋初值0给i,当i<accuracy时,进行以下循环体并在每次循环后自动加1(因为上一段已经定义了i,此处不要再定义)
{
将demical乘10后的值重新赋值给demical;
}
对demacal使用PrintInt函数; //这一小段是在进行四舍五入//
}
}
定义整形main函数
{
对1208.123456和3使用PrintOut函数;
输出回车;
结束;
} 墨羽岚 发表于 2020-3-11 20:28
程序有一点小错误啊,倒数12行重复定义了i,把int去掉吧。
为什么给add赋初值为5?
星云鱼梦 发表于 2020-3-12 10:48
为什么给add赋初值为5?
add初值0.5是为了小数点后四舍五入呀,按照accuracy的值来判断在哪一位进行四舍五入 墨羽岚 发表于 2020-3-12 11:18
add初值0.5是为了小数点后四舍五入呀,按照accuracy的值来判断在哪一位进行四舍五入
谢谢大佬
页:
[1]