在上一贴的基础上,增加可以对浮点数进行运算,依旧是加法运算。
补充的说明:
1、相加函数不变,为了更能实现移植吧,写太多东西在一个函数里面看的也乱;
2、增加两个函数,一个判断小数位数,一个对结果数组的处理
简单思想:把浮点转换为正整型的,然后再对点进行处理(包括一些特定情况)
程序测试的结果如下:
以下代码包括原封不动的相加函数,还有上面提到的两个函数,代码具体已有注释,若有错误,请指出:
/************************************************************************/
/* 函数功能:返回小数点后的个数,并修改a,b数组为正整型 */
/* 先找出小数点的位置,比较小数点后的个数,返回比较大的个数,不足的那个补0 */
/************************************************************************/
int decimal(char a[],char b[])
{
int i,j,k,l1,l2;
l1=strlen(a);
l2=strlen(b);
for (i=0;i<l1;i++)
{
if (a[i]=='.') //找到小数点位置,然后删除小数点
{
for (k=i;k<l1;k++)
{
a[k]=a[k+1];
}
l1--; //长度减少
break;
}
}
for (j=0;j<l2;j++)
{
if (b[j]=='.')
{
for (k=j;k<l2;k++)
{
b[k]=b[k+1];
}
l2--;
break;
}
}
k=(l1-i)-(l2-j); //比较两个数组谁的小数位更多
if (i==l1 && j==l2) //都没有小数点的话,返回0
{
return 0;
}
else if (k>=0) //被加数更多,b[]数组后面对齐补0
{
while (k!=0)
{
b[l2++]='0';
k--;
}
return l1-i; //返回a[]的小数位数
}
else if (k<0) //加数更多,a[]数组后面对齐补0
{
k=k*-1; //记住k要变为正的
while (k!=0)
{
a[l1++]='0';
k--;
}
return l2-j;
}
}
/************************************************************************/
/* 处理结果数组 */
/* 将数组小数点后面的后移,插入小数点 */
/* 处理小数点某位0的情况,要去掉,若是小数点后不含任何数,小数点也要去掉 */
/************************************************************************/
void result(char c[],int n)
{
int i,j,k,length;
length=strlen(c);
for (i=length;i>length-n;i--) //数组后移length-n大小
{
c[i]=c[i-1];
}
c[length-n]='.'; //插入小数点
for (i=length;i>=length-n;i--)
{
if (c[i]!='0' && i!=length-n) //当不在小数点上面的时候,不为0直接退出
{
break;
}
else //将0置为结束符,包括特定情况时去掉小数点
{
c[i]='/0';
}
}
}
/************************************************************************/
/* 主函数实现 */
/************************************************************************/
int main()
{
int n,k;
char a[1000],b[1000],c[1000];
printf("%s","计算次数: ");
scanf("%d",&n);
while (n--)
{
memset(a,'/0',sizeof(a));
memset(b,'/0',sizeof(b));
memset(c,'/0',sizeof(c));
printf("%s","请输入被加数: ");
scanf("%s",&a);
printf("%s","请输入加数: ");
scanf("%s",&b);
k=decimal(a,b);
add(a,b,c);
if (k!=0)
{
result(c,k);
}
printf("%s%s/n/n","加法后结果为: ",c);
}
return 0;
}