二级C语言备考10

一、单选   共40题 (共计40分)

第1题 (1.0分)        题号:6104        难度:易        第1章

以下叙述正确的是

A:有些算法不能用三种基本结构来表达

B:C语言程序不编译也能直接运行

C:结构化程序的三种基本结构是循环结构、选择结构、顺序结构

D:如果C语言程序实现的算法很简单,则计算机不进行任何代码转换就能执行程序

答案:C

第2题 (1.0分)        题号:6928        难度:易        第2章

以下选项中不能作为C语言合法常量的是

A:1.00E+05

B:cd'

C:"\a"

D:\011'

答案:B

第3题 (1.0分)        题号:7159        难度:较易        第2章

若有以下程序

     #include

     main()

     {  int c;

        c = 13|5;

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

     }

则程序的输出结果是

A:13

B:15

C:18

D:5

答案:A

第4题 (1.0分)        题号:6041        难度:易        第2章

以下是正确C语言实型常量的是

A:.e-1

B:e-1

C:-1e

D:1e-1

答案:D

第5题 (1.0分)        题号:6840        难度:中        第2章

有以下程序:

#include   

main()

{int  x, y, z;

 x=y=1;

 z=x++,y++,++y;

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

}

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

A:2,3,3

B:2,3,2

C:2,3,1

D:2,2,1

答案:C

第6题 (1.0分)        题号:6075        难度:中        第3章

有以下程序

    #include

    main()

    {  char  a,b,c,d;

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

       c=getchar();

       d=getchar();

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

    }

当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:回车也是一个字符)

    12

    34

则输出结果是

A:12

               3

B:12

C:1234

D:12

               34

答案:A

第7题 (1.0分)        题号:7044        难度:较易        第3章

有以下程序

    #include

    main()

    {

        char  c1,c2,c3,c4,c5,c6;

        scanf("%c%c%c%c", &c1,&c2,&c3,&c4);

        c5=getchar();    

        c6=getchar();

        putchar(c1);         

        putchar(c2);

        printf("%c%c\n",c5,c6);

    }

程序运行后,若从键盘输入(从第1列开始)

     123<回车>

     45678<回车>

则输出结果是

A:1245

B:1256

C:1278

D:1267

答案:A

第8题 (1.0分)        题号:6143        难度:较易        第3章

若有定义 float a=12.3f;  double b=456.78; 若想用printf函数输出a和b的值,关于输出格式,以下说法正确的是().

A:只能用%lf输出a,用%f输出b

B:只能用%f输出a,用%lf输出b

C:只能用%lf输出a,用%lf输出b

D:既可以用%f输出a,也可以用%f输出b

答案:D

第9题 (1.0分)        题号:6436        难度:较易        第4章

有以下程序段

    #include

main()

  {  int   a, b, c;

    a=10;  b=50;  c=30;

    if (a>b) a=b,  b=c;  c=a;

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

程序的输出结果是( ).

A:a=10 b=50 c=10

B:a=10 b=50 c=30

C:a=10 b=30 c=10  

D:a=50 b=30 c=50

答案:A

第10题 (1.0分)        题号:7170        难度:中        第4章

有以下程序

    #include

    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=1,b=0

B:a=1,b=1

C:a=2,b=1

D:a=2,b=2

答案:C

第11题 (1.0分)        题号:6435        难度:较易        第4章

若有定义:

    float x=1.5;

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

则正确的switch语句是( ).

A:switch(a+b)

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

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

B:switch((int)x);

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

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

C:switch(x)

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

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

D:switch(a+b)

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

            case  c:  printf("**\n"); }

答案:A

第12题 (1.0分)        题号:6714        难度:中        第4章

有以下程序段

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

        if(a>b) a=b;

        if(a>c) a=c;

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

    该程序段的功能是

A:输出a、b、c中的最小值

B:输出a、b、c中的最大值

C:输出a的原始值

D:输出a、b、c中值相等的数值

答案:A

