递归打印实数

问题1:  只使用处理I/O的printDigit函数编写一个过程以输出任意整数(可以是负数)。

 

解决:使用递归解决该问题


代码:

头文件 #include <math.h>


/*打印出一个数字*/
void printOut(int n) 
{
	/*该整数的中间数都以正数打出*/
	if(abs(n) >= 10) 
	{
		printOut(n/10);
		printf("%d", abs(n%10));
	} else 	    //第一个数字按原样打出
		printf("%d", n%10);
	
}



问题2:  只使用处理I/O的printDigit函数编写一个过程以输出任意实数(可以使负数)。

 

解决:这题要用到上面的那个打印整数的函数

1.  获得实数的整数部分:intPart = n    intPart 为int 型,n为double 型

2.  打印出整数部分:printOut(intPart)。

3.  如果有小数部分,跟着打印小数点:printf(“.”);然后获得小数部分:dicPart = n – intPart    dicPart 为double型。

4.  如果有小数部分,将小数部分转换为整数,然后用printOut()函数打出。

            for(i = 0; i < pointNum;i++)

              {

                   dicPart *= 10;

              }


          //小数部分都为正整数,整个实数的符号位已经由整数部分处理好了

              Int dicInt = abs(dicPart);

         //打印

         PrintOut(dicInt);

    

代码:


/*打印出一个整数*/
void printOut(int n) 
{
	/*该整数的中间数都以正数打出*/
	if(abs(n) >= 10) 
	{
		printOut(n/10);
		printf("%d", abs(n%10));
	} else 	    //第一个数字按原样打出
		printf("%d", n%10);
	
}

/*打印一个实数n,pointNum小数点位数*/
void printReal(double n, int pointNum)
{
	/*整数部分*/
	int intPart, i, dicInt = 0;
	/*小数部分*/
	double dicPart;

	intPart = n;
	dicPart = n - intPart;

	/*打印整数部分*/
	printOut(intPart);

	if(pointNum > 0)
	{
		/*打印小数点*/
		printf(".");

		/*将小数部分转换为整数*/
		for(i = 0; i < pointNum; i++)
		{
			dicPart *= 10;
		}

		/*小数部分符号都弄为正数*/
		dicInt = abs(dicPart);

		/*打印出小数部分*/
		printOut(dicInt);
	}
}

完毕!

 





  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值