我是C的初学者,我已经制作了这段代码,但它提供了无限的输出。我想取两个数字之间的平均值。应在开始时询问所有三个范围的输入,并在新行中显示输出。请帮我纠正错误。
这是我制作的节目。时间限制是3秒。
#include<stdio.h>
#include<math.h>
int avg(int,int);
int main()
{
int i,t,f,s;
int k[3];
scanf("%d\n",&t);
for(i=0;i<t;i++)
{
scanf("%d %d",&f,&s);
k[i]=avg(f,s);
}
for(i=0;i=3;i++)
{
printf("%d",k[i]);
}
return 0;
}
int avg(int fst,int sst)
{
int sum=0;
int av;
sum=fst+sst;
av=sum/2.0;
///printf("%d",(int)ceil(av));
return av;
}
输入/输出应该像..
input:
3
1 10
1000 2000
200 350
output:
6
1500
375
答案 0 :(得分:0)
在您的打印循环中,您已完成
for(i=0;i=3;i++) <------Problem in condition
{
printf("%d",k[i]);
}
i=3
的Instewad,您必须i<=3
。在每次迭代中,您都要指定i = 3.
for(i=0;i<3;i++) <------Correct condition
{
printf("%d",k[i]);
}
您的代码中还存在其他问题。
如果t> 3,该怎么办?您已将k数组初始化为3.如果t> 3,则可能存在分段错误,如果您幸运的话。
在avg函数中,您已完成av=sum/2.0;
但av的类型为int
,它将始终为您提供int值并截断小数部分。
解决方案:
如果您总是要输入3对数字,请不要输入t
。或者在输入t
后执行
double * k = malloc(t * sizeof(double));
而不是k[3];
avg()
函数的返回类型,av
和数组k
的类型更改为double。