二级C语言备考3

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

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

以下叙述中错误的是().

A:.OBJ文件和.EXE文件都是可直接执行的二进制文件

B:用户按规定语法编写的C程序不是二进制文件

C:C源程序经编译无误后将生成一个 .OBJ的二进制文件

D:.OBJ文件经"连接程序"生成的.EXE文件是二进制文件

答案:A

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

有以下程序

#include

main()

{  int  c,d;

   c= 13&5;  d=10&&5;

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

}

程序的运行结果是

A:5,1

B:1,1

C:18,1

D:13,1

答案:A

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

以下选项中,当x为大于1的奇数时,值为0的表达式是

A:x/2

B:x%2==0

C:x%2!=0

D:x%2==1

答案:B

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

以下选项中,合法的实数是

A:1.5E2

B:E1.1   

C:2.10E  

D:1.9E1.4

答案:A

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

有以下程序

#include

main()

{  char  c='A';

   int   x=36, b;

   b= (x>>2) && ( c<'a' );

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

}

程序运行后的输出结果是

A:1

B:0

C:2

D:4

答案:A

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

若有程序段

     char c;

     double d;

     scanf("%lf%c", &d, &c);

如果想把2.3输入给变量d,字符'f'输入给变量c,程序运行时正确的输入是().

A:2.3 f

B:2.3f

C:2.3'f'

D:2.3 'f'

答案:B

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

以下不能输出小写字母a的选项是

A:printf("%c\n","a");

B:printf("%c\n",'A'+32);

C:putchar(97);

D:putchar('a');

答案:A

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

若有定义和语句:

    int a, b;

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

以下选项中的输入数据,不能把值3赋给变量a、5赋给变量b的是

A:3,5,4

B:3,5

C:3,5,

D:3  ,5

答案:D

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

if语句的基本形式是:if (表达式) 语句,以下关于"表达式"值的叙述中正确的是

A:必须是逻辑值

B:必须是整数值

C:必须是正数

D:可以是任意合法的数值

答案:D

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

有以下程序:

#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

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

有以下程序

    #include

    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:1

B:2

C:0

D:3

答案:C

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

有以下程序

#include   

main( )

{

    int  x = 0x13;

    if (x = 0x12)   printf("True");

    printf("False\n");

}

程序运行后的输出结果是

A:True

B:TrueFalse

C:False

D:TrueFalseTrue

答案:B

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

有以下程序             

    #include

    main()

   {

    char i,j,n;

    for(i='1';i<='9';i++)

    {

        if(i<'3') continue;

        for(j='0';j<='9';j++)

        {

            if(j<'2'||j >='4') continue;

            n=(i-'0')*10+j-'0';

            printf("%d ",n);

        }

        if(i=='4') break;

    }

    printf("\n");

   }

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

A:32 33 42 43

B:30 31 40 41

C:34 35 44 45

D:35 36 45 46

答案:A

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

有如下程序

#include

main()

{

    int i, data;

    scanf("%d", &data);

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

    {

        if (i > data) break;

        printf("%d,", i);

    }

    printf("\n");

}

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

A:3,4,

B:0,1,

C:3,4,5,

D:0,1,2,3

答案:D

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

有以下程序段:

#include  

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

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

若变量已正确定义,则以下for循环

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

A:执行4次

B:执行3次

C:执行次数不确定

D:执行123次

答案:A

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

以下程序段中,与其他三个功能不同的程序段是

A:s=0;i=1;

     for( ; ; ) {s+=i; i++; if(i<=10) break;}

B:s=0,i=1;

     for( ; i<=10; ) {s+=i,i++;}

C:s=0;

     for(i=1; i<=10; i++) {s+=i;}

D:for(s=0,i=1; i<=10; s+=i,i++) ;

答案:A

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

有下列程序

#include  

main( )

{  int a=-1, b=2;

   for(; a++ && b--;)

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

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

}

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

A:0,1,1,0,1,0

B:0,1,1,0

C:0,1,1,1

D:0,1,1,1,1,1

答案:C

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

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

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

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

C:数组下标可以使用实数

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

答案:A

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

若有定义: char c="hello!";,则以下说法正确的是().

A:c占用7字节内存

B:c是一个字符串变量

C:定义中有语法错误

D:c的有效字符个数是6

答案:C

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

有以下程序

#include  

#include  

main()

{   char  ss[10]="12345";

    strcat( ss, "6789" );

    gets( ss );

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

}

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

A:123456ABC

B:ABC9

