这段程序是什么意思,编译器出来的答案是2341,但是没看懂,求大神解答!谢谢

#include<stdio.h>intf(inta[],intm,intb[],intn,intc[]){inti,j,k=0,t;for(i=0;i<m;i++){f... #include <stdio.h>
int f(int a[],int m,int b[],int n,int c[])
{ int i,j,k=0,t;
for(i=0;i<m;i++)
{ for(t=1,j=0;j<n;j++)
if(a[i]==b[j]){ t=0;break; }
if(t)c[k++]=a[i];
}
return k;
}
void main()
{ int x[]={7,2,3,6,5,4,1},y[]={5,10,7,9,8,6},z[10],w,j;
w=f(x,7,y,6,z);
for(j=0;j<w;j++)printf("%d",z[j]);
}
展开
 我来答
罚你今晚没饭吃
2018-12-27
知道答主
回答量:17
采纳率:0%
帮助的人:3.6万
展开全部
这段代码的意思就是对比两个数组a[]和b[],找出只在a[]中出现的数字(a[]中有而b[]中没
有的数字)。接着我们来走读一下代码:

第一步:
int f(int a[],int m,int b[],int n,int c[])-->定义了一个函数f,
其返回值类型是整型,要调用它的话,要向里面传5个参数,分别是数组a[]、
整型m(定义数组a的长度)、数组b[]、整型n(定义数组b的长度)、数组c[]。

第二步:理解函数f里的逻辑。
int f(int a[],int m,int b[],int n,int c[])

  int i,j,k=0,t;//定义变量并初始化
  //遍历数组,i<m指的循环次数要小于数组长度,因为是从数组下标为0的开始遍历
  for(i=0;i<m;i++)
  { 
   for(t=1,j=0;j<n;j++)
   //注意这层的for循环没打花括号
   //那么这个循环的逻辑判断只能进行到第一个if语句的判断中去
   //若当两个数组所取的当前值相等时,进入判断内部,使t=0,然后跳出内层循环
   //若两个值不等,不进入判断内部,则t还是为1,接着进行下次内层循环
    就是j++操作,若j加到了与n相同的值即不满足j<n,则内层循环结束
    if(a[i]==b[j])
    {
        t=0;break; 
    }
    //接着判断当前t等于1(表示true)还是0(表示false)
    //if(t)意思就是如果t为true,换言之就是如果t=1,则进入判断内部
       将当前内层循环结束后的数组a[i]赋值给c[k++]
    //如果t=0,则不做任何赋值
     //接着就开始进行外层循环(i++),以此类推
    if(t) c[k++]=a[i];
    }
    //当数组遍历完之后就返回k,这里k代表了数组c[]的长度
    return k;
}

第三步:读一下主函数(程序的入口)
void main()

    //定义变量并初始化
    //这里定义的数组x对应函数的形式参数就是数组a(若不清楚什么是形式参数
      请看一下书哟)
    //数组y对应函数f的形式参数就是数组b,数组z对应函数f的形式参数就是数组c
    //整型w对应函数f的形式参数就是k,整型j是这里循环需要的变量
    int x[]={7,2,3,6,5,4,1},y[]={5,10,7,9,8,6},z[10],w,j;
    //这里是在调用函数,将实际参数传进函数中(实际参数与形式参数是相对应的概念)
    //7对应函数f的形式参数就是m,6对应函数f的形式参数就是n
    //当执行完函数f的循环后会返回一个整型数据,用w来接收
  w=f(x,7,y,6,z);
  //遍历数组z,把它内部的值一一取出来并打印
  for(j=0;j<w;j++) printf("%d",z[j]);
}

逻辑理清后我们尝试带值跑一遍:
1.当程序启动后,进入主函数,变量定义并初始化。
2.调用函数f,此时a[]=x[]={7,2,3,6,5,4,1},m=7,b[]=y[]={5,10,7,9,8,6},n=6,数组z长度
为10,里面还没存放值,与其对应的数组c也是如此。
3.进入函数f,初始化变量并赋值,接着开始进行循环,i=0,进入外层循环;
接着t=0,j=0,进入内层循环,此时a[0]=7,b[0]=5,显然不相等,那么不做任何操作,直接
进行下一次内部循环,j++后,j=1,此时数组a还是取的a[0],数组b则是取的b[1]=10,同样不
等,继续循环,j++,还是取的a[0]与此时的b[2]=7做比较,他们相等,跳出内层循环(break跳
出离自己最近循环层)
4.进入外层循环,i++,i=1,此时a[1]=2,接着进入内层循环,数组b又从下标为0的位置开始取,
开始作比较,以此类推...在这次循环中,把b中的所有数一一取出与a[1]做比较都不同,则t
一直等于1,当内层循环结束后,满足if(t),进入判断内部,c[k++]=a[i]等同于c[k]=a[i],
然后k=k+1,在这里就是c[0]=a[1]=2,k=0+1=1
5.根据这个逻辑,进行到最后就得到c[0]=2,c[1]=3,c[2]=4,c[3]=1,k=4,整合一下就是
数组c[]={2,3,4,1},其长度为4
6.返回k,回到主函数,此时w=k=4,然后开始循环遍历数组c,也就是这里对应的数组z,一个
一个从数组中取出并打印,最后就得到了答案:2341
以上。望采纳~
上海巴鲁图工程机械科技有限公司_
2022-05-15 广告
光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。光电编码器每转输出60(我们用老板没有说)个脉冲,五线制。其中两根为电源线,三根为脉冲线(A相、B相、Z)。电源的工作电压为 (+5~+24V)直流电源。光... 点击进入详情页
本回答由上海巴鲁图工程机械科技有限公司_提供
末日尘沙
2018-12-27 · 超过47用户采纳过TA的回答
知道小有建树答主
回答量:146
采纳率:64%
帮助的人:14.4万
展开全部
这段程序的意思是:提取X数组里有,而Y数组里没有的数
提取方法在函数f中:用两个for循环比较X与Y之间相同的数;
如果有数相同,那么标志位t=0,直接退出小循环;
如果Y中没有相同的数,那么把数放入一个新数组中;
最后循环输出所以Y中没有的X数。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
拥抱Linux
2018-12-27 · 知道合伙人教育行家
拥抱Linux
知道合伙人教育行家
采纳数:418 获赞数:2163
大学的校级奖学金,机械行业十年工作经验

向TA提问 私信TA
展开全部
主要是 函数f, 具体作用是 【查找输入参数中的前一个数组中没有出现在后一个数组的元素,依次存储在新的数组中,并返回未出现元素的总个数】。
main函数就为 f函数提供输入参数,并把未出现的元素再一一打印出来。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式