二级C语言备考2

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

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

以下叙述中错误的是

A:算法正确的程序可以有零个输入

B:算法正确的程序最终一定会结束

C:算法正确的程序可以有零个输出

D:算法正确的程序对于相同的输入一定有相同的结果

答案:C

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

设有定义:int a=64,b=8;,则表达式(a&b)||(a&&b)和(a|b)&&(a||b)的值分别为

A:1和1

B:1和0

C:0和1

D:0和0

答案:A

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

有以下程序

#include

main()

{  int  a=2, b;

   b = a<<2;

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

}

程序运行后的输出结果是

A:2

B:4

C:6

D:8

答案:D

第4题 (1.0分)        题号:6321        难度:中        第2章

以下不能作为合法常量的是().

A:1.234e0

B:1.234e04

C:1.234e+4

D:1.234e0.4

答案:D

第5题 (1.0分)        题号:6706        难度:较易        第2章

设有定义:int a=0,b=1,c=1;

以下选项中,表达式值与其它三个不同的是

A:b=a==c

B:a=b=c

C:a=c==b

D:c=a!=c

答案:A

第6题 (1.0分)        题号:6812        难度:中        第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

34

B:12

C:1234

D:12

3

答案:D

第7题 (1.0分)        题号:7280        难度:中        第3章

有以下程序

    #include

    main()

    {

        int  sum, pad, pAd;     

        sum = pad = 5;  

        pAd = ++sum, pAd++, ++pad;

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

    }

程序的输出结果是

A:5

B:6

C:7

D:8

答案:B

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

有以下程序

#include

main()

{  int  k=33;

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

}

程序的运行结果是

A:33,41,21

B:33,33,33

C:41,33,21

D:33,21,41

答案:A

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

以下叙述中正确的是

A:在C语言中,逻辑真值和假值分别对应1和0

B:关系运算符两边的运算对象可以是C语言中任意合法的表达式

C:对于浮点变量x和y,表达式:x==y 是非法的,会出编译错误

D:分支结构是根据算术表达式的结果来判断流程走向的

答案:B

第10题 (1.0分)        题号:6987        难度:较易        第4章

有以下程序

    #include

    main()

    {  int  x;

       scanf("%d", &x);

       if(x<=3) ;  else

       if(x!=10)  printf("%d\n", x);

    }

程序运行时,输入的值在哪个范围才会有输出结果

A:小于3的整数

B:不等于10的整数

C:大于3或等于10的整数

D:大于3且不等10的整数

答案:D

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

以下关于switch语句的叙述中正确的是().

A:所有case的标号都应当是连续的

B:每个case语句标号后面可以没有break语句

C:char型常量不能做case的标号使用

D:default必须放在全部case的最后

答案:B

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

有如下程序

#include

main()

{

    int x = 0x13;

    if (x = 0x18) printf("T");

    printf("F");

    printf("\n");

}

程序运行后的输出结果是

A:TF

B:T

C:F

D:TFT

答案:A

第13题 (1.0分)        题号:6557        难度:中        第5章

有以下程序段

        int  s, n;

        s=1;

        for( n=10; n>0; n-- )  s+=n;

该程序段拟实现整数1~10的累加求和,但程序中有错误.以下4种修改方案中仍然错误的一个是().

A:将s=1; 改为 s=0;

B:将for循环改为for(n=10;n>1;n--)

C:将for循环改为for(n=10;n>=2;n--)

D:将for循环改为for(n=2;n<10;n++)

答案:D

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

以下程序拟实现计算 sum=1+1/2+1/3+ … +1/50 .

#include   

main( )

{  int  i;    double  sum;

   sum=1.0;

   i=1;

   do

   {  i++;    sum += 1/i;   }

   while( i<50 );

   printf("sum=%lf\n",sum);

}

程序运行后,不能得到正确结果,出现问题的语句是

A:sum += 1/i;

B:while(i<50);

C:sum = 1.0;

D:i++;

答案:A

第15题 (1.0分)        题号:7019        难度:中        第5章

有以下程序

    #include

    main()

    {  int i,j, m=55;

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

       for(j=3; j<=i; j++)  m=m%j;

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

    }

程序的运行结果是

A:0

B:1

C:2

D:3

答案:B

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

若有以下程序

    #include

    main()

    {  int  s=0, n;

       for (n=0; n<4; n++)  

       {  switch(n)

         {  default:  s+=4;

            case 1:  s+=1;

            case 2:  s+=2;

            case 3:  s+=3;

         }

       }

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

    }