C:ABC

D:ABC456789

答案:C

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

下列选项中,能正确定义数组的语句是

A:int num[0...2008];

B:int num[];

C:int N=2008;

int num[N];

D:#define N 2008

int num[N];

答案:D

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

若有以下程序

     #include

     main()

     {  char  w[20]="dogs",  

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

        int  i, j, k;

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

        {  for (j=0; j<5; j++)

           {  for (k=0; a[j][k]; k++)

                if (w[i]==a[j][k])    break;

                if (w[i]==a[j][k])    break;

            }

            printf("%d,%d,", j,k);

        }

     }

则程序的输出结果是

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

B:1,4,3,3,2,1,4,2,

C:5,6,5,6,5,6,5,6,

D:6,7,6,7,6,7,6,7,

答案:A

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

有以下程序

#include  

#include  

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])/2];

   w[5]= '\0';

   puts(w);

}

程序的运行结果是

A:djoty

B:agmrw

C:flqv

D:cimsx

答案:A

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

有以下程序

    #include

    #define FNA(x)  x*x

    #define FNB(x)  x+x

    main()

    {   int a=2,b=4;

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

    }

程序运行后的输出结果是

A:8,16

B:16,32

C:8,32

D:16,16

答案:C

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

若有以下程序

     #include

     void f(int  x)

     {  if (x >= 10)

        {  printf("%d-", x%10);     f(x/10);   }

        else

          printf("%d", x);

     }

     main()

     {   int  z = 123456;

         f(z);

     }

则程序的输出结果是

A:6-5-4-3-2-1-

B:6-5-4-3-2-1

C:1-2-3-4-5-6

D:1-2-3-4-5-6-

答案:B

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

若程序中有宏定义行:

    #define  N   100

则以下叙述中正确的是

A:宏定义行中定义了标识符N的值为整数100

B:在编译程序对C源程序进行预处理时用100替换标识符N

C:上述宏定义行实现将100赋给标示符N

D:在运行时用100替换标识符N

答案:B

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

有以下程序

    #include

    int f(int x);

    main()

    {

      int n=1,m;

      m=f(f(f(n)));

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

    }

    int f(int x)

    { return x*2; }

程序运行后的输出结果是

A:4

B:2

C:8

D:1

答案:C

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

有如下程序

#include

void get_put()

{

    char ch;

    ch = getchar();

    putchar(ch);

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

    putchar('.');

}

main()

{

    get_put();

}

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

A:1234

.....

B:4321.....

C:4444

.....

D:1234.....

答案:A

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

以下关于函数参数的叙述中,错误的是().

A:实参应与其对应的形参类型一致

B:形参可以是常量、变量或表达式

C:实参可以是常量、变量或表达式

D:形参可以是任意合法数据类型

答案:B

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

若有定义:

char *ps[ ] = {"aa", "bb", "cc", "dd"};,

则以下叙述正确的是

A:*ps[0]是字符'a'

B:*ps[0]是字符串"aa"

C:ps[0]是字符'a'  

D:ps是字符串"aa"

答案:A

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

有以下程序

      #include

      #include

      #include

      main()

      {   char *p1,*p2;

          p1=p2=(char *)malloc(sizeof(char)*10);

          strcpy(p1,"malloc");

          strcpy(p2,p1+1);

          printf("%c%c\n",p1[0],p2[0]);

      }

程序的运行结果是

A:aa

B:ma

C:am

D:mm

答案:A

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

有以下程序

     #include

     main()

     {  int  a[5]={2,4,6,8,10},  *p,**k;

        p = a;    k = &p;

        printf("%d  ", *( p++ ) );

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

     }

程序运行后的输出结果是

A:4  6

B:4  4

C:2  2

D:2  4

答案:D

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

有以下程序

    #include

    void fun(char *c,int d)

    { *c=*c+1;

      d=d+1;

      printf("%c,%c,",*c,d);

    }

    main()

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

       fun(&b,a);

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

    }

程序运行后的输出结果是

A:b,B,b,A

B:b,B,B,A

C:a,B,B,a

D:a,B,a,B

答案:A

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

有下列程序

#include

#include

main( )

{  char v[4][10]={"efg","abcd","mnopq","hijkl"},*p[4],*t;   

   int i,j;

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

     p[i] = v[i];

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

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

       if (strcmp(p[i], p[j])  > 0)

       {  t = p[i]; p[i] = p[j]; p[j] = t;  }

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

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

}

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

A:efg abcd hijkl mnopq