第13题 (1.0分)        题号:6740        难度:较难        第5章

有以下程序

    #include

    main()

    {

       int  i=1,k=0;

       for(  ;  i<6 ; )

       {   switch(i%3)

              {  case 0: k++;

                 case 1: k++; break;

                 case 2: k++; continue;

              }

            i+=1;

       }

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

    }

程序的运行情况是

A:形成无限循环

B:输出6

C:输出5

D:输出4

答案:A

第14题 (1.0分)        题号:7286        难度:中        第5章

若变量已正确定义

    for( x=0,y=0; ( y!=99 && x<4 ); x++ )

则以上for循环

A:执行3次

B:执行4次

C:执行无限次

D:执行次数不定

答案:B

第15题 (1.0分)        题号:6773        难度:较难        第5章

有如下程序段

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

         if (i <= 5) break;

则循环结束后i的值为

A:1

B:0

C:5

D:10

答案:B

第16题 (1.0分)        题号:7373        难度:中        第5章

有以下程序

#include

main()

{  int  a=1, b=0;

   for(;a<5; a++)

   {  if (a%2==0)  break;

      b += a;

   }

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

}

程序的运行结果是

A:1

B:10

C:0

D:4

答案:A

第17题 (1.0分)        题号:6960        难度:中        第5章

有以下程序

    #include

    main()

    { int  i;

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

      { if(i++%5==0)

           if(++i%8==0)  printf("%d ",i);

      }

      printf("\n");

    }

执行后的输出结果是

A:5

B:24

C:32

D:40

答案:C

第18题 (1.0分)        题号:7256        难度:中        第5章

以下叙述中正确的是

A:只能在循环体内和switch语句体内使用break语句

B:当break出现在循环体中的switch语句体内时,其作用是跳出该switch语句体,并中止循环体的执行

C:continue语句的作用是:在执行完本次循环体中剩余语句后,中止循环

D:在while语句和do-while语句中无法使用continue语句

答案:A

第19题 (1.0分)        题号:5934        难度:易        第6章

设有如下程序段

int  a[1] = {0};

int  b[] = {9};

char  c[3] = {"A", "B"};

char  d = "12";

以下叙述正确的是

A:a, b的定义合法,c, d的定义不合法

B:a,b,c,d的定义都是合法的

C:a,b,c的定义是合法的,d的定义不合法

D:只有a的定义是合法的

答案:A

第20题 (1.0分)        题号:7269        难度:中        第6章

以下叙述中正确的是

A:任何情况下都不能用函数名作为实参

B:函数既可以直接调用自己,也可以间接调用自己

C:函数的递归调用不需要额外开销,所以效率很高

D:简单递归不需要明确的结束递归的条件

答案:B

第21题 (1.0分)        题号:6115        难度:中        第6章

有以下程序

     #include

     main()

     {  char  s[]="012xy\08s34f4w2";

        int  i, n=0;

        for ( i=0; s[i]!=0; i++ )

           if(s[i] >= '0' && s[i] <= '9')  

               n++;

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

     }

程序运行后的输出结果是

A:7

B:0

C:3

D:8

答案:C

第22题 (1.0分)        题号:6577        难度:中        第6章

有以下程序

#include

#include

main()

{  int  i;

   char  a[]="How are you!";

   for (i=0; a[i]; i++)

      if (a[i] == ' ')

      {  strcpy(a, &a[i+1]);

         i=0;

      }

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

}

程序的运行结果是

A:you!

B:Howareyou!

C:areyou!

D:are you!

答案:A

第23题 (1.0分)        题号:6993        难度:易        第6章

若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是

A:#define  n  5

int  a [2*n];

B:int  n=10,a[n];

C:int  a[5+5];

D:#define  N  10

int  a[N];

答案:B

第24题 (1.0分)        题号:7264        难度:中        第6章

以下叙述中正确的是

A:语句 int a[4][3] = {{1,2}, {4,5}}; 是错误的初始化形式

