有以下程序:#include<stdio.h>iht fun(iht n,int*p){int f1,f2;if(n==1||,n==2)*p=1;else{fun(n-

题目
有以下程序:includeiht fun(iht n,int*p){int f1,f2;if(n==1||,n==2)*p=1;else{fun(n-

有以下程序: #include<stdio.h> iht fun(iht n,int*p) { int f1,f2; if(n==1||,n==2)*p=1; else { fun(n-1,&f1);fun(n-2,&f2); *p=f1+f2; } } main() { int s; fun(3,&s); printf("%d\n",s); } 程序的运行结果是______。

A.2

B.3

C.4

D.5

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

有以下程序

#include<stdio.h>

void fun(int n,int *p)

{

int f1,f2;

if(n==1||n==2) *p=1;

else

{

fun(n-1,&f1); fun(n-2,&f2);

p=f1+f2;

}

}

main()

{

int s;

fun(3,&s); printf(“%d\n”,s);

}

程序运行的结果为( )。

A.2

B.3

C.4

D.5


正确答案:A

第2题:

下面程序的运行结果是#include "stdio.h" void fun(int k,int *p) { int a,b; if(k==1|| k==2) *p=1; else { fun(k-1,&a); fun(k-2,&b); *p=a+b; } }main(){ int x; fun(6,&x); printf("%d\n",x);}


正确答案:8
本题主要考查函数的递归调用。在本题中,程序首先定义了一个无返回类型的fun函数,该函数带有一个整型变量的形参和一个指针型的变量形参。从函数体中我们可以看出,该递归函数的出口是形参k的值等于1或2,如果运行到函数出口,则指针变量形参p的值等1。
在主函数中,首先定义了一个整型变量x,然后调用fun函数,传递的实参分别为6和变量x的地址,然后程序运行fun函数,在fun函数中,首先定义了两个整型变量a和b,然后判断形参变量k的值是否到达函数出口,这时,k的值为6,没有到达出口,然后程序分别递归执行fun(5,&a)和fun(4,&b)。从程序中可以看出,p的值为分别调用两个函数的p值的和。
首先执行fun(5,&a)时,k=5,没有到达出口,又进行一次递归,分别执行fun(4,&a)和fun(3,&b),由于都没达到出口,分别执行fun(3,&a)和fun(2,&b),fun(2,&a)和fun(1,&b),由于fun(2,&a)和fun(1,&b)返回的p值都为1,那么fun(3,&a)返回p的值为2,fun(4,&a)返回的p值就等于fun(3,&a)和fun(2,&b)之和,为3,同理可以得出fun(5,&a)返回的p值为5,fun(6,&a)返回的p值为8。因此,最后题目要求输出的结果为8。

第3题:

以下程序的输出结果是()。includeint fun(int n,int *s){ int f1,f2;if(n==0||n==1)*s=

以下程序的输出结果是( )。 #include<stdio.h> int fun(int n,int *s) { int f1,f2; if(n==0||n==1) *s=1; else { fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2; } } void main() { int x; fun(6,&x); printf("\n%d" ,x);}

A.7

B.13

C.9

D.10


正确答案:B
解析:n=0或n=1是递归的终止条件。然后利用已知值逐步递推求出未知值。注意:通过传送地址值,在被调用函数中直接改变调用函数中的变量的值。

第4题:

有以下程序 include void fun(int n, int *p) { int f1,t2; if(n==1 |

有以下程序 #include <stdio.h> void fun(int n, int *p) { int f1,t2; if(n==1 ||n==2) *p=1; else { fun(n-1,&f1); fun(n-2,&f2); *p=f1+f2; } } main() { int s; fun(3,&s); printf("%d\n", s ); }

A.2

B.3

C.4

D.5


正确答案:A
解析:在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。本题中的fun()函数直接调用了自身,所以它是一个递归函数。fun()函数中,当形参n为1或2时,让形参p所指内容为1。从这里可以看出形参p的用途是输出一个整数,所以我们不妨记作fun(1)=1、 fun(2)=1。如果是其他情况,那么输出结果*p的内容为f(n)=f(n-1)+f(n-2)。由此可见, fun()函数的作用是求斐波纳契数列第n项的值(斐波纳契数列第1和2项的值为1,以后各项分别为前两项之和:1、1、2、3、5、8、13……)。主函数中通过fun()函数,求第3项值;所以输出结果为2,故应该选择A。

第5题:

有以下程序 #include<stdi0.h> void fun(int n,int*p) ( int f1,f2; if(n==1|| n==2)*p=1; else { fun(n-1,&f1);fun(n-2,&f2); *p=f1+f2; } } main { int s; fun(3,&s);printf("%d",s); } 程序的运行结果是( )。

A.2

B.3

C.4

D.5


正确答案:A
在函数fun中对参数n的值进行判断,如果其值等于1或2,则*p=1,否则,函数fun进行递归调用fun(n.1,&f1);fun(13.2,&f2);*p=n+f2;在主函数调用fun函数时传递给参数n的值为3,fun函数又递归用了两次自身fun(2,&n);fun(1,&f1);所以n和f2的值都为1,通过指针P的引用,变量S的值为2。

第6题:

有以下程序

#include<stdi0.h>

void fun(int n,int*p)

( int f1,f2;

if(n==1|| n==2)*p=1;

else

{ fun(n-1,&f1);fun(n-2,&f2);

*p=f1+f2;

}

}

main

{ int s;

fun(3,&s);printf("%d",s);

}

程序的运行结果是( )。

A.2

B.3

C.4

D.5


正确答案:A
在函数fun中对参数n的值进行判断,如果其值等于1或2,则*p=1,否则,函数fun进行递归调用fun(n.1,&f1);fun(13.2,&f2);*p=n+f2;在主函数调用fun函数时传递给参数n的值为3,fun函数又递归用了两次自身fun(2,&n);fun(1,&f1);所以n和f2的值都为1,通过指针P的引用,变量S的值为2。

第7题:

以下程序的输出结果是includein[fun(int n,int *s){int n,f2;if(n==0‖n==1)*s=1;else{

以下程序的输出结果是 #include<stdio.h> in[fun(int n,int *s) {int n,f2; if(n==0‖n==1) *s=1; else {fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2; }} void main() { int x; fun(6,&x); pfintf("\n%d",x);}

A.7

B.13

C.9

D.10


正确答案:B

第8题:

阅读下面程序,则程序的执行结果为【19】。

#include "stdio.h"

fun(int k,int *p)

{ int a,b;

if(k==1||k==2)

*p=1;

else{ fun(k-1,&a);

fun(k-2,&b);

*p=a+b;

}

}

main()

{ int x;

fun(6, &x);

printf( "%d\n",x);

}


正确答案:
8

第9题:

有以下程序

#include <stdio.h>

void fun(int n,int *p)

{ int f1,f2;

if(n==1||n==2) *p=1;

else

{ fun(n-1,&f1); fun(n-2,&f2);

*p=f1+f2;

}

}

main()

{ int s;

fun(3,&s); printf("%d\n",s);

}

程序的运行结果是

A)2

B)3

C)4

D)5


正确答案:A