您的位置: 网站首页 > 程序开发 > C语言程序设计案例教程 > 第四章 选择结构程序设计 > 【4.4 思考与练习】

4.4 思考与练习

 

思考与练习

1.选择题

(1)两次运行以下程序时,如果从键盘上分别输入6和4,则输出结果是      。

#include <stdio.h>

main()

{

    int x;

    scanf("%d",&x);

    if(x++>5) printf("%d",x);

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

}

A.7和5                                                        B.6和3

C.7和4                                                        D.6和4

(2)若k是int型变量,则以下程序片段的输出结果是      。

k=-3;

if(k<=0) printf("####");

else  printf("&&&&");

A.####                                                         B.&&&&

C.####&&&&                                              D.有语法错误,无输出结果

(3)若执行以下程序时,从键盘上输入2.0<CR>,则输出结果是      。

#include <stdio.h>

main()

{

    float x,y;

 

    scanf("%f",&x);

    if(x<0.0) y=0.0;

    else if((x<5.0)&&(x!=2.0))

                y=1.0/(x+2.0);

            else if(x<10.0) y=1.0/x;

            else y=10.0;

    printf("%f\n",y);

}

A.0.000000                                                   B.0.250000

C.0.500000                                                   D.1.000000

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

#include <stdio.h>

main()

{

    int x=1,y=0,a=0,b=0;

    switch(x)

    {

        case 1:

            switch(y)

            {

                case 0: a++; break;

                case 1: b++; break;

            }

        case 2:

            a++;

            b++;

            break;

    }

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

}

A.a=2, b=1                                                    B.a=1, b=1

C.a=1, b=0                                                    D.a=2, b=2

(5)若执行下以下程序时,从键盘上输入3和4,则输出结果是      。

#include <stdio.h>

main()

{

    int a,b,s;

    scanf("%d %d",&a,&b);

    s=a;

    if(a<b) s=b;

    s=s*s;

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

}

A.14                          B.16                          C.18                   D.20

(6)关于以下程序,说法正确的是      。

#include <stdio.h>

main()

{

    int x=3,y=0,z=0;

    if(x=y+z)  printf("* * * *");

    else  printf("# # # #");

}

A.有语法错误不能通过编译

B.输出* * * *

C.可以通过编译,但是不能通过连接,因而不能运行

D.输出# # # #

(7)若执行以下程序时,从键盘上输入5,则输出结果是      。

#include <stdio.h>

main()

{

    int x;

    scanf("%d",&x);

    if(x++>5) printf("%d\n",x);

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

}

A.7                            B.6                            C.5                     D.4

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

#include <stdio.h>

main()

{

    int x=100,a=10,b=20,ok1=5,ok2=0;

    if(a<b)

        if(b!=15)

            if(!ok1)

                x=1;

            else

            if(ok2)x=10;

    x=-1;

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

}

A.-1                                                             B.0

C.1                                                               D.不确定的值

(9)若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为      。

A.a<>0                      B.!a                           C.a=0                 D.a

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

#include <stdio.h>

main()

{

    int a=-1,b=4,k;

    k=(++a<0) && !(b--<=0);

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

}

A.104                      B.103                        C.003                 D.004

(11)表达式10!=9的值是      。

A.true                      B.非0值                   C.0                     D.1

(12)能正确表示a≥10或a≤0的关系表达式是      。

A.a>=10 or a<=0                                         B.a>=10 | a<=0

C.a>=10 || a<=0                                           D.a>=10 || a<=0

(13)设a为整型变量,      不能正确表达数学关系10<a<15。

A.!(a<=10)||!(a>=15)                                          B.a>10&&a<15

C.!(a<=10||a>=15)                                       D.!(a<=10)&&!(a>=15)

(14)若有以下定义:

float x; int a,b;

则正确的switch语句是      。

A.switch(x)                                               B.switch(x)

          {                                      { 

          case1.0: printf("*\n");                case1,2: printf("*\n");

          case2.0: printf("**\n");               case3: printf("**\n");

          }                                      }

