编写程序实现两个小数相加,C语言题目

编写程序实现两个小数相加,C语言题目,第1张

#include <stdio.h>main () {float vr1,vr2 printf("\笑粗n输入两个实数搏升明,用逗号隔开基告\n") scanf("%f,%f",&vr1,&vr2) printf("\nf% + %f = %f\n",vr1 + vr2)}

1.C语言的小数都是浮点数。浮点数属于floating binary point types,也就是说都double型的数值在相加减的时候,会将数值转换成二进制的数值如10001.10010110011这种表示发再做相加减,但是在转换成二进制代码表示的时候,存储瞎冲没小数部分的位数会有不够的现象,即无限循环小数,这就就会造成小数相加后结果会有微差距。

2.浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。

3.浮点计算是指浮点数参与的运算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。

一个浮点数a由两个数m和e来表示:a = m × b^e。在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。m(即尾数)是形如±d.ddd...ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。磨纳如果m的第一位是非0整数,m称作规格化的。有一些描述使用一个单独的符号位(s 代表+或者-)来表示正负,这样m必须是判毕正的。e是指数。

#include<stdio.h>

#include<string.h>

int main()

{

    char s1[410],s2[410]

    int a[410],b[410],c[410],d[410]

    int i,j,k,len1,len2,s,t,num1,num2

    while(scanf("%s %s",s1,s2)!=EOF)

    {

        for(i=0i<=409i++)

        {

            a[i]=0

            b[i]=0

            c[i]=0

            d[i]=0

        }

        s=len1=strlen(s1)

        t=len2=strlen(s2)

        for(i=0i<len1i++)

            if(s1[i]=='.')

            {

                s=i

                break

            }

            for(i=0i<len2i++)

                if(s2[i]=='.')

                {

                    t=i

                    break

                }

                k=0

                for(j=s-1j>=0j--)

                    a[k++]=s1[j]-'0'

                k=0

                for(j=t-1j>=0j--)

                    b[k++]=s2[j]-'0'

                k=1

                if(s+1<len1)

                    for(j=s+1j<=len1-1j++)

                        c[k++]=s1[j]-'0'

                    k=1

                    if(t+1<len2)

                        for(j=t+1j<=len2-1j++)

                            d[k++]=s2[j]-'0'

                        num1=len1-s>len2-t?len1-s:len2-t

                        for(i=num1i>=1i--)

                        {

     耐行                       c[i]+=d[i]

                            if(c[i]>=10)

                            {

                           轿亩逗     c[i]-=10

                                c[i-1]++

                            }

                        }

                        num2=s-1>t-1?s-1:t-1

                        a[0]+=c[0]

                        for(i=0i<=num2i++)

                        {

                            a[i]+=b[i]

                            if(a[i]>=10)

                            {

                                a[i]-=10

                                a[i+1]++

                            }

                        }

                        if(a[num2+1]>0)

                            printf("%d",a[num2+1])

                    闭卖    for(i=num2i>=0i--)

                            printf("%d",a[i])        

                        for(i=num1i>=1i--)

                        {

                            if(c[i]==0)

                                continue

                            else

                                break

                        }

                        if(i==0)

                            

                        else

                        {

                            printf(".")

                            for(j=1j<=ij++)

                                printf("%d",c[j])

                        }

                        printf("\n")

    }

    return 0

}

这是小数加法的代码,你参考下哈。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12537922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存