#include <stdio.h>
#include <math.h>
int find(int a[],int n,float x)
{
int i,j=0,min=fabs(a[0]-x);
for(i=0;i<n;i++)
if(min>fabs(a[i]-x))
{min=fabs(a[i]-x);j=i;}
return a[j];
}
void main()
{
int a[] = {23,40,8,32,18,2,9,16,27};
int i,k,n = sizeof(a)/sizeof(int);
float x=20.3;
printf("Array a:\n");
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
k=find(a,n,x);
printf("It is %d\n",k);
getch();
}
麻烦帮看下这个C程序
答案:1 悬赏:20
解决时间 2021-04-27 23:51
- 提问者网友:冷场帝
- 2021-04-27 19:34
最佳答案
- 二级知识专家网友:滚出爷的世界
- 2021-04-27 20:51
程序的输出结果为:18
思路是这样的:这是一个一维数组名作实参的问题,也就是函数的调用问题,即通过实参传递给形参。函数find(a,n,x),也就是int a[]=a;int n=n;因为sizeof(a)/sizeof(int); 是计算数组元素的个数并赋给n, 所以int n=n=9;float x=20.3;
现在回到程序开头的形参,a[0]=23,所以,a[0]-x=2.7;所以,min=fabs(a[0]-x)=2.7;数组int a[]={23,40,8,32,18,2,9,16,27}中,只有a[4]是符合if(min>fabs(a[i]-x))的,即a[4]=18;因此执行语句{min=fabs(a[i]-x);j=i;},即min=18-20.3=-2.3,求绝对值等于2.3,所以,j=i=4;最后,执行return a[j];即return a[4]=18。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息