单选题有以下程序:#include int a=2; int f(){ static int n;  int m;  m=n=0;  n++; a++; m++; return m+n+a; }main(){ int k;  for(k=0;k<3;k++)  printf(%d, ,f()); printf(); }程序的运行结果是(  )。A 5,6,7,B 5,7,9,C 5,8,11,D 5,5,5,

题目
单选题
有以下程序:#include int a=2; int f(){ static int n;  int m;  m=n=0;  n++; a++; m++; return m+n+a; }main(){ int k;  for(k=0;k<3;k++)  printf(%d, ,f()); printf(); }程序的运行结果是(  )。
A

5,6,7,

B

5,7,9,

C

5,8,11,

D

5,5,5,


相似考题
更多“单选题有以下程序:#include int a=2; int f(){ static int n;  int m;  m=n=0;  n++; a++; m++; return m+n+a; }main(){ int k;  for(k=0;k3;k++)  printf(%d, ,f()); printf(); }程序的运行结果是(  )。A 5,6,7,B 5,7,9,C 5,8,11,D 5,5,5,”相关问题
  • 第1题:

    该程序运行的结果是( )。

    #include

    #include

    #define M 100

    void fun(int m, int *a, int *n)

    { int i,j=0;

    for(i=1;i<=m;i++)

    if(i%7==0||i==0)

    a[j++]=i;

    *n=j;}

    main()

    { int aa[M],n,k;

    clrscr();

    fun(10,aa,&n);

    for(k=0;k

    if((k+1) ==0)printf("\n");

    else printf("M",aa[k]);

    printf("\n");}


    正确答案:
    7

  • 第2题:

    有以下程序: int a=2; int f(int n) {static int a=3; int t=0; if(n%2){static int a=4;t+=a++; } else {static int a=5; t+=a++; } return t+a++; } main() { int s=a,i; for(i=0;i<3;i++) s+=f(i); printf("%d\n",s); } 程序运行后的输出结果是 ______。

    A.26

    B.28

    C.29

    D.24


    正确答案:C
    解析:解本题耍弄清楚这样几点:1、定义“int a=2;”中的全局变量a,其作用范围是从定义此变量的位置开始到本源文件结束;2、“static int a=3;”中的静态局部变量a的作用范围是其所在的函数f,并对其只赋一次初值,以后每次调用函数时不再重新赋初值,而只是保留上次函数调用结束时的值;3、复合语句“{static int a=4;t+=a++; }”和“{static int a=5;t+=a++;}”中定义的两个变量a属于复合语句中定义的变量,作用范围只在其本身所在的复合语句内。对于本程序来讲,第三行定义的静态局部变量并不会对四、五两行的复合语句产生作用,这是因为复合语句中也定义了与其同名的静态局部变量。

  • 第3题:

    下列程序执行输出的结果是______。 include f (int a) {int b=0;static c=7;a=c++; b++

    下列程序执行输出的结果是______。

    include <stdio.h>

    f (int a)

    { int b=0;

    static c=7;

    a=c++; b++;

    return (a);

    }

    main()

    { int a=2,i,k;

    for(i=0;i<2;i++)

    k=f(a++);

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

    }


    正确答案:8
    8 解析:第1次for循环,i=0,调用函数f(2),然后将a的值加1,在f()函数中,变量c为static类型,所以c=8;第2次for循环, i=1,调用函数f(3),然后将a的值加1,调用函数f(3)时,a=c++=8,所以k=8。

  • 第4题:

    下列程序的运行结果是()。includevoid sub(int*s,int*y){static int m=4;*y=s[0];m++;}

    下列程序的运行结果是( )。 #include<stdio.h> void sub(int*s,int*y) {static int m=4; *y=s[0]; m++; } void main() {int a[]={1,2,3,4,5},k; int x; printf("\n"); for(k=0;k<=4;k++) {sub(a,&x); printf("%d,",x); } }

    A.1,1,1,1,1,

    B.1,2,3,4,5,

    C.0,0,0,0,0,

    D.4,4,4,4,4,


    正确答案:A
    解析:本题中sub(int*s,int*y)函数的参数是两个指针型变量,在函数体内将数组s的第一个元素赋给y。主程序内,首先定义了一维数组并赋初值,然后通过for循环,5次调用sub(a,&x)函数,每一次调用都是将数组a的第一个元素1赋给x,并输出。

  • 第5题:

    下列程序执行输出的结果是()。 include f(int a) {int b=0; static c=3; a=C++;b++; re

    下列程序执行输出的结果是( )。

    #include<stdio.h>

    f(int a)

    { int b=0;

    static c=3;

    a=C++;b++;

    return(a);

    }

    main()

    { int a=2,i,k;

    for(i=0;i<2;i++)

    k=f(a++);

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

    }

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析:本题考查函数调用时的参数传递。在函数调用时,static变量在函数调用结束后所做的所有变化均保持(即上次调用结束时的值)。
      在主函数中,第一次循环,i=0,调用k-f(a++)=f(2),调用完之后才将a加1,a变为3,在f(2)中,先将c=3赋值给a返回,然后将c加1,得到k=a=3,c=4。
      第二次循环,i=1,调用k=f(a++)=f(3),调用完之后才将a加1,a变为4,在f(3)中,先将c=4赋值给a返回,然后将c加1,得到k=a=4,c=5。

  • 第6题:

    以下程序运行后的输出结果是main{ int i,m=0,n=0,k=0; for(i=9;i<=11;i++) switch(i/10) { case 0: m++;n++;break;  case 1: n++;break;  default:k++;n++; } printf("%d %d %d\n",m,n,k);}


    正确答案:1 3 0
    在本题中,程序首先定义了四个整型变量,其中变量i为循环变量,其他三个变量都被初始化为0。然后执行循环,从循环变量i的初值和结束条件我们可以看出,循环运行了三次。
    第一次循环,当i=9时,执行switch(i/10),由于变量i和10都是整型数值,按照C语言的规定,计算结果也应为整型,因此,i/10的结果为0,执行case 0结构,即变量m和n的值分别加1,然后执行break语句结束switch结构。
    第二次循环时,i=10,此时i/10=1,执行case 1结构,变量n的值再增加1,然后执行break语句结束switch结构。
    第三次循环时,i=11,此时i/10的结果仍然为1,执行case 1结构,变量n的值再增加1,然后执行break语句结束switch结构。
    循环结束,此时,变量m、n和k的值分别为1、3、0,然后执行输出语句,分别输出这几个变量的值,因此,程序最后的输出结果是1 3 0。

  • 第7题:

    有以下程序

    #include<stdio.h>

    int f(int m)

    { static int n=0;

    n+=m:

    return n;

    }

    main()

    { int n=0;

    printf("%d,",f(++n));

    printf("%d\n",f(n++));

    }

    程序运行后的输出结果是

    A.1,2

    B.1,1

    C.2,3

    D.3,3


    正确答案:A
    解析:static变量用于局部变量中有记忆功能和全局生存期。函数中的静态变量的特点是每次调用函数,静态变量的值是上次调用完该函数后的静态变量值,所以在此题中,第一调用函数,返回1,此时函数中的静态变量n的值为l,所以第二次调用函数时,返回值为2。

  • 第8题:

    有以下程序: include int a =2;int f(int n){ static int a: 3;intt=0;if(n%2){ stat

    有以下程序: #include <stdio, h>int a =2;int f(int n){ static int a: 3; int t=0; if(n%2){ static int a=4;t+ =a++;} else { static int a=5;t+ :a++;} return t + a + +;main ( ){ int s=a,i; for(i=0;i<3;i++)s + =f(i); prinff("% d \n" ,s); }程序运行后的输出结果是( )。

    A.26

    B.28

    C.29

    D.24


    正确答案:C
    解析:在函数外面定义的变量a是全局变量,其作用范围从定义该变量的位置开始到本文件的结束;在f函数中的if子句(复合语句)和else子句中定义的变量a是局部变量,其作用范围只在其所在的复合语句内;在f函数中定义的第一个变量a是静态局部变量,其作用范围只限于函数f内部,无论被调用多少次都只初始化一次,并且保留上次函数调用结束时的值,该变量不对复合语句产生作用,所以,f函数的返回值是这个a变量和t值相加的结果。

  • 第9题:

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

    A.1,2

    B.1,1

    C.2,3

    D.3,3


    正确答案:A
    由题可知,输出是调用了f函数,其中有f(++n)和f(n++),其中n=0,所以输出的结果为l,2。

  • 第10题:

    有以下程序

    #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

  • 第11题:

    单选题
    有以下程序:#include int f(int x); main(){ int n=1,m;  m=f(f(f(n))); printf(%d,m); }int f(int x) { return x*2;} 程序运行后的输出结果是(  )。
    A

    4

    B

    2

    C

    8

    D

    1


    正确答案: D
    解析:
    考查函数嵌套调用,第一次调用的是最内层的f(n),即f(1)返回值2。第二次调用中间的f(f(n)),即f(2)返回值4。最后调用最外层的f(f(f(n))),即f(4)返回值8,最后打印输出。答案选择C选项。

  • 第12题:

    单选题
    有以下程序:#include int f(int n);main(){ int a=3,s; s=f(a); s=s+f(a); printf(%d,s);}int f(int n){ static int a=1; n+=a++; return n;}程序运行以后的输出结果是(  )。
    A

    7

    B

    8

    C

    9

    D

    10


    正确答案: B
    解析:
    在函数f中,整型变量a为静态变量,所以每次调用函数f时不再为a重新赋值,而且a的值只有在程序结束时才被释放。第一次调用f后n=4,a=2,s=4;第二次调用时,a初值为2,调用后,a=3,n=5,s=4+5=9,所以输出结果为9。答案选择C选项。

  • 第13题:

    有以下程序: int a=2; int f(int n) { static int a=3; int t=0; if(n % 2)(static int a=4; t+=a++;} else{static int a=5; t+=a++;} return t+a++; } matin() { int s=a, i; for(i=0; i<3; i++)s+=f(i); printf("% d\n", s); } 程序运行后的输出结果是______。

    A.26

    B.28

    C.29

    D.24


    正确答案:C
    解析:在某一函数中当全局变量与局部变量同名时,则在该函数中,全局变量被屏蔽,访问的是局部变量。因此,t+a++中的a用的是static int a=3的这个a。if语句的执行是当n是偶数时,执行else的部分,否则执行其后的部分。因此,当i=0时,t=5,s=2+8=10;i=1时,t=4,s=10+8=18;当i=2时,t=6,s=18+11=29。

  • 第14题:

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

  • 第15题:

    下列程序执行后输出的结果是()includef(int A){ int b=0;static c=3;a=c++,b++;return

    下列程序执行后输出的结果是( ) #include<stdio.h> f(int A) { int b=0; static c=3; a=c++,b++; return(A) ; } main() { int a=2,i,k; for(i=0;i<2;i++) k=f(a++); printf("%d\n",k); }

    A.3

    B.0

    C.5

    D.4


    正确答案:D

  • 第16题:

    下列程序执行输出的结果是()。includef(int A) {int b=0;static c=3;a=C++;b++;return(

    下列程序执行输出的结果是( )。 #include<stdio.h> f(int A) { int b=0; static c=3; a=C++;b++; return(a); } main() { int a=2,i,k; for(i=0;i<2;i++) k=f(a++); printf("%d\n",k); }

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析: 本题考查函数调用时的参数传递。在函数调用时,static变量在函数调用结束后所做的所有变化均保持(即上次调用结束时的值)。
    在主函数中,第一次循环,i=0,调用k=f(a++)=f(2),调用完之后才将a加1,a变为3,在f(2)中,先将c=3赋值给a返回,然后将c加1,得到k=a=3,c=4。
    第二次循环,i=1,调用k=f(a++)=f(3),调用完之后才将a加1,a变为4,在f(3)中,先将c=4赋值给 a返回,然后将c加1,得到k=a=4,c=5。

  • 第17题:

    下列程序的运行结果是()。includevoid sub(int*s,int*y){static int m=4:*y=s[m];m--;}

    下列程序的运行结果是( )。 #include<stdio.h> void sub(int*s,int*y) {static int m=4: *y=s[m]; m--; } void main() {int a[]={1,2,3,4,5},k,x; printf("\n"); for(k=0;k<=4;k++) {sub(a,&x); printf("%d,",x); } }

    A.5,4,3,2,1,

    B.1,2,3,4,5,

    C.0,0,0,0,0,

    D.4,4,4,4,4,


    正确答案:A
    解析:本题考查的是静态变量以及函数的实参与形参之间的地址值传递。sub()函数数中定义的变量m是一个静态变量,系统可为其分配固定的存储空间,重复使用时,变量的值保留;所以当mam()函数中的for循环中语句sub(a,&x);执行时,sub函数中m的值依次是4,3,2,1,0;因为变量x进行的是地址值传递,所以最后依次输出的是数组a的元素a[4]、a[3]、a[2]、a[1]、a[0]。

  • 第18题:

    以下程序的输出结果是#include <conio.h>#include <stdio.h>#define M 100void fun(int m, int *a, int *n){ int i,j=0; for(i=1;i<=m;i++) if(i%7==0||i%11==0) a[j++]=i; *n=j;}main(){ int aa[M],n,k; clrscr(); fun(100,aa,&n); for(k=0;k<n;k++) if((k+1)%20==0)printf("\n"); else printf("%d",aa[k]); printf("\n"); }


    正确答案:77
    在本题中,程序首先定义一个宏M,然后定义一个fun函数,函数带有三个形参,分别是一个整型形参m和两个整型指针形参a、n。在函数体中,首先定义两整型变量i和j,并给j赋初值为0,然后执行循环,循环体中首先是一个条件判断语句,如果结果为真,则说明变量i能同时被7和11整除,并将变量i保存到数组中,循环结束后,将数组中元素的个数通过指针变量n进行返回。通过分析可以知道,fun函数的作用是求取1到m中能同时被7和11整除的整数,并将结果保存到数组a中。
    在主函数中,首先定义了两个整型变量和一个整型数组aa,然后调用clrscr()函数对文本模式窗口进行清除操作。接着调用fun函数,根据上面我们对fun函数的分析,要计算1~100之间能同时被7和11整除的整数,很显然,这样的数只有77一个,那么此时数组aa中只有一个元素为77,而n的值是1。
    接着执行for循环,从程序中不难看出循环的作用是将数组aa中的元素按一定的规则输出,其规则为每行最多只能输出20个值。结合上面的分析,数组aa中只有一个元素为77,因此,本题程序的最终输出结果为77。

  • 第19题:

    有以下程序 #include<stdio.h> int a=1; intf(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
    在主函数中,k的初值为0,首先调用函数f(3),返回值为6,k的值变为6,而函数intfun(intc)中的局部静态变量a等于3。第二次调用函数f(3)时,返回值为7,所以k=6+7=13。退出循环语句,k再加上全局变量a的值l,其最终的值为14。

  • 第20题:

    若有如下程序: sub(int x) {int y=0; static int z=1; y+=x+2;z+=y+x; return(z); } main() {int t=1,n; for(n=0;n<3;n++)printf("%d,",sub(t)); } 则程序运行后的输出结果是 ( )

    A.5,5,5

    B.5,9,13,

    C.5,7,9,

    D.5,8,11,


    正确答案:B

  • 第21题:

    有以下程序

    #include<stdio.h>

    int a=1;

    intf(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
    在主函数中,k的初值为0,首先调用函数f(3),返回值为6,k的值变为6,而函数intfun(intc)中的局部静态变量a等于3。第二次调用函数f(3)时,返回值为7,所以k=6+7=13。退出循环语句,k再加上全局变量a的值l,其最终的值为14。

  • 第22题:

    试题33

    有以下程序

    #include <stdio.h>

    int f(int m)

    { static int n=0;

    n+=m;

    return n;

    }

    main()

    { int n=0;

    printf(“%d,”, f(++n));

    printf(“%d\n”, f(n++));

    }

    程序运行后的输出结果是()

    A.1,2

    B.1,1

    C.2,3

    D.3,3


    正确答案:A
    试题33分析
    n=0,f(++n)),n先增1,调用f,n=0+1=1,输出n;f(n++))先取n的值1调用,n=1+1=2,然后输出n,最后n增1,变成3;所以第一次输出为1,第二次输出为2;
    试题33答案
    A

  • 第23题:

    单选题
    有以下程序#include int a=4;int f(int n){ int t=0; static int a=5; if(n%2) {  int a=6;  t+=a++; } else {  int a=7;  t+=a++; } return t+a++;}main(){ int s=a,i=0; for(;i<2;i++)s+=f(i); printf(%d,s);}程序运行后的输出结果是(  )。
    A

    36

    B

    24

    C

    32

    D

    28


    正确答案: C
    解析:
    函数f中,不管是if语句块还是else语句块,a都是局部变量。f(0)和f(1)调用f函数都是执行else语句块。t+=a++等效于t=t+a;a++;,else语句块执行完后,t=7;函数f中,a也是局部变量,执行return时,a=5,t=7,返回12。s=4+ f(0)+ f(1) = 12 + 12 =28。答案选择D选项。