我需要帮助来解决一个非常简单的问题。我编写了将两个数字相加的代码,但仅使用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;
}
答案 0 :(得分:10)
我认为您要对g
指令使用printf
格式说明符。这用于打印最短的表示形式。您可以在这里阅读有关格式说明符的更多信息:http://www.cplusplus.com/reference/cstdio/printf/
此代码显示您如何描述:5 + 5 = 10
和5.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
,直到看到“测试”值等于其整数(截断)值为止;这是每个输入a
和b
的“精度”值。现在,smart
(再次,我使用的术语是宽松的),它认为输出精度应该是两个输入中的较大者。
如果您不知道"%.*f
格式说明符的工作原理,那么我可以添加更多详细信息。