单选题有以下程序:#include int fun(int a,int b){ static int m=0,i=2; i+=m+1; m=i+a+b; return m;}main(){ int k=4,m=1,p; p=fun(k,m); printf(%d,,p); p=fun(k,m); printf(%d,p);}程序运行后的输出结果是(  )。A 8,17B 8,16C 8,8D 8,20

题目
单选题
有以下程序:#include int fun(int a,int b){ static int m=0,i=2; i+=m+1; m=i+a+b; return m;}main(){ int k=4,m=1,p; p=fun(k,m); printf(%d,,p); p=fun(k,m); printf(%d,p);}程序运行后的输出结果是(  )。
A

8,17

B

8,16

C

8,8

D

8,20


相似考题
参考答案和解析
正确答案: D
解析:
static变量编译时,将其分配在内存的静态存储区中,在整个程序运行期间都不释放这些存储单元,即使退出函数,下次再进入该函数时,静态局部变量仍使用原来的存储单元,值是上一次函数调用结束时的值。程序执行过程为:调用函数,m=0,i=2,i=i+m+1=3,m=8,返回p=8,再次调用函数,m=8,i=3,i=i+m+1=12,m=12+4+1=17,返回p=17。答案选择A选项。
更多“有以下程序:#include <stdio.h>int fun(int a,int b){ static int m=0”相关问题
  • 第1题:

    以下程序的运行结果是______。 include fun(int a,int b) { int m=0,i=2; i+=m+1; m

    以下程序的运行结果是______。

    include<iostrearn.b>

    fun(int a,int b)

    {

    int m=0,i=2;

    i+=m+1;

    m=i+a+b;

    return m;

    }

    void main()

    {int k=4,m=1,p;

    p=fun(k,m);cout<<p<<end1;

    }


    正确答案:8
    8

  • 第2题:

    阅读下列程序: include void fun(int n) { int x(5); static int y(10); if(n>0) {

    阅读下列程序:

    include<iostream.h>

    void fun(int n)

    {

    int x(5);

    static int y(10);

    if(n>0)

    {

    ++x;

    ++y;

    cout<<x<<","<<y<<endl;

    }

    }

    void main()

    int m(1);

    fun(m);

    }

    则该程序的输出结果是______。


    正确答案:611
    6,11 解析:由主函数mian入手,首先定义变量m等于1,然后调用fun函数。fun函数中y为静态数值,等于10,作用域为到本文件结束。所以y加1后,主函数中y的值也为11。其中函数中x的加1运算调用的是函数中的x等于5的变量,作用域为由定义到文件结束,即主函数中输出的x值为6。所以答案为6,11。

  • 第3题:

    有以下程序 include int a=1; int f(int c) { stati

    有以下程序 #include <stdio.h> int a=1; int f(int c) { static int a=2; c=c+1; return (a++) + c; } main() { int i, k=0; for(i=0;i<2;i++) { int a=3; k += f(a); k +=a; printf("%d\n",k); }

    A.14

    B.15

    C.16

    D.17


    正确答案:A
    解析:静态局部变量的作用域跟一般局部变量相同,都是从声明处开始到声明所在函数或语句块结束为止。但静态局部变量的生存周期却是从第1次执行到该静态局部变量的声明语句时起,直到程序结束。而—般局部变量的生存周期到离开它的作用域时就结束了。本题的f()函数中static int a=2;语句就声明了一个静态局部变量a,并初始化为2。主函数中,通过一个for循环连着调用了2次f()函数。两次调用形参c都为3,f()函数中让c增1变为4,然后输出(a++) +c,第1次调用a为2,所以输出结果为3+4=6,而第2次调用a被上次调用时的++运算符增1,所以为3,输出结果为3+4=7。所以主函数for循环结束后,k的值是13,下面一条k+=a;语句中的a是全局变量a,值为1。故最终输出结果是14,应该选择 A。

  • 第4题:

    以下程序的输出结果是【 】。include int fun(int x) {static int t=0; return(t+=x); }

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

    include <stdio.h>

    int fun(int x)

    { static int t=0;

    return(t+=x);

    }

    main()

    int s,i;

    for(i=1 ;i<=5;i++) s=fun(i);

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


    正确答案:15
    15 解析:static类型的变量是静态变量,本题中的静态变量t为静态局部变量。静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用时的值。本题在多次调用fun函数的过程中,只在第一次调用时t的初值为0,以后每次调用函数时不再重新赋初值,而只是保留上次函数调用结束时的值,所以本程序的作用相当于将1到5数字进行累加,故输出结果为15。

  • 第5题:

    下述程序的输出结果是()。include int fun(int a){intb=0;staticintc=3;b++,c++;return

    下述程序的输出结果是( )。 # include <stdio.h> int fun( int a) { int b=0; static int c=3; b++,c++; return a+b+c; } void main() { int x=2,i; for(i=1;i<3;i++) printf("%d",fun(x)); }

    A.56

    B.67

    C.78

    D.89


    正确答案:C
    解析:本题主函数中的for循环会循环两次,即输出连续两次调用fun(2)的返回值。在fun()函数中定义了一个静态变量c,第一次调用fun()时c被初始化为3,然后自增为4,最后输出a+b+c为2+1+4=7。由于静态变量的生存周期为整个程序执行周期,所以第二次调用fun()时c的值为4,然后自增为5,故最后输出a+b+c为2+1+5=8。所以程序的输出结果是78,应该选择C。

  • 第6题:

    有以下程序 include int fun(int a, int b) { if(b==0) return a;

    有以下程序 #include <stdio.h> int fun(int a, int b) { if(b==0) return a; else return(fun(-a,-b)); } main() { printf("%d\n",fun(4,2)); } 程序的运行结果是______。

    A.1

    B.2

    C.3

    D.4


    正确答案:B
    解析:在调用一个函数的过程中又出现直接或间接调用该函数本身,称为函数的递归调用。本题考查的是函数递归调用。首先当a=4,b=2时,调用fun(4,2),不满足条件b==0,继续调用fun函数;此时a=3,b=1,即调用fun(3,1),不满足条件b=0,继续调用fun函数;此时a=2,b=0,满足条件b=0,返回a的值2。

  • 第7题:

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

  • 第8题:

    以下程序的输出是【】。 include using namespace std; fun(intm) { static int n=1; n=m

    以下程序的输出是【 】。

    include<iostream>

    using namespace std;

    fun(intm)

    {

    static int n=1;

    n=m*n;

    return(n);

    }

    void main()

    {

    int i;

    for(i=1;i<=3;i++) cout<<fun(i);

    }


    正确答案:126
    126 解析:局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束。第一次调用 fun 函数时n的值等于1,第二次调用 fun 函数时n的值等于2,第三次调用 fun 函数时n的值等于6,每次调用 fun 函数时,保留上次调用时n的值不变。

  • 第9题:

    有以下程序include using namespace std;int a;int fun ();int main (){extern int a

    有以下程序#include <iostream>using namespace std;int a;int fun ();int main (){ extern int a; int b; a = 100; b = fun(); cout<<b<<end1; return 0;}int fun{){ extern int a; return (10*a ;} 其程序运行后的输出结果是

    A.100

    B.10

    C.1000

    D.10000


    正确答案:C
    解析:本题考核变量的作用域、生存周期和存储类别(自动、静态、存储器,外部)。先来了解外部变量:外部变量用关键字extern表示。由于外部变量可以被程序中的所有函数共同访问,其作用域为全局,因此也称为全局变量。对于外部变量而言,“定义变量”和“说明变量”是两个不同的概念。定义a为外部变量是告诉编译程序, a是一个外部变量,并要求系统为a分配一个固定的永久存储空间。a的值在整个程序的运行期间都存在,只有当定义它的程序运行结束时,它的存储空间才释放。外部变量定义后,当程序中的函数要引用外部变量时,应在函数中作引用说明。在此程序中,在第二行定义了一个外部变量a,主函数main给外部变量赋的初始值为100,当调用函数fun()时,外部变量a的值传到函数fun()中,因此函数所返回的值为100*10=1000。

  • 第10题:

    若有以下程序:includeusing namespace std;int fun(){static int i=0;int s=1;s+=i;i

    若有以下程序: #include<iostream> using namespace std; int fun() { static int i=0; int s=1; s+=i; i++; return s; } int main() { int i,a=0; for(i=0;i<5;i++) a+=fun(); cout<<a<<endl; return 0; } 程序运行后,输出的结果是( )。

    A.20

    B.24

    C.26

    D.15


    正确答案:D

  • 第11题:

    有以下程序include int i = 0;void fun( ){ {static int i = 1;std::cout<

    有以下程序 #include <iostream> int i = 0; void fun( ) { { static int i = 1; std::cout<<i++<<','; } std::cout<<i<<','; } int main() { fun(); fun(); return 0; } 程序执行后的输出结果是

    A.1,2,1,2,

    B.1,2,2,3,

    C.2,0,3,0,

    D.1,0,2,0,


    正确答案:D
    解析:本题考核变量的作用域、生存周期和存储类别(自动、静态、存储器、外部)。题中即定义全局变量i,又在函数fun内部定义了局部静态变量i,当进入函数fun里面的大括号时,局部静态变量i有效,所以输出1,然后局部静态变量i加1,出了里面的大括号后,全局变量i有效,所以输出0。同理,第二次调用fun后,输出2和0。

  • 第12题:

    以下程序的输出结果是( )。 include fun() {static int a=0; a+=3;printf("%d",A); } ma

    以下程序的输出结果是( )。 include<stdio.h> fun() {static int a=0; a+=3;printf("%d",A); } main() {int cc; for(cc=1;cc<5;cc++)fun(); printf("\n"); }


    正确答案:3 6 9 12
    3 6 9 12 解析:本题考查最基本的for循环。for(cc=1;cc5;cc++)规定循环次数为4次,每次a+=3,即每次a的值增加3,但因为fun函数中变量a为static类型,所以每次调用完子函数之后,变量a所做的改变都要保存。

  • 第13题:

    以下程序的运行结果是______。includemain(){ int fun();fun();}fun(){static int a[3]=

    以下程序的运行结果是______。

    include<stdio.h>

    main()

    { int fun();fun();}

    fun()

    {static int a[3]={0,1,2};

    int i;

    for(i=0;i<3;i++)a[i]+=a[i];

    for(i=0;i<3;i++)printf("%d,",a[i]);

    pfintf("\n",);}


    正确答案:
    本题主要考查for循环语句的使用以及静态局部变量的特点。

  • 第14题:

    以下程序的输出结果是【】。 include using namespace std; void fun() {static int a=0

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

    include <iostream>

    using namespace std;

    void fun()

    {

    static int a=0;

    a+=2;

    cout<<a;

    }

    int main()

    {

    int CC;

    for(CC=1;cc<4;CC++)

    fun();

    cout<<end1;

    return 0;

    }


    正确答案:246
    246 解析:本题考核函数调用和静态变量。在主函数中通过一个for循环调用了3次fun()函数。第1次调用fun()函数时,a的初始值为0,执行语句“a+=2;”后, a的值为2,输出2;第2次调用时,a的初始值为2,执行语句“a+=2;”后,a的值为4,最后输出4:第3次调用时,a的初始值为4,执行语句“a+=2:”后,a的值为6,最后输出6。

  • 第15题:

    以下程序的输出结果是_____。 include void fun( ) {static int a=0; a+=2;cout < <

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

    include<iostream.h>

    void fun( )

    { static int a=0;

    a+=2;

    cout < < a < < " ";}

    void main( )

    { int cc;

    for(cc=1;cc<4;cc++)

    fun( ) ;

    cout < < endl;}


    正确答案:2 4 6
    2 4 6 解析:本题考查静态局部变量的使用。用关键字 static声明的局部变量为“静态局部变量”,其值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次调用该函数时,该变量已有值,就是上一次函数调用结束时的值。

  • 第16题:

    有以下程序:include define N 20fun(int a[] ,int n,int m){int i,j;for(i=m;i> :n;i

    有以下程序: #include <stdio.h> #define N 20 fun(int a[] ,int n,int m) { int i,j; for(i=m;i> :n;i--) a[i+1] =a[i]; } main( ) { int i,a[N.] = 11,2.3,4,5,6,7,8,9,10[; fun( a,2,9) for(i =0;i<5;i ++ ) printf("% d" ,a[i] );程序运行后的输出结果是( )。

    A.10234

    B.12344

    C.12334

    D.12234


    正确答案:C
    解析:本题函数fun的作用是将指定的数组元素(下标从n~m)向后移一位。调用函数fun(a,2,9)将a[2]到a[9]的各元素依次向后移一位,最后a数组中各元素的值分别为1,2,3,3,4,5,6,7,8,9,10,程序输出数组的前5个元素:12334。

  • 第17题:

    以下程序的输出结果是#include <stdio.h>int fun(int x){ static int m=0; return(m *=x);}main(){ int s,i; for(i=l;i<=3;i++) s=fun(i); printf("%d\n",s);}


    正确答案:10
    本题考查静态局部变量的使用。静态局部变量用static进行声明,该变量的内存存储空间在整个程序的运行期间都不释放,进行编译时,只对静态局部变量赋初值一次,以后每次调用函数时,不再重新赋初值,而只是保留上次函数调用结束时的值。题目中的程序包括两个部分,一个是fun函数,另一个是main函数。main函数给出了变量s的初始值,s=0。for语句是对fun函数进行调用,将结果与s进行相加,并将和赋给s。仔细分析for语句的结构可知,该语句要循环运行3次。函数fun的实参即for语句的循环变量。三次调用的实参数值分别为1、2、3。fun函数的功能是完成m+=x操作,其中m为静态局部变量,初始值为0。第一次调用时,i=1,对于fun函数来说,也就是x=1,m=0,进行m+=x操作后,m=1,将m值返回,在main函数中执行s+=fun(i)语句,得到s=1。第二次调用时,i=2,fun函数中x=2,注意,此时m=1,为上次调用该函数的结果,而不是0,进行m+=x操作后,得到m=3,将该结果返回,s=4。第三次调用时,i=3,x=3,m=3,进行m+=x操作后,得到m=6,将该结果返回得到s=10。到此for语句结束,执行printf语句,输出结果10。

  • 第18题:

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

  • 第19题:

    以下程序的输出结果是()。includeint m=13;int fun(int x,int y){int m=2;return(x*y-m

    以下程序的输出结果是( )。 #include<stdio.h> int m=13; int fun(int x,int y) {int m=2; return(x*y-m); } main() {int a=7,b=6; printf("%d",fun(a,B)/m); }

    A.1

    B.3

    C.7

    D.10


    正确答案:B

  • 第20题:

    有以下程序#include "stdio.h"void fun(int *a,int *b,int c){ c=*a+*b; }main(){ int a[2]={6,9},c=0; fun(a,a+1,&c); printf("%d\n",c);}程序输出的结果是 A.6 B.9C.0 D.15


    正确答案:C
    函数的参数通常分为两种:数值变量和指针变量。数值变量被函数调用后,函数内的参数为该数值变量的副本。对副本的一切操作都不会影响到调用函数外原来的参数。指针变量在函数中传递的是对其存放地址的一份副本,该副本存放的地址与原来的指针所存的地址一致。在函数体内修改指针存放的地址对应的值与在函数体外对原参数的修改同样有效,因为原参数也指向该地址。
    题目中的程序包括主函数main和fun函数,其中fun函数为void型,不需要fun函数返回值。fun函数的形参为2个整型指针变量和1个整型变量。在main函数中调用fun函数,a为指向数组第一个数的地址,a+1指向数组第二个数的地址,变量c的初始值为0。虽然在fun函数中也有整型变量c,但是该变量的使用范围为fun函数,与main中的变量c没有关系,有c=*a+*b,即c=15,但是main函数对fun函数的参数传递为数值变量,fun函数中变量c数值的改变不会影响main函数中变量c的数值改变,即主函数中变量c的值依然为0。

  • 第21题:

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

  • 第22题:

    有以下程序:include int fun(int x[], int n){ static int sum =0,i;for(i=0;i

    有以下程序: #include <stdio.h> int fun(int x[], int n) { static int sum =0,i; for(i=0;i<n;i ++ )sum + =x[i]; return sum;{ int a[] ={1,2,3,4,5},b[]={6,7,8,9},s=0; s = fun(a,5) + fun(b,4) ;printf( "%d \n",s);程序执行后的输出结果是( )。

    A.45

    B.50

    C.60

    D.55


    正确答案:C
    解析:静态变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值,以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。在main函数中调用fun(a,5),执行for循环得到sum=0+a[0]+a[1]+a[2]+a[3]+a[4]=15;然后调用fun(b,4),因为sum为静态变量,再次调用时sum保留上次函数调用结束时的值,所以sum:15+b[0]+b[1]+b[2]+b[3]=45;返回sum的值,main函数中输出的s=15+45=60。

  • 第23题:

    若有如下程序: include using namespaee std; int fun() { static int i=0; int s=1;

    若有如下程序: #include<iostream> using namespaee std; int fun() { static int i=0; int s=1; s+=i; i++; return s; } int main() { int i,a=0; for(i=0;i<5;i++) a+=fun(); cout<<a<<end1; return 0; } 程序运行后,输出的结果是( )。

    A.20

    B.24

    C.25

    D.15


    正确答案:D
    解析:由主函数入手,在for循环中调用fun函数,其中调用次数为5次。fun中i为静态变量,有效到文件结束。第一次调用fun后为s=1,a=1;第二次调用后s=2,a=3;第三次s=3,a=6;第四次 s=4,a=10;第五次s=5,a=15。

  • 第24题:

    单选题
    有以下程序#include int fun(int x[],int n){ static int sum=0,i; for(i=0;i
    A

    50

    B

    60

    C

    45

    D

    55


    正确答案: C
    解析:
    函数fun的功能是求数组的n个元素之和,fun(a,5)=15,由于sum是静态局部变量,所以第二次调用时保持15不变,fun(b,4)=45,所以s=fun(a,5)+fun(b,4)=60。答案选择B选项。