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

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

以下说法正确的是 ().

A:C语言被称为"高级语言"是因为它用接近人们习惯的自然语言和数学语言作为表达形式,使人们学习和操作起来感到十分方便

B:C语言被称为"高级语言"是因为它能接受和处理由0和1的代码构成的二进制指令或数据

C:C语言被称为"高级语言"是因为计算机能直接识别并执行由这种语言编写的程序

D:C语言被称为"高级语言"是因为它既符合人们的习惯易于使用,又能由计算机直接识别并执行由这种语言编写的程序

答案:A

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

以下关于字符串的叙述中正确的是

A:空串比空格打头的字符串小

B:两个字符串中的字符个数相同时才能进行字符串大小的比较

C:可以用关系运算符对字符串的大小进行比较

D:C语言中有字符串类型的常量和变量

答案:A

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

有以下程序

#include <stdio.h>

main()

{

    int a=5,b=1,t;

    t=(a<<2)|b;  

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

}

程序运行后的输出结果是

A:1

B:11

C:6

D:21

答案:D

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

以下说法正确的是().

A:C语言标识符中字母、数字和下划线字符必须同时出现

B:C语言标识符中仅出现下划线字符是不允许的

C:C语言标识符中可以出现多个字母、数字和下划线字符

D:C语言标识符中字母、数字和下划线字符不能同时出现

答案:C

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

以下选项中不属于C语言字符常量的是().

A:'\xah'

B:'\n'

C:'a'

D:'\007'

答案:A

第6题 (1.0分)        题号:7136        难度:较易        第3章

若有定义

    int a;

    float b;

    double c;

程序运行时输入:

    3  4  5<回车>

能把值3输入给变量a、4输入给变量b、5输入给变量c的语句是

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

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

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

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

答案:A

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

以下说法正确的是().

A:C语言程序运行时可以从键盘上读入用户输入的C源程序并附加到本程序的尾部一并执行

B:C语言程序运行时可以从键盘上读入用户以二进制输入的指令,并执行这些指令

C:C语言程序运行时可以从键盘上读入用户输入的C源程序并逐行执行

D:C语言程序运行时可以从键盘上读入用户输入的字符或数据,并依此改变程序的运行步骤

答案:D

第8题 (1.0分)        题号:6902        难度:中        第3章

设有定义:

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

以下语句中执行效果与其它三个不同的是

A:if(a>b) {c=b,b=a,a=c;}

B:if(a>b) {c=a,a=b,b=c;}

C:if(a>b) c=a;a=b;b=c;

D:if(a>b) {c=a;a=b;b=c;}

答案:C

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

有如下程序

#include  <stdio.h>

main()

{

    int a, b;

    a = 0, b = 1;

    if (a++ && b++)

        printf(">");

    else

        printf("<");

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

}

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

A:>a=1,b=2

B:<a=0,b=2

C:<a=1,b=1

D:>a=0,b=1

答案:C

第10题 (1.0分)        题号:6815        难度:较难        第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分)        题号:5961        难度:较易        第4章

有以下程序

#include   <stdio.h>

main( )

{

    if ('\0' == 0) putchar('1');

    if ('0' == 0)  putchar('2');

    if ('a' > 'b') putchar('3');

}

程序运行后的输出结果是

A:1

B:123

C:23  

D:3

答案:A

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

以下程序的功能是判断输入的一个整数是否能被3或7整除,若能整除,输出YES,否则输出NO.在下划线处应填入的选项是

#include <stdio.h>

main()

{  int  k;

   printf("Enter a int number : "); scanf("%d", &k );

   if  ________  printf("YES\n");

   else          printf("NO\n");

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

}

A:( (k%3==0) || (k%7==0) )

B:(k/3==0) || (k/7==0)

C:( (k%3=0) || (k%7=0) )

D:( (k%3==0)&& (k%7==0) )

答案:A

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

有如下程序

#include   <stdio.h>

main( )

{

    int  i, data;

    scanf("%d", &data);

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

    {

        if (i > data) break;

        printf("%d,", i);

    }

}