C.switch (a+b)                                          D.switch (a+b);

          {                                      {

          case 1: printf("\n");                  case 1:printf("*\n");

          case 1+2: printf("**\n");              case 2:printf("**\n");

          }                                      }

(15)设所有变量均已正确说明,以下程序片段运行后,x的值是      。

a=b=c=0;

x=35;

if(!a) x--;

else if(b);

if(c) x=3;

else x=4;

A.34                        B.4                            C.35                   D.3

(16)能正确表示关系x<=y<=z的C语言表达式是      。

A.(x<=y)&&(y<=z)                                     B.(x<=y)and(y<=z)

C.(x<=y<=z)                                               D.(x<=y)&(y<=z)

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

#include <stdio.h>

main()

{

    int m=5;

    if(m++>5)  printf("%d\n",m);

    esle  printf("%d\n",m--);

}

A.7                          B.6                            C.5                     D.4

(18)当a=1,b=3,c=5,d=5时,执行以下程序片段后,x的值为      。

if(a<b)

    if(c<d)  x=1;

    else

        if(a<c)

            if(b<d) x=2;

            else   x=3;

        else   x=6;

else   x=7;

A.1                          B.2                            C.3                     D.6

(19)设有如下定义:int x=l,y=-1;,则语句printf("%d\n",(x--&++y));的输出结果是

      。

A.1                          B.0                            C.-1                   D.2

(20)当c的值不为0时,以下选项中,能正确将c的值赋给变量a、b的是      。

A.c=b=a;                                                     B.(a=c) || (b=c) ;

C.(a=c) &&(b=c);                                        D.a=c=b;

(21)语句printf("%d \n",12 &012);的输出结果是      。

A.12                        B.8                            C.6                     D.012

(22)能正确表示a和b同时为正或同时为负的逻辑表达式是      。

A.(a>=0‖b>=0)&&(a<0‖b<0)                   B.(a>=0&&b>=0)&&(a<0&&b<0)

C.(a+b>0)&&(a+b<=0)                                D.a*b>0

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

#include <stdio.h>

main()

{  

    int a=-1,b=1,k;

    if((++a<0) && !(b--<=0))

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

    else

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

}

A.-1  1                  B.0  1                      C.1  0               D.0  0

(24)与语句y=(x>0?1:x<0?-1:0);的功能相同的if语句是      。

A.if(x>0) y=1;                                         B.if(x)

         else if(x<0) y=-1;                      if(x>0) y=1;

         else y=0;                               else if(x<0) y=-1;

                                                else y=0;

C.y=-1                                                        D.y=0;

        if(x)                                   if(x>=0)

        if(x>0) y=1;                                if(x>0) y=1;

            else if(x==0) y=0;                      else y=-1;

            else y=-1;

(25)若有定义语句float w;int a, b;,则正确的switch语句是      。

A.switch(w)                                               B.switch(a);

        {   case 1.0: printf("*\n");        {   case 1 printf("*\n");

            case 2.0: printf("**\n");            case 2 printf("**\n");

        }                                       }

C.switch(b)                              D.switch(a+b);

        {   case 1:   printf("*\n");             {   case 1: printf("*\n");

            default:  printf("\n");                  case 2: printf("**\n");

            case 1+2: printf("**\n");                default: printf("\n");

        }                                       }

(26)能正确表示逻辑关系a≥=10或a≤0的C语言表达式是      。

A.a>=10 or a<=0                                         B.a>=0|a<=10   

C.a>=10 &&a<=0                                        D.a>=10‖a<=0

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

#include <stdio.h>

main()

{   

    int x=1,a=0,b=0;

    switch(x)

    {

        case 0:  b++;

        case 1:  a++;

        case 2:  a++; b++;

    }

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

}

A.a=2,b=1                                                   B.a=1,b=1

C.a=1,b=0                                                   D.a=2,b=2

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

#include <stdio.h>

main()

{    

    float x=2.0,y;

    if(x<0.0) y=0.0;

    else if(x<10.0) y=1.0/x;

          else y=1.0;

    printf("%f\n",y);

}

