计算机二级

有以下程序 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.2B.3C.4D.5

题目
有以下程序 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。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

有以下程序: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是正确的。

第2题:

以下程序的输出结果是#include "stdio.h"int *fun(int *a,int *b){ int m; m=*a; m+=*b-3; return(&m);}main(){ int x=21,y=35,*a=&x,*b=&y; int *k; k=fun(a,b); printf("%d\n",*k);}


正确答案:53
本题考查指针函数的使用。题目给出的程序包括两个部分,一个为指针函数fun,一个为主函数main。主函数main部分给出两个整型变量x和y,并给出相应的赋值。main函数的执行结果为输出*k的值,而*k的值即*fun的值。fun函数包括两个整型指针形参*a和*b。通过对*a、*b进行操作,得到结果m,并将m值返回,整个程序的实际输出即为m的值。初始时,m=*a=21。随后令m=m+*b-3,得m=53。整个程序的输出结果即为53。

第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 include int fun(int n) {int *

有以下程序 #include <stdio.h> #include <stdlib.h> int fun(int n) {int *p; p=(int*)malloc(sizeof(int)); *p=n; return *p; } { int a; a=fun(10); printf("%d\n",a+fun(10)); } 程序的运行结果是______。

A.0

B.10

C.20

D.出错


正确答案:C
解析:malloc(sizeof(int))的作用是开辟一个长度为sizeof(int)存储空间,并通过强制类型转换(int*)将此存储空间的地址赋给了—个整型的指针变量p。然后执行语句“*p=n”,使得*p的值为10,并通过返回此值,在主函数中输出a+10的值,即输出20。

第5题:

有以下程序includevoid f(int *p,int *q);main(){ int m=1,n=2,*r=&m;f(r, &n

有以下程序 #include<stdio.h> void f(int *p,int *q); main() { int m=1,n=2,*r=&m; f(r, &n); printf("%d,%d",m,n); } void f(int*p,int*q) {p=p+1; *q=*q+1;) 程序运行后的输出结果是______。

A.1,3

B.2,3

C.1,4

D.1,2


正确答案:A
解析:本题主要考查函数实参和形参之间的传递,C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只能由实参传绐形参,而不能由形参传回来给实参。f(r&n)把n的地址传递给q,通过地址传递的函数可以有返回值,因此,n的值为q的返回值3,又因为p是形参变量没有返回值,所以m的值没有改变,因此,选项A是正确的。

第6题:

有以下程序 include void fun(int*a,int*B) { int*c; c=a;a=b;b=c; } main() {int x=3

有以下程序 #include<stdio.h> void fun(int*a,int*B) { int*c; c=a;a=b;b=c; } main() { int x=3, y=5,*p=&x, *q=&y; fun(p,q); printf("%d,%d,",*p,*q); fun(&x,&y); printf(" %d,%d\n",*p,*q); } 程序运行后的输出结果是______。

A.3,5,5,3

B.3,5,3,5

C.5,3,3,5

D.5,3,5,3


正确答案:B
解析:本题主要考查的是函数的实参和形参之间的传递关系,C语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参数也要遵循这一规则。调用函数不可能改变实参指针变量的值。所以x和y的地址并没有改变,即p和q也没有改变,因此,选项B是正确的。

第7题:

以下程序的输出结果是______。include void swap(int *a, int *b){ int *t;}{ int i=3,j

以下程序的输出结果是______。

include <stdio.h>

void swap(int *a, int *b)

{ int *t;

}

{ int i=3,j=5,*p=&i,*q=&j;

swap(p,q); printf("%d %d\n",*p,*q);


正确答案:

第8题:

现有如下程序段

#include "stdio.h"

int fun(int k,int *m)

{if(k%3)*m=k*k;

else *m=k/3;}

main()

{ int (*p)(int,int *),m;

p=fun;

(*p)(78, &m);

printf( "%d\n",m);}

则程序段的输出结果为

A.24

B.25

C.26

D.27


正确答案:C

第9题:

以下程序的输出结果是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