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

第1题 (1.0分)        题号:6100        难度:中        第1章

下列叙述中正确的是

A:程序可以作为算法的一种表达方式

B:算法的有穷性是指算法的规模不能太大

C:算法的复杂度用于衡量算法的控制结构

D:算法的效率与数据的存储结构无关

答案:A

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

以下选项中与 ( !a== 0 )的逻辑值不等价的表达式是

A:( a== !0 )

B:a

C:(a>0 || a<0)

D:(a!= 0 )

答案:A

第3题 (1.0分)        题号:6842        难度:中        第2章

若有定义int  x,y; 并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++) : (y++)中的条件表达式(x-y) 等价的是().

A:(x-y<0||x-y>0)

B:(x-y<0)

C:(x-y>0)

D:(x-y==0)

答案:A

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

若变量已正确定义并赋初值,以下合法的赋值语句是

A:k=(m==n);

B:k=-m-n

C:k=int(m+n);

D:k=m*n=1;

答案:A

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

有以下程序

#include   <stdio.h>

main( )

{

    int  a = 2, b;

    b = (a >>= 1) + 4;

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

}

程序运行后的输出结果是

A:1,5

B:2,4  

C:2,6

D:2,5

答案:A

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

有以下程序段

    char c1,c2,c3;

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

若要给c1、c2、c3分别输入字母A、B、C,则以下对输入形式的描述正确的是

A:字母A、B、C之间可以用空格分隔

B:字母A、B、C之间不能有分隔符

C:字母A、B、C之间可以用回车符分隔

D:字母A、B、C之间可以用Tab键分隔

答案:B

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

若有定义:char ch; int a; double d;, 当输入为12345 678910.36时,以下选项中能给各个变量正确输入数据的是().

A:scanf("%d%c%lf",&a,&ch,&d);

B:scanf("%5d%2c%7.2lf",&a,&ch,&d);

C:scanf("%d%c%lf",a,ch,d);

D:scanf("5d%2c%7.2lf%",&a,&ch,&d);

答案:A

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

与数学表达式x≥y≥z对应的C语言表达式是

A:(x>=y)||(y>=x)

B:(x>=y>=z)

C:(x>=y)!(y>=z)

D:(x>=y)&&(y>=z)

答案:D

第9题 (1.0分)        题号:6770        难度:中        第4章

有如下程序

#include   <stdio.h>

main( )

{

    int  a = 0, b = 1;

    if (a++ && b++)

        printf("TRUE");

    else

        printf("FALSE");

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

}

程序运行后的输出结果是

A:FALSE_OUT:a=1,b=1

B:FALSE_OUT:a=0,b=2

C:TRUE_OUT:a=1,b=2

D:TRUE_OUT:a=0,b=1

答案:A

第10题 (1.0分)        题号:6106        难度:较难        第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;

          case 3:  a++;  b++;

       }

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

    }

程序的运行结果是

A:a=2,b=2

B:a=2,b=1

C:a=1,b=1

D:a=1,b=0

答案:B

第11题 (1.0分)        题号:6843        难度:中        第4章

有以下程序:

#include  <stdio.h>

main()

{ int  x=1, y=0;

if (!x)  y++;

else if (x==0)

if (x)  y+=2;

else   y+=3;

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

}

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

A:3

B:2

C:1

D:0

答案:D

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

设有定义:int m=1,n=2;

则以下if语句中,编译时会产生错误信息的是().

A:if(m>n) m--

else n--;

B:if(m=n){ m++; n++; }

C:if(m<0 && n<0) {  }

D:if(m>0) ;

else m++;

答案:A

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

有以下程序

    #include <stdio.h>

    void main()

    {

        int i, m = 0, n = 0, k = 0;

        for(i = 9; i <= 11; i++)

            switch(i / 10)

            {  case 0: m++; n++; break;

               case 10: n++; break;

               default: k++; n++;

            }

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

    }

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

A:4 5 1

B:3 5 4

C:1 5 4

D:1 3 2

答案:D

第14题 (1.0分)        题号:7197        难度:较易        第5章

有以下程序

    #include <stdio.h>

    main()

    {  int  i, sum;

       for( i=1; i<6;  i++ )  sum+=i;

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

    }

程序运行后的输出结果是

A:随机值

B:0

C:15

D:16

答案:A

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

有以下程序:

#include   <stdio.h>

main()

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

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

switch(i%2)

