两个数的加法

时间:2019-10-04 13:04:57

标签: c

我需要帮助来解决一个非常简单的问题。我编写了将两个数字相加的代码,但仅使用float类型。因此,当我写2+2时,它给了我4.0。为了只得到4,我需要做什么?但是同时我是否写5.2+5.3来获得10.5

这是家庭作业,不应包含if语句。

我尝试了所有变量类型,但这只是给我不现实的数字。如果有人帮助我,我将不胜感激。

代码

#include <stdio.h>

/*Addition of two numbers*/

 int main()
{
    float a;
    float b;
    float x;

   printf("Enter the first number:\n");
   scanf("%f", &a);

   printf("Enter the second number:\n");
   scanf("%f", &b);

   x = a + b;

   /*Printing decimal number*/

   printf("Result: %.1f + %.1f = %.1f", a, b, x);

   return 0;

}

2 个答案:

答案 0 :(得分:10)

我认为您要对g指令使用printf格式说明符。这用于打印最短的表示形式。您可以在这里阅读有关格式说明符的更多信息:http://www.cplusplus.com/reference/cstdio/printf/

此代码显示您如何描述:5 + 5 = 105.1 + 5.2 = 10.3

#include <stdio.h>

int  main()
{
  float a;
  float b;
  float x;

  printf("Enter the first number:\n");
  scanf("%f", &a);

  printf("Enter the second number:\n");
  scanf("%f", &b);

  x = a + b;

  /*Printing decimal number*/

  printf("Result: %.1f + %.1f = %g\n", a, b, x);

  return 0;

}

答案 1 :(得分:1)

如果您想变得“聪明”(我只是宽松地使用该术语,而不是明智地使用-我也不是想从@Sebi发表的出色答案中脱颖而出),并根据(最大)的输入精度,那么这对于不为零的“小数”部分将起作用:

#include <stdio.h>

int main()
{
    float a, b, x, test;
    int aPrec = 0, bPrec = 0, xPrec = 0, iTest;

    printf("Enter the first number:\n");
    scanf("%f", &a);
    test = (float)fabs(a); // Just in case it's -ve!
    iTest = (int)(test + 0.5);
    while (test != (float)(iTest)) {
        ++aPrec;
        test *= 10.0;
        iTest = (int)(test + 0.5);
    }

    printf("Enter the second number:\n");
    scanf("%f", &b);
    test = (float)fabs(b); // Just in case it's -ve!
    iTest = (int)(test + 0.5);
    while (test != (float)(iTest)) {
        ++bPrec;
        test *= 10.0;
        iTest = (int)(test + 0.5);
    }

    x = a + b;
    xPrec = aPrec > bPrec ? aPrec : bPrec; // Or, you could use max()!!
    // The "*" precision specifiers get their values from arguments immediately …
    /// … preceding the relevant 'float' value!
    printf("Result: %.*f + %.*f = %.*f", aPrec, a, bPrec, b, xPrec, x);
    return 0;
}

代码在做什么,就是将每个输入乘以10,直到看到“测试”值等于其整数(截断)值为止;这是每个输入ab的“精度”值。现在,smart(再次,我使用的术语是宽松的),它认为输出精度应该是两个输入中的较大者。

如果您不知道"%.*f格式说明符的工作原理,那么我可以添加更多详细信息。