则程序的输出结果是

A:6

B:18

C:10

D:24

答案:D

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

有以下程序

     #include

     #include

     main()

     {

        int s; float n,t,pai;

        t=1,pai=0,n=1.0,s=1;

        while(fabs(t)>1.0e-6)         {

          pai+=t;

          n+=2; s=-s;t=s/n;

        }

        printf("total=%f\n",pai);

     }

程序所计算的是().

A:1-1/2!+1/3!-1/5!+1/7!-…

B:1+1/3+1/5+1/7+1/9-…

C:1+1/2+1/3+1/4+1/5-…

D:1-1/3+1/5-1/7+1/9-…

答案:D

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

有以下程序

    #include

    main()

    {

        char  b,c;   

        int  i;

        b= 'a';   

        c = 'A';

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

        {   

            if (i%2) putchar(i+b);

            else putchar(i+c);

        }  

        printf("\n");

    }

程序运行后的输出结果是

A:abcdef

B:ABCDEF

C:aBcDeF

D:AbCdEf

答案:D

第19题 (1.0分)        题号:7149        难度:中        第6章

若有以下程序

     #include

     main()

     {  int  i, j=0;

        char  a[]="How are you!", b[10];

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

           if (a[i] == ' ')  b[j++]=a[i+1];

        b[j]='\0';

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

     }

则程序的输出结果是

A:Howareyou!

B:Howareyou

C:Hay!

D:ay

答案:D

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

有以下程序

#include   

main( )

{

    int  i, array[6] = {1, 5, 0, 4};

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

        printf("%d,", array[i] & 4);

    printf("\n");

}

程序运行后的输出结果是

A:1,2,1,2,0

B:1,5,0,4,0,  

C:1,5,5,4,0,  

D:0,4,0,4,0

答案:D

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

有以下程序

#include   

main( )

{  char  b[4][10];    int  i;

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

        scanf( "%s", b[i] );

   for( i=3; i>=0; i-- )

        printf( "%s ", b[i] );

   printf( "\n" );

}

执行时若输入:  Peach flower is pink.<回车>  ,则输出结果是

A:Peachflower is pink.

B:pink. is flower Peach

C:Peachflowerispink.

D:Pink is flower peach.

答案:B

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

有以下程序

    #include

    main()

    {

        int  a[4][4]={{1,4,3,2},

                      {8,6,5,7},

                      {3,7,2,5},

                      {4,8,6,1}};

        int i, j, k, t;

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

            for (j=0; j<3; j++)

                for (k=j+1; k<4; k++)

                    if (a[j][i] > a[k][i])

                       {

                           t=a[j][i];

                           a[j][i] = a[k][i];

                           a[k][i] = t;

                       } /* 按列排序 */

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

            printf("%d, ",a[i][i]);

    }

程序运行后的输出结果是

A:1, 6, 2, 1,

B:8, 7, 3, 1,

C:4, 7, 5, 2,

D:1, 6, 5, 7,

答案:D

第23题 (1.0分)        题号:7327        难度:中        第6章

以下选项中,没有编译错误的是

A:char  str3[] = {'d', 'e', 'b', 'u', 'g', '\0'};

B:char  str1[5] = "pass", str2[6];  str2 = str1;

C:char  name[10];  name = "china";

D:char  str4[];  str4 = "hello world";

答案:A

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

有以下程序(strcat函数用以连接两个字符串)

#include

#include

main()

{

    char a[20]="ABCD\0EFG\0",b[]="IJK";

    strcat(a,b);

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

}

程序运行后的输出结果是

A:IJK

B:ABCDE\0FG\0IJK

C:ABCDIJK

D:EFGIJK

答案:C

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

以下叙述中正确的是().

A:用static说明的变量是全局变量

B:register变量不能进行求地址运算

C:系统默认auto变量的初值为0

D:用register说明的变量被强制保留在CPU的寄存器中

答案:B

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

有以下程序

#include

int  a=2;

int  f()

{  static int  n=0;

   int m=0;

   n++;  a++;  m++;

   return n+m+a;

}

main()

{  int  k;

   for (k=0; k<3; k++)

      printf("%d,", f( ));

   printf("\n");

}

程序的运行结果是

A:5,7,9,

B:5,6,7,

C:5,8,11,

D:5,5,5,

