C语言中,寻找两个数组中相同的元素的个数,与元素

#include<stdio.h>
int search(int *apt,int n,int key)
{
int *p;
for(p=apt;p<apt+n;p++) //寻找特定元素
if(*p==key)
return p-apt;
return -1;
}

int b[]={90,80,70,60,50,40,772,294,1065,184};

int a[]={90,80,70,60,50,40,30,20,10,9,8,7,6,5,42,40,50,1,2,3}; //在这里定义的好处是,可以在任意函数中通用

mian()
{
int i;
int c[sizeof(b)/sizeof(b[0])];
int q=0;
int d;
printf("The elements of array a is:\n"); //输出a数组中的元素
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
printf(" %d",a[i]);
}
printf("\n");
printf("The elements of array b is:"); //输出b数组中的元素
for(i=0;i<sizeof(b)/sizeof(b[0]);i++)
{
printf(" %d",b[i]);
}
printf("\n");
for(i=0;i<sizeof(b)/sizeof(b[0]);i++) //对b中数组的每一个数字都和a中的数字对比一次
{
int key;
key=b[i]; //关键字是b数组中第i个数字

d=search(a,sizeof(a)/sizeof(a[0]),key); //寻找关键字
if(d>-1)
{
q=q+1;
c[q]=d;
}
}
printf("The number is:\n",q);
for(i=0;i<=q;i++)
printf(" %d",c[i]);
return 0;

}
编译的时候没错,但是执行的时候错了。

int search(int *apt,int n,int key)

 int *p;
 for(p=apt;p<apt+n;p++)            //寻找特定元素  
  if(*p==key)   
   return *p;   //直接返回数值
 return -1; 
}
int b[]={90,80,70,60,50,40,772,294,1065,184};  //10
int a[]={90,80,70,60,50,40,30,20,10,9,8,7,6,5,42,40,50,1,2,3};        //在这里定义的好处是,可以在任意函数中通用   20
int _tmain(int argc, _TCHAR* argv[])
{
 int i; int c[sizeof(b)/sizeof(b[0])];
 int q=0;
 int d;
 printf("The elements of array a is:\n"); //输出a数组中的元素 
 for(i=0;i<sizeof(a)/sizeof(a[0]);i++) 
 {  
  printf(" %d",a[i]);  
 }
 printf("\n"); 
 printf("The elements of array b is: \n");    //输出b数组中的元素 
 
 for(i=0;i<sizeof(b)/sizeof(b[0]);i++)   
 { 
  printf(" %d",b[i]); 
 } 
 
 printf("\n");
 for(i=0;i<sizeof(b)/sizeof(b[0]);i++)    //对b中数组的每一个数字都和a中的数字对比一次
 {  
  int key; 
  key=b[i];                            //关键字是b数组中第i个数字   
  d=search(a,sizeof(a)/sizeof(a[0]),key);   //寻找关键字  
  if(d>-1)
  {   
      
   c[q]=d; 
   q=q+1; //换个位置
   
  } 
 } 
 printf("The number is:\n",q); 
 for(i=0;i<q;i++)   //这里不打等号
  printf(" %d",c[i]); return 0;}

追问

我直接把你的复制过去加上了include但是出现错误

追答

int _tmain(int argc, _TCHAR* argv[])
- -主函数你可以改的,我这个是VS的,你随便换个就可以了,
运行结果图都截给你看了,难道我还能故意用错了来造假哇!

int main() 或者 void main ()

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-18

你把mian()函数写错了,你写成mian了,应该改成int main().

改好后的效果如图:

第2个回答  2013-07-18
if(d>-1)    
{
    q=q+1;
    c[q]=d;            // 这里修改成a[d]
}

第3个回答  2013-07-18
#include<stdio.h>
int search(int *apt,int n,int key)
{
int *p;
for(p=apt;p<apt+n;p++)            //寻找特定元素
if(*p==key)
return p-apt;
return -1;
}

int b[]={90,80,70,60,50,40,772,294,1065,184};

int a[]={90,80,70,60,50,40,30,20,10,9,8,7,6,5,42,40,50,1,2,3};        //在这里定义的好处是,可以在任意函数中通用

main()    //main拼错了
{
int i;
int c[sizeof(b)/sizeof(b[0])];
int q=0;
int d;
printf("The elements of array a is:\n"); //输出a数组中的元素
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
printf(" %d",a[i]);
}
printf("\n");
printf("The elements of array b is:");    //输出b数组中的元素
for(i=0;i<sizeof(b)/sizeof(b[0]);i++)
{
printf(" %d",b[i]);
}
printf("\n");
for(i=0;i<sizeof(b)/sizeof(b[0]);i++)    //对b中数组的每一个数字都和a中的数字对比一次
{
int key;
key=b[i];                            //关键字是b数组中第i个数字

d=search(a,sizeof(a)/sizeof(a[0]),key);   //寻找关键字
if(d>-1)
{
c[q]=key;    //这里要保存数组元素的值key,而不是数组下标d
q=q+1;    //这句话应该放在后面,因为数组下标从0开始
}
}
printf("The number is:\n",q);
for(i=0;i<q;i++)    //这里i的取值应该为i<q
printf(" %d",c[i]);
return 0;

}

本回答被提问者采纳
第4个回答  2013-07-18
mian() --> int main()
相似回答