更多“单选题有以下程序:#include#define S(x) x *xmain(){ int k=5,j=2; printf(%d,%d,S(k+j+2),S(j+k+2));}程序的运行结果是(  )。A 21,18B 81,81C 21,21D 18,18”相关问题
  • 第1题:

    有以下程序: #include<stdio.h> void fun(int*s) { static int i=0; do{s[J]=s[J]+s[j+I];}while(++j<2); } main( ) { int k.a[l0]={1,2,3,4,5}; for(k=1;k<3;k++)fun(a); for(k=0;k<5;k++)pfintf("%d",a[k]); printf("\n"); } 程序运行后的输出结果是( )。

    A.12345

    B.23445

    C.34756

    D.35745


    正确答案:D
    本题考查静态变量,静态变量有储存已经操作过的值,所以fun(a)s[O]=3,s[1]=5,s[2]=7,所以答案选择D。

  • 第2题:

    下列程序的运行结果是()。includevoid fun(int*s,int*p){ static int t=3;*p=s[t];t--;

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

    A.5,4,3,2

    B.2,3,4,5,

    C.2,2,2,2,

    D.5,5,5,5,


    正确答案:A
    解析:分析fun函数程序段,可知fun函数要实现的功能是将s中第(t+1)个元素以前的元素逆置赋给数组p。由于fun中函数定义了静态变量t=3,因此,在主函数中调用函数fun(a,&x)时,就是要将数组a中前4个元素逆置赋给数组x,最后输出x数组。

  • 第3题:

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

    main()

    { int i=0,j=10,k=2,s=0;

    {i+=k;

    if(i>j)

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

    break;}

    s+=i;}}


    正确答案:

  • 第4题:

    有以下程序

    #include<stdio.h>

    void fun(int *s)

    { static int j=0;

    do { s[j]=s[j]+s[j+1]; )while(++j<2);

    }

    main( )

    { int k,a[10]={1,2,3,4,5);

    for(k=1;k<3;k++)fun(a);

    for(k=0;k<5;k++)printf(”%d”,a[k]);

    printf("\n");

    }

    程序运行后的输出结果是

    A) 12345

    B)23445

    C)34756

    D) 35745


    正确答案:D
    【答案】D
    【知识点】static变量的使用
    【解析】静态局部变量在函数内定义,它的生存期为整个源程序。第一次k=1调用结束后,s[0]的值为3,s[1]的值为5,j的值为2。当k=2时,继续调用函数fun,此时j的值为2,但是因为do while语句先执行后判断,所以执行了s[2]=s[2]+s[3],所以s[2]的值变成了7。循环结束回到主函数,k的值为3,不满足条件结束循环。最后打印输出a数组元素的值。

  • 第5题:

    以下程序运行后,输出结果是( )。

    #include

    #define PT 5.5

    #define S(x)PT*x*X

    main

    { int a=1,b=2;

    printf("%4.1f\n",s(a+b));}

    A.49.5

    B.9.5

    C.22.0

    D.45.0


    正确答案:B
    本题考查函数调用,由于a+b没有被括起来,所以s(a+b)=PT*a+b*a+b=5.5*1+2*1+2=9.5,故选择B。

  • 第6题:

    下列程序的运行结果是()。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]。

  • 第7题:

    下列程序的运行结果是( )。

    #include<stdio.h>

    #define ADD(x) x+x

    main

    { int m=1,n=2,k=3;

    int S=ADD(m+n)*k;

    printf("s=%d",s);

    }

    A.A.sum=18

    B.sum=10

    C.sum=9

    D.sum=25


    正确答案:B
    本题考查带参数的宏的定义:“#defineADD(x)x+x”中X代表m+n,故s写成s=m+n+m+n*k=1+2+1+2*3=10。

  • 第8题:

    有以下程序: main() { int x[8]={8,7,6,5,0,0},*s; S=x+3; printf("%d\n",s[2]); } 程序运行后的输出结果是 ______ 。

    A.随机值

    B.0

    C.5

    D.6


    正确答案:B
    解析:本题定义了数组x[8]和指针变量s,由C语言规定,指针加1的含义是使指针指向数组的下一个元素,而不是指针值简单的加1,因此通过s=x+3;使s指向数组元素x[3]。由于指向数据的指针变量可以带下标表示,如s[i]与*(s+i)等价。因此题目要求输出s[2]的值,即*(s+2)的值,也就是x[5]的值,为0。

  • 第9题:

    单选题
    有以下程序:#include int fun(){ static int x=1; x*=2; return x;}main(){ int i,s=1; for(i=1;i<=2;i++)s=fun(); printf(%d,s);}程序运行后的输出结果是(  )。
    A

    0

    B

    1

    C

    4

    D

    8


    正确答案: C
    解析:
    对局部静态变量在编译时赋初值,以后每次调用函数时一直保持不变,只是保留上次函数调用结束时的值。在主函数中调用了两次fun()函数,第一次调用时x初值为1,执行x*=2后,x=2;第二次调用时初值为2,执行x*=2后,x=4。答案选择C选项。

  • 第10题:

    单选题
    有以下程序: #include  #define S(x)4*(x)*x+1 main() {  int k=5,j=2;  printf(%d,S(k+j)); } 程序运行后的输出结果是(  )。
    A

    197

    B

    143

    C

    33

    D

    28


    正确答案: D
    解析:
    根据宏定义的规定,题中S(k+j) = 4*(k+j)*k+j+1,分别代入k、j的值后求出的结果为143。答案选择B选项。

  • 第11题:

    单选题
    有以下程序:#include #define PT 3.5#define S(x) PT*x*xmain(){ int a=1,b=2; printf(%4.1f,S(a+b));}程序运行后的输出结果是(  )。
    A

    14.0

    B

    31.5

    C

    7.5

    D

    程序有错无输出结果


    正确答案: A
    解析:
    宏定义分为两种:①无参数的宏定义,即#define PT 3.5;②带参数的宏定义,即#define S(x) PT*x*x。S(a+b)的运算过程即3.5*1+2*1+2,最后结果为 7.5,注意,7前面有一个空格字符。%4.1f要求输出的浮点数的宽度为4(包括小数点),且小数点后保留一位小数。若数字宽度不够则添加空格。答案选择C选项。

  • 第12题:

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

    0

    B

    10

    C

    30

    D

    64


    正确答案: A
    解析:
    在整个程序运行期间,静态局部变量在内存的静态存储区中占据着永久性的存储单元,可以继续使用存储单元中原来的值。此题中第一次循环时,调用fun函数后x的值为2,s的值为2;第二次循环时,调用fun函数后x的值为4,s的值为2*4=8;第三次循环时,调用fun函数后x的值为8,s的值为8*8=64。答案选择D选项。

  • 第13题:

    以下程序运行后,输出结果是______。includedefine PT 5.5difine S(x) PT*x*xmain(){i

    以下程序运行后,输出结果是______。 #include<stdio.h> #define PT 5.5 #difine S(x) PT*x*x main() { int a=1,b=2; printf("%4.1f/n",S(a+b)); }

    A.49.5

    B.9.5

    C.22

    D.45


    正确答案:B
    解析:C语言中宏替换只是字符替换,因此:S(a+b)=PT*a+b*a+b=5.5*1+2*1+2=9.5。

  • 第14题:

    以下程序的运行结果是( )。 define S(x)x*x main() {int k=1; while(k<=4) {printf("%d,",S(k)); k++;}


    正确答案:14916
    1,4,9,16, 解析:分析程序执行过程,第1次循环,k=1时,此时s(1)=1*1=1,然后k的值加1;第2次循环,k=2时,s(2)=2*2=4,然后k的值加1;第3次循环,k=3时,s(3)=3*3=9,然后k的值加1;第4次循环,k=4时,s(4)=4*4=16,然后k的值加1;当k=5时,条件不满足,退出循环。

  • 第15题:

    有以下程序#include <stdio.h>void fun(int s[]){ static int j=0; do s[j]+=s[j+1]; while(++j<2);}main(){ int k,a[10]={1,2,3,4,5}; for(k=1;k<3;k++) fun(a); for(k=0;k<5;k++) printf("%d",a[k]);}程序的运行结果是A.34756 B.23445C.35745 D.12345


    正确答案:C
    在本题中,首先定义了一个fun函数,函数中的形参是一个数组,该函数中首先定义了一个静态整型变量j并赋了初值,注意,静态变量的作用域是整个程序,而非该函数。从该函数的程序段不难看出该函数的作用是通过一个循环求形参数组中相邻两个元素(具体根据j确定)的和,并保存。
    在主函数中,定义了一个数组并赋初值,然后用循环调用fun函数。
    当k=1时,调用fun函数,此时刚开始j的值为0,那么fun函数分别计算数组a中的第一个元素与第二个元素的和与第二个元素与第三个元素的和,并分别保存为数组的第一个元素和第二个元素,结果分别为3和5。
    当k=2时,调用fun函数,此时j的值为2,那么fun函数只计算数组a中的第三个元素与第四个元素的和,并保存为数组的第三个元素,结果为7。
    循环结束,经过该层循环后,数组a中各元素的值分别为3、5、7、4、5,最后用循环输出结果为35745。因此,答案选C。

  • 第16题:

    有以下程序

    #include <stdio.h>

    #define S(x) (x)*x*2

    main( )

    { int k=5, j=2;

    printf( "%d,”,s(k+j) ); printf(”%d\n”,s( (k-j) ) );

    }

    程序运行后的输出结果是

    A) 98,18

    B) 39,11

    C) 39,18

    D) 98,11


    正确答案:C
    【答案】C
    【知识点】带参数的宏定义
    【解析】第一次打印的值为(k+j)*k+j*2=7*5+2*2=39。第二次打印的值为(3)*3*2=18。

  • 第17题:

    有以下程序

    #include<stdio.h>

    #define f(X)X*X*X

    main( )

    {int a=3,s,t;

    s=f(a+1);t=f((n+1));

    printf(“%d,%d\n”,s,t);

    }

    程序运行后的输出结果是

    A.10,64

    B.10,10

    C.64,10

    D.64,64


    正确答案:A
    解析:s=f(a+1)=a+1*a+1*a+1=10;s=f((a+1))=(a+1)*(a+1)*(a+1)=64。

  • 第18题:

    有以下程序: #include<stdi0.h> #define S(x)(x)"x"2 main( ) { int k一5,j=2; Drintf("%printf,",S(k+j));printf("%printf\n",S((k—j))); } 程序运行后的输出结果是( )。

    A.98,18

    B.39,11

    C.39,18

    D.98,11


    正确答案:B
    S(k+j)=(k+j)*k+j*2=(5+2)*5+2*2=39,同理S(k-1)=(k+j)*k+j*2=(5-2)*5-2*2=11,所以答案选择B。

  • 第19题:

    有以下程序includevoidfun(int*s,intn1,intn2){inti,j,t; i=n1j=n2; while(i

    有以下程序 #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(int *s,int n1,int n2)的功能是对数组s中的元素进行首尾互相调换。所以在主函数中,当 fun(a,0,3)执行完后,数组a[12]={4,3,2,1,5.6,7,8,9,01;再执行fun(a,4,9),数组a[12]={4,3,2,1,0,9,8,7,6,5};再执行fun(a,0,9)后,数组a[12]={5,6,7,8,9,0,1,2,3,4}。

  • 第20题:

    (35)有以下程序

    #include <stdio.h>

    #define S(x) 4*(x)*x+1

    main()

    { int k=5,j=2;

    printf("%d\n",S(k+j));

    }

    程序运行后的输出结果是

    A)197

    B)143

    C)33

    D)28


    正确答案:B

  • 第21题:

    单选题
    有以下函数: #include  #define S(x)(x)*x*2 main() {  int k=5,j=2;  printf(%d,,S(k+j));  printf(%d,S(k-j)); } 程序运行后的输出结果是(  )。
    A

    98,18

    B

    39,11

    C

    39,18

    D

    98,11


    正确答案: D
    解析:
    根根据该宏的定义,S(k+j) = (k+j)*k+j*2 = 39,S(k-j) = (k-j)*k-j*2 = 11,答案选择B选项。

  • 第22题:

    单选题
    若有以下程序 #include  #define S(x)x*x #define T(x)S(x)*S(x) main() {  int k=5,j=2;  printf(%d,%d,S(k+j),T(k+j)); } 则程序的输出结果是(  )。
    A

    17,37

    B

    49,2401

    C

    17,289

    D

    49,289


    正确答案: C
    解析:
    编译系统处理带参数的宏名时,按程序行中指定的字符串,括号内的内容,从左到右进行处理,若遇到形参则以实参代替,非形参字符原样保留,就形成了替换后的内容,这期间没有任何计算。S(k+j)展开后是5+2*5+2 = 17,T(k+j)展开后是5+2*5+2*5+2*5+2 = 37。答案选择A选项。

  • 第23题:

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

    10,64

    B

    10,10

    C

    64,10

    D

    64,64


    正确答案: C
    解析:
    C语言中带参数的宏可以理解为用参数直接替换定义式中的变量,而不经过任何修改。所以s=f(a+1)=a+1*a+1*a+1=3+3+3+1=10,t=f((a+1))=(a+1)*(a+1)*(a+1)=4×4×4=64,所以有无括号的运算结果是不同的。答案选择A选项。