重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
对于数组的查询,其实就是对数组中数据做一个遍历。
创新互联成立于2013年,先为公安等服务建站,公安等地企业,进行企业商务咨询服务。为公安企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
最常用的方法就是通过循环对数组中的元素逐个取值,并与参考值(要查询的值)做比对,并处理结果。
下面是一个简单的对一维数组进行查询的样例。
函数功能:对输入的数组元素进行查询,打印符合查询值的元素位置,并返回查询到的元素总数。
函数名:array_query
函数声明: int array_query(int *a, int n, int v);
参数介绍:
a: 输入的数组,类型为整型指针,表示整型数组。可以根据实际需要进行调整。
n:数组中现有元素的个数。
v:要查询的元素值。
返回值:
整型,返回查询到的元素个数。如果出错返回-1。
实现代码:
int array_query(int *a, int n, int v)
{
int i,ret;
if(a == NULL || n = 0) return -1; //出错处理
for(ret = i = 0; i n; i ++)
{
if(a[i] == n)
{
printf("%d\n", i);//找到元素,打印下标,并累计统计值
ret ++;
}
}
return ret;//返回总数。
}
#includestdio.h
int main()
{
int a[5];
int i,max,min;
printf("input number:\n");
for(i=0;i5;i++)
scanf("%d",a[i]);
max=a[0];
min=a[0];
for(i=0;i5;i++){
if(a[i]max)
max=a[i];
}
for(i=0;i5;i++){
if(a[i]min)
min=a[i];
}
for(i=0;i5;i++){
printf("%d",a[i]);
printf(" ");
}
printf("\n");
printf("最大值为%d\n",max);
printf("最小值为%d\n",min);
return 0;
}
从题目的叙述来看,这个函数的功能就是这一个包含有len个元素的num数组中查找是否存在值为key的元素。可以在找到后返回该元素的下标,否则返回-1。
这个函数的函数体可以这么写:
int i;
for(i=0;ilen;i++)
if(num[i]==key)return i;
return -1;
然后在主函数中的查找语句可以这么写:
if(searchNum(key,num,len)!=-1)
printf("找到!\n");
#define IntSize sizeof(int)
#define StructSize sizeof(struct tagresult)
#includestdio.h
#includestdlib.h
#includestring.h
typedef int *ptint;
typedef struct tagresult
{
int v;
char bl;
}*ptresult;
int lessthan(const void *v1,const void *v2)
{
int i1=*((ptint)v1),i2=*((ptint)v2);
if(i1==i2)
return 0;
else if(i1i2)
return 1;
else
return -1;
}
int main()
{
int c,n,capacity=128,rlen=0,dlen;
ptint data=(ptint)calloc(capacity,IntSize);
ptresult result;
scanf("%d",n);
result=(ptresult)calloc(n,StructSize);
memset(result,0,n*StructSize);
while(n--0)
{
scanf("%d",c);
dlen=0;
for(;c0;c--)
{
if(dlen+1=capacity)
{
capacity*=2;
data=(ptint)realloc(data,capacity);
}
scanf("%d",data+dlen++);
}
scanf("%d",c);
//直接调用库函数qsort进行快速排序,就不自己写快速排序算法函数了
qsort(data,dlen,IntSize,lessthan);
if(c=dlen)
{
(*(result+rlen)).v=*(data+c-1);
(*(result+rlen)).bl=1;
}
rlen++;
}
for(n=0;nrlen;n++)
{
if(1==(*(result+n)).bl)
printf("Case #%d:%d\n",n+1,(*(result+n)).v);
else
printf("Case #%d:-1\n",n+1);
}
free(data);
free(result);
return 0;
}