中易网

麻烦帮看下这个C程序

答案:1  悬赏:20  
解决时间 2021-04-27 23:51
  • 提问者网友:冷场帝
  • 2021-04-27 19:34
#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();
}
最佳答案
  • 二级知识专家网友:滚出爷的世界
  • 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。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息