答案:A

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

有以下程序

    #include   

    int fun(int  a[],int  k)

    {  if(k==0) return (a[0]);

       return  a[0]+fun(a+1,k-1);

    }

    main()

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

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

    }

执行后的输出结果是( ).

A:4

B:3

C:10

D:9

答案:C

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

有以下程序

    #include

    void  fun( int  a,  int  b )

    {  int   t;

       t=a;  a=b;  b=t;

    }

    main()

    {  int   c[10]={1,2,3,4,5,6,7,8,9,0}, i;

       for (i=0; i<10; i+=2)  fun(c[i], c[i+1]);

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

       printf("\n");

    }

程序的运行结果是( ).

A:1,2,3,4,5,6,7,8,9,0,

B:2,1,4,3,6,5,8,7,0,9,

C:0,9,8,7,6,5,4,3,2,1,  

D:0,1,2,3,4,5,6,7,8,9,

答案:A

第29题 (1.0分)        题号:7298        难度:较难        第7章

有以下程序

     #include

     int  fun( int  n )

     {  int  a;

        if( n==1 ) return  1;

        a = n + fun( n-1 );

        return ( a );

     }

     main()

     {   printf( "%d\n", fun(  5 ) );  }

程序的输出结果是

A:9

B:14

C:10

D:15

答案:D

第30题 (1.0分)        题号:6778        难度:中        第7章

有以下程序

#include

#define N 4

void fun(int a[][N])

