c中的时间限制和错误输出

时间:2014-09-13 17:39:04

标签: c

我是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

1 个答案:

答案 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]);
}

您的代码中还存在其他问题。

  1. 如果t> 3,该怎么办?您已将k数组初始化为3.如果t> 3,则可能存在分段错误,如果您幸运的话。

  2. 在avg函数中,您已完成av=sum/2.0;但av的类型为int,它将始终为您提供int值并截断小数部分。

  3. 解决方案:

    1. 如果您总是要输入3对数字,请不要输入t。或者在输入t后执行

      double * k = malloc(t * sizeof(double));

    2. 而不是k[3];

      1. avg()函数的返回类型,av和数组k的类型更改为double。