问题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);
}
}
完毕!