{  

  int i;

  for(i=0; i

     a[0][i] += a[N-1][N-1-i];

}

main( )

{  int x[N][N]={ {1, 2, 3, 4},

                 {5, 6, 7, 8},

                 {9,10,11,12},

                 {13,14,15,16}}, i;

   fun(x);

   for (i=0;i

   printf("\n");

}

程序运行后的输出结果是

A:4,7,10,13,

B:1,6,11,16,

C:17,6,11,16,

D:5,13,21,29,

答案:C

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

以下叙述中正确的是

A:基类型不同的指针变量可以相互混用

B:函数的类型不能是指针类型

C:函数的形参类型不能是指针类型

D:设有指针变量为 double *p,则 p+1 将指针p移动8个字节

答案:D

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

以下不能将s所指字符串正确复制到t所指存储空间的是()

A:do{*t++=*s++;}while(*s );

B:for(i=0;t[i]=s[i];i++);

C:while(*t=*s){t++;s++}

D:for(i=0,j=0;t[i++]=s[j++]; );

答案:A

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

以下选项中正确的语句组是

A:char  *s;  s={"BOOK!"};

B:char  *s;  s="BOOK!";

C:char  s[10];  s="BOOK!";

D:char  s[];  s="BOOK!";

答案:B

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

设有定义语句:double *p,m=2.6;,要使指针p指向变量m,则以下正确的赋值语句是().

A:p=&m;

B:p=m;  

C:*p=&m;

D:*p=m;

答案:A

第35题 (1.0分)        题号:6998        难度:较难        第8章

有以下程序

#include

void fun1(char *p)

{

    char  *q;

    q=p;

    while(*q!='\0')

    {  

        (*q)++;  

        q++;  

    }

}

main()

{

    char  a[]={"Program"}, *p;

    p=&a[3];  

    fun1(p);  

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

}

程序执行后的输出结果是

A:Prphsbn

B:Prohsbn

C:Progsbn

D:Program

答案:B

第36题 (1.0分)        题号:7294        难度:中        第8章

设有某函数的说明为

    int* func(int a[10], int n);

则下列叙述中,正确的是

A:形参a对应的实参只能是数组名

B:说明中的a[10]写成a[]或*a效果完全一样

C:func的函数体中不能对a进行移动指针(如a++)的操作

D:只有指向10个整数内存单元的指针,才能作为实参传给a

答案:B

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

若有以下程序

#include

#include

#include

struct stu {  

    char  *name, gender;

    int  score;

};

main()

{  

    struct stu  a={NULL, 'm', 290}, b;

    a.name=(char *)malloc(10);

    strcpy(a.name, "Zhao");

    b = a;   b.gender = 'f';   b.score = 350;

    strcpy(b.name, "Qian");

    printf( "%s,%c,%d,", a.name, a.gender, a.score );

    printf( "%s,%c,%d\n", b.name, b.gender, b.score );

}

则程序的输出结果是

A:Zhao,m,290,Zhao,f,350

B:Zhao,m,290,Qian,f,350

C:Qian,f,350,Qian,f,350

D:Qian,m,290,Qian,f,350

答案:D

第38题 (1.0分)        题号:6124        难度:较易        第9章

设有以下程序段

struct  book

{

    float price;

    char language;

    char title[20];

} rec, *ptr;

ptr = &rec;

要求输入字符串给结构体变量rec的title成员,错误的输入语句是

A:scanf("%s", ptr.title);

B:scanf("%s", rec.title);

C:scanf("%s", (*ptr).title);

D:scanf("%s", ptr->title);

答案:A

第39题 (1.0分)        题号:6034        难度:较易        第9章

有如下定义:

struct

{  int  num;

   char  name[10];

   struct  

      { int  y; int  m; int  d;} birth;

} s,*ps=&s;

以下对内嵌结构体成员的引用形式错误的是

A:ps->birth.y  

B:s.birth.y

C:ps.birth.y

D:(*ps).birth.y

答案:C

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

有以下程序段

      FILE *fp;

      if( (fp=fopen("test.txt","w")) == NULL)

        {   printf("不能打开文件!");

            exit(0);}

      else

           printf("成功打开文件!");

若指定文件test.txt不存在,且无其他异常,则以下叙述错误的是

A:输出"不能打开文件!"

B:输出"成功打开文件!"

C:系统将按指定文件名新建文件

D:系统将为写操作建立文本文件

答案:A

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

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

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

【程序填空】

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

功能:编程求解"百钱百鸡问题":公鸡一只值5元钱,母鸡一只值3元

      钱,小鸡3只值一元钱,求解100元钱买100只鸡。输出结果如样张。

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

#include

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

【?】()

{

    int a,b,c;

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

    for(a=1;【?】;a++)

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

       for(b=1;【?】;b++)

           for(c=1;c<=100;c++)

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

               if((a+b+c==100)&&(15*a+9*b+1*c==【?】))

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

                    printf("公鸡:%4d,母鸡:%4d,小鸡:%4d\n",【?】);

}

答案:

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

main

=========或=========

void main

=========或=========

int main

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

a<=20

=========或=========

a<21

=========或=========

20>=a

=========或=========

21>a

=========或=========

a<=100

=========或=========

a<100

=========或=========

100>i

=========或=========

100>=i

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

b<=33

=========或=========

33>=b

=========或=========

b<34

=========或=========

34>b

=========或=========

b<=100

=========或=========

b<100

=========或=========

100>=b

=========或=========

100>b

=======(答案4)=======

300

=======(答案5)=======

a,b,c

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

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

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

【程序改错】

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

题目:下列给定程序中,fun函数的功能是:根据形参m,计算下列公式的值。

       t=1+1/2+1/3+1/4+…+1/m

例如:若输入5,则应输出2.283333。

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

#include

#include

#include

double fun(int m)

{

        double t=1.0;

        int i;

        for(i=2;i<=m;i++)

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

                t+=1.0/k;             /*只修改错误的地方其他不要改写否则不得分*/

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

        return i;

}

void main()

{

        int m;

        system("CLS");

        printf("\nPlease enter 1integer number: ");

        scanf("%d",&m);

        printf("\nThe result is %1f\n", fun(m));

}

答案:

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

t+=1.0/i;

=========或=========

t= t + 1.0/i ;

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

return t;

=========或=========

return (t);

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

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

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

【程序设计】

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

题目:请编写函数fun,该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不

      超过N),按顺序合并组成一个新的字符串。

例如:若字符串数组中的M个字符串为{"AAAA","BBBBBBB","CC"}则合并后的字符串内容应

      该是"AAAABBBBBBBCC"

注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入

      所编写的若干语句。

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

#include

#include

#define M 3

#define N 20

void fun(char a[M][N],char *b)

{

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

                                                              

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

}

void main()

{

  

        char w[M][N]={"AAAA", "BBBBBBB", "CC"},i;

        char a[100]={"##############################"};

        printf("The string:\n ");

        for(i=0;i

                puts(w[i]);

        printf("\n ");

        fun(w,a);

        printf("The A string:\n ");

        printf("%s ",a);

        printf("\n\n ");

}

答案: int i,j,k=0;

for(i=0;i

for(j=0;a[i][j]!='\0';j++)

b[k++]=a[i][j];

b[k]='\0';  

你可能感兴趣的:(算法,数据结构)