程序输出与手动计算不同,为什么会发生这种情况?C语言

  • 本文关键字:情况 语言 输出 计算 程序 c
  • 更新时间 :
  • 英文 :

#include <stdio.h>
#define s scanf
#define p printf
void main (){
    int P,I,A;
    float T,R;
    clrscr();
    p("PRINCIPAL: ");
    s("%i",&P);
    p("RATE: ");
    s("%f",&R);
    p("TERM: ");
    s("%f",&T);
    R = R/100;
    I = P*R*T;
    A = P+I;
    p("I: %inMA: %i",I,A);
    getch();
}

这确实让我感到困扰,如果我放置校长:1200率:3术语:1 I:35 MA:1235,但是如果您手动计算答案应该是I:36 MA:1236数字减少1.为什么发生了吗?答案为什么与计算机和手册计算有所不同?

您尝试将造成一些数据丢失的float输入CC_1。就像我们无法将大物体存储在小袋中一样。

#include <stdio.h>
#define s scanf
#define p printf
int main (){
    int P;
    float T,R,I,A;
    p("PRINCIPAL: ");
    s("%i",&P);
    p("RATE: ");
    s("%f",&R);
    p("TERM: ");
    s("%f",&T);
    R = R/100;
    I = P*R*T;
    A = P+I;
    p("nI: %fnMA: %f",I,A);
    return 0;
}

您的问题与打字有关,请研究此主题,请看一下,在这里简单的文本中可以解释一下。但是我可以告诉你,从浮点到int铸造时,您可能会丢失信息,因为C中这两种原始类型的最大长度不同。您可以看到Changin int变量再次浮动并再次运行自己的程序,例如:

#include <stdio.h>
#define s scanf
#define p printf
void main (){
    float P,I,A;
    float T,R;
    p("PRINCIPAL: ");
    s("%f",&P);
    p("RATE: ");
    s("%f",&R);
    p("TERM: ");
    s("%f",&T);
    R = R/100;
    I = P*R*T;
    A = P+I;
    p("I: %fnMA: %f",I,A);
    getch();
}

这将产生您所需的输出。

您的问题在于将float转换为int。如果您以float输入的所有内容来执行程序,则会获得预期的结果:

#include <stdio.h>
#define s scanf
#define p printf
int main (){
    float P,I,A;
    float T,R;
    p("PRINCIPAL: ");
    s("%f",&P);
    p("RATE: ");
    s("%f",&R);
    p("TERM: ");
    s("%f",&T);
    R = R/100;
    I = P*R*T;
    A = P+I;
    p("I: %fnMA: %f",I,A);
    return 0;
}

输出:

PRINCIPAL: 1200
RATE: 3
TERM: 1
I: 36.000000
MA: 1236.000000

但是,当您将float值转换为int时,您只需将整数零件即可;小数点右侧的所有内容都被删除了。因此,即使我这样做时它的打印为36.000000,也可能由于浮点数数学的不精确性而可能出现35.9999999之类的价值,并且仅显示为36.000000,因此显示为36.000000。在这种情况下,您只会得到35,然后丢失其他所有内容。

要解决您的问题,要么将所有内容作为float留下,要么通过将float s舍入将其转换为int S,例如,使用lroundfmath.h中使用CC_12,即仅施放它们。

相关内容

最新更新