C语言指针问题165

来源:百度知道 编辑:UC知道 时间:2024/09/22 10:05:05
已知存放在数组a中的数不相重复,在数组a中查找与值x相等的位置。若找到,输出该值和该值在数组a中的位置;若没找到,输出相应的信息。
问一下程序中右边是什么意思?
#include"stdio.h"
#define NUM 20
main()
{
int a[NUM],x,n,p;
n=input(a);
printf("enter the number to search:x=");
scanf("%d",&x);
p=search(a,x,n);
if(p!=-1) printf("%d index is:%d\n",x,p);
else printf("%d cannot be found!\n",x);
}

int input (int *a)
{
int i,n;
printf("Enter number to elements,0<n<d",NUM);
scanf("%d",&n); //这里是什么?n是什么?
for(i=0;i<n;i++)
scanf("%d",a+i);
return n;
}

search(int *a,int x,int n)
{
int i,p;
i=0;
a[n]=x; //这行是什么作用?
while(x!=a[i]) i++;
if(i==n) p=-1; //这行i==n有什么作用?
else p=i;
return p;
}

1:scanf("%d",&n);是要你输入一共有多少个数;
n为输入输入数的总数;
2:a[n]=x;是保证数组中有要查询的数,就把数组第n+1为置为要查询的数了,要不然循环while(x!=a[i])i++;可能无法结束,因为要是查询的数不存在于数组中,x!=a[i]永远达成;
3:if(i==n) p=-1;是判定循环结束于n+1处,即循环结束在上述的a[n]=x处,可见要查询的数不存在于数组中,这样返回-1,否则i必然<n,i也就是要查询的位置了,返回i;
查询这里还可以这样写:
for(i=0;i<n;i++)if(a[i]==x)return(i);
return(-1);