程序运行时,从键盘输入:3<回车>后,程序输出结果为

A:3,4,5,

B:1,2,3,

C:2,3,4,

D:0,1,2,3,

答案:D

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

对于循环语句:for(i=0;i<=10;i++) { ; } 下面各选项的叙述中错误的是 ().

A:省略i++,可引起无限循环

B:省略i<=10,可引起无限循环

C:省略i=0,可引起无限循环

D:圆括号( )内三个表达式都省略,可引起无限循环

答案:C

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

以下程序段中的变量已正确定义

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

    for( k=1; k<3; k++ ); printf("*" );

该程序段的输出结果是

A:*

B:****

C:**

D:********

答案:A

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

有如下程序

#include <stdio.h>

main()

{

    char a = '3', b = 'A';

    int i;

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

    {

        if (i % 3) putchar(a + i);

        else putchar(b + i);

    }

    printf("\n");

}

程序运行后的输出结果是

A:A45D78

B:ABC678

C:34CD78

D:34AB78

答案:A

第17题 (1.0分)        题号:6150        难度:较难        第5章

以下程序拟实现计算s=1 + 2*2 + 3*3 + … + n*n +…,直到s>1000为止.

#include   <stdio.h>

main( )

{  int  s,n;

   s=1;

   n=1;

   do

   { n=n+1;    s=s+n*n;  }

   while(s>1000);

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

}

程序运行后,不能得到正确结果,以下修改方案正确的是().

A:把 n=1; 改为 n=0;

B:把 s=1; 改为 s=0;

C:把while(s>1000);  改为 while(s<=1000);

D:把 n=n+1; 改为 n=n*n;

答案:C

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

有以下程序

#include <stdio.h>

main( )

{  int a=0, b=0;

   for(; a<5; a++)

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

      b += a;

      break;

   }

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

}

程序运行后的输出结果是

A:1

B:4

C:0

D:10

答案:A

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

设有如下程序段

    int a[2] = {0};

    int b[] = {0};

    char c[2] = "ABC";

    char d = "ABC";

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

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

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

C:只有c,d的定义是合法的

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

答案:A

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

有以下程序

#include <stdio.h>

#include <string.h>

main()

{  char w[20], a[5][10]={"abcdef", "ghijkl", "mnopq", "rstuv", "wxyz."};

   int  i;

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

      w[i]=a[i][ strlen(a[i]) - 1];

   w[5]= '\0';

   puts(w);

}

程序的运行结果是

A:flqv.

B:agmrw

C:ekpuy

D:flqvz

答案:A

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

有如下程序

#include <stdio.h>

main()

{

    int i, array[5] = {3, 5, 10, 4};

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

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

    printf("\n");

}

程序运行后的输出结果是

A:3,1,2,0,0,

B:3,5,10,4,0,

C:3,3,3,3,0,

D:3,2,2,2,0,

答案:A

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

以下语句的输出结果是

printf("%d\n", strlen("\t\"\065\xff\n"));

A:5

B:8

C:14

D:输出项不合法,无正常输出

答案:A

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

有以下程序

#include <stdio.h>

main()

{  

    char s[]={"012xy"};

    int i,n=0;

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

        if(s[i]>='a'&&s[i]<='z')

            n++;

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

}

程序运行后的输出结果是

A:0

B:2

C:3

D:5

答案:B

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

有以下程序

#include <stdio.h>

main( )

{  int i,j = 0;

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

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

      if (a[i] == ' ')

          b[j++] = a[i-1];

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

}

程序运行后的输出结果是

A:we  

B:Howareyou!

C:ay  

D:we!

答案:A

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

有以下程序

     #include <stdio.h>

     int  fun()

     {  static  int  x=1;

        x*=2;

        return  x;

     }

     main()

     {  int  i, s=1;

        for( i=1; i<=3; i++ )    s*=fun( );

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

     }

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

A:30

B:10

C:0

D:64

答案:D

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

