首页 > 电脑

怎么将char型数组经过子函数运算后以double结果输出

更新时间2019-04-30 09:10:36

ouble Result(char b[])/*计算结果*/

{

    char *s;

     int j=0,i=0;

     char str[20];

     double d,a,c;

     while(b[j]!='')

     {

         while((b[j]<='9'&&b[j]>='0')||' '==b[j])

         {

             str[i]=b[j];

             i++;

             str[i]='';

             j++;

             if(' '==b[j])

             {

                 d=atof(str);

                 Push1(s,&d);

                 break;

             }

         }

         switch(b[j])

         {

             case '-':a=Pop1(s,&b[j-1]);c=Pop1(s,&b[j-2]);Push1(s,a+c);

             case '+':a=Pop1(s,&b[j-1]);c=Pop1(s,&b[j-2]);Push1(s,a-c);

             case '*':a=Pop1(s,&b[j-1]);c=Pop1(s,&b[j-2]);Push1(s,a*c);

             case '/':a=Pop1(s,&b[j-1]);c=Pop1(s,&b[j-2]);Push1(s,a/c);

         }

         j++;

     }

     Pop1(s,&d);

     return d;

}

这是我的其中一个子函数,编译显示initializing argument 1 of

先将Double型的数字整数部分变为整型数字一一取到数组中去(用循环整除可以做到,比如double i=123.456,就可以先把整数部分用j=(int)i强制类型转换取出放入整型变量j中,再依次取到数组a中
(a[k++]=i%10;i/=10;)
这两句语句就可以做到(不过数字是倒序的,最后输出时要注意)。
再看小数部分,同理,但不用除法,而用乘法,先去除整数部分
(j=j-(int)j;)
再将小数部分不断的乘10取整,取一位去除一位,存入另一数组:
l=(int)(j*10);
b[k++]=l;
j=j*10-l;...直到j*10==0为止
这样就可以把j中的数按位取到了两个数组中,接下去只要将两数组合并到C数组中去,或者依次输出整数部分和小数部分,中间别忘加小数点,输出成字符在c语言里可以这样:
printf("%c",a[i]+'0');
printf(".");
printf("%c",b[i]+'0');

使用','分割字符串,将得到的子串使用atof()函数转换成小数,再存入数组

相关标签:运算

上一篇:Anylogic仿真数据分析是什么

下一篇:java缺少返回语句