各位学员大家好,大家在学习程序设计语言的时候,参数传递会涉及到传值调用和引用调用,另外关于图结构的知识会涉及到有向图和无向图。为了让大家快速掌握这方面的知识点,接下来就带领大家一起来学习一下!
例题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日
作者:昊洋讲师
版权所有,侵权必究
网友评论