{ case 0: switch(a[i]%2)

  { case 0:a[i]++;break;

 case 1:a[i]--;

   } break;

case 1:a[i]=0;

}

for(i=0;i<4;i++) printf("%d ",a[i]); printf("\n");

}

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

A:0 3 0 4

B:2 0 5 0

C:3 3 4 4

D:3 0 4 0

答案:D

第16题 (1.0分)        题号:5962        难度:易        第5章

有如下程序段

      int  k;

      for(k=2;k==0;)  printf("%d",k--);

则for循环体执行的次数是

A:0次  

B:1次

C:2次   

D:无限次

答案:A

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

有以下程序

    #include <stdio.h>

    main()

    {  int  k, j, s;

       for( k=2; k<6; k++,k++ )

       {  s=1;

          for (j=k; j<6; j++ )  s+=j;

       }

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

    }

程序运行后的输出结果是

A:6

B:10

C:24

D:40

答案:B

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

有以下程序   

 #include <stdio.h>

    main()

    {

        int  i,j;

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

        {

            for(j=i; j<4; j++)  printf("%d*%d=%d  ",i,j,i*j);

            printf("\n");

        }

    }

程序运行后的输出结果是

A:1*1=1  1*2=2  1*3=3

2*2=4  2*3=6

3*3=9

B:1*1=1  1*2=2  1*3=3

2*1=2  2*2=4

3*1=3

C:1*1=1

1*2=2  2*2=4

1*3=3  2*3=6  3*3=9

D:1*1=1

2*1=2  2*2=4

3*1=3  3*2=6  3*3=9

答案:A

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

设有定义

    char str[] = "Hello";

则语句

    printf("%d %d", sizeof(str), strlen(str));

的输出结果是

A:5 5

B:6 6

C:6 5

D:5 6

答案:C

第20题 (1.0分)        题号:6054        难度:较易        第6章

以下定义数组的语句中错误的是

A:int  num[][3]={ {1,2},3,4,5,6 };

B:int  num[2][4]={ {1,2},{3,4},{5,6} };

C:int  num[]={ 1,2,3,4,5,6 };

D:int  num[][4]={1,2,3,4,5,6};

答案:B

第21题 (1.0分)        题号:7083        难度:较易        第6章

以下错误的定义语句是

A:int  x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};

B:int  x[4][]= {{1,2,3},{1,2,3},{1,2,3},{1,2,3}};

C:int  x[][3]={{0},{1},{1,2,3}};

D:int  x[][3]={1,2,3,4};

答案:B

第22题 (1.0分)        题号:7026        难度:较易        第6章

有以下程序

    #include <stdio.h>

    main()

    {  

        int  s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;

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

            c[s[i]]++;

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

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

        printf("\n");

    }

程序的运行结果是

A:2 3 4 4

B:4 3 3 2

C:1 2 3 4

D:1 1 2 3

答案:B

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

以下选项中叙述正确的是

A:char c1, c2, *c3, c4[40]; 是合法的变量定义语句

B:数组说明符的一对方括号中只能使用整型常量,而不能使用表达式

C:数组下标的下限可以是负值

D:若有数组定义 float array[4]; 则语句 printf("%f", array[3.12]);是合法的

答案:A

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

设有如下程序段

    int a[8] = {0};

    int b[] = {0};

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

    char d = "AB";

以下叙述正确的是

A:只有a,b,c的定义是合法的

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

C:只有a,b的定义是合法的

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

答案:C

第25题 (1.0分)        题号:6004        难度:易        第7章

以下叙述错误的是

A:未经赋值的全局变量值不确定

B:未经赋值的auto变量值不确定

C:未经赋值的register变量值不确定

D:未经赋值的静态局部变量值为0

答案:A

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

以下有关函数的叙述错误的是().

A:C语言规定,不能在函数的内部定义函数

B:在C语言的函数体中可以有多个return语句

C:在C语言中函数的实参个数可以有多个,各实参之间用分号隔开

D:C语言程序总是从main()函数开始执行

答案:C

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

有以下程序

#include <stdio.h>

#define  S(x)  x*x

main()

{  int  k=5, j=2;

   printf("%d,%d\n", S(k+j+2),S(j+k+2));

}

程序的运行结果是

A:21,18

B:81,81

C:21,21

D:18,18

答案:A

第28题 (1.0分)        题号:5936        难度:易        第7章

有以下程序

#include <stdio.h>

