有以下程序#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.2B.3C.4D.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。
更多“有以下程序#include&lt;stdi0.h&gt;void fun(int n,int*p)( int f1,f2;if(n==1|| n==2)*p=1;else ”相关问题
  • 第1题:

    以下程序的输出结果是()。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是递归的终止条件。然后利用已知值逐步递推求出未知值。注意:通过传送地址值,在被调用函数中直接改变调用函数中的变量的值。

  • 第2题:

    以下程序的输出结果是

    #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是递归的终止条件,然后利用已知值逐步递推求出未知值。 通过传送地址值,在被调用函数中直接改变调用函数中的变量的值。

  • 第3题:

    1、以下程序的输出结果是():void fun (int n,int *s) { int f1,f2; if (n==1||n==2) *s=1; else { fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2; } } int main() { int x; fun(6,&x); pirntf("%d\n",x); return 0; }

    A.4

    B.6

    C.8

    D.12


    C 本题用了函数调用,fun中if语句成立则进行i,j的交换,用到主函势中则为把下标为0、3,1、2互换,因此,当执行完后X的数组为8,1,6,2,故选择C选项。

  • 第4题:

    有以下程序: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


    正确答案:A
    解析: 本题考查的重点是理解递归函数。fun()为递归函数,递归结束条件时n为1或2,从而fun(3,&s)得fun(2,&s)+fun(1,&s)=1+1=2,因此选项A是正确的。

  • 第5题:

    有以下程序

    #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