以下选项中叙述正确的是

A:函数体必须由 { 开始

B:C程序必须由main语句开始

C:C程序中的注释可以嵌套

D:C程序中的注释必须在一行完成

答案:A

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

有如下程序

#include <stdio.h>

void get_put()

{

    char ch;

    ch = getchar();

    if (ch != '\n') get_put();

    putchar(ch);

}

main()

{

    get_put();  printf("\n");

}

程序运行时,输入1234<回车>,则输出结果是

A:1234

B:4321

C:4444

D:1111

答案:B

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

有以下程序

#include <stdio.h>

int f(int x)

{  

    int y;

    if (x == 0 || x== 1)  return (3);

    y = x*x - f(x-2);

    return  y;

}

main()

{  

    int z;

    z = f(3);

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

}

程序的运行结果是

A:0

B:9

C:6

D:8

答案:C

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

有以下程序

    #include <stdio.h>

    int fun(int x)

    {   int y;

        if(x==0 || x== 1) return 4;

        y=x-fun(x-2);

        return y;

    }

    main()

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

    }

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

A:5

B:4

C:9

D:8

答案:D

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

以下关于编译预处理的叙述中错误的是

A:预处理命令行必须位于源程序的开始

B:源程序中凡是以#开始的控制行都是预处理命令行

C:一行上只能有一条有效的预处理命令

D:预处理命令是在程序正式编译之前被处理的

答案:A

第31题 (1.0分)        题号:6825        难度:较易        第8章

设有定义:char  p[]={'1', '2', '3'},*q=p; ,以下不能计算出一个char型数据所占字节数的表达式是().

A:sizeof(p)

B:sizeof(char)

C:sizeof(*q)

D:sizeof(p[0])

答案:A

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

下列语句组中,正确的是().

A:char *s;s="Olympic";

B:char s[7];s="Olympic";

C:char *s;s={"Olympic"};

D:char s[7];s={"Olympic"};

答案:A

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

有以下程序

    #include <stdio.h>

    void main()

    {   char ch[7] = {"43ab21"};

        int i, s = 0;

        for (i = 0; ch[i] >='0' && ch[i] <= '9'; i += 2)

            s = 10 * s + ch[i] - '0';

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

    }

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

A:48

B:12ba34

C:4321

D:4

答案:D

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

有以下程序

    #include  <stdio.h>

    int *f(int *s)

    {  s+=2;

       s[1] +=6;

       *s=7;

       return s;

    }

   main( )

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

       printf("%d,%d,%d,%d", a[0], a[1], *p,p[1]);

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

A:1,2,7,10

B:7,8,7,8

C:1,2,1,2

D:7,10,7,10

答案:A

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

有以下程序

     #include <stdio.h>

     int  b=2;

     int fun(int *k )

     {  b=*k+b; return (b); }

     main()

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

        for(i=2;i<4;i++) {b=fun(&a[i])+b; printf("%d ",b);}

        printf("\n");

     }

程序运行后的输出结果是

A:8  10

B:10  28

C:10  12

D:10  16

答案:B

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

有以下程序

     #include <stdio.h>

     main()

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

        p = &a[1];

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

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

     }

程序的输出结果是

A:13

B:19

C:11

D:15

答案:B

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

有以下程序

#include <stdio.h>

#include <string.h>

struct  A

{

    int a;

    char b[10];

    double c;

};

void f(struct A t);

main()

{

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

    f(a);

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

}

void f(struct A t)

{

    t.a=1002;

    strcpy(t.b,"ChangRong");

    t.c=1202.0;

}

程序运行后的输出结果是

A:1002, ZhangDa,1202.0

B:1002,ChangRong,1202.0

C:1001, ChangRong,1098.0

D:1001,ZhangDa,1098.0

答案:D

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

程序中若有以下的说明定义和语句

    #include   <stdio.h>

    #include   <string.h>

    struct  STR

    {  char  num[10];  int  s; };

    main()

    {  struct  STR  t, *p;

       p=&t;

       ┇

    }