double fun(double  a)

{ double  x;

  x = a - (int)a;

  return x;

}

main( )

{  double  a = 3.1415;

   printf("%f\n", fun(a));

}

程序的运行结果是

A:3.000000   

B:3.141500

C:0.141500

D:0.000000

答案:C

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

以下判断形参变量a是否为素数的函数正确的是( ).

A:int  isprime(int     a)

        {  int  i;

           for(i=2; i<=a/2; i++)

             if(a%i==0) return  0;

           return  1;

        }

B:int isprime(int  a)

        {  int i;

           for(i=2; i<=a/2; i++)

              if(a%i==1) return  1;

           return  0;

        }

C:int  isprime(int  a)

        {  int  i;

           for(i=2; i<=a/2; i++)

             if(a%i==0) return  0;

             else  return  1;

        }

D:int isprime(int  a)

        {  int  i;

           for(i=2; i<=a/2; i++)

           if(a%i==1) return  1;

           else  return  0;

        }

答案:A

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

有以下程序

#include <stdio.h>

#define  S(x)  x/x*x

main( )

{  int  k=6, j=3;

   printf("%d,%d\n", S(k+j), S(j+k));

}

程序运行后的输出结果是

A:27,27

B:9,9

C:27,29

D:29,29

答案:C

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

若有定义语句:int  a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;,以下选项中错误引用a数组元素的是(其中 0≤i<10)

A:*(*(a+i))

B:a[ p-a ]

C:p[i]

D:*( &a[i] )

答案:A

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

若有以下程序

     #include <stdio.h>

     int  *f(int  *s, int  *t)

     {  int  k;

        if (*s < *t)  { k = *s;  *s=*t;  *t=k; }

        return s;

     }

     main()

     {  int  i=3, j=5, *p=&i, *q=&j, *r;  

        r=f(p,q);

        printf("%d,%d,%d,%d,%d\n", i, j, *p, *q, *r);

     }

则程序的输出结果是

A:5,3,3,5,5

B:3,5,5,3,5

C:3,5,3,5,5

D:5,3,5,3,5

答案:D

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

有以下程序

#include <stdio.h>

main()

{  int x[3][4] = {1,3,5,7,9,11,2,4,6,8,10,12} ;

   int (*p)[4] = x, k = 1, m, n = 0;

   for(m=0; m<2; m++) n += *(*(p+m)+k);

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

}

程序的运行结果是

A:10

B:20  

C:14

D:16

答案:C

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

若有以下程序

     #include <stdio.h>

     char  *a="you", b[ ]="welcome#you#to#China!";

     main()

     {  int  i,j=0;    char *p;

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

        {   if (*a == b[i])

            {  p=&b[i];

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

                {  if (a[j] != *p)  break;

                   p++;

                }

            if (a[j]=='\0')  break;

            }

        }

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

     }

则程序的输出结果是

A:#to#China!

B:#you#to#China!

C:me#you#to#China!

D:#China!

答案:A

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

有以下程序

     #include <stdio.h>

     void fun( int *a,int *b)

     { int *c;

       c=a;a=b;b=c;

     }

     main()

     { int  x=3, y=5, *p=&x, *q=&y ;

       fun(p,q);  printf("%d,%d,",*p,*q);

       fun(&x,&y); printf("%d,%d\n",*p,*q);

     }

程序运行后的输出结果是

A:3,5,3,5

B:3,5,5,3

C:5,3,3,5

D:5,3,5,3

答案:A

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

有以下程序:

#include   <stdio.h>

int add( int  a,int  b){ return (a+b);  }

main()

{ int  k, (*f)(), a=5,b=10;

f=add;

}

则以下函数调用语句错误的是().

A:k=f(a,b);

B:k=add(a,b);

C:k=(*f)(a,b);

D:k= *f(a,b);

答案:D

第37题 (1.0分)        题号:5913        难度:较难        第9章

若有定义

typedef int *T;

T  *a[20];

则以下与上述定义中a类型完全相同的是

A:int  **a[20];

B:int  (*a)[20];

C:int  *(*a)[20];

D:int  *a[20];

答案:A

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

以下叙述中错误的是

A:用typedef可以说明一种新的类型名

B:typedef的作用是用一个新的标识符来代表已存在的类型名

C:可以用typedef说明的新类型名来定义变量

D:typedef说明的新类型名必须使用大写字母,否则会出编译错误

