参考答案和解析
正确答案:A
解析:该题考查的是C语言中自减运算符和逗号表达式的应用。自减运算符作为前缀时,先使变量的值减1,再进行赋值运算。逗号表达式的形式为:表达式1,表达式2,其求解过程是:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值。
更多“以下程序的输出结果是()。includemain(){int a=21,b=11; printf("%d\n",--a+b,--b+a);} 以下程序的输出结果是( )。 #include <stdio.h> main() { int a=21,b=11; printf("%d\n",--a+b,--b+a); }A.30B.31C.32D.33”相关问题
  • 第1题:

    有以下程序includemain(){int a=5,b=lt; t=(a<<2)|b;printf("%d\n",t);}程序运行后的

    有以下程序 #include<stdio.h> main() { int a=5,b=lt; t=(a<<2)|b;printf("%d\n",t); } 程序运行后的输出结果是______。

    A.21

    B.11

    C.6

    D.1


    正确答案:A
    解析:本题主要考查了C语言的逻辑运算符,先将变量a,b的值转换为2进制数,a=00000101,b=00000001,a先左移 2位结果为00010100,再与b按位或运算,结果为00010101,转换为十进制数为21,因此,选项A是正确的。

  • 第2题:

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

  • 第3题:

    以下程序的输出结果是()。includemain(){int n=4; while(n--) printf("%d",--n);}A.2 0

    以下程序的输出结果是( )。 #include <stdio.h> main() { int n=4; while(n--) printf("%d ",--n); }

    A.2 0

    B.3 1

    C.3 2 1

    D.2 1 0


    正确答案:A
    解析:n--是先使用后自减,--n是先自减后使用。n=4时,执行n--后,n变为3,执行--n后,n变为2,所以,第一次输出时,n为2;同上过程,第二次输出时,n为0。

  • 第4题:

    以下程序的输出结果是______。includevoid prt(int*x,int*y,int*z){printf("%d,%d,%d\n

    以下程序的输出结果是______。 #include<stdio.h> void prt(int*x,int*y,int*z) { printf("%d,%d,%d\n",++*x,++*y,*(z++));} int a=10,b=40,c=20; main() { prt(&a,&b&c) prt(&a,&b,&c); }

    A.11,42,31 12,22,41

    B.11,41,20 12,42,20

    C.11,21,40 11,21,41

    D.11,41,21 12,42,22


    正确答案:B
    解析:由于实参传送的是变量的地址,所以对形参指针所指向的单元内容的改变,即对实参内容的改变。

  • 第5题:

    有以下程序: include main( ){ int m =12,n=34;printf( "% d% d" ,m++ , ++n);printf(

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

    A.12353514

    B.12353513

    C.12343514

    D.12343513


    正确答案:A
    解析:程序执行printf("%d%d",m++,++n);后,输出的是m和n+1的值1235,然后m+1=13,再执行printf("%d%d\n",n++,++m);输出n和m+1的值3514,之后n+1=36。这里要注意的是m++和++m的区别:m++是先输出m的值,再执行m++;++m是先执行++m,再输出m的值。

  • 第6题:

    以下程序的输出结果是()。includevoid prt(int *x,int *y,int *z){printf("%d,%d,%d\n"

    以下程序的输出结果是( )。 #include<stdio.h> void prt(int *x,int *y,int *z) {printf("%d,%d,%d\n",++*x,++*y,*(z++));} main() {inta=10,b=40,c=20; prt(&a,&b,&C); prt(&a,&b,&C);}

    A.11,42,31 12,22,41

    B.11,41,20 1,42,20

    C.11,21,40 11,21,21

    D.11,41,21 12,42,22


    正确答案:B

  • 第7题:

    以下程序的输出结果是 include void main( ) {int a=21,b=11; cout<<- -a+

    以下程序的输出结果是 #include<iostream.h> void main( ) { int a=21,b=11; cout<<- -a+b;}

    A.30

    B.31

    C.32

    D.33


    正确答案:B
    解析:自减运算符位于变量之前时,先使变量的值减1,再进行运算。

  • 第8题:

    以下程序的输出结果是_______。includemain(){ int i;for(i=1;i<5;i++){ if(i%2)printf

    以下程序的输出结果是_______。 #include<stdio.h> main() { int i; for(i=1;i<5;i++){ if(i%2)printf("*"); else continue; printf("#"); } printf("$\n"); }

    A.*#*#*#$

    B.#*#*#*$

    C.*#*#$

    D.#*#*$


    正确答案:C
    解析:当i不可以整除2时打印“*”然后打印“#”,不能整除2则执行continue,跳挝printf("#");语句,结束本次循环,返回到循环的起始点。当循环结束后,打印“$”。

  • 第9题:

    下列程序的输出结果是()。 include main() {int a=4; printf("%d\n",(a+=a-=a*A) ); }A

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

    #include<stdio.h>

    main()

    { int a=4;

    printf("%d\n",(a+=a-=a*A) );

    }

    A.-8

    B.14

    C.0

    D.-24


    正确答案:D
    解析:表达式a+=a-=a*a看起来复杂,其实将它分成两个表达式来计算就简单了:①第一个表达式(a-=a*a)=(a=a-a*a=-12);②第二个表达式 (a+=a-=a*a)=(a=a+a=-24)。

  • 第10题:

    以下程序的输出结果是()。includemain(){int k=17; printf("%d,%o,%x\n",k,k,k);}A.17,

    以下程序的输出结果是( )。 #include <stdio.h> main() { int k=17; printf("%d,%o,%x\n",k,k,k); }

    A.17,021,0x11

    B.17,17,17

    C.17,0x11,021

    D.17,21,11


    正确答案:D
    解析:printf函数对不同类型的数据用不同的格式描述符,“%d”是以带符号的十进制形式输出整数(正数不输出符号);“%o”以八进制无符号形式输出整数(不包括前导符0);“%x”以十六进制无符号形式输出整数(不包括前导符0x)。

  • 第11题:

    以下程序的输出结果是includemain(){int i=0,a=0; while(i<20) { for(;;){ if((i%10)=

    以下程序的输出结果是 #include<stdi0.h> main() { int i=0,a=0; while(i<20) { for(;;) { if((i%10)==0)break; elsei--; } i+=11;a+=i; } printf(“%d\n”,A) ; }

    A.21

    B.32

    C.33

    D.11


    正确答案:B
    解析:break语句只能在循环体和switch语句体内使用。本题程序为在while循环中嵌套for循环。先看内层for循环,该循环的3个表达式全部省略,循环条件始终为真,但循环体内的break语句为终止循环的条件。首先,由初始条件判断外层循环while括号内表达式的值,该值为真,执行本次while循环,即执行循环体内的if语句,判断该表达式后面括号里表达式的值为真,执行break语句,跣出内层循环,执行下面的语句,此时i和a的值均变为11;回到外层循环,判断表达式“i20”仍为真,执行内层循环语句,此时if条件不满足,执行else语句,i的值为10,继续内层循环,if语句条件满足,执行break语句,跳出内层循环,执行下面的语句后,i和a的值分别是21和32。再判断外层循环的条件为假,结束循环。

  • 第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题:

    以下程序的输出结果是#include "stdio.h"main(){ int a=065; printf("%d\n",--a);}


    正确答案:52
    本题主要考查数据的格式化输出。程序首先给整型变量a赋一个八进制数的初值,根据输出的格式“%d”我们知道,最终需要输出一个十进制数的结果,因此,首先需要将八进制数转换为十进制数,这个过程我们可以通过二进制数来实现,即首先将八进制转换为二进制,然后将二进制转换为十进制。
    由于2的3次方等于8,因此,一位八进制数对应于三位二进制数,因此,65对应的二进制数为110101,其中6对应前面的110,而5对应后面的101,再将这个二进制数转换为十进制为32+16+4+1=53,再自减1后输出。因此,本题程序的输出结果为52。

  • 第14题:

    有以下程序include main(){ int.i=0,a=0;while(i<20){for(;;) {if((i%10)==0)break;el

    有以下程序 #include <stdio.h> main() { int.i=0,a=0; while(i<20) { for(;;) { if((i%10)==0) break; else i--; } i+=11; a+=i; } printf("%d\n",a) ; } 程序运行后的输出结果是( )

    A.21

    B.32

    C.33

    D.11


    正确答案:B

  • 第15题:

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

  • 第16题:

    以下程序的输出结果是()。includevoid prt(int*x,int*y,int*z){printf("%d,%d,%d\n",++

    以下程序的输出结果是( )。 #include<stdio.h> void prt(int *x,int *y,int *z) { printf("%d,%d,%d\n",++ *x,++ *y,*(z++));} main() { int a=10,b=40,c=20; prt(&a,&b,&c); prt(&a,&b,&c); }

    A.11,42,31 12,22,41

    B.11,41,20 12,42,20

    C.11,21,40 11,21,21

    D.11,41,21 12,42,22


    正确答案:B
    解析:C程序可以通过传递指针的值(变量的地址)来达到修改实参变量值的目的,这是本题主要说明的问题。这里要注意表达式,(z++)的值是*z,其后的z++在程序中无实际作用。函数调用时,由于x,y和z分别指向a,b和c,因此,*x,*y和*z就是a,b和c的值。第一次调用函数时,*x=a=10,*y=b=40,*z=c=20,输出结果为11,41,20,至此,已经可以肯定选项B)是正确的。第二次输出为:12,42,20。

  • 第17题:

    下列程序的输出结果是()。includemain(){int a=4; printf("%d\n",(a+=a-=a*a));}A.-8B.

    下列程序的输出结果是( )。 #include<stdio.h> main() { int a=4; printf("%d\n",(a+=a-=a*a)); }

    A.-8

    B.14

    C.0

    D.-24


    正确答案:D
    解析: 表达式a+=a-=a*a看起来复杂,其实将它分成两个表达式来计算就简单了:①第一个表达式 (a-=a*a)=(a=a-a*a=-12);②第二个表达式(a+=a-=a*a)=(a=a+a=-24)。

  • 第18题:

    以下程序的输出结果是main(){ int a=21,b=11; printf("%d\n",--a+b,--b+a);} A.30 B.31 C.32 D.33


    正确答案:A
    本题主要考查逗号运算符。在本题的程序中,首先定义两个整型变量a和b,并分别赋初值为21和11,然后用输出语句对由a和b组成的表达式进行输出。输出语句的输出格式表明只输出一个数据,但在后面的输出列表中则有两个待输出的表达式。
    --a+b,--b+a的运算顺序是首先运算--a+b,然后由于--和+运算符的优先级高于逗号运算符,因此,运算--b+a,最后执行逗号运算符。
    运算--a+b的结果为31,但此时变量a的值变为了20,然后运算--b+a得到的结果为30,根据逗号运算符的特点,逗号运算符的结果为最后一个表达式的结果,因此,最后输出的30,本题正确的答案选A。

  • 第19题:

    请读程序:includefunc(int a,int b) { int c; c=a+b; return c;}main(){ int x=6,y=7,

    请读程序: #include<stdio.h> func(int a,int b) { int c; c=a+b; return c; } main(){ int x=6,y=7,z=8,r, r=func((x-,y++,x+y),z-); printf("%d\n",r); } 上面程序的输出结果是_______。

    A.11

    B.20

    C.21

    D.31


    正确答案:C
    解析:函数func()的作用是返回两个形参的和,第一个形参是x、y分别自减和自增后的和,其中(x-,y++,x+y)是一个逗号表达式,它的值应该等于x+y,所以整个表达式(x-,y++,x+y)的值为13,而第二个形参的值为8(根据语法规则,应当先使用,后自增),所以func()的返回值为13+8=21。

  • 第20题:

    以下程序的输出结果是()includemain(){ int i=0,a=0;while(i<20){ for(;;){if((i%10)=

    以下程序的输出结果是( ) #include<stdio.h> main() { int i=0,a=0; while(i<20) { for(;;){if((i%10)==0)break;else i--;} i+=11;a+=i; } printf("%d\n",A) ; }

    A.21

    B.32

    C.33

    D.11


    正确答案:B

  • 第21题:

    以下程序的输出结果是( )。includemain()int i=0,a=0;while(i<20)for(;;)if((i%10)==0)brea

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

    #include

    main()

    int i=0,a=0;

    while(i<20)

    for(;;)

    if((i%10)==0)break;

    else i--;

    i+=11;a+=I;

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

    A.21

    B.32

    C.33

    D.11


    正确答案:B

  • 第22题:

    以下程序输出的结果是()。includemain(){int i=010,j=10;printf("%d,%d\n:,++i,j--);}A

    以下程序输出的结果是( )。 #include <stdio.h> main() { int i=010,j=10; printf("%d,%d\n:,++i,j--); }

    A.11,10

    B.9,10

    C.010,9

    D.10,9


    正确答案:B
    解析:程序中i的值用八进制表示(十进制为8),++i是在变量使用前自身先加1,而j--是在变量使用后自身减1。所以,4个选项中B符合题意。

  • 第23题:

    下列程序的输出结果是()。includemain(){ int a=4printf("%d\n",(a+=a-=a*A) );}A.-8B.

    下列程序的输出结果是( )。#include<stdio.h>main(){ int a=4 printf("%d\n",(a+=a-=a*A) );}

    A.-8

    B.14

    C.0

    D.-24


    正确答案:D
    解析:表达式a+a-=a*8看起来复杂,其实将它分成两个表达式来计算就简单了:①第一个表达式(a-=a*a)=(a=a-a*a=-12);②第二个表达式(a+=a-=a*a):(a=a+a-24)。