B:语句 int a[4][3] = {1,2,4,5}; 是错误的初始化形式

C:语句 int a[][3] = {1,2,4,5}; 是错误的初始化形式

D:在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵

答案:D

第25题 (1.0分)        题号:7240        难度:中        第7章

下面选项中关于编译预处理的叙述正确的是

A:预处理命令行必须使用分号结尾

B:凡是以#号开头的行,都被称为编译预处理命令行

C:预处理命令行不能出现在程序的最后一行

D:预处理命令行的作用域是到最近的函数结束处

答案:B

第26题 (1.0分)        题号:6118        难度:难        第7章

有以下程序

#include   

void fun( int  n )

{  static int  k=0;

   if(n<0)  {  printf("-");   n=-n;  }

   k+=n%10;     

   printf("%d,",k);

   if(n/10)  

       fun(n/10);

}

main( )

{  int  x=-12;

   fun(x);    

   printf("\n");

}

程序运行后的输出结果是

A:-2,3

B:-1,-2,

C:-2,-3,

D:-2,1

答案:A

第27题 (1.0分)        题号:6752        难度:中        第7章

有以下程序

    #include

    main()

    {  int findmax(int,int,int),m;

            ┋

       m=findmax(a,b,c);

            ┋

    }

    int findmax(int x,int y,int z)

    {       …          }

则以下叙述正确的是

A:在main函数中声明了findmax函数

B:在main函数中定义了findmax函数

C:在main函数中两次调用了findmax函数

D:在main函数内、外重复定义了findmax函数

答案:A

第28题 (1.0分)        题号:6563        难度:中        第7章

以下说法正确的是().

A:函数可以返回另一个函数的整个函数体

B:函数返回值只能是基本数据类型的数值或指针

C:函数返回值可以是一个指向函数的指针

D:函数返回值可以是一个数组,同时返回多个值

答案:C

第29题 (1.0分)        题号:5964        难度:中        第7章

有以下程序

#include   

void fun(int  a[ ], int  n)