答案:D

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

设有定义

#include <stdio.h >

#include <stdlib.h >

typedef struct{ int x,y; } T;

typedef struct{ int x,y; } *USER;

USER fun( )

{ USER p;

  p=(USER)malloc(sizeof(T));S

  p- >x=1;

  p- >y=2;

  return p;

}

函数fun返回值的类型是().

A:T类型的结构体

B:指向结构体类型的指针

C:int类型的元素

D:int类型的指针

答案:B

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

有以下程序

#include <stdio.h>

main( )

{  FILE *fp;

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

   fp = fopen("data.dat", "w+");

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

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

   {   rewind(fp);

       fprintf(fp, "%d\n", a[i]);

   }

   rewind(fp);

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

   fclose(fp);

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

}

程序运行后的输出结果是

A:6   

B:21

C:123456   

D:654321

答案:A

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

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

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

【程序填空】

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

题目:下列给定程序中,函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中,

       接着把a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放

       在a[2]中,把a所指数组元素中的次大值放在a[3],以此类推。

例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动后,

      数据排列为:1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数据的个数。

      规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标。

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

# include    <stdio.h>

#define    N    9

void fun(int  a[], int  n)

{  

        int  i,j, max, min, px, pn, t;

        for (i=0; i<n-1; i+=2)

        {

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

                max = min = 【?】;

                px = pn = i;

                for (j=i+1; j<n; j++)

                {

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

                        if (max<【?】)

                        {  

                                max = a[j]; px = j;

                        }

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

                        if (min>【?】)

                        {

                                min = a[j]; pn = j;

                        }

                }

                if (pn != i)

                {  

                        t = a[i]; a[i] = min; a[pn] = t;

                        if (px == i) px =pn;

                }

                if (px != i+1)

                {

                        t = a[i+1]; a[i+1] = max; a[px] = t;

                }

        }

}

main()

{

        int  b[N]={9,1,4,2,3,6,5,8,7}, i;

        printf("\nThe original data  :\n");

        for (i=0; i<N; i++)  printf("%4d ", b[i]);

        printf("\n");

        fun(b, N);

        printf("\nThe data after moving  :\n");

        for (i=0; i<N; i++)  printf("%4d ", b[i]);

        printf("\n");

}

答案:

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

a[i]

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

*(a+i)

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

*(i+a)

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

a[j]

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

*(a+j)

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

*(j+a)

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

a[j]

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

*(a+j)

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

*(j+a)

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

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

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

【程序改错】

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

题目:下列给定程序中函数fun的功能是:用下面的公式求π的近似值,直到最后一项

      的绝对值小于指定的数(参数num)为止。如"图片1"。

例如:程序运行后,输入0.0001,则程序输出3.1414。    

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

#include <math.h>

#include <stdio.h>

float fun ( float num )

{   

        int s ;

        float n, t, pi ;

        t = 1 ; pi = 0 ; n = 1 ;  s = 1 ;

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

        while(t >= num)

        {

                pi = pi + t ;

                n = n + 2 ;

                s = -s ;

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

                t = s % n ;

        }

        pi = pi * 4 ;

        return pi ;

}

main( )

{   

        float n1, n2 ;

        printf("Enter a float number: ") ;

        scanf("%f", &n1) ;

        n2 = fun(n1) ;

        printf("%6.4f\n", n2) ;

}

答案:

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

while(fabs(t)>=num)

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

while(num<=fabs(t))

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

while(fabs(t)>num)

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

while(num<fabs(t))

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

t=s/n;

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

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

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

【程序设计】

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

题目:请编写函数fun,该函数的功能是:计算并输出n(包括n)以内

      所有素数的平方根之和。

      

例如:若主函数中从键盘给n输入20后,则输出为sum=23.432264。

注意:n的值要求不大于100。

      请勿改动主函数main和其他函数中的任何内容,仅在函数fun的

      花括号中填入你编写的若干语句。

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

#include  <stdio.h>

#include  <math.h>

double fun(int n)  

{

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

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

}

void main()

{

        int n;

        double sum;

        printf("Input  N=");

        scanf("%d",&n);

        sum=fun(n);

        printf("\n\nsum=%f\n\n",sum);

}

答案: int m,k,i;

double s=0.0;

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

{

k=sqrt(m);

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

if(m%i==0)

break;

if(i>=k+1)

s+=sqrt(m);

}

return s;

01-14 06:09