则不能给变量t的s成员赋整数99,给num成员赋空串的语句组是( ).

A:(*p).s=99; (*p).num="";

B:p->s=99;  p->num[0]=0;

C:(*p).s=99; p->num[0]= '\0';

D:p->s=99;  strcpy((*p).num,

答案:A

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

有下列程序

#include <stdio.h>

#include <string.h>

typedef struct stu {

    char name[9];

    char gender;

    int score;

struct stu *next;

} STU;

void f(STU a)

{   STU c = {"Sun", 'f', 90}, d = {"Li", 'm', 100};

    strcpy(a.name, c.name);

a.gender = c.gender;

    a.score = c.score;

    *a.next = d;

}

main( )

{  STU a = {"Zhao", 'm', 85}, b = {"Qian", 'f', 95};

   a.next = &b;

   f(a);

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

}

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

A:Sun,f,90,Qian,f,95

B:Zhao,m,85,Qian,f,95

C:Sun,f,90,Li,m,100

D:Zhao,m,85,Li,m,100

答案:D

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

以下关于C语言文件的叙述中正确的是( ).

A:文件由数据序列组成,其类型可以为二进制文件或文本文件

B:文件由记录序列组成,其类型可以为二进制文件或文本文件

C:文件由字符序列组成,其类型可以为二进制文件或文本文件

D:文件由数据序列组成,其类型只能是二进制文件

答案:A

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

第1题 (18.0分)        题号:199        难度:易        第7章

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

【程序填空】

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

功能:删除字符串中的指定字符,字符串和要删除的字符均由键盘

      输入。

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

#include <stdio.h>

main()

{

  char str[80],ch;

  int i,k=0;

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

  gets(【?】);

  ch=getchar();

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

  for(i=0;【?】;i++)

    if(str[i]!=ch)

    {

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

       【?】;

        k++;

    }

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

  【?】;

  puts(str);

 }

答案:

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

str

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

str[i]!='\0'

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

str[i]!=NULL

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

str[i]!=0

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

str[i]

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

str[i] != '\0'

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

str[i] != NULL

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

str[i] != 0

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

str[k]=str[i]

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

*(str+k)=*(str+i)

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

str[k]=*(str+i)

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

*(str+k)=str[i]

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

str[k]='\0'

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

*(str+k)='\0'

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

str[k]=NULL

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

str[k]=0

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

*(str+k)=0

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

*(str+k)=NULL

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

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

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

【程序改错】

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

题目:下列给定程序中函数fun的功能是:把从主函数中输入的3个数,最大的数放

      在a中,中间的数放在b中,最小的数放在c中。

例如:若输入的数为:55 12 34,输出的结果应当是:a=55.0,b=34.0,c=12.0。

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

#include <stdio.h>

void  fun(float *a,float *b,float *c)

{

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

        float   *k;

        if( *a<*b )

        {   

                k=*a;

                *a=*b;

                *b=k;

        }

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

        if( *a>*c )

        {  

                k=*c;

                *c=*a;

                *a=k;

        }

        if( *b<*c )

        {   

                k=*b;

                *b=*c;

                *c=k;

        }

}

main()

{  

        float   a,b,c;

        printf("Input  a  b  c:  ");

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

        printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);

        fun(&a,&b,&c);

        printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);

}

答案:

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

float k;

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

if(*a< *c)

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

if(*c>*a)

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

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

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

【程序设计】

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

题目:函数fun的功能是:将a、b的两个两位正整数合并成一个新的整数放在c中。

      合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中

      的十位和个位数依次放在变量c的千位和十位上。

例如:当a=45,b=12,调用该函数后c=1425。

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

      你编写的若干语句。

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

#include <stdio.h>

void fun(int a, int b, long *c)

{

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

        

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

}

void main()   /* 主函数 */

{  

        int a,b; long c;

        printf("Input a, b:");

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

        fun(a, b, &c);

        printf("The result is: %ld\n", c);

}

答案:        *c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000;

01-13 07:20