首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
您现在的位置: 考试吧(Exam8.com) > 计算机等级考试 > 计算机二级 > C语言 > 模拟试题 > 正文

2010全国计算机等级考试二级C语言考前密卷(10)

来源:考试吧Exam8.com) 2010-8-31 10:55:21 考试吧:中国教育培训第一门户 模拟考场
考试吧提供了“2010全国计算机等级考试二级C语言考前密卷试题”,帮助考生巩固知识点,备战2010年计算机等级考试

  一、选择题

  (1)下列叙述中正确的是

  A)线性表是线性结构

  B)栈与队列是非线性结构

  C)线性链表是非线性结构

  D)二叉树是线性结构

  (2)非空的循环单链表head的尾结点(由p所指向),满足

  A)p->next==NULL

  B)p==NULL

  C)p->next=head

  D)p=head

  (3)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是

  A)堆排序

  B)直接插入排序

  C)快速排序

  D)直接选择排序

  (4)对建立良好的程序设计风格,下面描述正确的是

  A)程序应简单、清晰、可读性好

  B)符号名的命名只要符合语法

  C)充分考虑程序的执行效率

  D)程序的注释可有可无

  (5)下列不属于结构化分析的常用工具的是

  A)数据流图

  B)数据字典

  C)判定树

  D)PAD图

  (6)在软件生产过程中,需求信息的给出是

  A)程序员

  B)项目管理者

  C)软件分析设计人员

  D)软件用户

  (7)下列工具中为需求分析常用工具的是

  A)PAD

  B)PFD

  C)N-S

  D)DFD

  (8)NULL是指

  A)0

  B)空格

  C)未知的值或无任何值

  D)空字符串

  (9)数据库的故障恢复一般是由

  A)数据流图完成的

  B)数据字典完成的

  C)DBA完成的

  D)PAD图完成的

  (10)下列说法中,不属于数据模型所描述的内容的是

  A)数据结构

  B)数据操作

  C)数据查询

  D)数据约束

  (11)C语言程序的基本单位是

  A)程序行

  B)语句

  C)函数

  D)字符

  (12)下面四个选项中,均是合法整型常量的选项是

  A)160 -0xffff 011

  B)-0xcdf 01a 0xe

  C)-01 986,012 0668

  D)-0x48a 2e5 0x

  (13)以下选项中合法的用户标识符是

  A)long

  B)_2Test

  C)3Dmax

  D)A.dat

  (14)假定x和y为double型,则表达式x=2,y=x+3/2的值是

  A)3.500000

  B)3

  C)2.000000

  D)3.000000

  (15)以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子x÷y÷z的C语言表达式是

  A)x/y*z

  B)x*(1/(y*z))

  C)x/y*1/z

  D)x/y/z

  (16)设x,y,t均为int型变量,执行语句:

  x=y=3;

  t=++x||++y;

  完成后,y的值为

  A)不确定

  B)4

  C)3

  D)1

  (17)已知i,j,k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1,j的值为2,k的值为3,以下选项中正确的输入语句是

  A)scanf("%2d,%2d,%2d", i, j, k);

  B)scanf("%d %d %d",&i,&j,&k);

  C)scanf("%d,%d,%d",&i,&j,&k);

  D)scanf("i=%d,j=%d,k=%d",&i,&j,&k);

  (18)若变量已正确定义并赋值,下面符合C语言语法的表达式是

  A)m∶=5

  B)c=b=a=1

  C)float 8%5

  D)x+5=y+2

  (19)下列程序运行的结果是

  main()

  {float x;

  int i;

  x=3.6;

  i=(int)x;

  printf("x=%f,i=%d ",x,i);

  }

  A)x=3.600000,i=3

  B)x=3.6,i=3

  C)x=3,i=3

  D)x=3.600000,i=3.000000

  (20)若执行下面的程序时,从键盘上输入5和2,则输出结果是

  main()

  { int a,b,k;

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

  k=a;

  if(a

  else k=b%a;

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

  }

  A)5

  B)3

  C)2

  D)0

  (21)C语言中 while 和do-while循环的主要区别是

  A)do-while的循环体至少无条件执行一次

  B)while的循环控制条件比do-while的循环控制条件更严格

  C)do-while允许从外部转到循环体内

  D)do-while 的循环体不能是复合语句

  (22)以下程序的输出结果是

  main()

  { int x=1,y=3;

  printf("%d,",x++);

  { int x=0;x+=y*2;

  printf("%d,%d, ",x,y);

  }

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

  }

  A)1,6,3,1,3

  B)1,6,3,6,3

  C)1,6,3,2,3

  D)1,7,3,2,3

  (23)下面程序输出的结果是

  main()

  { int i;

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

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

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

  }

  A)1 5 9

  B)7 5 3

  C)3 5 7

  D)5 9 1

  (24)请阅读以下程序:

  main()

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

  if(a=b+c)printf("***\n");

  else printf("$$$\n");

  }

  以上程序

  A)有语法错不能通过编译

  B)可以通过编译但不能通过连接

  C)输出***

  D)输出$$$

  (25)以下程序的输出结果是

  main()

  { char c=′z′;

  printf("%c",c-25);

  }

  A)a

  B)Z

  C)z-25

  D)y

  (26)下面函数的功能是

  char *fun(char *str1,char*str2)

  {while((*str1)&&(*str2++=*str1++));

  return str2;

  }

  A)求字符串的长度

  B)比较两个字符串的大小

  C)将字符串str1复制到字符串str2中

  D)将字符串str1接续到字符串str2中

  (27)下面函数调用语句含有实参的个数为

  func((exp1,exp2),(exp3,exp4,exp5));

  A)1

  B)2

  C)4

  D)5

  (28)下面程序段的运行结果是

  char *s="abcde";

  s+=2;printf("%d",s);

  A)cde

  B)字符′c′

  C)字符′c′的地址

  D)无确定的输出结果

  (29)已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的正确输出结果是

  void print_value(int *x)

  {printf("%d\n",++*x);}

  A)23

  B)24

  C)25

  D)26

  (30)当顺利执行了文件关闭操作时,fclose函数的返回值是

  A)-1

  B)TRUE

  C)0

  D)1

  (31)设有如下定义

  char *s[2]={ "abcd","ABCD"};

  则下列说法错误的是

  A)s数组元素的值分别是"abcd"和"ABCD"两个字符串的首地址

  B)s是指针数组名,它含有两个元素分别指向字符型一维数组

  C)s数组的两个元素分别存放的是含有4个字符的一维字符数组中的元素

  D)s数组的两个元素中分别存放了字符′a′和′A′的地址

  (32)以下不能对二维数组a进行正确初始化的语句是

  A)int a[2][3]={0};

  B)int a[][3]={{1,2},{0}};

  C)int a[2][3]={{1,2},{3,4},{5,6}};

  D)int a[][3]={1,2,3,4,5,6};

  (33)有以下程序

  struct STU

  { char num[10]; float score[3]; };

  main()

  {struct STU s[3]={{"20021",90,95,85},

  {"20022",95,80,75},

  { "20023",100,95,90},

  },*p=s;

  int i; float sum=0;

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

  sum=sum+p->score[i];

  printf("%6.2f\n",sum);

  }

  程序运行后的输出结果是

  A)260.00

  B)270.00

  C)280.00

  D)285.00

  (34)若有说明:int a[10];则对a数组元素的正确引用是

  A)a[10]

  B)a[3,5]

  C)a(5)

  D)a[10-10]

  (35)下面程序段中,输出*的个数是

  char *s="\ta\018bc";

  for(;*s!=′\0′;s++)printf("*");

  A)9

  B)5

  C)6

  D)7

  (36)设有如下函数

  fun (float x)

  {

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

  则函数的类型是

  A)与参数x的类型相同

  B)是void

  C)是int型

  D)无法确定

  (37)有如下定义

  #define D 2

  int x=5;float y=3.83;

  char c=′D′;

  则下面选项中错误的是

  A)x++;

  B)y++;

  C)c++;

  D)D++;

  (38)以下程序段的执行结果为

  #define PLUS(X,Y)X+Y

  main()

  { int x=1,y=2,z=3,sum;

  sum=PLUS(x+y,z)*PLUS(y,z);

  printf("SUM=%d",sum);

  }

  A)SUM=9

  B)SUM=12

  C)SUM=18

  D)SUM=28

  (39)C语言规定,函数返回值的类型是由

  A)return语句中的表达式类型所决定

  B)调用该函数时的主调函数类型所决定

  C)调用该函数时系统临时决定

  D)在定义该函数时所指定的函数类型所决定

  (40)下列程序的运行结果是

  void fun(int *a,int *b)

  { int *k;

  k=a;a=b;b=k;

  }

  main()

  { int a=2004, b=9,*x=&a,*y=&b;

  fun(x,y);

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

  }

  A)2004 9

  B)9 2004

  C)0 0

  D)编译时出错

  (41)下列程序是用来判断数组中特定元素的位置所在。如果输入如下整数:

  876 675 896 101 301 401 980 431 451 777

  #include

  #include

  int fun(int *s, int t, int *k)

  { int i;

  *k=0;

  for(i=0;i

  if(s[*k]

  return s[*k];

  }

  main()

  {

  int a[10]={ 876,675,896,101,301,401,980,431,451,777},k;

  clrscr();

  fun(a, 10, &k);

  printf("%d, %d\n ", k, a[k]);

  }

  则输出结果为

  A)7,431

  B)6

  C)980

  D)6,980

  (42) C语言结构体类型变量在程序执行期间

  A)所有成员一直驻留在内存中

  B)只有一个成员驻留在内存中

  C)部分成员驻留在内存中

  D)没有成员驻留在内存中

  (43)下面程序应能对两个整型变量的值进行交换。以下正确的说法是

  main()

  {int a=10,b=20;

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

  swap(&a,&b);

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

  }

  swap(int p,int q)

  {int t;

  t=p;p=q;q=t;

  }

  A)该程序完全正确

  B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可

  C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可

  D)以上说法都不对

  (44)有以下程序

  #include

  main()

  { char *p,*q;

  p=(char *)malloc(sizeof(char)*20); q=p;

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

  }

  若从键盘输入:abc def<回车>,则输出结果是

  A)def def

  B)abc def

  C)abc d

  D)d d

  (45)以下程序的输出结果是

  int f()

  { static int i=0;

  int s=1;

  s+=i; i++;

  return s;

  }

  main()

  { int i,a=0;

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

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

  }

  A)20

  B)24

  C)25

  D)15

  (46)已知 int a=1,b=3则a^b的值为

  A)3

  B)1

  C)2

  D)4

  (47)如果需要打开一个已经存在的非空文件“Demo”进行修改下面正确的选项是

  A)fp=fopen("Demo","r");

  B)fp=fopen("Demo","ab+");

  C)fp=fopen("Demo","w+");

  D)fp=fopen("Demo","r+");

  (48)若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是

  A)fopen("A:\user\abc.txt","r")

  B)fopen("A:\\user\\abc.txt","rt+")

  C)fopen("A:\user\abc.txt","rb")

  D)fopen("A:\user\abc.txt","w")

  (49)有以下程序

  #include

  main()

  { char *p="abcde\0fghjik\0 ";

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

  }

  程序运行后的输出结果是

  A)12

  B)15

  C)6

  D)5

  (50) 有以下程序

  #include

  struct NODE

  { int num; struct NODE *next; };

  main()

  { struct NODE *p,*q,*r;

  p=(struct NODE*)malloc(sizeof(struct NODE));

  q=(struct NODE*)malloc(sizeof(struct NODE));

  r=(struct NODE*)malloc(sizeof(struct NODE));

  p->num=10; q->num=20; r->num=30;

  p->next=q;q->next=r;

  printf("%d\n ",p->num+q->next->num);

  }

  程序运行后的输出结果是

  A)10

  B)20

  C)30

  D)40

  二、填空题

  (1)冒泡排序算法在最好的情况下的元素交换次数为 【1】 。

  解析: 根据冒泡排序算法思想可知,若待排序的初始序列为“正序”序列,则只需进行一趟排序,在排序过程中进行n-1次关键字间的比较,且不移动和交换记录,这种情况是冒泡排序的最好情况,故冒泡排序算法在最好的情况下的元素交换次数为0。

  (2)在最坏情况下,堆排序需要比较的次数为 【2】 。

  答案:0(nlog2n)

  (3)若串s="MathTypes",则其子串的数目是 【3】 。

  解析: 串s************有9个字符,由于串中字符各不相同,则其子串中有0个字符的1个(空串),1个字符的9个,2个字符的8个,3个字符的7个,4个字符的6个,5个字符的5个,6个字符的4个,7个字符的3个,8个字符的2个,9个字符的1个,共有1+2+3+4+5+6+7+8+9+1=46。

  (4)软件开发环境是全面支持软件开发全过程的 【4】 集合。

  答案:软件工程

  (5)关系数据库的关系演算语言是以 【5】 为基础的DML语言。

  解析: 关系数据库中的关系演算包括元组关系演算和域关系演算。二者都是由原子公式组成的公式。而这些关系演算都是以数理逻辑中的谓词演算为基础的。

  (6)下列y的值是 【6】 。

  int y; y=sizeof (2.25*4);

  解析: sizeof (2.25*4)为sizeof (10.00)值为8,C语言规定浮点型常量当双精度处理(以IRM-PC机为例)。

  (7)下列x的值是 【7】 。

  int x;x=sizeof 2.25*4;

  解析: sizeof运算符高于算术运算符,所以sizeof 2.25*4等价于(sizeof 2.25)*4为8×4=32(以IBM-PC机为例)。

  (8)以下程序的输出结果是 【8】 。

  main ()

  {int i=010,j=10;

  pirntf ("%d,%d\n",i,j);

  }

  解析: 以0开头的是八进制数。

  (9)下列程序的输出结果为 【9】 。

  main ()

  {int x=3,y=5;

  printf ("%d",x=(x--)*(--y));

  }

  解析: x--的值为3,--y的值为4;注意前缀--和后缀--的区别。

  (10)以下程序的输出结果是 【10】 。

  fun (int x,int y,int z)

  { z =x*x+y*y;}

  main ()

  {int a=31;

  fun (6,3,a)

  printf ("%d", a)

  }

  解析: 在函数调用时,形参值和改变,不能会改变实参的值。

  (11)若有int a=1;int b=2;则a|b的值为 【11】 。

  解析: 将a化成二进数和制数是0001,b化成二进制数为0010,|是或运算符,a|b=0011即为3。

  (12)已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=′a′+′8′-′3′的值为 【12】 。

  解析: 在C语言中,整型,实型,字符型数据间可以混合运算,在进行运算时,不同类型的数据要先转换成同一类型,然后再进行运算。我们可以这样计算本题,97+8-3=102,即102所对应的字母为f。

  (13)若从键盘输入58,则以下程序输出的结果是 【13】 。

  main()

  {int a;

  scanf("%d",&a);

  if(a>50)printf("%d",a);

  if(a>40)printf("%d",a);

  if(a>30)printf("%d",a);

  }

  (14)下列程序的输出的结果是 【14】 , 【15】 。

  main()

  {int i,j row,colum,m;

  static int array[3][3]={{100,200,300},{28,72,-30}{-850,2,6}};

  m=array[0][0];for(i=0;i<3;i++)

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

  if(array[i][j]

  {m=array[i][j];colum=j;row=i;}

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

  }

  解析: 两个for循环是对数组元素进行扫描,并找是数组中值最小的元素和它的位置。

  (15)以下程序中,select 函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。

  #define N 3

  #define M 3

  select(int a[N][M],int *n)

  {int i,j,row=1,colum=1;

  for(i=0;i

  for(j=0;j

  if(a[i][j]>a[row][colum]){row=i;colum=j;}

  *n= 【16】 ;

  return 【17】 ;

  }

  main()

  {int a[N][M]={9,11,23,6,1,15,9,17,20},max,n;

  max=select(a,&n);

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

  }

  解析: 本题中,首先假定a[1][1]为最大值,然后利用循环结构将二维数组中的每个元素逐个与a[row][colum]进行比较,如果比a[row][colum]的值大,则令a[row][colum]指向该元素,比较完后,row即是最大值所在的行,所以第1个空所在的行的语句应是*n=row;,在第2个空中返回最大值,显然,是a[row][colum]

  (16)函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值,即s > t时返回正值,当s < t时返回负值。请填空。

  my_cmp(char *s, char *t)

  {while (*s == *t)

  {if (*s == ′\0′)return 0;

  ++s; ++t;

  } return 【18】 ;

  }

  解析: 两字符串大小比较必须从它们的首字符开始,在对应字符相等情况下循环,直至不相等结束。相等时,若字符串已到了字符串的结束标记符,则两字符串相同,函数返回0值;如还有后继字符,则准备比较下一对字符。对应字符不相同,循环结束。循环结束时,就以两个当前字符的差返回。所以在空框处应填入*s-*t,保证在s > t时返回正值,当s < t时返回负值。

  (17)若有以下说明和定义语句,则变量w在内存中所占的字节数是 【19】 。

  union aa {float x; float y; char c[6]; };

  struct st{ union aa v; float w[5]; double ave; } w;

  解析: 共用型aa有3个成分,一个是float型成分x,一个是float型成分y,再一个是有6个元素的字符数组。若float 型数据占4个字节,则类型aa 数据要占用6个字节。结构变量w有3个成分,一个是共用型成分aa , 要占用6个字节;一个是有5个float型元素的数组w,要占用20个字节;一个是double型的ave。double型数据要8个字节,则结构变量w要占用34个字节。

  (18)“FILE *p”的作用是定义一个文件指针变量,其中的“FILE”是在 【20】 头文件中定义的。

  解析: 代码“FILE *p”的作用是定义一个文件指针变量,其中的FILE是在标准输入输出头文件stdio.h中定义的。

  相关推荐:2010年全国计算机等考二级C:程序设计实战汇总
       2010年9月计算机等级考试精华备考资料汇总

文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。