B:abcd efg hijkl mnopq

C:mnopq hijkl efg abcd

D:efg abcd mnopq hijkl

答案:B

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

以下涉及字符串数组、字符指针的程序段,没有编译错误的是

A:char* str, name[5];

     str = "C/C++";

B:char* str, name[6];

     name = "Hello";

C:char str1[7] = "prog.c", str2[8];

     str2 = str1;

D:char line[];

     line = "//";

答案:A

第37题 (1.0分)        题号:6008        难度:易        第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

答案:A

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

有如下程序

#include

#include

struct S

{

    char name[10];

};

main()

{

    struct S s1, s2;

    strcpy(s1.name, "12345");

    strcpy(s2.name, "ABC");

    s1 = s2;

    printf("%s\n", s1.name);

}

程序运行后的输出结果是

A:ABC12

B:ABC45

C:12345

D:ABC

答案:D

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

有如下定义

struct st

{ char  name[12]; int age; char sex;  } std[10],*p=std;

以下语句错误的是

A:scanf("%d",p->age);

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

C:scanf("%d",&std[1].age)  

D:scanf("%c",&(p->sex));

答案:A

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

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

A:文件指针是一种特殊的指针类型变量

B:文件指针的值等于文件当前读写位置,以字节为单位

C:文件指针的值等于文件在计算机硬盘中的存储位置

D:调用fscanf函数只能向文本文件中写入任意字符

答案:A

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

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

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

【程序填空】

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

题目:程序通过定义学生结构体数组,存储若干名学生的学号、姓名和三门课的成绩。函数

      fun的功能是:将存放学生数据的结构体数组,按姓名的字典序(从小到大)排序。

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

#include  

#include  

struct student

{

        long  sno;

        char  name[10];

        float  score[3];

};

void fun(struct student  a[], int  n)

{

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

        【?】 t;

        int  i, j;

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

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

        for (j=i+1; j

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

                if (strcmp(【?】) > 0)

                {

                        t = a[i];  

                        a[i] = a[j];

                        a[j] = t;  

                }

}

main()

{

        struct student  s[4]={{10001,"ZhangSan", 95, 80, 88},{10002,"LiSi", 85, 70, 78},

                    {10003,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87}};

        int  i, j;

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

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

        {

                printf("\nNo: %ld  Name: %-8s      Scores:  ",s[j].sno, s[j].name);

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

                        printf("%6.2f ", s[j].score[i]);

                printf("\n");

        }

        fun(s, 4);

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

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

        {  

                printf("\nNo: %ld  Name: %-8s      Scores:  ",s[j].sno, s[j].name);

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

                        printf("%6.2f ", s[j].score[i]);

                printf("\n");

        }

}

答案:

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

struct student

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

n - 1

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

a[i].name,a[j].name

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

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

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

【程序改错】

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

题目:下列给定程序中函数fun的功能是:将一个由八进制数字字符组成的字符串转

      换成十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。

例如:若输入77777,则输出32767。

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

#include

#include

#include

int  fun( char *p )

{  

        int   n;

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

        n= *p-'o';

        p++;

        while( *p!=0 )

        {

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

                n=n*8+*p-'o';

                p++;

        }

        return  n;

}

main()

{   

        char   s[6];     int  i;   int   n;

        printf("Enter a string (Ocatal digits):  ");

        gets(s);

        if(strlen(s)>5)

        {

                printf("Error: String too longer !\n\n");

                exit(0);

        }

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

                if(s[i]<'0'||s[i]>'7')

                {  

                        printf("Error: %c not is ocatal digits!\n\n",s[i]);

                        exit(0);

                }

        printf("The original string:  ");

        puts(s);

        n=fun(s);

        printf("\n%s is convered to integer number: %d\n\n",s,n);

}

答案:

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

n= *p-'0';

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

n=n*8+*p-'0';

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

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

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

【程序设计】

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

题目:编写函数fun,其功能是:计算n门课程的平均分,结果作为函数值返回。

例如:若有5门课程的成绩是:90.5,72,80,61.5,55,则函数的值为:71.80。

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

      你编写的若干语句。

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

#include

float  fun ( float  *a ,  int  n )

{

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

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

}

main()

{

        float score[30]={90.5, 72, 80, 61.5, 55}, aver;

        aver = fun( score, 5 );

        printf( "\nAverage score  is: %5.2f\n", aver);

}

答案: int i;

float av=0.0;

for(i=0; i

av=av+a[i];

return(av/n);

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