全国计算机等级考试历年真题与标准题库:二级C语言
上QQ阅读APP看书,第一时间看更新

2014年9月二级C语言真考题库新增试题(1)

(考试时间120分钟,满分100分)

一、选择题(每小题1分,共40分)

(1)面向对象方法中,实现对象的数据和操作结合于统一体中的是(  )。

(A)结合

(B)封装

(C)隐藏

(D)抽象

(2)在进行逻辑设计时,将E-R图中实体之间联系转换为关系数据库的(  )。

(A)关系

(B)元组

(C)属性

(D)属性的值域

(3)线性表的链式存储结构与顺序存储结构相比,链式存储结构的优点有(  )。

(A)节省存储空间

(B)插入与删除运算效率高

(C)便于查找

(D)排序时减少元素的比较次数

(4)深度为7的完全二叉树中共有125个节点,则该完全二叉树中的叶子节点数为(  )。

(A)62

(B)63

(C)64

(D)65

(5)下列叙述中正确的是(  )。

(A)所谓有序表是指在顺序存储空间内连续存放的元素序列

(B)有序表只能顺序存储在连续的存储空间内

(C)有序表可以用链接存储方式存储在不连续的存储空间内

(D)任何存储方式的有序表均能采用二分法进行查找

(6)设二叉树如下:

则后序序列为(  )。

(A)ABDEGCFH

(B)DBGEAFHC

(C)DGEBHFCA

(D)ABCDEFGH

(7)计算机软件包括(  )。

(A)算法和数据

(B)程序和数据

(C)程序和文档

(D)程序、数据及相关文档

(8)下面描述中不属于软件需求分析阶段任务的是(  )。

(A)撰写软件需求规格说明书

(B)软件的总体结构设计

(C)软件的需求分析

(D)软件的需求评审

(9)当数据库中数据总体逻辑结构发生变化,而应用程序不受影响,称为数据的(  )。

(A)逻辑独立性

(B)物理独立性

(C)应用独立性

(D)空间独立性

(10)有三个关系R、S和T如下:

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

(A)并

(B)投影

(C)交

(D)选择

(11)以下叙述正确的是(  )。

(A)C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.obj的二进制文件

(B)C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.exe的可执行文件

(C)C编译程序把文件后缀为.obj的二进制文件编译成文件后缀为.exe的可执行文件

(D)链接程序把文件后缀为.c的源程序文件链接成文件后缀为.exe的可执行文件

(12)以下叙述正确的是(  )。

(A)循环结构、选择结构、顺序结构都是结构化程序的基本结构

(B)计算机可以直接执行C语言程序,不需要做任何转换

(C)过于复杂的算法不能使用N-S流程图描述

(D)只有不超过20步操作步骤的算法才是简单算法

(13)有如下程序:


#include <stdio.h>
main( )
{
  int x = 072;
  printf("X=%d\n", x+1);
}

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

(A)X=115

(B)X=73

(C)X=59

(D)X=72

(14)下面叙述正确的是(  )。

(A)任何复杂任务都可以分解成简单子任务

(B)C语言程序的所有函数只能处于同一个源文件

(C)包含全部三种基本结构的程序才是结构化程序

(D)C语言程序可以定义多个不同内容的main()函数

(15)以下叙述正确的是(  )。

(A)C程序总是以main()作为程序执行的起始行

(B)main()函数若不带参数,其后面的一对圆括号可省略

(C)函数体内的定义语句和可执行语句允许任意穿插出现

(D)C语言中的语句之间必须用分号作为分隔符

(16)有以下程序:


#include <stdio.h>
main( )
{ char c;
 for(; (c=getchar()) != ′#′; ) putchar(++c);
}

执行时如输入为:abcdefg##<回车>,则输出结果是(  )。

(A)abcdefg

(B)bcdefgh$

(C)bcdefgh$$

(D)bcdefgh

(17)有以下程序:


#include <stdio.h>
main( )
{ int a=1, b=0;
 for(; a<5; a++)
 { if (a%2 == 0) break;
  continue;
  b += a;
 }
 printf("%d \n", b);
}

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

(A)0

(B)1

(C)10

(D)4

(18)有以下程序:


#include <stdio.h>
main( )
{
  int x = 0x13;
  if (x = 0x12) printf("True");
  printf("False\n");
}

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

(A)True

(B)TrueFalse

(C)False

(D)TrueFalseTrue

(19)为了避免在嵌套的if-else语句中产生二义性,C语言规定与else子句配对是(  )。

(A)与其在同一行上的if子句

(B)在其之后最近的不带else的if子句

(C)与其缩排位置相同的if子句

(D)在其之前最近的不带else的同层if子句

(20)有以下程序:


include <stdio.h>
main( )
{ int i,a;
 for (i=0; i<=10; i++) a=i;
 printf("%d,%d\n", i, a);
}

程序的运行结果是(  )。

(A)11,10

(B)10,10

(C)10,11

(D)11,11

(21)有以下程序:


#include <stdio.h>
void fun(int a[ ], int n)
{ int i=0;
 for (i=0; i<n; i++)
 {
  if (i % 2 == 0)
    a[i] += n;
  else
    a[i] -= n;
 }
}
main(  )
{ int c[5] = {5,4,3,2,1}, i;
 fun(c, 5);
 for (i=0;i<5; i++) printf("%d,", c[i]);
 printf("\n");
}

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

(A)10,-1,8,-3,6,

(B)5,4,3,2,1,

(C)10,2,8,4,6,

(D)5,-1,3,-3,1,

(22)有以下程序:


#include <stdio.h>
#define N 4
void fun(int a[][N])
{ int i;
 for(i=0; i<N; i++)
  a[0][i] = a[N-1][N-1-i];
}
main( )
{ int x[N][N]={ {1, 2, 3, 4},
                 {5, 6, 7, 8},
                 {9,10,11,12},
                 {13,14,15,16}}, i;
 fun(x);
 for (i=0; i<N; i++) printf("%d,", x[i][i]);
 printf("\n");
}

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

(A)16,6,11,16,

(B)1,6,11,16,

(C)4,7,10,13,

(D)17,17,17,17,

(23)有如下程序:


#include <stdio.h>
int convert(int* data)
{
  return (*data) ++;
}
main( )
{
  int data =56;
  convert(&data);
  printf("%d,", data);
  data = convert(&data);
  printf("%d,\n", data);
}

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

(A)56,57,

(B)57,58,

(C)57,57,

(D)55,57,

(24)设有如下程序段:


int a[1] = {0};
int b[] = {9};
char c[3] = {"A", "B"};
char d = "12";

以下叙述正确的是(  )。

(A)a, b的定义合法,c, d的定义不合法

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

(C)a,b,c的定义是合法的,d的定义不合法

(D)只有a的定义是合法的

(25)设有定义:int x=2,*p=&x;float y=3.0; char z=′c′;,则立即进行以下运算有安全隐患的是(  )。

(A)p++;

(B)x++;

(C)y++;

(D)z++;

(26)有以下程序:


#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

(27)有以下程序:


#include <stdio.h>
#include <string.h>
char *a = "you";
char *b = "Welcome you to Beijing!";
main( )
{ char *p;
 p = b;
 while (*p != *a) p++;
 p += strlen(a) + 1;
 printf("%s\n", p);
}

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

(A)Beijing!

(B)you to Beijing!

(C)Welcome you to Beijing!

(D)to Beijing!

(28)有如下程序:


#include <stdio.h>
#include <string.h>
main( )
{
  printf("%d\n", strlen("0\t\nA011\1"));
}

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

(A)8

(B)9

(C)7

(D)10

(29)有如下程序:


#include <stdio.h>
int sum(int data)
{
  static int init = 1;
  return init += data;
}
main( )
{
  int i;
  for (i=1; i<=1; i++) printf("%d,", sum(i));
  printf("\n");
}

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

(A)2,

(B)2,3,

(C)3,

(D)1,

(30)有以下程序:


#include <stdio.h>
main( )
{ char s1[] = "programe", s2[] = "Language";
  char *p1 = s1, *p2 = s2;
  int k;
  for (k=0; k<8; k++)
    if (*(p1+k) == *(p2+k))
      printf("%s\n",(p1+k));
}

程序的运行结果是(  )。

(A)grame  ame  e

(B)g  a  e

(C)programe

(D)无输出字符

(31)以下针对全局变量的叙述错误的是(  )。

(A)全局变量的作用域是从定义位置开始至源文件结束

(B)全局变量是在函数外部任意位置上定义的变量

(C)用extern说明符可以限制全局变量的作用域

(D)全局变量的生存期贯穿于整个程序的运行期间

(32)有以下程序:


#include <stdio.h>
#include <string.h>
typedef struct stu {
                   char name[10];
                   char gender;
                   int score;
                   } STU;
void f(STU *c)
{ strcpy(c->name, "Qian");
  c->gender = ′f′;
  c->score = 350;
}
main( )
{ STU a = {"Zhao", ′m′, 290}, b;
  b = a;
  f(&b);
  printf("%s,%c,%d,", a.name, a.gender, a.score);
  printf("%s,%c,%d\n", b.name, b.gender, b.score);
}

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

(A)Zhao,m,290,Qian,f,350

(B)Zhao,m,290,Qian,m,290

(C)Zhao,m,290,Zhao,m,290

(D)Zhao,m,290,Qian,m,350

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

(A)#define PAI 3.14

(B)#Define Eps 0.00001

(C)##DEFINE FALSE 0

(D)#define int INT

(34)有以下程序:


#include <stdio.h>
#define D(x) 2*x+3
main( )
{
  int i = 1, j = 2;
  printf("%d\n", D(i+j));
}

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

(A)7

(B)6

(C)9

(D)2

(35)有以下程序:


#include <stdio.h>
#include <string.h>
struct S
{
  char name[10];
};
void change(struct S *data, int value)
{
  strcpy(data->name, "#");
  value = 6;
}
main( )
{
  struct S input;
  int num = 3;
  strcpy(input.name, "OK");
  change(&input, num);
  printf("%s,%d\n", input.name, num);
}

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

(A)OK,6

(B)#,6

(C)OK,3

(D)#,3

(36)有如下定义:


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));

