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

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

以下叙述中正确的是

A:C语言规定必须用main作为主函数名,程序将从此开始执行

B:可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行

C:C语言程序将从源程序中第一个函数开始执行

D:main的各种大小写拼写形式都可以作为主函数名,如:MAIN,Main等

答案:A

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

有以下程序

#include <stdio.h>

main()

{  

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

    x = (a^b)&c;

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

}

程序的运行结果是

A:3

B:1

C:2

D:0

答案:A

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

设有定义:int k=3,i=2; 以下选项中,变量k的值与其他三个不同的是().

A:k-=i;

B:k=--i;

C:k=i-1;

D:k=i--;

答案:D

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

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

A:.8e+8.

B:e+8

C:+8e.8

D:+8.8e+8

答案:D

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

有以下定义语句,编译时会出现编译错误的是

A:char  a='\x2d';

B:char  a='\n';

C:char  a='a';

D:char  a="aa";

答案:D

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

若有定义:double a; char d;  float b;

若想把1.2输入给变量a,字符'k'输入给变量d,3.4输入给变量b,程序运行时键盘输入:

   1.2 k 3.4 <回车>

则以下正确的读入语句是().

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

B:scanf("%lf %c %f", &a, &d, &b);

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

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

答案:B

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

以下能正确表述算式 sin(2πr+30°)的C语言表达式是

A:sin(2*3.14*r+3.14*30/180.0)

B:sin(2*π*r+ 30 )

C:sin(2*3.14*r+ 30 )

D:sin(2*3.14*r+30*3.14/360.0)

答案:A

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

有以下程序段

     int  i, n;

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

     {  n = rand( ) % 5;

        switch (n)

        {  case 1:

           case 3:  printf("%d \n", n);  break;

           case 2:

           case 4:  printf("%d \n", n);  continue;

           case 0:  exit(0);

        }

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

     }

以下关于程序段执行情况的叙述,正确的是

A:for循环语句固定执行8次

B:当产生的随机数n为4时结束循环操作

C:当产生的随机数n为1和2时不做任何操作

D:当产生的随机数n为0时结束程序运行

答案:D

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

对于if(表达式)语句,以下叙述正确的是

A:"表达式"不能是变量

B:"表达式"的值只能是整数值

C:"表达式"可以是常量

D:"表达式"中不可以出现字符型变量的比较

答案:C

第10题 (1.0分)        题号:6743        难度:中        第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、b、c中的最小值

D:输出a的原始值

答案:D

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

第12题 (1.0分)        题号:6461        难度:易        第4章

对于 if(表达式) 语句,以下叙述正确的是( ).

A:"表达式"可以是常量

B:"表达式"的值只能是整数值

C:"表达式"不能是变量

D:"表达式"中不可以出现字符

答案:A

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

有以下程序

    #include <stdio.h>

    main()

    {  int  a, b;     

       for( a=1,b=1; a<=100; a++ )

       {  if(b>=20) break;

          if(b % 3==1) {  b=b+3; continue; }

          b=b-5;

       }

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

    }

程序的输出结果是

A:10

B:9

C:8

D:7

答案:C

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

有以下程序

    #include <stdio.h>

     main()

    { int  k=5;

      while(--k)  printf("%d",k -= 3);

      printf("\n");

    }

执行后的输出结果是

A:1

B:2

C:4

D:死循环

答案:A

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

有以下程序:

#include  <stdio.h>

main()

{int i,j,m=1;

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

{for(j=3;j>0;j-- )

{ if(i*j>3) break;

m*=i*j;

 }

}

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

}

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

A:m=4

B:m=2

C:m=6

D:m=5

答案:C

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

以下程序段中,循环次数不超过10的是

A:int i=10;  do{ i=i+1;} while(i<0);

B:int i=5;   do{ i+=1;} while(i>0);

C:int i=1;   do{ i+=2;} while(i!=10);

D:int i=6;   do{ i-=2;} while(i!=1);

答案:A

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

以下叙述中正确的是

A:continue语句使得整个循环终止

B:break语句不能用于提前结束for语句的本层循环

C:使用break语句可以使流程跳出switch语句体

D:在for语句中,continue与break的效果是一样的,可以互换

答案:C

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

若有以下程序

    #include <stdio.h>

    main()

    {  int  a=6, b=0, c=0;

       for ( ;a; )  {  b += a;   a -= ++c;  }

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

    }

则程序的输出结果是

A:1,14,3

B:0,14,3

C:0,18,3

D:0,14,6

答案:B

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

有以下程序

#include <stdio.h>

#include <string.h>

main()

{    char  s[5][8]={"red","yellow","green","blue","white"};

     int i,j;  char t[8];

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

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

            if(strlen(s[i])<strlen(s[j]))

            {  strcpy(t,s[i]); strcpy(s[i],s[j]); strcpy(s[j],t); }

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

}    

程序的运行结果是

A:red

B:white

C:yellow

D:green

答案:C

第20题 (1.0分)        题号:6879        难度:较易        第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分)        题号:6086        难度:较难        第6章

有以下程序

#include   <stdio.h>

main( )

