一起答

2012年3月全国计算机等级考试二级C语言程序设计笔试试卷【答案+解析版】

如果您发现本试卷没有包含本套题的全部小题,请尝试在页面顶部本站内搜索框搜索相关题目,一般都能找到。
  1. 设文件test.txt中原已写入字符串Begin,执行以下程序后,文件中的内容为【 15 】 。

     #include   

     main( )

     { FILE *fp;

       fp= fopen( "test.txt”, ”w+”);

       fputs( "test",fp);

       fclose(fp);   

     }   

  2. 以下程序的输出结果是【 14  】

    #include   

    #include 

    #include    

    #include 

    main( )

    { char *p,*q,*r,   

      p=q=r=(char*)malioc( sizeof(char)*20);

      strcpy(p,"attaboy,welcome!");

      printf(”%c%c%c\n”,p[ 11 ], q[ 3 ],r[ 4 ]);

      free(p);

    }

  3. 以下程序的功能是输出a数组中所有字符串,请填空。

    #include 

    main( )  

    { char *a[ ]={”ABC”,”DEFGH”,”IJ”,”KLMNOP”};

      int   i=0;

      for(;i<4; i++) printf(”%s\n【 13  】 );

    }   

  4. 以下程序的输出结果是 【 11  】。

    #include   

    main( )

    {  char *ch[4]={"red',"green","blue"};

       int i=0;

       while( ch[i] )

       { putchar( ch[i][0]); i++;)  

    }  

  5. 有以下程序

    #include 

    main( )

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

       scanf("%d", &start);

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

          printf(”%d”,arr[ (start+i)%8] ); 

    }

    若在程序运行时输入整数10<回车>,则输出结果为【 12 】。

  6. 有以下程序段

        s=1.0;

        for(k =1;k<=n;k++) s=s+1.0/(k*(k=1));

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

    请填空,使以下程序段的功能与上面的程序段完全相同。

        s=1.0; k=1;

        while( 【 9 】).

        { s=s+1.0/(k*(k+1)); k=k+1;}

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

  7. 以下程序的输出结果是【 10 】。

    #include .

    Main( )   

    { char a,b;   

      for( a=0; a<20;  a+=7) { b=a% 10;   putchar(b+'0'); }

    }

  8. 以下程序的输出结果是【 7  】。

    #include   

    main( )

    { int a=37;

      a+=a%=9; printf(”%d\n”, a),

    }

  9. 设a、b、c都是整型变量,如果a的值为1,b的值为2,则执行c = a++‖b++;变量b的值是【 8 】。

  10. 设变量a和b,已定义为int类型,若要通过scanf(”a=%d,b=%d”,&a,&b);语句分别给a和b输入1和2,则正确的数据输入内容是【 6  】。

  11. 在将E-R图转换到关系模式时,实体和联系都可以表示成【 4 】。

  12. 常见的软件工程方法有结构化方法和面向对象方法,类、继承以及多态性等概念属于【 5  】 。

  13. 数据库管理系统提供的数据语言中,负责数据的增、删、改和查询的是【 3 】。

  14. 设循环队列的存储空间为Q(1:30),初始状态为front=rear=30。现经过一系列入队与退队运算后,front=16, rear=15,则循环队列中有【 2  】个元素。

  15. 在长度为n的顺序存储的线性表中删除一个元素,最坏情况下需要移动表中的元素个数为【 1   】。

  16. 以下函数不能用于向文件中写入数据的是

    • A.ftell
    • B.fwrite
    • C.fputc
    • D.fprintf
  17. 有以下程序

    #include 

    maain( )

    { int a=12,c; 

      c=(a<<2)<<1;

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

    }

    程序运行后的输出结果是

    • A.3
    • B.50
    • C.2
    • D.96
  18. 设有以下程序段

    struct MP3

    { char name[20];   

      char color,   

      float price;   

    } std,*ptr;

    ptr=&std;

    若要引用结构体变量std中的color成员,写法错误的是

    • A.std.color
    • B.ptr->color
    • C.std->color
    • D.(*ptr.Color
  19. 有以下程序

    #include   

    struct stu

    { int num; char name [10];int age;};

    Void fun(struct stu *p) 

    { printf("%s\n,p->name);}

    main( )

    { struct stu x[3]={ {01,”Zhang”,20},{02, ” Wang”,19},{03, ”zhao”,18} };

    fun(x+2);

    }

    程序运行后的输出结果是

    • A.Zhang
    • B.Zhao
    • C.Wang
    • D.19
  20. 有以下程序   

    #include 

    void exch(int t[ ])

    { t[0]=t[5]; }

    main( )   

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

      while(i<=4){ exch(&x[i]); i++; }

      for( i=0; 1<5;i++) printf(”%d",x[i]);.

      printf( "\n"); 

    }

    程序运行后输出的结果是

    • A.2 4 6 8 10
    • B.1 3 5 7 9
    • C.1 2 3 4 5
    • D.6 7 8 9 10
  21. 有以下程序

    #include      

    #define S(x) (x)*x*2   

    main( )

    { int k=5, j=2;

      printf( "%d,”,s(k+j) ); printf(”%d\n”,s( (k-j) )  );

    }

    程序运行后的输出结果是

    • A.98,18
    • B.39,11
    • C.39,18
    • D.98,11
  22. 有以下程序

    #include 

    void func(int n)

    { int i;

    for(i=0;i<=n;i++) printf(”*”); 

      printf(”#”).  

    }   

    main( )

    { func(3); printf(”???? ”);  func(4);  printf(”\n”); }

    程序运行后的输出结果是

    • A.****#????***#
    • B.***# ????*** *#
    • C.**#????*****#
    • D.****#????*****#
  23. 有以下程序

    #include   

    void fun(int *s) 

    { static int j=0;

      do { s[j]=s[j]+s[j+1]; )while(++j<2);

    }

    main( )

    {  int k,a[10]={1,2,3,4,5);

       for(k=1;k<3;k++)fun(a);

       for(k=0;k<5;k++)printf(”%d”,a[k]);

       printf("\n");

    }

    程序运行后的输出结果是

    • A.12345
    • B.23445
    • C.34756
    • D.35745
  24. 有以下程序

    #include   

    void fun( char. c)

    {  if(c>'x')  fun( c-1);

       printf("%c",c);

    }

    main( )

    { fun(’z’); }

    程序运行后的输出结果是

    • A.xyz
    • B.wxyz
    • C.zyxw
    • D.zyx
  25. 有以下程序 

    #include      

    main( )

    { char  a[20], b[20], c[20];

    scanf("%s%s", a,b);

    gets(c);

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

    }

    程序运行时从第一列开始输入:

    This is a cat!<回车>

    则输出结果是

    • A.Thisisacat!
    • B.Thisis a
    • C."Thisis a cat!
    • D.Thisisa cat!
  26. avg函数的功能是求整型数组中的前若干个元素的平均值,设数组元素个数最多不超过10,则下列函数说明语句错误的是

    • A.int avg(jnt *a,int n.);
    • B.int avg(int a[10],int n);
    • C.int avg(int a,int n);
    • D.int avg(int a[ ],int n);
  27. 有以下程序

    #include  

    #include  

    main( )

    {  printf("%d\n",strlen ("ATS\n012\1") ); }

    程序运行后的输出结果是

    • A.3
    • B.8
    • C.4
    • D.9
  28. 以下选项中有语法错误的是   

    • A.char *str[ ]={”guest”};
    • B.char str[ ][10]={”guesi”};
    • C.char *st[3]; str[1]=”guest”;
    • D.char str[3][10]; str[1]=”gest”;
  29. 有以下程序

    #include   

    main( )

    { int a,b,k,m,*p1,*p2;

      k=1,m=8;

      p1=&k,p2=&m;

    • a=/*p1 -m;   b=*p1+*p2+6;    printf(”%d ”,a); printf(”%d\n”b);    }    编译时编译器提示错误信息,你认为出错的语句是
    • A.a=/*p1- m;
    • B.b=*p1+*p2+6;
    • C.k=1,m=8;
    • D.p1=&k, p2=&m;
  30. 若有函数

    Void fun( double  a[ ],int *n)   

    { …… }

    以下叙述中正确的是

    • A.调用fun函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送
    • B.形参a和n都是指针变量
    • C.形参a是一个数组名,n是指针变量
    • D.调用fun函数时将把double型实参数组元素一一对应地传送给形参a数组
  31. 设有如下定义语句

    int m[ ]{2,4,6,8,10},*k=m;

    以下选项中,表达式的值为6的是

    • A.*(k+2)
    • B.k+2
    • C.*k+2
    • D.*k+=2
  32. fun函数的功能是:通过键盘输入给x所指的整型数组所有元素赋值。在下划线处应填写的是

    #include 

    #define N 5

    void fun(int x[N])

    { int m;

    for(m=N-1;m>=0; m--) scanf(”%d”,__________);

    }

    • A.&x[++m]
    • B.&X[m+1]
    • C.x+(m++)
    • D.x+m
  33. 有以下程序

    #include   

    main( )   

    { int  s=0,n;

      for( n=o;n<3;n++)   

      { switch(s)  

         { case 0:

           case 1: s+=1;  

           case 2: s+=2; break;

           case 3: s+=3;  

           default:  s+=4;

          }

          printf(”%d,”,s);

       }   

    }

    程序运行后的输出结果是

    • A.1,2,4,
    • B.1,3,6,
    • C.3,10,14,
    • D.3,6,10,
  34. 若k是int类型变量,且有以下for语句

    for(k=-1;k<0;k++) printf(”****\n”);

    下面关于语句执行情况的叙述中正确的是

    • A.循环体执行一次
    • B.循环体执行两次
    • C.循环体一次也不执行
    • D.构成无限循环
  35. 有以下程序

    #include 

    main( )

    {  char a,b,c;

    b=’1’;   c=’A’;

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

       { if (a%2) putchar(b+a);

          else putchar(c+a);

       }

     }

    程序运行后的输出结果是

    • A.1B3D5F
    • B.ABCDEF
    • C.A2C4E6
    • D.123456
  36. 有以下程序

    #include 

    main( )

    { int a;

      scanf(”%d”,&a);

      if(a++<9)printf(”%d\n”,a);

      else   printf(”%d\n”,a--);

    }   

    程序运行时从键盘输入9<回车>,则输出结果是 

    • A.10
    • B.11
    • C.9
    • D.8
  37. 以下选项中,能表示逻辑值“假”的是

    • A.1
    • B.0.000001
    • C.0
    • D.100.0
  38. 设变量均已正确定义并赋值,以下与其他三组输出结果不同的一组语句是

    • A.x++;printf(”%d\n”,x);
    • B.n=++x;printf(”%d\n”,n);
    • C.++x;printf(”%d\n”,x);
    • D.n=x==;printf(”%d\n”,n);
  39. 有以下程序

    #include   

    main( )

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

      c=(a=a-5); (a=b, b+=4);

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

     }

    程序运行后的输出结果是

    • A.0,4,5
    • B.4,4,5
    • C.4,4,4
    • D.0,0,0
  40. 设有以下语句: 

    char ch1,ch2; scanf(”%c%c”,&ch1,&ch2);   

    若要为变量ch1和ch2分别输入字符A和B,正确的输入形式应该是

    • A.A和B之间用逗号间隔
    • B.A和B之间不能有任何间隔符
    • C.A和B之间可以用回车间隔
    • D.A和B之间用空格间隔
  41. 以下叙述中错误的是。 

    • A.一个C程序中可以包含多个不同名的函数
    • B.一个C程序只能有一个主函数
    • C.C程序在书写时,有严格的缩进要求,否则不能编译通过
    • D.C程序的主函数必须用main作为函数名
  42. 以下关于算法的叙述中错误的是

    • A.算法可以用伪代码、流程图等多种形式来描述
    • B.一个正确的算法必须有输入
    • C.一个正确的算法必须有输出
    • D.用流程图描述的算法可以用任何一种计算机高级语言编写成程序代码
  43. 关于C语言中数的表示,以下叙述中正确的是

    • A.只有整型数在允许范围内能精确无误的表示,实型数会有误差
    • B.只要在允许范围内整型数和实型数都能精确的表示
    • C.只有实型数在允许范围内能精确无误的表示,整型数会有误差
    • D.只有用八进制表示的数才不会有误差
  44. 针对简单程序设计,以下叙述的实施步骤顺序正确的是

    • A.确定算法和数据结构、编码、调试、整理文档
    • B.编码、确定算法和数据结构、调试、整理文档
    • C.整理文档、确定算法和数据结构、编码、调试
    • D.确定算法和数据结构、调试、编码、整理文档
  45. 在黑盒测试方法中,设计测试用例的主要根据是

    • A.程序外部功能
    • B.程序内部逻辑
    • C.程序数据结构
    • D.程序流程图
  46. 在软件设计中不使用的工具是.

    • A.系统结构图
    • B.程序流程图
    • C.PAD图
    • D.数据流图(DFD图)
  47. 软件生命周期中的活动不包括

    • A.软件维护
    • B.市场调研
    • C.软件测试
    • D.需求分析
  48. 有三个关系R、S和T如下:

     则由关系R和S得到关系T的操作是

    • A.自然连接
    • B.并
    • C.差
    • D.交
  49. 在下列模式中,能够给出数据库物理存储结构与物理存取方法的是

    • A.内模式
    • B.外模式
    • C.概念模式
    • D.逻辑模式
  50. 在满足实体完整性约束的条件下 

    • A.一个关系中可以没有候选关键字
    • B.一个关系中只能有一个候选关键字
    • C.一个关系中必须有多个候选关键字
    • D.一个关系中应该有一个或多个候选关键字
  51. 一棵二叉树共有25个结点,其中5个是叶子结点,则度为1的结点数为

    • A.4
    • B.6
    • C.10
    • D.16
  52. 下列叙述中正确的是

    • A.循环队列是队列的一种顺序存储结构
    • B.循环队列是队列的一种链式存储结构
    • C.循环队列是非线性结构
    • D.循环队列是一种逻辑结构
  53. 下列叙述中正确的是

    • A.栈是一种先进先出的线性表
    • B.队列是一种后进先出的线性表
    • C.栈与队列都是非线性结构
    • D.以上三种说法都不对