A.0.000000                     B.0.250000                C.0.500000         D.1.000000

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

#include <stdio.h>

main()

{   

    int a=2,b=-1,c=2;

    if(a<b)

        if(b<0) c=0;

    else c++;

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

}

A.0                          B.1                            C.2                     D.3

(30)执行以下程序片段后,x的值为      。

int a=14,b=15,x;

char c='A';

x=(a&&b)&&(c<'B');

A.ture                      B.false                       C.0                     D.1

(31)设x、y、t均为int型变量,则执行语句x=y=3; t=++x||++y;后,y的值为      。

A.不定值                 B.4                            C.3                     D.1

(32)若执行以下程序时,从键盘上输入9,则输出结果是      。

#include <stdio.h>

main()

{ 

    int  n;

    scanf("%d",&n);

    if(n++<10) printf("%d\n",n);

    else printf("%d\n",n--);

}

A.11                        B.10                          C.9                     D.8

(33)若a、b、c1、c2、x、y均为整型变量,则正确的switch语句是      。

A.swich(a+b);                                           B.switch(a*a+b*b)   

        {                                       {

            case 1: y=a+b; break;                    case 3:   

            case 0: y=a-b; break;                    case 1: y=a+b; break;

        }                                           case 3: y=b-a; break;

                                                }

C.switch(a-b)                                           D.switch a

        {                                       {

            default: y=a*b; break;                   case c1: y=a-b; break;

            case 3: case 4: x=a+b; break;            case c2: x=a*d; break;

            case 7: case 9: y=a-b; break;            default:x=a+b;

        }                                       }

(34)若变量c为char型,能正确判断出c为小写字母的表达式是       。

A.'a'<=c<= 'z'                                               B.(c>= 'a')||(c<= 'z')

C.('a'<=c)and ('z'>=c)                                    D.(c>= 'a')&&(c<= 'z')

(35)设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则运算逻辑表达式(m=a>b)&&(n=c>d)后,n的值为      。

A.0                          B.1                            C.2                     D.3

(36)若执行以下程序时,从键盘上输人5,则输出结果是      。

#include <stdio.h>

main()

{  

    int x;

    scanf("%d",&x);

    if(x--<5) printf("%d",x);

    else printf("%d",x++);

}

A.3                          B.4                            C.5                     D.6

(37)设w、x、y、z、m均为int型变量,以下程序片段运行后,m的值是      。

w=1;  x=2;  y=3; z=4;

m=(w<x)?w:x;    m=(m<y)?m:y;    m=(m<z)?m:z;

A.4                          B.3                            C.2                     D.2

(38)整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是

      。

A.x || y                    B.x | y                       C.x & y                     D.x ^ y

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

#include <stdio.h>

main()

{ 

    int  a=5,b=4,c=6,d;

    printf("%d\n",d=a>b?(a>c?a:c):b);

}

A.5                          B.4                            C.6                     D.不确定

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

#include <stdio.h>

main()

{

    int a=4,b=5,c=0,d;

    d=!a&&!b||!c;

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

}

A.1                          B.0                            C.非0值            D.-1

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

#include <stdio.h>

main()

{  

    int a=5,b=4,c=3,d;

    d=(a>b>c);

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

}

A.0                          B.1                            C.2                     D.3

(42)设已有定义语句int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是      。

A.6                          B.0                            C.2                     D.1

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

#include <stdio.h>

main()

{  

    int a=15,b=21,m=0;

    switch(a%3)

    {

        case 0: m++; break;

        case 1: m++;

                switch(b%2)

                {

                    default: m++;

                    case 0: m++; break;

                }

    }

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

}

A.1                          B.2                            C.3                     D.4

2.上机操作题

(1)编写一个程序,输入三个整数,按由大到小的顺序输出这三个数。

(2)编写一个程序,要求用户输入运算数和四则运算符,输出计算结果。

(3)编写一个程序,求三个整数中的最大值。

(4)利用如下函数编写一个程序,要求输入一个x值,输出y值。