#include<stdio.h> #include<conio.h> double fun(int x[],int n,int y) { int i,m=0; int sum=0; for(i=0;i<=n;) { if(x[i]>=y) { sum+=x[i]; } } m=y; if(m>0) return sum/m; else return 0; } int main() { int a[10]={11,14,26,9,0,-5,7,10,-2,19}; int k; double result; printf("input a digital:"); scanf("%d",&k); result=fun(a,10,k); printf("result=%d\n",result); return 0; }这个代码有什么问题吗
时间: 2024-04-12 13:26:57 浏览: 110
这段代码存在几个问题:
1. 在函数`fun`中,for循环的终止条件应为`i<n`,而不是`i<=n`。因为数组的下标从0开始,最大下标为`n-1`。
2. 在`fun`函数中,没有对变量`i`进行递增操作,会导致循环陷入无限循环的状态。
3. 在`fun`函数中,没有对变量`m`进行更新操作,因此无论`m`的值是多少,都会返回`sum/m`的结果。
4. 在主函数中,应该使用`%lf`作为格式化字符串来打印`double`类型的结果,而不是`%d`。
以下是修复后的代码:
```c
#include<stdio.h>
#include<conio.h>
double fun(int x[], int n, int y)
{
int i, m = 0;
int sum = 0;
for (i = 0; i < n; i++)
{
if (x[i] >= y)
{
sum += x[i];
m++;
}
}
if (m > 0)
return sum / (double)m;
else
return 0;
}
int main()
{
int a[10] = { 11,14,26,9,0,-5,7,10,-2,19 };
int k;
double result;
printf("input a digital:");
scanf("%d", &k);
result = fun(a, 10, k);
printf("result=%.2lf\n", result);
return 0;
}
```
修复后的代码中,我添加了对变量`i`的递增操作,并且在`fun`函数中对变量`m`进行了更新操作,同时在主函数中使用了正确的格式化字符串来打印`double`类型的结果。
阅读全文