{  int  a[4],p,x,i;

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

     a[i-1]=i*2-1;

   scanf("%d",&x);

   i=0;

   while( a[i]<x )  

     i++;

   p=i;

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

     a[i]=a[i-1];

   a[p]=x;

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

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

   printf("\n");

}

执行时输入:2<回车>,则输出结果是

A:1  2  3  4

B:5  4  3  1

C:1  2  3  5

D:3  2  1  4

答案:C

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

下面说法正确的是().

A:方括号数组说明符中不能使用带有运算符的表达式

B:char c1 = 'A', c2, *c3; 是合法的变量定义语句

C:数组下标的下限在定义数组时设置,可以设定为负数

D:对于数组元素是浮点值的数组float array[3],array[1.5]是合法的

答案:B

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

语句printf("%d\n", strlen("\t\"\\\n\'\065\08AB"));的输出结果是

A:6

B:7

C:8

D:9

答案:A

第24题 (1.0分)        题号:6444        难度:较难        第6章

有以下程序

    #include   <stdio.h>

    main()

    {  char  s[][6]={"abcd","abc","ab"};    int  i;

       for( i=0;i<3;i++ )  puts(s[i]);

    }

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

A:abcd

abc

ab

B:a

a

a

C:abcd

bcd

cd

D:a

b

c

答案:A

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

下面关于编译预处理的命令行中,正确的是().

A:#define int INT

B:##define eps 0.001

C:##DEFINE TRUE

D:#define E 2.88

答案:D

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

设有以下函数:

    void fun(int n,char *s)

    {  ……  }

则下面对函数指针的定义和赋值均正确的是

A:void (*pf)(int,char);     pf=&fun;

B:void  *pf();      pf=fun;

C:void  *pf();     *pf=fun;

D:void  (*pf)(int, char*);    pf=fun;

答案:D

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

有下列程序

#include <stdio.h>

int a = 1;

int func(int a)

{ int b = 1;

  static int c = 1;

  a++; b++; ++c;

  return a + b + c;

}

main( )

{  int k, a = 4;

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

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

}

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

A:9,9,9,

B:6,8,10,

C:6,7,8,

D:9,10,11,

答案:D

第28题 (1.0分)        题号:6220        难度:较难        第7章

有以下程序

    #include <stdio.h>

    int a[5]={ 7,2,9,10,3 };

    void st(int *,int);

    void main()

    {

        int i;

        st(a,5);

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

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

        printf("\n");

    }

    void st(int *b,int n)

    {

        int i,m,t;

        if(n==1) return;

        m=0;

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

            if(b[i]<b[m]) m=i;

        t=b[0];b[0]=b[m];b[m]=t;

        b++;n--;

        st(b,n);

    }

程序的运行结果是().

A:2  3  7  9  10

B:10  9  7  3  2

C:2  10  3  9  7

D:2  7  3  9  10

答案:A

第29题 (1.0分)        题号:6441        难度:易        第7章

若有函数定义如下

          int fun(int  x,int  y)

          {  return  x-y;  }

则以下涉及上述函数的说明语句错误的( ).

A:int fun( int  x,y );  

B:int fun( int ,int );

C:int fun( int  a,int  b );  

D:int i,fun(int  x,int  y);

答案:A

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

有以下程序

      #include <stdio.h>

      int fun(int n)

      {  static int t=1;   int i=1;

         for( ; i<=n; i++)  t*=i;

         return t;

      }

      main()

      {  int t=1,i;

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

            t+=fun(i);

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

      }

程序的运行结果是

A:8

B:11

C:15

D:4

答案:C

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

有以下程序(其中的strstr()函数头部格式为:char *strstr(char *p1, char *p2) 确定

p2字符串是否在p1中出现,并返回p2第一次出现的字符串首地址)

#include <stdio.h>

#include <string.h>

char  *a="you";

char  *b="Welcome you to Beijing!";

main()

{  char *p;

   p = strstr(b, a) + strlen(a) + 1;

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

}

程序的运行结果是

A:to Beijing!

B:you to Beijing!

C:Welcome you to Beijing!

D:Beijing!

答案:A

第32题 (1.0分)        题号:5947        难度:较难        第8章

有以下程序

#include <stdio.h>

#include <stdlib.h>

void fun(int **s, int x[2][3])

{  **s=*(x[1]+1);  }

main()

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

   p = (int*)malloc(sizeof(int));

   fun(&p,a);

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

}

程序的运行结果是

A:6

B:2

C:5

D:3

答案:C

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

以下叙述正确的是

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

B:数组说明符的一对方括号中不能使用表达式

C:数组元素下标可以是非整数

D:若有定义 char array[4]; 则语句 printf("%c", array["3"]);是合法的

答案:A

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

设有定义:

    char *c;

以下选项中能够使c正确指向一个字符串的是

A:char str[ ]="string"; c=str;

B:scanf("%s",c);

C:c=getchar( );

D:*c="string";

答案:A

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

以下关于指针的叙述,错误的是

A:两个基类型相同的指针变量不能指向同一个对象

B:可以通过对指针变量加上或减去一个整数来移动指针

C:在关系表达式中可以对两个指针变量进行比较

