计算机二级

有如下程序#include "stdio.h"fun(int a,int b){ int s; s=a*(b/4); printf("%d\n",s);}main(){ int a=16,b=10; fun(a,b);}该程序的输出结果是A.16 B.32C.40 D.80

题目

有如下程序#include "stdio.h"fun(int a,int b){ int s; s=a*(b/4); printf("%d\n",s);}main(){ int a=16,b=10; fun(a,b);}该程序的输出结果是A.16 B.32C.40 D.80

参考答案和解析
正确答案:B
题目给出的程序分为两个部分:主函数main和函数fun。main函数给出了整型变量a,b的初始值,并将整型变量a,b作为fun的实参。fun函数的功能是计算s的值并输出。对于整型变量,运算符“/”的作用是求出两个数除法所得商的整数部分。s=a*(b/4),a的初始值为16,b的初始值为10,b/4的结果为2,a*2得32。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

有以下程序: #include<stdio.h> #include<stdlio.h> void fun(int*pl,int*p2,int*s) { s=(int*)malloc(sizeof(int)); *s=*pl+*p2; free(s); } main( ) { int a=1,b=40,*q=&a; fun(&a,&b,q); printf("%d\n",*q); } 程序运行后的输出结果是( )。

A.42

B.0

C.1

D.41


正确答案:C
Fun函数功能是新开辟内存空间存放a和b的地址,q的地址并没有变化,所以应该还是指向地址a。

第2题:

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

第3题:

阅读下面程序,则程序执行后的结果为

#include "stdio.h"

main()

{int a=4,b=6,c=7;

double d,fun(int,int,int);

d=fun(a,b,c);

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

double fun(int a,int b,int c)

{double s;

s=a%b*c;

return s;}

A.27

B.27.000000

C.28

D.28.000000


正确答案:D

第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 int fun(int (*s)[4],int n,int k) {int m,i;

有以下程序 #include <stdio.h> int fun(int (*s)[4],int n,int k) {int m,i; m=s[0][kl; for(i=1;i<n;i++) if(s[i][k]>m) m=s[i][k]; return m; } main() { int a[4][4]={{1,2,3,4},{11,12,13,14}, {21,22,23,24}, {31,32,33,34}}; printf("%d\n",fun(a,4,0)); } 程序的运行结果是______。

A.4

B.34

C.31

D.32


正确答案:C
解析:在主函数中,定义并初始化了4行4列的二维数组a,并通过调用fun函数,将fun函数中指向一维数组的指针变量s指向了二维数组a的首地址,使得指针变量s与数组a共用同一存储单元。在fun函数中,通过for循环,求得了数组a第0列中最大的值,并赋给m返回主函数。由于数组a第0列的值分别为1、11、21、31,故其最大值是31。

第6题:

以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是______。

A.main() { int *p; fun(p); …… } int fun(int *p) {int s; p=&s;}

B.main() { int *p; fun(&p); …… } int fun(int **p) {int s; *p=&s;}

C.# include<stdlib. h> main() {int *p; fun(&p); …… } int fun(int **p) {*p=(int *)malloc(2);}

D.# include<stdlib. h> main() { int *p; fun(p); …… } int fun(int *p) {p=(int *)malloc(sizeof(int));}


正确答案:C
解析:选项A和B中p指向局部变量s的地址,退出函数fun后,该局部变量也被释放,不能使p指向一个整型单元地址;选项D中通过malloc函数分配一个整型地址,但不能被返回到main函数中,因为指针参数指向的地址不能被改变;选项C中,p是指向指针的指针,函数fun改变的是其指向的内容,而不是其地址。

第7题:

有以下程序:includeint a=2;int f(int *a){return (*a) ++;}main(){ int s=0;{ int a=

有以下程序: #include <stdio.h> int a=2; int f(int *a) { return (*a) ++;} main() { int s=0; { int a=5; s+=f(&a); } s+=f(&a); printf("%d\n",s) } 执行后的输出结果是( )。

A.10

B.9

C.7

D.8


正确答案:C
解析:在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用这些变量。对于main函数中的{inta=5;s+=f(&a);},a只在花括号内有效。在函数之外定义的变量称为外部变量,外部变量是全局变量,它的有效范围是从定义该变量的位置开始到本源文件结束。程序开头的定义inta=2;使a成为全局变量,main函数中第二个s+=f(&a);语句中的a就是这个全局变量。

第8题:

以下程序的输出结果是【 】。include defineN 5 int fun(int *s,int a,int n) {int j; *s=

以下程序的输出结果是【 】。

include <stdio.h>

define N 5

int fun(int *s,int a,int n)

{ int j;

*s=a j=n;

while(a!=s[j]) j-;

return j;

main()

{ int s[N+1]; int k:

for(k=1 ;k<=N;k++) s[k]=k+1:

print f("%d\n",fun(s,4,N));

}


正确答案:3
3 解析:本题主函数中定义了一个一维数组s,并通过for循环给s[1]到s[5]的元素分别赋值为2、3、4、5、6。然后调用 fun函数,使指针变量s与数组s共用同一存储单元。在函数fun中,a=4,n=5,所以while的条件表达式首先判断的是 4!=s[5]是否成立,由于s[5]=6,所以成立,执行j-;接着判断4!=s[4]是否成立,由于s[4]=5,所以成立,执行j-;然后判断4!=s[3]是否成立,由于s[3]=4,所以条件表达式不成立,返回j的值3。

第9题:

有下列程序: include void fun(int * s,int n1,int n2) { int i,j,

有下列程序: #include <stdio.h> void fun(int * s,int n1,int n2) { int i,j,t; i=n1;j=n2; while(i<j){t=s[i];s[i]=s[j];s[j]=t;i++;j--;} } main() { int a[10]={1,2,3,4,5,6,7,8,9,0},k; fun(a,0,3); fun(a,4,9);fun(a,0,9); for(k=0;k<10;k++)printf("%d",a[k]);printf("\n"); } 程序的运行结果是( )。

A.987654321

B.4321098765

C.5678901234

D.987651234


正确答案:C
解析:从题目的主函数入手,定义了一个一维数组并赋韧值,接着调用函数fun(),fun()函数的功能为使数组中的元素逆序,当调用 fun(a,0,3),将实参传递给形参实现数组a中a[0]-a[3]这4个元素逆序;同理调用fun(a,4,9)是将上步排列好的a数组中a[4]-a[9]这6个元素逆序;调用fun(a,0,9)是将数组中a[0]-a[9]这10个元素在逆序,再用printf()函数输出结果为5678901234,故选项C)正确。

第10题:

有以下程序:includevoid fun(int* s,int* * d){* *d=*(s+2);}main(){ inta[]={1,2,3,

有以下程序: #include <stdlib.h> void fun(int * s,int * * d) { * *d=*(s+2); } main() { int a[]={1,2,3,4,5},*b; b=(int *)malloc(sizeof(int)); fun(a,&B) ; printf("%d\n",*b+1); } 程序的输出结果是( )

A.2

B.3

C.4

D.5


正确答案:C