美文网首页
软件评测师写作专栏之参数传递的方式和图结构14

软件评测师写作专栏之参数传递的方式和图结构14

作者: 昊洋_写作的匠心 | 来源:发表于2020-08-29 13:04 被阅读0次

    各位学员大家好,大家在学习程序设计语言的时候,参数传递会涉及到传值调用和引用调用,另外关于图结构的知识会涉及到有向图和无向图。为了让大家快速掌握这方面的知识点,接下来就带领大家一起来学习一下!

    例题1:函数main()、f()的定义如下所示。调用函数f()时,第一个参数采用传值方式,第二个参数采用传引用方式,main()执行后输出的值为(  )?

    A、2    

    B、4    

    C、5    

    D、8

    【昊洋详解】:本题考查程序设计语言中传值方式和引用方式的基础知识。

    传值调用:在按值调用时,过程的形式参数取得的是实际参数的值。在这种情况下,形式参数实际上是过程中的局部变量,其值的改变不会导致调用点所传送的实际参数的值发生改变,也就是数据的传送是单向的。

    引用调用:也叫作传址调用,在按引用调用时,过程的形式参数取得的是实际参数所在的单元地址。在过程中,对该形式参数的引用相当于对实际参数所在的存储单元的地址引用。任何改变形式参数值的操作会反映在该存储单元中,也就是反映在实际参数中,因此数据的传送是双向的。

    在题目中,main( )函数中,调用了函数f(),需要注意的是,第一个参数是1,采用传值方式,传递给了f()函数中的x,第二个参数采用的是传引用方式,x的地址传递给了f()函数中的a。此时一定不要混淆了两个函数中的“x”,他们是不一样的,只不过变量的名字相同而已。就好比两个村子里,都有一个叫做李明的小男孩,我们不能说是同一个人,他们就是局部变量的名字,只在本函数体内有效。

    因此在f(int

    x, int &a)函数中,x=2*a+1=2*2+1=5; a=x+3=5+3=8, 由于a是引用调用,所以a的值改变,对应main()函数中x也会改变,所以返回后x在main()函数中的值为8。

    故该题目的正确答案为D。

     

    例题2:对于下面的有向图,其邻接矩阵是一个( 1 )的矩阵。采用邻接链表存储时,顶点0的表结点个数为 2,顶点3的表结点个数为0,顶点1的表结点个数为(2 )

    1、A、3×4   

    B、4×3      

    C、6×6       

    D、7×7

    2、A、0      

    B、1       

    C、2         

    D、3

    【昊洋详解】:本题考查数据结构中图结构的基础知识。

    图结构:图G是由集合V和E构成的二元组,记作G=(V, E), 其中,V是图中顶点的非空有限集合,E是图中边的有限集合。从数据结构的逻辑关系角度来看,图中任意一个顶点都有可能与其他顶点有关系,而图中所有顶点都有可能与某一顶点有关系。在图中,数据元素用顶点表示,数据元素之间的关系用边表示。

    有向图:若图中每条边都是有方向的,那么顶点之间的关系用表示,它说明从vi到vj有一条有向边(也称为弧)。vi是有向边的起点,称为弧尾; vj是有向边的终点,称为弧头。所有边都有方向的图称为有向图。

    无向图:若图中的每条边都是无方向的,顶点vi和vj之间的边用(vi, vj)表示。因此, 在有向图中与< vj,vi>分别表示两条边,而在无向图中(vi, vj)与(vj, vi )表示的是同一条边。

    邻接矩阵:表示顶点之间相邻关系的矩阵。设G=(V,E)是一个图,其中V={v1,v2,…,vn}。用邻接矩阵法表示有向图共需要n^2个空间,由于无向图的邻接矩阵一定具有对称关系,所以扣除对角线为零外,仅需要存储上三角形或下三角形的数据即可,因此仅需要n(n-1)/2个空间。

    因此有向图有7个结点,则是一个7×7 的矩阵。

    度、出度和入度:顶点v的度是指关联于该顶点的边的数目。若G为有向图,顶点的度表示该顶点的入度和出度之和。顶点的入度是以该顶点为终点的有向边的数目,而顶点的出度指以该顶点为起点的有向边的数目。题目中的顶点表结点个数指的就是有向图该顶点的出度,在图示中,指的就是指向其他顶点的边的个数,例如顶点0指向其他顶点的边为2条,所以表结点个数为 2,顶点3指向其他顶点的边为0条,所以表结点个数为0,因此顶点1分别可以指向顶点2和5共计2条边,所以表的结点个数为2。

    综上所述,第一空的正确答案为:D,第二空的正确答案为:C。

    巩固练习题

    (1)函数f( ),g( )的定义如图所示,已知调用f( )时传递给其形参x的值是10,若以传值方式调用g( ),刚函数f( )的返回值为( )。

    A、10   

    B、15  

    C、25   

    D、30

    (2)已知函数f( ),g( )的定义如下所示,调用函数f( )时传递给形参x的值是5,若g(a)采用引用调用方式传递参数,则函数f( )的返回值为(1 );若g(a)采用传值调用的方式传递参数,则函数f( )的返回值(2 )。其中,表达式“x>>1”的含义是将x的值右移1位,相当于x除以2。

    1、 A、35        

    B、32       

    C、11        

    D、7

    2、 A、35        

    B、32       

    C、11        

    D、7

    (3)调用函数时若是引用调用方式,则是将( 1 )。下面所定义的函数f1为值调用方式,函数f2为引用调用方式。若有表达式x=f1(5),则函数调用执行完成后,该表达式中x获得的值为( 2 )。

    1、 A、实参的值传给形参     

    B、形参的值传给实参  

    C、实参的地址传给形参  

    D、形参的地址传给实参

    2、 A、5  

    B、20  

    C、36  

    D、45

    练习题参考答案

    (1)解析:本题考察传值调用和引用调用的基础知识。

    传值调用:在按值调用时,过程的形式参数取得的是实际参数的值。在这种情况下,形式参数实际上是过程中的局部变量,其值的改变不会导致调用点所传送的实际参数的值发生改变,也就是数据的传送是单向的。

    所以函数f()中x的值传递到函数g()之后,传递回来的值不影响原来在函数f()中x的值,返回的值会赋值给y。即:y=g(x)=10+5=15,而x在函数f()中,还是10,所以最终x+y=10+15=25。

    故该题目的正确答案为:C。

     

    (2)解析:本题考察传值调用和引用调用的基础知识。

    引用调用:在按引用调用时,过程的形式参数取得的是实际参数所在的单元地址。在过程中,对该形式参数的引用相当于对实际参数所在的存储单元的地址引用。任何改变形式参数值的操作会反映在该存储单元中,也就是反映在实际参数中,因此数据的传送是双向的。

    第一空采用的是引用调用方式执行,x=5,右移一位之后a=2(注意不是2.5,偶数变为原来的一半,奇数变为原数减1的一半),函数g中的a的地址赋予了此时局部变量x,最后得出a=2*3=6,即a这时的值被修改为6,最后a+x=6+5=11,故第一空的正确答案为C。

    传值调用:在按值调用时,过程的形式参数取得的是实际参数的值。在这种情况下,形式参数实际上是过程中的局部变量,其值的改变不会导致调用点所传送的实际参数的值发生改变,也就是数据的传送是单向的。

    第二空采用的是传值调用方式执行,x=5,函数g中x=2*3=6,但a这时的值仍然为2,最后a+x=2+5=7,故第二空的正确答案为D。

    (3)解析:本题考查函数引用调用的基础知识。

    传址调用(引用调用):在按引用调用时,过程的形式参数取得的是实际参数所在的单元地址,故第一空的正确答案是C。

    传值调用:在按值调用时,过程的形式参数取得的是实际参数的值。

    由于函数f1采用传值调用,x值在函数f1中不发生变化,值一直是5。函数f2采用传址调用,会对b的值产生影响,其中参数b的地址会传递给函数f2中的参数x,其中&就是获取b的地址的符号。

    在函数f1中,执行b=x-1后b=4;函数f2中x=2*x+1=2*4+1=9,返回后函数f1后,b的值也就变成了9,所以最后b*x=5*9=45,故第二空的正确答案为D。

    作者唯一官方个人微信公众号(昊洋与你一起成长):HYJY20180101

    写于2020年8月29日

    作者:昊洋讲师

    版权所有,侵权必究

    相关文章

      网友评论

          本文标题:软件评测师写作专栏之参数传递的方式和图结构14

          本文链接:https://www.haomeiwen.com/subject/ebndsktx.html