float 和 double 数据类型在 gcc 编译器中工作吗?

Does float and double datatype work in gcc compilers?

我已经为以下程序编写了代码,但输出似乎有误。 题: https://www.hackerrank.com/challenges/plus-minus

代码:

#include <stdio.h>
int main() {

     int N,num,i,cp=0,cn=0,cz=0;
     double fp,fn,fz;
     scanf("%d",&N);
     for(i=0;i<N;i++)
     {
         scanf("%d",&num);
         if(num>0)
            cp=cp+1;
        else if(num==0)
            cz=cz+1;
        else
            cn=cn+1;
    }
    fp=cp/N;
    fn=cn/N;
    fz=cz/N;
    printf("%lf\n%lf\n%lf",fp,fn,fz);
    return 0;
}

输出结果为:

0.000000
0.000000
0.000000

为了获得正确的结果 cast 这些表达式为 double-

                     like this
fp=cp/N;         //  fp=(double)cp/N;
fn=cn/N;         //  fn=(double)cn/N;
fz=cz/N;         //  fz=(double)cz/N;

Working code

在前面的例子中,如果 cp(or cn or cz) 小于 N 那么由于整数除法你将得到 0(小数部分将被丢弃)。因此 m 这些演员表。

另一种方法是将所有变量用作 double .

您正在进行整数除法,它只会产生整数结果。如果要计算浮点数结果需要进行浮点数除法

int a = 1;
int b = 3;
int c = a / b;

// c 现在是 0 -> 整数除法

double i = 1.0;
double j = 3.0;
double k = i / j;

// k 现在是 0.3333333 -> 浮点除法

说明:

fp=cp/N;
fn=cn/N;
fz=cz/N;

作为整数除法执行。

将您的代码更改为:

 fp=(double)(cp)/(double)(N);
 fn=(double)(cn)/(double)(N);
 fz=(double)(cz)/(double)(N);