我是编码的初学者,我正在尝试创建一个我输入的程序' n'数组中的元素数量,并找出数字的百分比是正数,负数和零。输出不是我所期待的全部是零。在我输入n = 3时,所以百分比应该是当我输入一个正数,一个负数和一个零时,为.3,.3,.3。
#include <math.h>
#include <stdio.h>
int main()
{
int n;
float per1, per2, per3;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
int sum1 = 0;
int sum2 = 0;
int sum3 = 0;
for (int i = 0; i <= n - 1; i++)
{
if (arr[i] < 0)
{
int sum1 = sum1 + 1;
}
if (arr[i] > 0)
{
sum2 = sum2 + 1;
}
else
{
sum3 = sum3 + 1;
}
}
per1 = sum1 / n;
per2 = sum2 / n;
per3 = sum3 / n;
printf("%.6f\n%.6f\n%.6f\n", per1, per2, per3);
return 0;
}
输出
3
1
-2
0
0.000000
0.000000
0.000000
最后三个数字应该是.3,.3,.3但是它给出了零。
答案 0 :(得分:0)
像这样进行浮点运算
per1=sum1/(1.0*n);
per2=sum2/(1.0*n);
per3=sum3/(1.0*n);
答案 1 :(得分:0)
你如何计算某些价值的百分比?您的答案不应该是1,1,1,而是33%,33%,33%的输入。所以你的代码应该代替这个
per1=sum1/n;
是这样的
per1=sum1*100.0/n;
你也错了你的条件。 else部分仅与第二个if相关联。所以每个小于或等于0的数字都计入sum3,这不是你可能想要的。所以你的
if (arr[i] > 0)
应该是
else if (arr[i] > 0)
最后一件事。在这一行上,您将创建全新的变量sum1,它将仅存在于if语句的末尾,因此不会出现在最终计算中。我会留给你如何解决它。
int sum1 = sum1 + 1;
我不知道您用于开发的环境,但您应该从一开始就学习如何使用调试器。然后,您可以查看代码流,以查看发生了什么以及何时出错。通过这样的简单程序,它非常简单。如果您使用的是Visual Studio,则它们集成了非常好的调试器。只需设置断点并运行Debug。如果您使用的是Linux,那么对于初学者来说,gdb可能会非常粗糙,但也有像ddd这样的图形工具。
答案 2 :(得分:0)
由于sum1
和n
都是整数,因此sum1/n
的结果也是整数。这意味着,如果sum1
小于n
,则sum1 / n
的结果为0.
要获得浮点结果,至少有一个操作数可以是float
或double
。我建议您将sum
变量声明为double
而不是int
。
答案 3 :(得分:0)
我认为这段代码更好一些。我使用了malloc()
函数而不是&#34; scat&#34;声明int arr[n]
(在这种情况下,我更喜欢旧的C风格)。
人们已经说过与变量类型相关的问题以及解决问题的一些方法。这里的另一种方式与你刚才在答案中看到的其他方式类似。
#include <math.h>
#include <stdio.h>
#include <malloc.h>
#define STR_ORD_SUFFIX(i) (i>3)?"th":(i==0)?"--":(i==1)?"st":(i==2)?"nd":"rd"
int main()
{
int n, *arr=NULL;
float per1,per2,per3;
int sum1=0;
int sum2=0;
int sum3=0;
printf("How many number you have to insert? ");
scanf("%d",&n);
if (n<=0)
return 1;
arr=malloc(n*sizeof(*arr));
if (arr==NULL)
return 2;
printf("Insert %d number%c\n",n,(n!=1)?'s':'\x0');
for(int i = 0; i < n; i++){
printf("%4d%s: ",i+1,STR_ORD_SUFFIX(i+1));
scanf("%d",&arr[i]);
}
for(int i=0;i<=n-1;i++)
{
if(arr[i]<0){
sum1=sum1+1;
} else if(arr[i]>0){
sum2=sum2+1;
} else {
sum3=sum3+1;
}
}
per1=sum1; per1/=n; per1*=100.0;
per2=sum2; per2/=n; per2*=100.0;
per3=sum3; per3/=n; per3*=100.0;
printf("\n<0 %.6f%%\n>0 %.6f%%\n=0 %.6f%%\n",per1,per2,per3);
if (arr!=NULL)
free(arr);
return 0;
}