D:一个指针变量可以通过不同的方式获得一个确定的地址值

答案:A

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

对于函数声明

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

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

A:调用函数时,array按值传送地址,ptr是按地址传送数值

B:函数参数 array 是数组名,不是指针变量,ptr 是指针变量

C:调用函数时,调用处的实参数组的所有值都会自动复制到array数组中

D:函数参数 array, ptr 都是指针变量

答案:D

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

有下列程序

#include  <stdio.h>

#include  <string.h>

typedef struct stu {

    char name[9];

    char gender;

    int score;

} STU;

void f(STU *a)

{   STU c={"Sun", 'f', 90},*d=&c;

    a = d;

    strcpy(a->name,c.name);

a->gender = c.gender;

    a->score = c.score;

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

}

main( )

{  STU a={"Zhao", 'm', 85};

   f(&a);

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

}

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

A:Zhao,m,85,Sun,f,90

B:Sun,f,90,Sun,f,90

C:Sun,f,90,Zhao,m,85

D:Zhao,m,85,Zhao,m,85

答案:C

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

设有定义:

    struct complex

    {  int real,unreal;} data1={1,8},data2;

则以下赋值语句中错误的是

A:data2=(2,6);

B:data2=data1;

C:data2.real=data1.real;

D:data2.real=data1.unreal;

答案:A

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

以下结构体类型说明和变量定义中正确的是

A:struct  REC ;

{ int  n;  char  c; };

REC  t1,t2;

B:typedef struct

{ int  n;  char  c; } REC;

REC  t1,t2;

C:typedef struct  REC;

{ int  n=0;  char  c='A'; } t1,t2;

D:struct

{ int  n;  char  c; } REC;

REC  t1,t2;

答案:B

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

以下叙述中正确的是

A:函数的返回值不能是结构体类型

B:在调用函数时,可以将结构体变量作为实参传给函数

C:函数的返回值不能是结构体指针类型

D:结构体数组不能作为参数传给函数

答案:B

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

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

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

【程序填空】

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

功能: 打印以下图案:

*********

  *******

    *****

      ***

        *

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

#include<stdio.h>

void main()

{

    int k=0 , j=0 ,i=0;

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

    for( i=0 ; i<5;i【?】 )

    {

          printf("\n");

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

          for( j=1 ; j【?】2*i ; j++ )

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

               【?】("%c",' ');

          for( k=0 ; k < 9-2*i ; k++ )

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

               printf("%【?】",'*');

    }

    printf("\n");

}

答案:

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

++

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

=i+1

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

=1+i

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

+=1

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

<=

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

printf

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

c

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

第1题 (18.0分)        题号:393        难度:难        第20章

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

【程序改错】

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

题目:void add(char a[],char b[],char c[])函数将由'0','1'

      组成的字符串a,b按二进制数加法规则相加,和仍以'0','1'

      组成的字符串形式保存到字符串c中。

例如:字符串a为"1100",字符串b为"111",调用add函数后字符串c

      为"10011"。

      请改正程序中的错误,使它能得出正确的结果。

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

注意:不得增行或删行,也不得更改程序的结构。

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

#include <stdio.h>

#include <string.h>

void reverse(char s[])

{

    int i,len;

    char t;

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

    len=strlen(s)-1;

    for(i=0;i<len/2;i++)

    {

        t=s[i];

        s[i]=s[len-i-1];

        s[len-i-1]=t;

    }

}

void add(char a[],char b[],char c[])

{

    int i,j,k,t,flag;

    i=strlen(a)-1;

    j=strlen(b)-1;

    k=flag=0;

    while(i>=0||j>=0)

    {

        if(i<0)

            t=b[j]-48+flag;

        else if(j<0)

            t=a[i]-48+flag;

        else

            t=a[i]-48+b[j]-48+flag;

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

        c[k]=t/2;

        k++;

        if(t>1)

            flag=1;

        i--;

        j--;

    }

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

    if(flag==0)

        c[k++]='1';

    c[k]='\0';

    reverse(c);

}

int main()

{

    char a[50],b[50],c[51];

    printf("Input a(binary):\n");

    scanf("%s",a);

    printf("Input b(binary):\n");

    scanf("%s",b);

    add(a,b,c);

    printf("After adding  a+b=%s\n",c);

    return 0;

}

答案:

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

len=strlen(s);

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

c[k]=t%2+48;

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

c[k]=48+t%2;

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

c[k]=t%2+'0';

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

c[k]='0'+t%2;

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

if(flag)

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

if(flag==1)

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

if(flag!=0)

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

if(1==flag)

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

if(0!=flag)

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

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

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

【程序设计】

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

题目:请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值  

      返回调用函数。

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

      你编写的若干语句。

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

#include <stdio.h>

#include <stdlib.h>

#define M 4

int fun (int a[][M])

{

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

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

}

main( )

{  

        int arr[2][M]={5,8,3,45,76,-4,12,43} ;

        printf("max =%d\n", fun(arr)) ;

        system("pause");

}

答案: int i,j,max=a[0][0];

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

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

if(max<a[i][j])

max=a[i][j];

return max;

01-13 14:01