(37)有以下程序:


#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

(38)有如下定义:


struct st
{ int a; float b; } x[10];
FILE *fp;

若文件已正确打开,且数组x的10个元素均已赋值,以下将数组元素写到文件中的语句错误的是(  )。

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

fwrite(x,sizeof(struct st),1,fp);

(B)fwrite(x,10*sizeof(struct st),1,fp);

(C)fwrite(x,sizeof(struct st),10,fp);

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

fwrite(&x[i],sizeof(struct st),1,fp);

(39)有以下程序:


#include <stdio.h>
int disp(char* str)
{
  while (*str) putchar(*str++);
  putchar(′#′);
  return *str;
}
main()
{
  printf("%d\n", disp("C##123"));
}

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

(A)C##123#0

(B)C##1230

(C)C##0

(D)C##123#\0

(40)有以下程序:


#include <stdio.h>
main( )
{ int x[3][3] = {{2},{4},{6}}, i, *q = &x[0][0];
  for(i=0; i<2; i++)
  {
   if (i == 0)
    x[i][i+1] = *q+1;
   else
    ++q;
   printf("%d ",*q);
  }
  printf("\n");
}

程序的运行结果是(  )。

(A)23

(B)26

(C)33

(D)36

二、程序填空题

给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。

请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。

注意:部分源程序在文件BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

试题程序:


#include <stdlib.h>
#include <stdio.h>
#define N 20
void fun( int *a)
{ int i, x, n=0;
 x=rand()%20;
/**********found**********/
 while (n<【1】)
 { for(i=0; i<n; i++ )
/**********found**********/
   if( x==a[i])
    【2】;
/**********found**********/
  if( i==【3】)
   { a[n]=x; n++; }
  x=rand()%20;
 }
}
main()
{ int x[N]={0} ,i;
 fun( x );
    printf("The result : \n");
    for( i=0; i<N; i++)
    { printf("%4d",x[i]);
     if((i+1)%5==0)printf("\n");
    }
    printf("\n\n");
}

三、程序修改题

下列给定程序是建立一个带头节点的单向链表,并用随机函数为各节点赋值。函数fun的功能是将单向链表节点(不包括头节点)数据域为偶数的值累加起来,并且作为函数值返回。

请改正函数fun中的错误,使它能得出正确的结果。

注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef struct aa
{ int data;
 struct aa *next;
} NODE;
int fun (NODE *h)
{int sum=0;
  NODE *p;
  p=h->next;
/*************found**************/
  while(p->next)
   { if(p->data%2==0)
    sum+=p->data;
/*************found**************/
    p=h->next;
   }
  return sum;
}
NODE *creatlink(int n)
{
  NODE *h,*p,*s;
      int i;
      h=p=(NODE*)malloc(sizeof(NODE));
      for(i=1;i<n;i++)
      {
         s=(NODE*)malloc(sizeof(NODE));
            s->data=rand()%16;
            s->next=p->next;
            p->next=s;
            p=p->next;
      }
      p->next=NULL;
      return h;
}
outlink(NODE *h)
{ NODE *p;
 p=h->next;
  printf("\n\n The LIST :\n\n HEAD");
  while(p)
   { printf("->%d",p->data);
    p=p->next;}
  printf("\n");
}
void main()
{NODE *head; int sum;
  system("CLS");
       head=creatlink(10);
       outlink(head);
       sum=fun(head);
       printf("\nSUM=%d",sum);
}

四、程序设计题

请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。

例如,若输入“abc4Efg”,则应输出“aBc4EFg”。

注意:部分源程序在文件PROG1.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

试题程序:


#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void fun(char *ss)
{

}
void main()
{
  FILE *wf;
  char tt[81],s[81]="abc4Efg";
  system("CLS");
  printf("\nPlease enter an string within 80 characters:\n");
  gets(tt);
  printf("\n\nAfter changing, the string\n %s",tt);
  fun(tt);
  printf("\nbecomes\n %s\n",tt);
/******************************/
  wf=fopen("out.dat","w");
fun(s);
fprintf (wf,"%s",s);
fclose(wf);
/*****************************/
}