更多“有以下程序#include stdio.h#define S(x) (x)*x*2main( ){ int k=5, j=2;printf( "%d,”,s(k+j) ); printf(”%d\n”,s( (k-j) ) );}程序运行后的输出结果是A) 98,18B) 39,11C) 39,18D) 98,11”相关问题
  • 第1题:

    (36)有以下程序

    #include <stdio.h>

    #define PT 3.5;

    #define S(x) PT*x*x;

    main()

    { int a=1, b=2; printf(“%4.1f\n”,S(a+b));}

    程序运行后输出的结果是

    A)14.0 B)31.5 C)7.5 D)程序有错无输出结果


    正确答案:C

  • 第2题:

    有以下程序:

    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

    此程序考查带参数的宏定义,S(k+j)展开后即4*(k+j)*k+j+1,所以结果为l43,答案为B。

  • 第3题:

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

  • 第4题:

    以下程序运行后的输出结果是( )。 include main() { int x=20; printf("%d", 0

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

    include<stdio.h>

    main()

    { int x=20;

    printf("%d", 0<x<20);

    printf("%d\n", 0<x && x<20);

    }


    正确答案:10
    10 解析:表达式0x20,首先计算0x,其值为1,再计算120,其值为1,输出1;表达式0x && x20,0x为1,x20为0,再计算1 && 0,其值为0,输出0。所以输出结果为10。

  • 第5题:

    以下程序的输出结果是( )。 include main()fint x=0; sub(&x,16,2); printf("%d\n",

    以下程序的输出结果是( )。

    include<stdio.h>

    main()

    fint x=0;

    sub(&x,16,2);

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

    }

    sub(int*a,int n,int k)

    {if(k<=n) sub(a,n/2,2*k);

    *a+=k;

    }


    正确答案:14
    14 解析:本题考查递归函数的调用。在主函数中调用sub(&x,16,2)函数,此时n=16,k=2,if语句的控制的条件k=n成立,所以执行下面的语句,调用sub(x,8,4),此时n=8,k=4,if语句的控制条件k=n成立,所以执行下面的语句,调用sub(x,4,8),此时n=4,k=8,if语句控制的条件k=n不成立,因此,最后得x=2+4+8=14。

  • 第6题:

    下列程序的运行结果是()。 include define ADD(x)x+x main() {int m=1,n=2,k=3; int s

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

    #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.sum=18

    B.sum=10

    C.sum=9

    D.sum=25


    正确答案:B
    解析:本题考查带参数的宏的定义及相关运算: S=m+n+m+n*k=1+2+1+2*3=10。

  • 第7题:

    下列程序的输出结果是______。include main(){union {int k;char i[2]; }*S,a; s=&

    下列程序的输出结果是______。#include <stdio.h>main(){ union { int k; char i[2]; } *S,a; s=&a; s->i[0]=0x39; s->i[1]=0x38; printf("%x\n",s->k);}

    A.3839

    B.3938

    C.380039

    D.390038


    正确答案:A

  • 第8题:

    (34)有以下程序

    #include <stdio.h>

    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\n",s);

    }

    程序运行后的输出结果是

    A)0

    B)10

    C)30

    D)64


    正确答案:D

     

  • 第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)(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选项。

  • 第11题:

    单选题
    若有以下程序 #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选项。

  • 第12题:

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

    21,18

    B

    81,81

    C

    21,21

    D

    18,18


    正确答案: D
    解析:
    带参数的宏的替换过程是,用宏调用提供的实参字符串直接置换宏定义命令行中相应形参字符串,非形参字符保持不变。S(k+j+2)被置换成k+j+2*k+j+2,计算时先计算2*k,结果为21;S(j+k+2)被置换成j+k+2*j+k+2,计算时先计算2*j,结果为18。程序的运行结果是21,18。答案选择A选项。

  • 第13题:

    以下程序运行后,输出结果是define PT5.5define S(x)PT*x*xincludemain(){int a=1,b=

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

    A.49.5

    B.9.5

    C.22

    D.45.0


    正确答案:A

  • 第14题:

    以下程序运行后,输出结果是______。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。

  • 第15题:

    有以下程序#include <stdio.h>#define P 24;#define S(x) P*x+x;main(){ int a=2, b=2; printf("%d\n",S(a+b));}程序的运行结果是A.程序编译运行时报错,无法输出 B.54 C.96 D.100


    正确答案:A
    本题主要考查宏的定义。宏定义用一个标识符来表示一个字符串,这个字符串可以是常量、变量或表达式。在宏调用中将用该字符串代换宏名。宏定义中,我们主要需要注意以下几点:
    (1)同一宏名不能重复定义,除非这两个宏定义命令行完全一致。
    (2)定义宏时,记得其结尾处不要用分号隔开。
    (3)替换带参数的宏名时,一对圆括号必不可少,圆括号中实参个数应该与形参个数相同,若有多个参数,它们之间用逗号隔开。
    (4)宏定义中的字符串应加括号,字符串中出现的形式参数两边也应加括号。
    在本题中,定义宏时,出现了一个明显的错误,即在宏的定义后面用分号表示结束,这显然是不对的。程序编译时,系统会报错,无法完成输出。因此,本题的正确答案是A。

  • 第16题:

    以下程序运行后,输出结果是______。 define P4.5 define S(x)P*x*x include main() {

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

    A.49.5

    B.112.5

    C.18

    D.24


    正确答案:C

  • 第17题:

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

  • 第18题:

    有以下程序:include main(){union{charch[2];int d;} s;s.d=0x4321;printf("%x,%x\n",

    有以下程序: #include <stdio.h> main() { union { charch[2]; int d; } s; s.d=0x4321; printf("%x,%x\n",s.ch[0],s.ch[1]); } 在16位编译系统上,程序执行后的输出结果是( )。

    A.21,43

    B.43,21

    C.43,00

    D.21,00


    正确答案:A
    解析:int型变量和字符数组ch共用两个字节的存储单元,通常ch[0]位于低字节,ch[1]位于高字节,所以s.ch[0]=21,s.c[1]=43。

  • 第19题:

    以下程序运行后,输出结果是define PT 5.5define S(x)PT*x*xincludemain(){ int a=1,

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

    A.49.5

    B.9.5

    C.22

    D.45


    正确答案:A
    解析:宏替换用“#define宏名宏体”的形式来定义。在进行编译预处理时,将把程序中宏定义之后的所有宏名用宏体替换。宏虽然可以带参数,但宏替换过程中不像函数那样要进行参数值的计算、传递及结果返回等操作;宏替换只是简单的字符替换,不进行计算。因而本题中的S(a+b)进行宏替换后为PT*1+2*1+2=5.5*1+2*1+2=9.5。注意:带参数的宏定义。

  • 第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) #define T(x)S(x)/S(x)+1 main() {  int k=3,j=2;  printf(%d,%d,S(k+j),T(k+j)); } 则程序的输出结果是(  )。
    A

    11,2

    B

    25,2

    C

    11,12

    D

    25,26


    正确答案: A
    解析:
    S(k+j)展开后是(3+2)*(3+2) = 25,T(k+j)展开后是(3+2)*(3+2)/(3+2)*(3+2)+1 = 26。答案选择D选项。

  • 第22题:

    单选题
    有以下程序: #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选项。

  • 第23题:

    单选题
    有以下程序:#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选项。