我是C语言的初学者,并且在hackerrank中遇到问题,遇到一个名为“正负”的问题,该问题未获得预期的输出。
在计算中我对浮动数据类型感到困惑。这是问题所在。我们必须给数字数组包含正,负和零值,并且输入和输出应如下所示。
6
-4 3 -9 0 4 1
样本输出
0.500000
0.333333
0.166667
数组中有3个正数,2个负数和1个零。 发生的比例为正:3/6 = 0.50000,负:2/6 = 0.33333和零:1/6 = 0.166667 ..
这是我的代码未获得预期的输出。
int main()
{
int n,i,p,q,r,a[50],pos,res,zer,neg;
double posres,negres,zerres;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
if(a[i]>0)
++p;
else if(a[i]<0)
++q;
else if(a[i]=0)
++r;
}
posres=p/n;
negres=q/n;
zerres=r/n;
printf("%lf\n%lf\n%lf\n",posres,negres,zerres);
return 0;
}
但是我的输出是:
699317.000000
162833139.000000
0.000000
我哪里出错了?
答案 0 :(得分:3)
用a[i]=0
代替0
,将a[i]
的值分配给a[i]==0
,这是一个比较。并在循环之前将p
,q
和r
初始化为0
。否则,您将获得不确定的行为,例如您看到的垃圾。
答案 1 :(得分:0)
int main()
{
int n = 0;
int i = 0;
double zero_count = 0;
double pos_count = 0;
double neg_count = 0;
double num = 0;
scanf("%d", &n);
for(i = 0; i < n; i++) {
scanf("%d", &num);
if(num > 0) {
++pos_count;
} else if(num < 0) {
++neg_count;
} else if(num == 0) {
++zero_count;
}
}
printf("%lf\n%lf\n%lf\n",(pos_count/n), (neg_count/n), (zero_count/n));
return 0;
}
即使循环内只有一行代码,也应使用花括号将循环换行。处理大量代码时,您将省去很多麻烦。
在变量和句法边界之间插入空格。编译器会理解您所写的内容,而人类却很难阅读。