{  

   int i;

   for (i=0; i

   {

       if (i % 3 == 0)

          a[i] -= n;

       else

          a[i] += n;

    }

}

main( )

{  int c[5] = {6,7,8,9,10},i;

   fun(c, 5);

   for (i=0;i<5; i++)  printf("%d,", c[i]);

   printf("\n");

}

程序运行后的输出结果是

A:1,12,13,4,15,

B:10,9,8,7,6,

C:1,7,13,9,15,

D:10,12,8,4,6,

答案:A

第30题 (1.0分)        题号:6057        难度:较易        第7章

有以下程序

#include   

int new_div(double  a, double  b)

{    return a / b + 0.5;   }

main( )

{   printf("%d", new_div(7.8, 3.1));   }

程序运行后的输出结果是

A:1

B:2

C:3

D:0

答案:C

第31题 (1.0分)        题号:6936        难度:中        第8章

设有定义

    double  a[10] ,*s=a;

以下能够代表数组元素a[3]的是

A:(*s)[3]

B:*(s+3)

C:*s[3]

D:*s+3

答案:B

第32题 (1.0分)        题号:7175        难度:中        第8章

有以下程序

     #include

     main()

     {  int  y=1,x,a[]={2,4,6,8,10},*p;

        p=&a[1];

        for( x=0; x<3; x++ )  y=y+*( p+x );

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

     }

程序运行后的输出结果是

A:17

B:19

C:18

D:20

答案:B

第33题 (1.0分)        题号:6187        难度:难        第8章

有以下程序

     #include

     #include

     char *p[10];

     int n=0;

     int fun(char *q)

     {

       int len=strlen(q);

       n=0;p[n]=q;

       if(len>1) p[++n]=q+1;

       if(len>3) p[++n]=q+3;

       if(len>5) p[++n]=q+5;

       return n;

     }

     void main()

     {

       char s[100];

       gets(s);

       n=fun(s);

       for(--n;n>=0;n--)

         printf("%s\n",p[n]);

     }

程序运行时输入:HELLO WORLD!<回车>,则输出结果是().

A:LO WORLD!

     ELLO WORLD!

     HELLO WORLD!

B:WORLD!

     LLO WORLD!

     HELLO WORLD!

C:HELLO WORLD!

     ELLO WORLD!

     LO WORLD!

D:ELLO WORLD!

     LO WORLD!

     WORLD!

答案:A

第34题 (1.0分)        题号:6376        难度:难        第8章

有以下程序

#include   

void  fun(char  *a,char  *b)

{  char  *s=a;

   while(*s) s++;

   s--;

   while(s>=a)

   { *b=*s; s--; b++; }

   *b='\0';

}

main()

{  char  s1[]="abc",s2[6];

   fun(s1,s2);

   puts(s2);

}

程序运行后的输出结果是

A:cbaabc

B:abc

C:cba

D:abccba

答案:C

第35题 (1.0分)        题号:6113        难度:中        第8章

对于以下函数声明

void  fun(int  array[4], int  *ptr);

以下叙述中正确的是

A:array, ptr 都是指针变量

B:调用fun函数时,实参的值将逐一复制给array

C:调用fun函数时,array按值传送,ptr按地址传送

D:array 是数组,ptr 是指针,它们的性质不同

答案:A

第36题 (1.0分)        题号:7029        难度:较难        第8章

有以下程序

     #include

     void  fun( char  *a, char  *b )

     {  while( *a=='*' ) a++;

        while( *b=*a ){ b++;a++; }

     }

     main()

     {  char  *s="*****a*b****" , t[80];

        fun(s,t);  puts(t);

     }

程序的运行结果是

A:ab

B:a*b

C:*****a*b

D:a*b****

答案:D

第37题 (1.0分)        题号:6947        难度:中        第9章

有以下程序

#include

#include

struct  A

{  

    int a;

    char b[10];

    double c;

};

struct A f(struct A t);

main()

{

    struct A a={1001,"ZhangDa",1098.0};

    a=f(a);

    printf("%d,%s,%6.1f\n",a.a,a.b,a.c);

}

struct A  f(struct A  t)

{

    t.a=1002;

    strcpy(t.b,"ChangRong");

    t.c=1202.0;

    return t;

}

程序运行后的输出结果是

A:1002,ZhangDa,1202.0

B:1002,ChangRong,1202.0

C:1001,ChangRong,1098.0

D:1001,ZhangDa,1098.0

答案:B

第38题 (1.0分)        题号:6945        难度:中        第9章

有以下结构体说明、变量定义和赋值语句

     struct STD

     { char  name[10];

       int  age;

       char  sex;

     } s[5],*ps;

     ps=&s[0];

则以下scanf函数调用语句有错误的是

A:scanf("%s",s[0].name);

B:scanf("%d",&s[0].age);

C:scanf("%c",&(ps->sex));

D:scanf("%d",ps->age);

答案:D

第39题 (1.0分)        题号:6890        难度:中        第9章

有以下程序:

#include   

#include   

typedef  struct { char  name[9];  char  sex;  int  score[2];  } STU;

STU  f (STU  a)

{ STU  b={"Zhao", 'm', 85, 90};

int  i;

strcpy( a.name, b.name );

a.sex = b.sex;

for ( i=0; i<2; i++ )  a.score[i] = b.score[i];

return  a;

}

main()

{ STU  c= { "Qian", 'f', 95, 92 }, d;

d = f(c);

printf ("%s,%c,%d,%d, ", d.name, d.sex, d.score[0], d.score[1]);

printf ("%s,%c,%d,%d\n", c.name, c.sex, c.score[0], c.score[1]);

}

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

A:Zhao,m,85,90, Qian,f,95,92

B:Zhao,m,85,90, Zhao,m,85,90

C:Qian,f,95,92, Qian,f,95,92

D:Qian,f,95,92, Zhao,m,85,90

答案:A

第40题 (1.0分)        题号:6950        难度:中        第10章

有以下程序

#include

main()

{

    FILE  *fp;

    int  k, n, a[6]={1,2,3,4,5,6};

    fp = fopen("d2.dat", "w");

    fprintf(fp, "%d%d%d\n", a[0],a[1],a[2]);

    fprintf(fp, "%d%d%d\n", a[3],a[4],a[5]);

    fclose(fp);

    fp = fopen("d2.dat", "r");

    fscanf(fp, "%d%d", &k, &n);

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

    fclose(fp);

}

程序运行后的输出结果是

A:1 2

B:1 4

C:123 4

D:123 456

答案:D

二、程序填空   共1题 (共计18分)

第1题 (18.0分)        题号:316        难度:中        第1章

/*-------------------------------------------------------

【程序填空】

---------------------------------------------------------

题目:函数fun的功能是:计算如“图片1”直到“图片2” 。

      若x=2.5,函数值为1.917915。

-------------------------------------------------------*/

#include   

#include   

double fun(double  x)

{  

        double  f, t;      int  n;

        f = 1.0 + x;

/***********SPACE***********/

        t=【?】;

        n = 1;

        do

        {

                n++;

/***********SPACE***********/

                t*=(-1.0)*x/【?】;

                f += t;

        }

/***********SPACE***********/

        while(【?】 >=1e-6);

        return  f;

}

main()

{   

        double x, y;

        x=2.5;

        y = fun(x);

        printf("\nThe result is :\n");

        printf("x=%-12.6f y=%-12.6f\n", x, y);

}

答案:

=======(答案1)=======

x

=======(答案2)=======

n

=======(答案3)=======

fabs(t)

三、程序改错   共1题 (共计18分)

第1题 (18.0分)        题号:247        难度:难        第2章

/*------------------------------------------------------    

【程序改错】

--------------------------------------------------------

功能:判断整数x是否是同构数。若是同购数,函数返回1;否则返回0。

说明:所谓“同构数”是指这个数出现在它的平方数的右边。

例如:输入整数25,25的平方数是625,25是625中右侧的数,

      所以25是同构数。

注意:x的值由主函数从键盘读入,要求不大于1000。

------------------------------------------------------*/

#include

#include

int fun(int x)

{

  /**********FOUND**********/

  int k

  /**********FOUND**********/

  k=x;

  /**********FOUND**********/

  if((k%10==x)&&(k%100==x)&&(k%1000==x))

    return 1;

  else

    return 0;

}

main()

{

  int x,y;

  printf("\nPlease enter a integer numbers:");

  scanf("%d",&x);

  if(x>100){printf("data error!\n");exit(0);}

  y=fun(x);

  if(y)

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

  else

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

}

答案:

=======(答案1)=======

int k;

=======(答案2)=======

k=x*x;

=======(答案3)=======

if((k%10==x)||(k%100==x)||(k%1000==x))

四、程序设计   共1题 (共计24分)

第1题 (24.0分)        题号:579        难度:中        第1章

/*-------------------------------------------------------

【程序设计】

---------------------------------------------------------

题目:编程从键盘输入一个M×N的二维数组,求该数组中最外圈元素的平均值,

      并输出结果。

-------------------------------------------------------*/

#include

#define M 3

#define N 4

void main()

{

        int a[M][N];

        int i,j,k=0;        /*k用来保存外围元素的个数*/

        double sum=0.0;

        printf("请输入数组:\n");

        for(i=0;i

           for(j=0;j

             scanf("%d",&a[i][j]);

        

        /**********Program**********/

     

       

       /**********  End  **********/

        printf("外围元素的平均值为:%lf\n", sum/k);

}

答案:  for(i=0;i

for(j=0;j

   if(i==0||i==M-1||j==0||j==N-1)  //四周边元素

    {

sum=sum+a[i][j];

k++;

}

你可能感兴趣的:(c语言,算法,开发语言)