找回密码

碧海潮声大学生网

查看: 2604|回复: 5
打印 上一主题 下一主题

给C语言考试的同人们

[复制链接]
跳转到指定楼层
1#
发表于 2008-4-4 17:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C语言二级考试马上开始了
     下面是关于今年考试的新说明   和部分  真题
     希望对大家有帮助
   

          祝愿大家都取到好的成绩    过了 万岁



全国计算机等级考试二级C考试大纲(2008年最新版)
基本要求
1.     熟悉Visual C++6.0集成开发环境
2.     掌握结构化程序设计的方法,具有良好的程序设计风格
3.     掌握程序设计中简单的数据结构和算法并能阅读简单的程序
4.     在VisualC++6.0集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力。
考试内容
一、C语言程序的结构
1.     程序的构成,main函数和其他函数。
2.     头文件,数据说明,函数的开始和结束标志以及程序中的注释
3.     源程序的书写风格
4.     C语言的风格
二、数据类型及其运算
1.     C的数据类型(基本类型,结构类型,指针类型,无值类型)及其定义方法。
2.     C运算符的种类、运算优先级和结合性
3.     不同类型数据间的转换和运算
4.     C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则
三、基本语句
1.     表达式语句,空语句,复合语句
2.     输入输出函数的调用,正确输入数据并正确设计输出格式
四、选择结构程序设计
1. 用if语句实现选择结构
2. 用switch语句实现多分支选择结构
3. 选择结构的嵌套
五、循环结构程序设计
1.     for循环结构
2.     while和do-while循环结构
3.     continue语句break语句
4.     循环的嵌套
六、数组的定义和引用
1.     一维数组和二维数组的定义、初始化和数组元素的引用
2.     字符串与字符数组
七、函数
1.     库函数的正确调用
2.     函数的定义方法
3.     函数的类型和返回值
4.     形式参数与实在参数,参数值的传递
5.     函数的正确调用,嵌套调用,递归调用
6.     局部变量和全局变量
7.     变量的存储类别(自动,静态,寄存器,外部),变量的作用域和生存期
八、编译预处理
1.     宏定义和调用(不带参数的宏,带参数的宏)
2.     “文件包含”处理
九、指针
1, 地址与指针变量的概念,地址运算符与间址运算符
2, 一维、二维数组和字符串的地址以及指向变量、数组、字符串、函数、结构体的指针变量的定义。通过指针引用以上各类型数据
3, 用指针作函数参数
4, 返回地址值的函数
5, 指针数组,指向指针的指针
十、结构体(即“结构”)与共同体(即“联合”)
1.     用typedef说明一个新类型
2.     结构体和共用体类型数据的定义和成员的引用
3.     通过结构体构成链表,单向链表的建立,结点数据的输出、删除与插入
十一、位运算
1.     位运算符的含义和使用
2.     简单的位运算
十二、文件操作
只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不作要求
1.     文件类型指针(FILE类型指针)
2.     文件的打开与关闭(fopen,fclose)
3.     文件的读写(fputc,fgetc,fputs,fgets,fread,fwrite,fprintf,fscanf函数的应用),文件的定位(rewind,fseek函数的应用)
考试方式
1.     笔试:90分钟,满分100分,其中含公共基础知识部分的30分
2.     上机:90分钟,满分100分
上机操作包括:(1)填空;(2)改错;(3)编程






二级C语言笔试试题汇编二级C语言笔试试题汇编笔试(针对2008年4月)
一、选择题 ((1)~(40) 每题 1 分, (41)~(50) 每题 2 分, 共 60 分)
下列各题 A)、B)、C)、D)四个选项中, 只有一个选项是正确的。
01) 与十进制数200等值的十六进制数为
  A)A8
  B)A4
  C)C8
  D)C4
  答案:C
02) DOS文件系统的组织结构属于
  A)星形结构
  B)网形结构
  C)环形结构
  D)树形结构
  答案:D
03) 对存储器按字节进行编址,若某存储器芯片共有10根地址线,则该存储器芯片的存储容量

  A)1KB
  B)2KB
  C)4KB
  D)8KB
  答案:A
04) 在DOS环境下,代表键盘和显示器的设备文件名为
  A)PRN
  B)CON
  C)NUL
  D)LPT
  答案:B
05) 计算机网络的主要特点是
  A)运算速度快
  B)运算精度高
  C)资源共享
  D)人机交互
  答案:C
06) 磁盘处于写保护状态时其中的数据
  A)不能读出,不能删改
  B)可以读出,不能删改
  C)不能读出,可以删改
  D)可以读出,可以删改
  答案:B
07) 从Windows环境进入MS-DOS方式后,返回Windows环境的DOS命令为
  A)EXIT
  B)QUIT
  C)RET
  D)MSDOS
  答案:A
08) 在Windows环境下,若资源管理器左窗口中的某文件夹左边标有“+”标记,则表示
  A)该文件夹为空
  B)该文件夹中含有子文件夹
  C)该文件夹中只包含有可执行文件
  D)该文件夹中包含系统文件
  答案:B
09) 在Windows菜单中,暗淡的命令名项目表示该命令
  A)暂时不能用
  B)正在执行
  C)包含下一层菜单
  D)包含对话框
  答案:A
10)
  A)将当前应用程序转为后台运行
  B)退出Windows后再关机
  C)终止当前应用程序的运行
  D)退出Windows后重新启动计算机
  答案:C
11) 用C语言编写的代码程序
  A)可立即执行
  B)是一个源程序
  C)经过编译即可执行
  D)经过编译解释才能执行
  答案:B
12) 结构化程序由三种基本结构组成,三种基本结构组成的算法
  A)可以完成任何复杂的任务
  B)只能完成部分复杂的任务
  C)只能完成符合结构化的任务
  D)只能完成一些简单的任务
  答案:A
13) 以下定义语句中正确的是
  A)char a='A' b='B';
  B)float a=b=10.0;
  C)int a=10, *b=&a;
  D)float *a,b=&a;
  答案:C
14) 下列选项中,不能用作标识符的是
  A)_1234_
  B)_1_2
  C)int_2_
  D)2_int_
  答案:D
15) 有以下定义语句
double a,b;int w;long c;
若各变量已正确赋值,则下列选项中正确的表达式是
  A)a=a+b=b++
  B)w%((int)a+b)
  C)(c+w)%(int)a
  D)w=a==b;
  答案:C
16) 有以下程序
main()
{ int m=3,n=4,x;
  x=-m++;
  x=x+8/++n;
  printf{"%d\n",x);
}
程序运行后的输出结果是
  A)3
  B)5
  C)-1
  D)-2
  答案:D
17) 有以下程序
main()
{ char a='a',b;
  printf("%c,",++a);
  printf("%c\n",b=a++);
}
程序运行后的输出结果是
  A)b,b
  B)b,c
  C)a,b
  D)a,c
  答案:A
18) 有以下程序
main()
{ int m=0256,n=256;
  printf("%o%o\n",m,n);
}
程序运行后的输出结果是
  A)0256 0400
  B)0256 256
  C)256 400
  D)400 400
  答案:C
19) 有以下程序
main()
{ int a=666,b=888;
  printf("%d\n",a,b);
}
程序运行后的输出结果是
  A)错误信息
  B)666
  C)888
  D)666,888
  答案:B
20) 有以下程序
main()
{ int i;
  for(i=0;i<3;i++)
     switch(i)
     {
       case 0:printf("%d",i);
       case 2:printf("%d",i);
       default:printf("%d",i);
     }
}
程序运行后的输出结果是
  A)022111
  B)021021
  C)000122
  D)012
  答案:C
21) 若x和y代表整型数,以下表达式中不能正确表示数学关系 |x-y|<10 的是
  A)abs(x-y)<10
  B)x-y>-10&&x-y<10
  C)!(x-y)<-10||!(y-x)>lO
  D)(x-y)*(x-y)<100
  答案:C
22) 有以下程序
main()
{ int a=3,b=4,c=5,d=2;
  if(a>b)
     if(b>c)
       printf("%d",d++ + 1);
     else
       printf("%d",++d + 1);
  printf("%d\n",d);
}
程序运行后的输出结果是
  A)2
  B)3
  C)43
  D)44
  答案:A
23) 下列条件语句中,功能与其他语句不同的是
  A)if(a) printf("%d\n",x); else printf("%d\n",y);
  B)if(a==0) printf("%d\n",y); else printf("%d\n",x);
  C)if(a!=0) printf("%d\n",x); else printf("%d\n",y);
  D)if(a==0) printf("%d\n",x); else printf("%d\n",y);
  答案:D
24) 有以下程序
main()
{ int i=0,s=0;
  for(;;)
  {
     if(i==3||i==5) continue;
     if(i==6) break;
     i++;
     s+=i;
  }
  printf("%d\n",s);
}
程序运行后的输出结果是
  A)1O
  B)13
  C)21
  D)程序进入死循环
  答案:D
25) 若变量己正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是
  A)for(i=1,p=1;i<=5;i++) p*=i;
  B)for(i=1;i<=5;i++){p=1;p*=i;}
  C)i=1;p=1;while(i<=5){p*=i;i++;}
  D)i=1;p=1;do{p*=i;i++;}while(i<=5);
  答案:B
26) 有以下程序
main()
{ char a,b,c,d;
  scanf{"%c,%c,%d,%d",&a,&b,&c,&d);
  printf{"%c,%c,%c,%c\n",a,b,c,d);
}
若运行时从键盘上输入:6,5,65,66 <回车> 。则输出结果是
  A)6,5,A,B
  B)6,5,65,66
  C)6,5,6,5
  D)6,5,6,6
  答案:A
27) 以下能正确定义二维数组的是
  A)int a[][3];
  B)int a[][3]={2*3};
  C)int a[][3]={};
  D)int a[2][3]={{1},{2},{3,4}};
  答案:B
28) 有以下程序
int f(int a)
{ return a%2;}
main()
{ int s[8]={1,3,5,2,4,6},i,d=0;
  for(i=0;f(s);i++)d+=s;
  printf("%d\n",d);
}
程序运行后的输出结果是
  A)9
  B)11
  C)19
  D)21
  答案:A
29) 若有以下说明和语句
int c[4][5],(*p)[5];
p=c;
能够正确引用c数组元素的是
  A)p+1
  B)*(p+3)
  C)*(p+1)+3
  D)*(p[0]+2)
  答案:D
30) 有以下程序
main()
{ int a=7,b=8,*p,*q,*r;
  p=&a;q=&b;
  r=p;p=q;q=r;
  printf{"%d,%d,%d,%d\n",*p,*q,a,b);
}
程序运行后的输出结果是
  A)8,7,8,7
  B)7,8,7,8
  C)8,7,7,8
  D)7,8,8,7
  答案:C
31) s1和s2己正确定义并分别指向两个字符串。若要求:当s1所指串大于s2所指串时,执行语
句S;则以下选项中正确的是
  A)if(s1>s2) S;
  B)if(strcmp(s1,s2)) S;
  C)if(strcmp(s2,s1)>0) S;
  D)if(strcmp(s1,s2)>0) S;
  答案:D
32) 设有定义语句
int x[6]={2,4,6,8,5,7}, *p=x,i;
要求依次输出x数组6个元素中的值,不能完成此操作的语句是
  A)for(i=0;i<6;i++) printf("%2d",*(p++));
  B)for(i=0;i<6;i++) printf("%2d",*(p+i));
  C)for(i=0;i<6;i++) printf("%2d",*p++);
  D)for(i=0;i<6;i++) printf("%2d",(*p)++);
  答案:D
33) 有以下程序
#include <stdio.h>
main()
{ int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;
   *q=*(p+5);
   printf("%d %d\n",*p,*q);
}
程序运行后的输出结果是
  A)运行后报错
  B)6 6
  C)6 11
  D)5 10
  答案:A
34) 设有以下定义和语句
int a[3][2]={1,2,3,4,5,6},*p[3];
p[0]=a[1];
则 *(p[0]+1) 所代表的数组元素是
  A)a[0][1]
  B)a[1][0]
  C)a[1][1]
  D)a[l][2]
  答案:C
35) 有以下程序
main()
{ char str[][10]={"China","Beijing"},*p=str;
   printf("%s\n",p+10);
}
程序运行后的输出结果是
  A)China
  B)Beijing
  C)ng
  D)ing
  答案:B
36) 有以下程序
main()
{ char s[]="ABCD",*p;
   for(p=s+1;p<s+4;p++)printf("%s\n",p);
}
程序运行后的输出结果是
  A)ABCD
BCD
CD
D
  B)A
B
C
D
C)B
C
D
D)BCD
CD
D
  答案:D
37) 在函数调用过程中,如果函数如funA调用了函数funB,函数funB又调用了函数如funA,则
  A)称为函数的直接递归调用
  B)称为函数的间接递归调用
  C)称为函数的循环调用
  D)C语言中不允许这样的递归调用
  答案:B
38) 己有定义:int i,a[10],*p;,则合法的赋值语句是
  A)p=100;
  B)p=a[5];
  C)p=a[2]+2;
  D)p=a+2;
  答案:D
39) 以下叙述中正确的是
  A)局部交量说明为static存储类,其生存期将得到延长
  B)全局变量说明为static存储类,其作用域将被扩大
  C)任何存储类的变量在未赋初值时,其值都是不确定的
  D)形参可以使用的存储类说明符与局部变量完全相同
  答案:A
40) 设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是
  A)c1^c2
  B)c1&c2
  C)~c2
  D)c1|c2
  答案:A
41) 程序中对fun函数有如下说明
void *fun();
此说明的含义是
  A)fun函数无返回值
  B)fun函数的返回值可以是任意的数据类型
  C)fun函数的返回值是无值型的指针类型
  D)指针fun指向一个函数,该函数无返回值
  答案:C
42) 有以下程序
main()
{ char s[]="Yes\n/No",*ps=s;
  puts(ps+4);
  *(ps+4)=0;
  puts(s);
}
程序运行后的输出结果是(选项D中的第一行是空行)
  A)n/No
Yes
/No
  B)/No
Yes
  C)n/No
Yes
/No
  D)
/No
Yes
  答案:B
43) 有以下程序
main()
{ unsigned int a;
   int b=-1;
   a=b;
   printf("%u",a);
}
程序运行后的输出结果是
  A)-1
  B)65535
  C)32767
  D)-32768
  答案:B
44) 有以下程序
void fun(int *a,int i,int j)
{ int t;
   if(i<j)
   { t=a;a=a[j];a[j]=t;
     i++;j--;
     fun(a,i,j);
   }
}
main()
{ int x[]={2,6,1,8},i;
   fun(x,0,3);
   for(i=0;i<4;i++) printf("%2d",x);
   printf("\n");
}
程序运行后的输出结果是
  A)1 2 6 8
  B)8 6 2 1
  C)8 1 6 2
  D)8 6 1 2
  答案:C
45) 有以下说明和定义语句
struct student
{ int age;char num[8];};
struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};
struct student *p=stu;
以下选项中引用结构体变量成员的表达式错误的是
  A)(p++)->num
  B)p->num
  C)(*p).num
  D)stu[3].age
  答案:D
46) 有以下程序
main()
{ int x[]={1,3,5,7,2,4,6,0},i,j,k;
  for(i=0;i<3;i++)
     for(j=2;j>=i;j--)
       if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
  for(i=0;i<3;i++)
     for(j=4;j<7-i;j++)
       if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
  for(i=0;i<8;i++)printf("%d",x);
  printf("\n");
}
程序运行后的输出结果是
  A)75310246
  B)01234567
  C)76310462
  D)13570246
  答案:A
47) 有如下程序
#include <stdio.h>
main()
{ FILE *fp1;
  fp1=fopen("f1.txt","w");
  fprintf(fp1,"abc");
  fclose(fp1);
}
若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为
  A)goodabc
  B)abcd
  C)abc
  D)abcgood
  答案:C
48) (48)~(50)共用一题。以下程序的功能是:建立一个带有头结点的单向链表,并将存储在
数组中的字符依次转储到链表的各个结点中,请选择正确的选项作为下划线号码与题号相同处
的正确答案。
#include <stdlib.h>
struct node
{char data;stuct node *next;};
__(48)___ CreatList(char *s)
{ struct node *h,*p,*q;
  h=(struct node *)malloc(sizeof(struct node));
  p=q=h;
  while(*s!=&#39;\0&#39;)
  { p=(struct node *)malloc(sizeof(struct node));
     p->data=___(49)___;
     q->next=p;
     q=___(50)___;
     s++;
  }
  p->next=&#39;\0&#39;;
  return h;
}
main()
{ char str[]="link list";
  struct node *head;
  head=CreatList(str);
  ...
}
  A)char *
  B)struct node
  C)struct node *
  D)char
  答案:C
49) (48)~(50)共用一题。以下程序的功能是:建立一个带有头结点的单向链表,并将存储在
数组中的字符依次转储到链表的各个结点中,请选择正确的选项作为下划线号码与题号相同处
的正确答案。
#include <stdlib.h>
struct node
{char data;stuct node *next;};
__(48)___ CreatList(char *s)
{ struct node *h,*p,*q;
  h=(struct node *)malloc(sizeof(struct node));
  p=q=h;
  while(*s!=&#39;\0&#39;)
  { p=(struct node *)malloc(sizeof(struct node));
     p->data=___(49)___;
     q->next=p;
     q=___(50)___;
     s++;
  }
  p->next=&#39;\0&#39;;
  return h;
}
main()
{ char str[]="link list";
  Struct node *head;
  head=CreatList(st);
  ...
}
  A)*s
  B)s
  C)*s++
  D)(*s)++
  答案:A
50) (48)~(50)共用一题。以下程序的功能是:建立一个带有头结点的单向链表,并将存储在
数组中的字符依次转储到链表的各个结点中,请选择正确的选项作为下划线号码与题号相同处
的正确答案。
#include <stdlib.h>
struct node
{char data;stuct node *next;};
__(48)___ CreatList(char *s)
{ struct node *h,*p,*q;
  h=(struct node *)malloc(sizeof(struct node));
  p=q=h;
  while(*s!=&#39;\0&#39;)
  { p=(struct node *)malloc(sizeof(struct node));
     p->data=___(49)___;
     q->next=p;
     q=___(50)___;
     s++;
  }
  p->next=&#39;\0&#39;;
  return h;
}
main()
{ char str[]="link list";
  Struct node *head;
  head=CreatList(st);
  ...
}
  A)p->next
  B)p
  C)s
  D)s->next
  答案:B
二、填空题(每空 2 分 , 共 40 分)
请将每一个空的正确答案写在答题处【1】至【20】。
1) 在64位高档微机中,CPU能同时处理【1】个字节的二进制数据。
  本小题第1空答案:8 或 八
2) E-mail地址由域名和用户名两部分组成,它们之间用@分隔,其中在@后面的部分是【2】。
  本小题第1空答案:域名 或 电子邮件服务器名
3) Windows窗口一般由标题栏、菜单栏、控制按钮等部分组成。为了移动窗口,则要用鼠标拖
动【3】。
  本小题第1空答案:标题栏
4) 计算机软件分为系统软件和应用软件,UNIX系统属于【4】。
  本小题第1空答案:系统软件
5) 在Windows环境下,为了将屏幕内容存入剪贴板,应按【5】键。
  本小题第1空答案:PrintScreen 或 PrtScrn 或 PrtSc
6) 以下程序段的输出结果是【6】。
int i=9;
printf("%o\n",i);
  本小题第1空答案:11
7) 以下程序运行后的输出结果是【7】。
main()
{ int a,b,c;
  a=25;
  b=025;
  c=0x25;
  printf("%d %d %d\n",a,b,c);
}
  本小题第1空答案:25 21 37
8) 以下程序运行后的输出结果是【8】。
main()
{ int p[7]={11,13,14,15,16,17,18};
  int i=0,j=0;
  while(i<7&&p%2==1) j+=p[i++];
  printf("%d\n",j);
}
  本小题第1空答案:24
9) 以下程序运行后的输出结果是【 9 】。
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;
  }
  printf("%d %d\n",a,b);
}
  本小题第1空答案:2 1
10) 以下程序运行后的输出结果是【10】。
main()
{ int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}};
  int i=0,j=0,s=0;
while(i++<4)
{
  if(i==2||i==4) continue;
  j=0;
  do{ s+=a[j]; j++; } while(j<4);
}
printf("%d\n",s);
}
  本小题第1空答案:92
11) 以下程序运行后的输出结果是【11】。
main()
{ char a[]="Language",b[]="Programe";
   char *p1,*p2; int k;
   p1=a; p2=b;
   for(k=0;k<=7;k++)
      if(*(p1+k)==*(p2+k)) printf("%c",*(p1+k));
}
  本小题第1空答案:gae
12) 以下程序运行后的输出结果是【12】。
main()
{ char a[]="123456789",*p;int i=0;
   p=a;
   while(*p)
   { if(i%2==0) *p=&#39;*&#39;;
      p++;i++;
   }
   puts(a);
}
  本小题第1空答案:*2*4*6*8*
13) 以下程序中,for 循环体执行的次数是【13】。
#define N2
#deflne MN+l
#define KM+1*M/2
main()
{ int i;
   for(i=1;i<K;i++)
   { ... }
   ...
}
  本小题第1空答案:4
14)
  本小题第1空答案:x
  本小题第2空答案:x*x+1 或 1+x*x
15) 以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。
main()
{ int i,a[20],sum,count;
  sum=count=0;
  for(i=0;i<20;i++) scanf("%d",【16】);
  for(i=0;i<20;i++)
  { if(a>O)
     { count++;
       sum+=【17】;
     }
  }
  printf("sum=%d,count=%d\n",sum,count);
}
  本小题第1空答案:&a 或 a+i
  本小题第2空答案:a 或 *(a+i)
16) 以下程序中,函数SumColumMin的功能是:求出M行N列二维数组每列元素中的最小值,并计
算它们的和值。和值通过形参传回主函数输出。请填空。
#define M2
#define N4
void SumColumMin(int a[M][N], int *sum)
{ int i,j,k,s=0;
  for(i=0;i<N;i++)
  { k=0;
     for(j=1;j<M;j++)
       if(a[k]>a[j]) k=j;
     s+=【18】;
  }
  【19】=s;
}
main()
{ int x[M][N]={3,2,5,1,4,1,8,3},s;
  SumColumMin(【20】);
printf("%d\n",s);
}
  本小题第1空答案:a[k]
  本小题第2空答案:*sum
  本小题第3空答案:x,&s
一、选择题 ((1)~(10)每小题 2 分 ,(11)~(50)每小题 1 分 , 共 60 分)
下列各题 A)、B)、C)、D)四个选项中, 只有一个选项是正确的。
01) 数据的存储结构是指
  A)存储在外存中的数据
  B)数据所占的存储空间量
  C)数据在计算机中的顺序存储方式
  D)数据的逻辑结构在计算机中的表示
  答案:D
02) 下列关于栈的描述中错误的是
  A)栈是先进后出的线性表
  B)栈只能顺序存储
  C)栈具有记忆作用
  D)对栈的插入与删除操作中, 不需要改变栈底指针
  答案:B
03) 对于长度为n的线性表, 在最坏情况下, 下列各排序法所对应的比较次数中正确的是
  A)冒泡排序为 n/2
  B)冒泡排序为 n
  C)快速排序为 n
  D)快速排序为 n(n-1)/2
  答案:D
04) 对长度为n的线性表进行顺序查找, 在最坏情况下所需要的比较次数为
  A)
  B)n/2
  C)n
  D)n+1
  答案:C
05) 下列对于线性链表的描述中正确的是
  A)存储空间不一定是连续, 且各元素的存储顺序是任意的
  B)存储空间不一定是连续, 且前件元素一定存储在后件元素的前面
  C)存储空间必须连续, 且前件元素一定存储在后件元素的前面
  D)存储空间必须连续, 且各元素的存储顺序是任意的
  答案:A
06) 下列对于软件测试的描述中正确的是
  A)软件测试的目的是证明程序是否正确
  B)软件测试的目的是使程序运行结果正确
  C)软件测试的目的是尽可能多地发现程序中的错误
  D)软件测试的目的是使程序符合结构化原则
  答案:C
07) 为了使模块尽可能独立, 要求
  A)模块的内聚程度要尽量高, 且各模块间的耦合程度要尽量强
  B)模块的内聚程度要尽量高, 且各模块间的耦合程度要尽量弱
  C)模块的内聚程度要尽量低, 且各模块间的耦合程度要尽量弱
  D)模块的内聚程度要尽量低, 且各模块间的耦合程度要尽量强
  答案:B
08) 下列描述中正确的是
  A)程序就是软件
  B)软件开发不受计算机系统的限制
  C)软件既是逻辑实体, 又是物理实体
  D)软件是程序、数据与相关文档的集合
  答案:D
09) 数据独立性是数据库技术的重要特点之一。所谓数据独立性是指
  A)数据与程序独立存放
  B)不同的数据被存放在不同的文件中
  C)不同的数据只能被对应的应用程序所使用
  D)以上三种说法都不对
  答案:D
10) 用树形结构表示实体之间联系的模型是
  A)关系模型
  B)网状模型
  C)层次模型
  D)以上三个都是
  答案:C
11) 算法具有五个特性, 以下选项中不属于算法特性的是
  A)有穷性
  B)简洁性
  C)可行性
  D)确定性
  答案:B
12) 以下选项中可作为C语言合法常量的是
  A)-80.
  B)-080
  C)-8e1.0
  D)-80.0e
  答案:A
13) 以下叙述中正确的是
  A)用C程序实现的算法必须要有输入和输出操作
  B)用C程序实现的算法可以没有输出但必须要有输入
  C)用C程序实现的算法可以没有输入但必须要有输出
  D)用C程序实现的算法可以既没有输入也没有输出
  答案:C
14) 以下不能定义为用户标识符是
  A)Main
  B)_0
  C)_int
  D)sizeof
  答案:D
15) 以下选项中, 不能作为合法常量的是
  A)1.234e04
  B)1.234e0.4
  C)1.234e+4
  D)1.234e0
  答案:B
16) 数字字符0的ASCII值为48, 若有以下程序
  main()
  { char a=&#39;1&#39;,b=&#39;2&#39;;
   printf("%c,",b++);printf("%d\n",b-a);
  }
程序运行后的输出结果是
  A)3,2
  B)50,2
  C)2,2
  D)2,50
  答案:C
17) 有以下程序
  main()
  { int m=12,n=34;
   printf("%d%d",m++,++n); printf{"%d%d\n",n++,++m);
  }
程序运行后的输出结果是
  A)12353514
  B)12353513
  C)12343514
  D)12343513
  答案:A
18) 有定义语句: int b;char c[10];, 则正确的输入语句是
  A)scanf("%d%s",&b,&c);
  B)scanf("%d%s",&b,c);
  C)scanf("%d%s",b,c);
  D)scanf("%d%s",b,&c);
  答案:B
19) 有以下程序
  main()
  { int m,n,p;
   scanf("m=%dn=%dp=%d",&m,&n,&p);
   printf("%d%d%d\n",m,n,p);
  }
若想从键盘上输入数据, 使变量m中的值为123, n中的值为456, p中的值为789, 则正确的输入

  A)m=123n=456p=789
  B)m=123 n=456 p=789
  C)m=123,n=456,p=789
  D)123 456 789
  答案:A
20) 有以下程序
  main()
  { int a,b,d=25;
   a=d / 10 % 9;
   b=a&&(-1);
   printf("%d,%d\n",a,b);
  }
程序运行后的输出结果是
  A)6,1
  B)2,1
  C)6,0
  D)2,0
  答案:B
21) 有以下程序
  main()
  { int i=1,j=2,k=3;
   if(i++==1 && (++j==3 || k++==3)) printf(("%d %d %d\n",i,j,k);
  }
程序运行后的输出结果是
  A)1 2 3
  B)2 3 4
  C)2 2 3
  D)2 3 3
  答案:D
22) 若整型变量a、b、c、d中的值依次为 :1、4、3、2。则条件表达式 a<b?a:c<d?c:d 的值是
  A)1
  B)2
  C)3
  D)4
  答案:A
23) 有以下程序
  main()
  { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
   while(i++<7) if(p % 2) j+=p;
   printf("%d\n",j);
  }
程序运行后的输出结果是
  A)42
  B)45
  C)56
  D)60
  答案:B
24) 有以下程序
  main()
  { char a[7]="a0\0a0\0";int i,j;
   i=sizeof(a); j=strlen(a);
   printf("%d %d\n",i,j);
  }
程序运行后的输出结果是
  A)2 2
  B)7 6
  C)7 2
  D)6 2
  答案:C
25) 以下能正确定义一维数组的选项是
  A)int a[5]={0,1,2,3,4,5};
  B)char a[]={0,1,2,3,4,5};
  C)char a={&#39;A&#39;,&#39;B&#39;,&#39;C&#39;};
  D)int a[5]="0123";
  答案:B
26) 有以下程序
  int f1(int x,int y){ return x>y?x:y; }
  int f2(int x,int y){ return x>y?y:x; }
  main()
  { int a=4,b=3,c=5,d=2,e,f,g;
   e=f2(f1(a,b),f1(c,d)); f=f1(f2(a,b),f2(c,d));
   g=a+b+c+d-e-f
   printf("%d,%d,%d\n",e,f,g);
  }
程序运行后的输出结果是
  A)4,3,7
  B)3,4,7
  C)5,2,7
  D)2,5,7
  答案:A
27) 已有定义: char a[]="xyz",b[]={&#39;x&#39;,&#39;y&#39;,&#39;z&#39;};, 以下叙述中正确的是
  A)数组 a 和 b 的长度相同
  B)a 数组长度小于 b 数组长度
  C)a 数组长度大于 b 数组长度
  D)上述说法都不对
  答案:C
28) 有以下程序
  void f(int *x, int *y)
  { int t;
   t=*x;*x=*y;*y=t;
  }
  main()
  { int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
   p=a; q=&a[7];
   while (p<q)
   { f(p,q); p++; q--; }
   for(i=0;i<8;i++) printf("%d,",a);
  }
程序运行后的输出结果是
  A)8,2,3,4,5,6,7,1,
  B)5,6,7,8,1,2,3,4,
  C)1,2,3,4,5,6,7,8,
  D)8,7,6,5,4,3,2,1,
  答案:D
29) 有以下程序
  main()
  { int a[3][3],*p,i;
   p=&a[0][0];
   for(i=0;i<9;i++) p=i;
   for(i=0;i<3;i++) printf("%d ",a[1]);
  }
程序运行后的输出结果是
  A)0 1 2
  B)1 2 3
  C)2 3 4
  D)3 4 5
  答案:D
30) 以下叙述中错误的是
  A)对于double类型数组, 不可以直接用数组名对数组进行整体输入或输出
  B)数组名代表的是数组所占存储区的首地址, 其值不可改变
  C)当程序执行中, 数组元素的下标超出所定义的下标范围时, 系统将给出“下标越界”的出
错信息
  D)可以通过赋初值的方式确定数组元素的个数
  答案:C
31) 有以下程序
  #define N 20
  fun(int a[], int n, int m)
  { int i,j;
   for(i=m;i>=n;i--) a[i+1]=a;
  }
  main()
  { int i,a[N]={1,2,3,4,5,6,7,8,9,10};
   fun(a,2,9);
   for(i=0;i<5;i++) printf("%d",a);
  }
程序运行后的输出结果是
  A)10234
  B)12344
  C)12334
  D)12234
  答案:C
32) 有以下程序
  main()
  { int a[3][2]={0},(*ptr)[2],i,j;
   for(i=0;i<2;i++)
   { ptr=a+i; scanf("%d",ptr); ptr++;}
   for(i=0;i<3;i++)
   { for j=0;j<2;j++) printf("%2d",a[j]);
printf("\n");
}
  }
若运行时输入 :1 2 3 <回车>, 则输出结果为
  A)产生错误信息
  B)1 0
20
00
  C)1 2
30
00
  D)1 0
20
30
  答案:B
33) 有以下程序
  prt(int *m,int n)
  { int i;
   for(i=0;i<n;i++) m++;
  }
  main()
  { int a[]={1,2,3,4,5},i;
   prt(a,5);
   for(i=0;i<5;i++) printf("%d,",a);
  }
程序运行后的输出结果是
  A)1,2,3,4,5,
  B)2,3,4,5,6,
  C)3,4,5,6,7,
  D)2,3,4,5,1,
  答案:B
34) 有以下程序
  main()
  { int a[]={1,2,3,4,5,6,7,8,9,0},*p;
   for(p=a;p<a+10;p++) printf("%d,",*p);
  }
程序运行后的输出结果是
  A)1,2,3,4,5,6,7,8,9,0,
  B)2,3,4,5,6,7,8,9,10,1,
  C)0,1,2,3,4,5,6,7,8,9,
  D)1,1,1,1,1,1,1,1,1,1,
  答案:A
35) 有以下程序
  #define P 3
  void F(int x){ return (P*x*x); }
  main()
  { printf("%d\n",F(3+5)); }
程序运行后的输出结果是
  A)192
  B)29
  C)25
  D)编译出错
  答案:D
36) 有以下程序
  main()
  { int c=35; printf("%d\n",c&c); }
程序运行后的输出结果是
  A)0
  B)70
  C)35
  D)1
  答案:C
37) 以下叙述中正确的是
  A)预处理命令行必须位于源文件的开头
  B)在源文件的一行上可以有多条预处理命令
  C)宏名必须用大写字母表示
  D)宏替换不占用程序的运行时间
  答案:D
38) 若有以下说明和定义
  union dt
  {int a; char b; double c;} data;
以下叙述中错误的是
  A)data的每个成员起始地址都相同
  B)变量data所占内存字节数与成员c所占字节数相等
  C)程序段: data.a=5;printf("%f\n",data.c); 输出结果为 5.000000
  D)data可以作为函数的实参
  答案:C
39) 以下语句或语句组中, 能正确进行字符串赋值的是
  A)char *sp; *sp="right!";
  B)char s[10]; s="right!";
  C)char s[10]; *s="right!";
  D)char *sp="right!";
  答案:D
40) 设有如下说明
  typedef struct ST
  { long a; int b; char c[2];} NEW;
则下面叙述中正确的是
  A)以上的说明形式非法
  B)ST是一个结构体类型
  C)NEW是一个结构体类型
  D)NEW是一个结构体变量
  答案:C
41) 有以下程序
  main()
  { int a=1,b;
   for(b=1;b<=10;b++)
   { if(a>=8) break;
     if(a%2==1) {a+=5; continue;}
     a-=3;
   }
   printf("%d\n",b);
  }
程序运行后的输出结果是
  A)3
  B)4
  C)5
  D)6
  答案:B
42) 有以下程序
  main()
  { char s[]="159",*p;
   p=s;
   printf("%c",*p++); printf("%c",*p++);
  }
程序运行后的输出结果是
  A)15
  B)16
  C)12
  D)59
  答案:A
43) 有以下函数
  fun(char *a, char *b)
  { while((*a!=&#39;\0&#39;)&&(*b!=&#39;\0&#39;)&&(*a==*b))
   {a++;b++;}
   return (*a-*b);
  }
该函数的功能是
  A)计算a和b所指字符串的长度之差
  B)将b所指字符串复制到a所指字符串中
  C)将b所指字符串连接到a所指字符串后面
  D)比较a和b所指字符串的大小
  答案:D
44) 有以下程序
  main()
  { int num[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;
   for(i=0;i<4;i++)
   { for j=1;j<=i;j++) printf("%4c",&#39; &#39;);
     for(j=_____;j<4;j++) printf("%4d",num[j]);
     printf("\n");
   }
  }
若要按以下形式输出数组右上半三角
1234
   678
    11 12
      16
则在程序下划线处应填入的是
  A)i-1
  B)i
  C)i+1
  D)4-i
  答案:B
45) 有以下程序
  point(char *p){ p+=3; }
  main()
  { char b[4]={&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;},*p=b;
   point(p); printf("%c\n", *p);
  }
程序运行后的输出结果是
  A)a
  B)b
  C)c
  D)d
  答案:A
46) 程序中若有如下说明和定义语句
  char fun(char *);
  main()
  { char *s="one",a[5]={0},(*f1)()=fun,ch;
   ...
  }
以下选项中对函数fun的正确调用语句是
  A)(*f1)(a);
  B)*f1(*s);
  C)fun(&a);
  D)ch=*f1(s);
  答案:A
47)
A)p->next=q->next;
B)p->next=p->next->next;
  C)p->next=r;
  D)p=q->next;
  答案:D
48) 以下对结构体类型变量td的定义中 , 错误的是
  A)typedef struct aa
{int n;
float m;
}AA;
AA td;
  B)struct aa
{ int n;
float m;
}td;
struct aa td;
  C)struct
{ int n;
float m;
}aa;
struct aa td;
  D)struct
{ int n;
   float m;
}td;
  答案:C
49) 以下与函数 fkeek(fp,0L,SEEK_SET) 有相同作用的是
  A)feof(fp)
  B)ftell(fp)
  C)fgetc(fp)
  D)rewind(fp)
  答案:D
50) 有以下程序
  #include <stdio.h>
  void WriteStr(char *fn, char *str)
  { FILE *fp;
    fp=fopen(fn,"w"); fputs(str,fp); fclose(fp);
  }
  main()
  { WriteStr("t1.dat","start");
    WriteStr("t1.dat","end");
  }
程序运行后, 文件t1.dat中的内容是
  A)start
  B)end
  C)startend
  D)endrt
  答案:B
二、填空题 (每空 2 分, 共 40 分)
请将每一个空的正确答案写在答题处【1】至【20】。
1) 某二叉树中度为2的结点有18个, 则该二叉树中有【1】个叶子结点。
  本小题第1空答案:19
2) 在面向对象方法中, 类的实例称为【2】。
  本小题第1空答案:对象
3) 诊断和改正程序中错误的工作通常称为【3】。
  本小题第1空答案:调试 或 程序调试 或 软件调试 或 Debug 或 调试程序 或 调试软件
4) 在关系数据库中, 把数据表示成二维表, 每一个二维表称为【4】。
  本小题第1空答案:关系 或 关系表
5) 问题处理方案的正确而完整的描述称为【5】。
  本小题第1空答案:算法 或 程序 或 流程图
6) 以下程序运行时若从键盘输入:10 20 30<回车>。输出结果是【6】。
  #include <stdio.h>
  main()
  { int i=0,j=0,k=0;
   scanf("%d%*d%d",&i,&j,&k); printf("%d%d%d\n",i,j,k);
  }
  本小题第1空答案:10 30 0
7) 以下程序运行后的输出结果是【7】。
  #define S(x) 4*x*x+1
  main()
  { int i=6,j=8;
   printf("%d\n",S(i+j));
  }
  本小题第1空答案:81
8) 以下程序运行后的输出结果是【8】。
  main()
  { int a=3,b=4,c=5,t=99;
   if(b<a && a<c) t=a;a=c;c=t;
   if(a<c && b<c) t=b;b=a;a=t;
   printf("%d %d %d\n"a,b,c);
  }
  本小题第1空答案:4 5 99
9) 以下程序运行后的输出结果是【9】。
  main()
  { int a,b,c;
   a=10;b=20;c=(a%b<1)||(a/b>1);
   printf("%d %d %d\n"a,b,c);
  }
  本小题第1空答案:10 20 0
10) 以下程序运行后的输出结果是【10】。
  main()
  { char c1,c2;
   for(c1=&#39;0&#39;,c2=&#39;9&#39;;c1<c2;c1++,c2--) printf("%c%c",c1,c2);
   printf("\n");
  }
  本小题第1空答案:0918273645
11) 已知字符A的ASCII代码值为65, 以下程序运行时若从键盘输入: B33<回车>。则输出结果是
【11】。
  #include <stdio.h>
  main()
  { char a,b;
   a=getchar();scanf("%d",&b);
   a=a-&#39;A&#39;+&#39;0&#39;; b=b*2;
   printf("%c %c\n"a,b);
  }
  本小题第1空答案:1 B
12) 以下程序中, fun函数的功能是求3行4列二维数组每行元素中的最大值。请填空。
  void fun(int i,int, int(*)[4],int *);
  main()
  { int a[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i;
   fun(3,4,a,b);
   for(i=0;i<3;i++) printf("%4d",b);
   printf("\n");
  }
  void fun(int m, int n, int ar[][4], int *br)
  { int i,j,x;
   for(i=0;i<m;i++)
   { x=ar[0];
    for(j=0;j<n;j++) if(x<ar[j]) x=ar[j];
    【12】=x;
   }
  }
  本小题第1空答案:br 或 *(br+i)
13) 以下程序运行后的输出结果是【13】。
  void swap(int x,int y)
  { int t;
   t=x;x=y;y=t;printf("%d %d\n ",x,y);
  }
  main()
  { int a=3,b=4;
   swap(a,b); printf("%d %d\n",a,b);
  }
  本小题第1空答案:4 3 3 4
14) 以下程序运行后的输出结果是【14】。
  #include <string.h>
  void fun(char *s, int p, int k)
  { int i;
   for(i=p;i<k-1;i++) s=s[i+2];
  }
  main()
  { char s[]="abcdefg";
   fun(s,3,str1en(s)); puts(s);
  }
  本小题第1空答案:abcfg
15) 以下程序运行后的输出结果是【15】。
  #include <string.h>
  main()
  { char ch[]="abc",x[3][4];int i;
   for(i=0;i<3;i++) strcpy(x,ch);
   for(i=0;i<3;i++) printf("%s",&x);
   print("\n");
  }
  本小题第1空答案:abcbcc
16) 以下程序运行后的输出结果是【16】。
  fun(int a)
  { int b=0; static int c=3;
   b++;c++;
   return (a+b+c);
  }
  main()
  { int i,a=5;
   for(i=0;i<3;i++) printf("%d %d ",i,fun(a));
   printf("\n");
  }
  本小题第1空答案:0 10 1 11 2 12
17) 以下程序运行后的输出结果是【17】。
  struct NODE
  { int k;
   struct NODE *link;
  };
  main()
  { struct NODE m[5],*p=m,*q=m+4;
   int i=0;
   while(p!=q)
   { p->k=++i; p++;
    q->k=i++; q--;
   }
   q->k=i;
   for(i=0;i<5;i++) printf("%d",m.k);
   printf("\n");
  }
  本小题第1空答案:13431
18) 以下程序中函数huiwen的功能是检查一个字符串是否是回文, 当字符串是回文时, 函数返
回字符串:yes!, 否则函数返回字符串:no!, 并在主函数中输出。所谓回文即正向与反向的拼写
都一样, 例如:adgda。请填空。
  #include <string.h>
  char *huiwen(char *str)
  { char *p1,*p2; int i,t=0;
   p1=str; p2=【18】;
   for(i=0;i<=strlen(st)/2;i++)
if(*p1++!=*p2--) {t=1;break;}
if(【19】) return("yes!");
else return("no!");
  }
  main()
  { char str[50];
   printf("Input:"); scanf("%s",str);
   printf("%s\n",【20】);
  }
  本小题第1空答案:str+strlen(p1)-1 或 str+strlen(str)-1 或 str-1+strlen(str) 或
str-1+strlen(p1)
  本小题第2空答案:t==0 或 !t 或 t==&#39;\0&#39; 或 0==t 或 &#39;\0&#39;==t
  本小题第3空答案:huiwen(str)
一、选择题 ((1)~(10)每小题 2 分 ,(11)~(50)每小题 1 分 , 共 60 分)
下列各题 A)、B)、C)、D)四个选项中, 只有一个选项是正确的。
01) 下列叙述中正确的是
  A)程序设计就是编制程序
  B)程序的测试必须由程序员自己去完成
  C)程序经调试改错后还应进行再测试
  D)程序经调试改错后不必进行再测试
  答案:C
02) 下列数据结构中, 能用二分法进行查找的是
  A)顺序存储的有序线性表
  B)线性链表
  C)二叉链表
  D)有序线性链表
  答案:A
03) 下列关于栈的描述正确的是
  A)在栈中只能插入元素而不能删除元素
  B)在栈中只能删除元素而不能插入元素
  C)栈是特殊的线性表, 只能在一端插入或删除元素
  D)栈是特殊的线性表, 只能在一端插入元素, 而在另一端删除元素
  答案:C
04) 下列叙述中正确的是
  A)一个逻辑数据结构只能有一种存储结构
  B)数据的逻辑结构属于线性结构, 存储结构属于非线性结构
  C)一个逻辑数据结构可以有多种存储结构, 且各种存储结构不影响数据处理的效率
  D)一个逻辑数据结构可以有多种存储结构, 且各种存储结构影响数据处理的效率
  答案:D
05) 下列描述中正确的是
  A)软件工程只是解决软件项目的管理问题
  B)软件工程主要解决软件产品的生产率问题
  C)软件工程的主要思想是强调在软件开发过程中需要应用工程化原则
  D)软件工程只是解决软件开发中的技术问题
  答案:C
06) 在软件设计中, 不属于过程设计工具的是
  A)PDL(过程设计语言)
  B)PAD图
  C)N-S图
  D)DFD图
  答案:D
07) 下列叙述中正确的是
  A)软件交付使用后还需要进行维护
  B)软件一旦交付使用就不需要再进行维护
  C)软件交付使用后其生命周期就结束
  D)软件维护是指修复程序中被破坏的指令
  答案:A
08) 数据库设计的根本目标是要解决
  A)数据共享问题
  B)数据安全问题
  C)大量数据存储问题
  D)简化数据维护
  答案:A
09) 设有如下关系表 :
  RST
  ---------------------------
  ABCABCABC
  112313112
  223223
                313
则下列操作中正确的是
  A)T=R∩S
  B)T=R∪S
  C)T=R×S
  D)T=R/S
  答案:B
10) 数据库系统的核心是
  A)数据模型
  B)数据库管理系统
  C)数据库
  D)数据库管理员
  答案:B
11) 以下叙述中错误的是
  A)用户所定义的标识符允许使用关键字
  B)用户所定义的标识符应尽量做到“见名知意”
  C)用户所定义的标识符必须以字母或下划线开头
  D)用户定义的标识符中, 大、小写字母代表不同标识
  答案:A
12) 以下叙述中错误的是
  A)C语句必须以分号结束
  B)复合语句在语法上被看作一条语句
  C)空语句出现在任何位置都不会影响程序运行
  D)赋值表达式末尾加分号就构成赋值语句
  答案:C
13) 以下叙述中正确的是
  A)调用printf函数时, 必须要有输出项
  B)使用putchar函数时, 必须在之前包含头文件stdio.h
  C)在C语言中, 整数可以以十二进制、八进制或十六进制的形式输出
  D)调用getchar函数读入字符时, 可以从键盘上输入字符所对应的ASCII码
  答案:B
14) 以下关于函数的叙述中正确的是
  A)每个函数都可以被其它函数调用(包括main函数)
  B)每个函数都可以被单独编译
  C)每个函数都可以单独运行
  D)在一个函数内部可以定义另一个函数
  答案:B
15) 若有语句: char *line[5];, 以下叙述中正确的是
  A)定义line是一个数组, 每个数组元素是一个基类型为char的指针变量
  B)定义line是一个指针变量, 该变量可以指向一个长度为5的字符型数组
  C)定义line是一个指针数组, 语句中的*号称为间址运算符
  D)定义line是一个指向字符型函数的指针
  答案:A
16) 有以下程序段
  typedef struct NODE
  {int num; struct NODE *next;
  } OLD;
以下叙述中正确的是
  A)以上的说明形式非法
  B)NODE是一个结构体类型
  C)OLD是一个结构体类型
  D)OLD是一个结构体变量
  答案:C
17) 以下叙述中错误的是
  A)C语言中对二进制文件的访问速度比文本文件快
  B)C语言中, 随机文件以二进制代码形式存储数据
  C)语句FILE fp; 定义了一个名为fp的文件指针
  D)C语言中的文本文件以ASCII码形式存储数据
  答案:C
18) 当把以下四个表达式用作if语句的控制表达式时, 有一个选项与其它三个选项含义不同,
这个选项是
  A)k%2
  B)k%2==1
  C)(k%2)!=0
  D)!k%2==1
  答案:D
19)
A)1/3*sin(1/2)*sin(1/2)
B)sin(0.5)*sin(0.5)/3
C)pow(sin(0.5),2)/3
  D)1/3.0*pow(sin(1.0/2),2)
  答案:A
20) 以下能正确定义且赋初值的语句是
  A)int n1=n2=10;
  B)char c=32;
  C)float f=f+1.1;
  D)double x=12.3E2.5;
  答案:B
21) 以下程序的功能是: 给r输入数据后计算半径为r的圆面积s。程序在编译时出错。
  main()
  /* Beginning */
  {int r; float s;
   scanf("%d",&r);
   s=*π*r*r; printf("s=%f\n",s);
  }
出错的原因是
  A)注释语句书写位置错误
  B)存放圆半径的变量r不应该定义为整型
  C)输出语句中格式描述符非法
  D)计算圆面积的赋值语句中使用了非法变量
  答案:D
22) 设有定义: int k=1,m=2;float f=7;, 则以下选项中错误的表达式是
  A)k=k>=k
  B)-k++
  C)k%int(f)
  D)k>=f>=m
  答案:C
23) 设有定义: int a=2,b=3,c=4;, 则以下选项中值为0的表达式是
  A)(!a==1)&&(!b==0)
  B)(a<b)&&!c||1
  C)a&&b
  D)a||(b+b)&&(c-a)
  答案:A
24) 有以下程序段
  int k=0,a=1,b=2,c=3;
  k=a<b?b:a; k=k>c?c:k;
执行该程序段后, k的值是
  A)3
  B)2
  C)1
  D)0
  答案:B
25) 设变量a、b、c、d和y都己正确定义并赋值。若有以下if语句
  if(a<b)
    if{c==d) y=0;
    else y=1;
该语句所表示的含义是
A)
B)
C)
D)
  答案:C
26) 有以下程序段
  int n,t=1,s=0;
  scanf("%d",&n);
  do{ s=s+t; t=t-2; } while(t!=n);
为使此程序段不陷入死循环, 从键盘输入的数据应该是
  A)任意正奇数
  B)任意负偶数
  C)任意正偶数
  D)任意负奇数
  答案:D
27) 设变量已正确定义, 则以下能正确计算f=n!的程序段是
  A)f=0;
for(i=1;i<=n;i++) f*=i;
  B)f=1;
for(i=1;i<n;i++) f*=i;
  C)f=1;
for(i=n;i>1;i++) f*=i;
  D)f=1;
for(i=n;i>=2;i--) f*=i;
  答案:D
28) 设有定义: int n1=0,n2,*p=&n2,*q=&n1;, 以下赋值语句中与n2=n1;语句等价的是
  A)*p=*q;
  B)p=q;
  C)*p=&n1;
  D)p=*q;
  答案:A
29) 若有定义: int x=0,*p=&x;, 则语句printf("%d\n",*p);的输出结果是
  A)随机值
  B)0
  C)x的地址
  D)p的地址
  答案:B
30) 设函数fun的定义形式为
  void fun(char ch,float x) { … }
则以下对函数fun的调用语句中, 正确的是
  A)fun("abc",3.0)
  B)t=fun(&#39;D&#39;,16.5);
  C)fun(&#39;65&#39;,2.8);
  D)fun(32,32);
  答案:D
31) 有以下程序
  main()
  {int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+2;
   printf("%d\n",*p+*q);
  }
程序运行后的输出结果是
  A)16
  B)10
  C)8
  D)6
  答案:B
32) 有以下程序
  main()
  {char p[]={&#39;a&#39;,&#39;b&#39;,&#39;c&#39;}; q[]="abc";
   printf("%d %d\n",sizeof(p),sizeof(q));
  }
程序运行后的输出结果是
  A)4 4
  B)3 3
  C)3 4
  D)4 3
  答案:C
33) 有以下程序
  #define f(x)(x*x)
  main()
  {int i1,i2;
   i1=f(8)/f(4); i2=f(4+4)/f(2+2);
   printf("%d,%d\n&#39;,i1,i2);
程序运行后的输出结果是
  A)64,28
  B)4,4
  C)4,3
  D)64,64
  答案:C
34) 有以下程序
  main()
  {char al=&#39;M&#39;,a2=&#39;m&#39;;
   printf("%c\n",(a1,a2));}
以下叙述中正确的是
  A)程序输出大写字母M
  B)程序输出小写字母m
  C)格式说明符不足, 编译出错
  D)程序运行时产生出错信息
  答案:B
35) 有以下程序
  #include <stdio.h>
  main()
  {char c1=&#39;1&#39;,c2=&#39;2&#39;;
   c1=getchar(); c2=getchar(); putchar(c1); putchar(c2);
  }
当运行时输入: a<回车>后, 以下叙述正确的是
  A)变量c1被赋予字符a, c2被赋予回车符
  B)程序将等待用户输入第2个字符
  C)变量c1被赋予字符a, c2中仍是原有字符2
  D)变量c1被赋予字符a, c2中将无确定值
  答案:A
36) 有以下程序
  main()
  {int k=5,n=0;
   while(k>O)
   { switch(k)
    { defhult: break;
      case 1: n+=k;
      case 2:
      case 3:n+=k;
    }
    k--;
   }
   printf("%d\n",n);
  }
  A)0
  B)4
  C)6
  D)7
  答案:D
37) 有以下程序
  main()
  {int a[]={2,4,6,8,10},y=0,x,*p;
   p=&a[1];
   for(x=1;x<3;x++) y+=p[x];
   printf("%d\n",y);
  }
程序运行后的输出结果是
  A)10
  B)11
  C)14
  D)15
  答案:C
38) 有以下程序
  void sort(int a[],int n)
  {int i,j,t;
   for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
      if(a<a[j]]){ t=a; a=a[j]; a[j]=t; }
  }
  main()
  {int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
   sort(aa+2,5);
   for(i=0;i<10;i++) printf("%d,",aa);
   printf("\n");
  }
程序运行后的输出结果是
  A)1,2,3,4,5,6,7,8,9,10,
  B)1,2,7,6,3,4,5,8,9,10,
  C)1,2,7,6,5,4,3,8,9,10,
  D)1,2,9,8,7,6,5,4,3,10,
  答案:C
39) 有以下程序
  void sum(int a[])
  { a[0]=a[-1]+a[1]; }
  main()
  {int a[10]={1,2,3,4,5,6,7,8,9,10};
   sum(&a[2]);
   printf("%d\n",a[2]);
  }
程序运行后的输出结果是
  A)6
  B)7
  C)5
  D)8
  答案:A
40) 有以下程序
  void swap1(int c0[],int c1[])
  {int t ;
   t=c0[0]; c0[0]=c1[0]; c1[0]=t;
  }
  void swap2(int *c0,int *c1)
  {int t;
   t=*c0; *c0=*c1; *c1=t;
  }
  main()
  {int a[2]={3,5}, b[2]={3,5};
   swap1(a,a+1); swap2(&b[0],&b[1]);
   printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]);
  }
程序运行后的输出结果是
  A)3 5 5 3
  B)5 3 3 5
  C)3 5 3 5
  D)5 3 5 3
  答案:D
41) 有以下程序
  #include <string.h>
  main()
  {char p[]={&#39;a&#39;,&#39;b&#39;,&#39;c&#39;}, q[10]={&#39;a&#39;,&#39;b&#39;,&#39;c&#39;};
   printf("%d %d\n",strlen(p),strlen(q));
  }
以下叙述中正确的是
  A)在给p和q数组置初值时, 系统会自动添加字符串结束符, 故输出的长度都为3
  B)由于p数组中没有字符串结束符, 长度不能确定; 但q数组中字符串长度为3
  C)由于q数组中没有字符串结束符, 长度不能确定; 但p数组中字符串长度为3
  D)由于p和q数组中都没有字符串结束符, 故长度都不能确定
  答案:B
42) 有以下程序, 其中函数f的功能是将多个字符串按字典顺序排序
  #include <string.h>
  void f(char *p[],int n)
  {char *t; int i,j;
   for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
      if(strcmp(p,p[j])>O){ t=p; p=p[j]; p[j]=t; }
  }
  main()
  {char *p[5]={"abc","aabdfg","abbd","dcdbe","cd"};
   f(p,5);
   printf("%d\n",strlen(p[1]));
  }
程序运行后的输出结果是
  A)2
  B)3
  C)6
  D)4
  答案:D
43) 有以下程序
  #include <string.h>
  void f(char *s, char *t)
  { char k;
    k=*s; *s=*t; *t=k;
    s++; t--;
    if(*s) f(s,t);
  }
  main()
  {char str[10]="abcdefg",*p;
   p=str+strlen(str)/2+1;
   f(p,p-2);
   printf("%s\n",str);
  }
程序运行后的输出结果是
  A)abcdefg
  B)gfedcba
  C)gbcdefa
  D)abedcfg
  答案:B
44) 有以下程序
  float f1(float n)
  { return n*n; }
  float f2(float n)
  { return 2*n; }
  main()
  {float (*p1)(float),(*p2)(float),(*t)(float),y1,y2;
   p1=f1; p2=f2;
   y1=p2(p1(2.0));
   t=p1; p1=p2; p2=t;
   y2=p2(p1(2.0));
   printf("%3.0f, %3.0f\n",y1,y2);
  }
程序运行后的输出结果是
  A)8, 16
  B)8, 8
  C)16, 16
  D)4, 8
  答案:A
45) 有以下程序
  int a=2;
  int f(int n)
  { static int a=3;
    int t=O;
    if(n%2){ static int a=4; t+=a++;}
    else { static int a=5; t+=a++;}
    return t+a++;
  }
  main()
  { int s=a,i;
    for(i=0;i<3;i++) s+=f(i);
    printf("%d\n",s);
  }
程序运行后的输出结果是
  A)26
  B)28
  C)29
  D)24
  答案:C
46) 有以下程序
  #include <string.h>
  struct STU
  { int num;
   float TotalScore; };
  void f(struct STU p)
  { struct STU s[2]={{20044,550},{20045,537}};
   p.num=s[1].num; p.TotalScore=s[1].TotalScore;
  }
  main()
  { struct STU s[2]={{20041,703},{20042,580}};
   f(s[0]);
   printf("%d %3.0f\n",s[0].nmn, s[0].TotalScore);
  }
程序运行后的输出结果是
  A)20045 537
  B)20044 550
  C)20042 580
  D)20041 703
  答案:D
47) 有以下程序
  #include <string.h>
  struct STU
  { char name[10];
   int num; };
  void f(char *name, int num)
  { struct STU s[2]={{"SunDan",20044},{"Penghua",20045}};
   num=s[0].nmn;
   strcpy(name,s[0].name);
  }
  main()
  { stud STU s[2]={{"YangSan",20041},{"LiSiGuo",20042}}, *p;
   p=&s[1]; f(p->name,p->num);
   printf("%s %d\n",p->name,p->num);
  }
程序运行后的输出结果是
  A)SunDan 20042
  B)SunDan 20044
  C)LiSiGuo 20042
  D)YangSan 20041
  答案:A
48) 有以下程序
  stuct STU
  { char name[10]; int num; float Totalscore; };
  void f(struct STU *p)
  { struct STU s[2]={{"SunDan",20044,550},{"Penghua",20045,537}},*q=s;
   ++p; ++q; *p=*q;
  }
  main()
  { stud STU s[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};
   f(s);
   printf("%s %d %3.0f\n",s[1].name,s[1].num,s[1].TotalScore);
  }
程序运行后的输出结果是
  A)SunDan 20044 550
  B)Penghua 20045 537
  C)LiSiGuo 20042 580
  D)SunDan 20041 703
  答案:B
49) 以下程序的功能是进行位运算
  main()
  { unsigned char a,b;
   a=7^3; b=~4&3;
   printf("%d %d\n",a,b);
  }
程序运行后的输出结果是
  A)4 3
  B)7 3
  C)7 0
  D)4 0
  答案:A
50) 有以下程序
  #include <stdio.h>
  main()
  { FILE *fb; int i,k,n;
   fp=fopen("data.dat","w+");
   for(i=1;i<6;i++)
   { fprintf(fp,"%d ",i);
    if(i%3==O) fprintf(fp,"\n");
   }
   rewind(fp);
   fscanf(fp,"%d%d",&k,&n); printf("%d%d\n",k,n);
   fclose(fp);
  }
程序运行后的输出结果是
  A)0 0
  B)123 45
  C)1 4
  D)1 2
  答案:D
二、填空题 (每空 2 分, 共 40 分)
请将每一个空的正确答案写在答题处【1】至【20】。
1) 数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段, 其中数据独立性最
高的阶段是【1】。
  本小题第1空答案:数据库系统 或 数据库系统阶段 或 数据库 或 数据库阶段 或 数据库管
理技术阶段
2) 算法复杂度主要包括时间复杂度和【2】复杂度。
  本小题第1空答案:空间
3) 在进行模块测试时, 要为每个被测试的模块另外设计两类模块: 驱动模块和承接模块(桩模
块)。其中【3】的作用是将测试数据传送给被测试的模块, 并显示被测试模块所产生的结果。
  本小题第1空答案:驱动模块
4) 一棵二叉树第六层(根结点为第一层)的结点数最多为【4】个。
  本小题第1空答案:32
5) 数据结构分为逻辑结构和存储结构, 循环队列属于【5】结构。
  本小题第1空答案:存储 或 物理 或 存储结构 或 物理结构
6) 以下程序运行后的输出结果是【6】。
  main()
  { int x=0210; printf("%X\n",x);
  }
  本小题第1空答案:88
7) 以下程序运行后的输出结果是【7】。
  main()
  { int a=1,b=2,c=3;
   if(c=a) printf("%d\n",c);
   elseprintf("%d\n",b);
  }
  本小题第1空答案:1
8) 已有定义: double *p;, 请写出完整的语旬, 利用malloc函数使p指向一个双精度型的动态
存储单元【8】。
  本小题第1空答案:p=(double *)malloc(sizeof(double)); 或 p=(double *)malloc(8);
9) 以下程序运行后的输出结果是【9】。
  main()
  { char c; int n=100;
   float f=10; double x;
   x=f*=n/=(c=50);
   printf("%d %f\n",n,x);
  }
  本小题第1空答案:2 20.0 或 2 20 或 2 20. 或 2 20.000000
10) 以下程序的功能是计算: s=1+12+123+1234+12345。请填空。
  main()
  { int t=0,s=0,i;
   for(i=1;i<=5;i++)
   { t=i+【10】; s=s+t; }
   printf("s=%d\n",s);
  }
  本小题第1空答案:t*10 或 10*t
11) 已知字母A的ASCII码为65。以下程序运行后的输出结果是【11】。
  main()
  { char a,b;
   a=&#39;A&#39;+&#39;5&#39;-&#39;3&#39;; b=a+&#39;6&#39;-&#39;2&#39;;
   printf("%d %c\n",a,b);
  }
  本小题第1空答案:67 G
12) 有以下程序
  int sub(int n){ return (n/10+n%1O); }
  main()
  { int x,y;
   scanf("%d",&x);
   y=sub(sub(sub(x)));
   printf("%d\n",y);
  }
若运行时输入: 1234<回车>, 程序的输出结果是【12】。
  本小题第1空答案:10
13) 以下函数sstrcat的功能是实现字符串的连接, 即将t所指字符串复制到s所指字符串的尾
部。例如: s所指字符串为abcd, t所指字符串为efgh, 函数调用后s所指字符串为abcdefgh。请
填空。
  #include <string.h>
  void ss(char *s, char *t)
  { int n;
   n=strlen(s);
   while(*(s+n)=【13】){s++;t++;}
  }
  本小题第1空答案:*t
14) 以下程序运行后的输出结果是【14】。
  #include <string.h>
  char *ss(char *s)
  { char *p,t;
   p=s+1;t=*s;
   while(*p){*(p-1)=*p; p++;}
   *(p-1)=t;
   return s;
  }
  main()
  { char *p, str[10]="abcdefgh";
   p=ss(str);
   printf("%s\n",p);
  }
  本小题第1空答案:bcdefgha
15) 以下程序运行后的输出结果是【15】。
  int f(int a[],int n)
  { if(n>=1) return f(a,n-1)+a[n-1];
   elsereturn 0;
  }
  main()
  { int aa[5]={1,2,3,4,5},s;
s=f(aa,5); printf("%d\n",s);
  }
  本小题第1空答案:15
16) 以下程序运行后的输出结果是【16】。
  struct NODE
  { int num; struct NODE *next; };
  main()
  { struct NODE s[3]={{1,&#39;\0&#39;},{2,&#39;\0&#39;},{3,&#39;\0&#39;}},*p,*q,*r;
    int sum=0;
    s[0].nexc=s+1; s[1].next=s+2; s[2].next=s;
    p=s; q=p->next; r=q->next;
    sum+=q->next->num; sum+=r->next->next->num;
    printf("%d\n",sum);
  }
  本小题第1空答案:5
17) 以下程序的功能是输出如下形式的方阵:
  13 14 15 16
   9 10 11 12
   5678
   1234
请填空。
  main()
  { int i,j,x;
    for(j=4;j【17】;j--)
    { for(i=1;i<=4;i++)
     { x=(j-1)*4+【18】;
      printf("%4d",x);
     }
     printf("\n");
    }
  }
  本小题第1空答案:>=1 或 >0 或 !=0
  本小题第2空答案:i
18) 以下函数rotate的功能是: 将a所指N行N列的二维数组中的最后一行放到b所指二维数组的
第0列中, 把a所指二维数组中的第0行放到b所指二维数组的最后一列中, b所指二维数组中其他
数据不变。
  #define N 4
  void rotate(int a[][N], int b[][N])
  { int i,j;
    for(i=0;i<N;i++)
    { b[N-1]=【19】; 【20】=a[N-1]; }
  }
  本小题第1空答案:a[0]
  本小题第2空答案:b[0]
一、选择题 ((1)~(10)每小题 2 分 ,(11)~(50)每小题 1 分 , 共 60 分)
下列各题 A)、B)、C)、D)四个选项中, 只有一个选项是正确的。
01) 下列选项中不属于结构化程序设计方法的是
  A)自顶向下
  B)逐步求精
  C)模块化
  D)可复用
  答案:D
02) 两个或两个以上模块之间关联的紧密程度称为
  A)耦合度
  B)内聚度
  C)复杂度
  D)数据传输特性
  答案:A
03) 下列叙述中正确的是
  A)软件测试应该由程序开发者来完成
  B)程序经调试后一般不需要再测试
  C)软件维护只包括对程序代码的维护
  D)以上三种说法都不对
  答案:D
04) 按照“后进先出”原则组织数据的数据结构是
  A)队列
  B)栈
  C)双向链表
  D)二叉树
  答案:B
05) 下列叙述中正确的是
  A)线性链表是线性表的链式存储结构
  B)栈与队列是非线性结构
  C)双向链表是非线性结构
  D)只有根结点的二叉树是线性结构
  答案:A
06)
  A)ABCDEF
  B)DBEAFC
  C)ABDECF
  D)DEBFCA
  答案:D
07) 在深度为7的满二叉树中,叶子结点的个数为
  A)32
  B)31
  C)64
  D)63
  答案:C
08) “商品”与“顾客”两个实体集之间的联系一般是
  A)一对一
  B)一对多
  C)多对一
  D)多对多
  答案:D
09) 在E-R图中,用来表示实体的图形是
  A)矩形
  B)椭圆形
  C)菱形
  D)三角
  答案:A
10) 数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是
  A)DB包含DBS和DBMS
  B)DBMS包含DB和DBS
  C)DBS包含DB和DBMS
  D)没有任何关系
  答案:C
11) 以下不合法的用户标识符是
  A)j2_KEY
  B)Double
  C)4d
  D)_8_
  答案:C
12) 以下不合法的数值常量是
  A)011
  B)1e1
  C)8.0E0.5
  D)0xabed
  答案:C
13) 以下不合法的字符常量是
  A)&#39;\018&#39;
  B)&#39;\"&#39;
  C)&#39;\\&#39;
  D)&#39;\xcc&#39;
  答案:A
14) 表达式3.6-5/2+1.2+5%2的值是
  A)4.3
  B)4.8
  C)3.3
  D)3.8
  答案:D
15) 以下能正确定义字符串的语句是
  A)char str[]={&#39;\064&#39;};
  B)char str="\x43";
  C)char str=";
  D)char str[]="\0";
  答案:D
16) 以下数组定义中错误的是
  A)int x[][3]={0};
  B)int x[2][3]={{1,2},{3,4},{5,6}};
  C)int x[][3]={{1,2,3},{4,5,6}};
  D)int x[2][3]={1,2,3,4,5,6};
  答案:B
17) 若要求从键盘读入含有空格字符的字符串,应使用函数
  A)getc()
  B)gets()
  C)getchar()
  D)scanf()
  答案:B
18) 以下四个程序中,完全正确的是
  A)#include <stdio.h>
main();
{/*programming */
printf("programming!\n");}
  B)#include <stdio.h>
main()
{/*/programming/*/
printf("programming\n");}
  C)#include <stdio.h>
main()
{/*/*programming */*/
printf("programming!\n");}
  D)include <stdio.h>
main()
{/*programming*/
printf("programming!\n");}
  答案:B
19) 若有定义:float x=1.5; int a=1,b=3,c=2; 则正确的switch语句是
  A)switch(x)
{case 1.0: printf("*\n");
case 2.0: printf("**\n");}
  B)switch((int)x);
{case l:printf("*\n");
case 2:printf("**\n");}
  C)switch(a+b)
{case 1:printf("*\n");
case 2+1: printf{"**\n");}
  D)switch(a+b)
{case1:printf("*\n");
case c:printf("**\n");}
   答案:C
20) 若各选项中所用变量己正确定义,函数fun中通过retuen语句返回一个函数值,以下选项中
错误的程序是
   A)main()
{ …… x=fun(2,10); ……}
float fun(int a,int b){……}
   B)float fun(int a,int b){……}
main()
{ …… x=fun(i,j); ……}
   C)float fun(int,int);
main()
{ …… x=fun(2,10); ……}
float fun(int a,int b){……}
   D)main()
{float fun(int i,int j);
…… x=fun(i,j); ……}
float fun(int a,int b){……}
   答案:A
21) 在以下给出的表达式中,与while(E)中的(E)不等价的表达式是
   A)(!E==0)
   B)(E>0||E<0)
   C)(E==0)
   D)(E!=0)
   答案:C
22) 要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,以下正
确的程序段是
  A)while((ch=getchar())!=&#39;N&#39;)printf("%c",ch);
  B)while(ch=getchar()!=&#39;N&#39;)printf("%c",ch);
  C)while(ch=getchar()==&#39;N&#39;)printf{"%c",ch);
  D)while((ch=getchar())==&#39;N&#39;)printf("%c",ch);
  答案:A
23) 已定义以下函数
    int fun(int *p)
    { return *p;}
    fun函数返回值是
  A)不确定的值
  B)一个整数
  C)形参p中存放的值
  D)形参p的地址值
  答案:B
24) 若有说明语句:double *p,a; 则能通过scanf语句正确给输入项读入数据的程序段是
  A)*p=&a;scanf("%lf",p);
  B)*p=&a;scanf{"%f",p);
  C)p=&a; scanf("%lf",*p);
  D)p=&a; scanf{"%lf",p);
  答案:D
25)
  A)q->next=r->next;p->next=r;r->next=q;
  B)p->next=r;q->next=r->next;r->next=q;
  C)q->next=r->next;r->next=q;p->next=r;
  D)r->next=q;p->next=r;q->next=r->next;
  答案:D
26) 有以下程序段
  struct st
  {int x; int *y;} *pt;
  int a[]={1,2},b[]={3,4};
  struct st c[2]={10,a,20,b};
  pt=c;
以下选项中表达式的值为11的是
  A)*pb->y
  B)pb->x
  C)++pt->x
  D)(pt++)->x
  答案:C
27) 设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为
  A)EOF
  B)非0值
  C)0
  D)NULL
  答案:B
28) 设有以下语句
  int a=1,b=2,c;
  c=a^(b<<2);
执行后,c的值为
  A)6
  B)7
  C)8
  D)9
  答案:D
29) 有以下程序
  #include <stdio.h>
  main()
  {char c1,c2,c3,c4,c5,c6;
   scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
   c5=getchar();c6=getchar();
   putchar(c1);putchar(c2);
   printf("%c%c\n",c5,c6);
程序运行后,若从键盘输入(从第1列开始)
123<回车>
45678<回车>
则输出结果是
  A)1267
  B)1256
  C)1278
  D)1245
  答案:D
30) 有以下程序
  main()
  { int y=10;
    while(y--); printf("y=%d\n",y);
  }
程序执行后的输出结果是
  A)y=0
  B)y=-1
  C)y=1
  D)while构成无限循环
  答案:B
31) 有以下程序
  main()
  { int a=0,b=0,c=0,d=0;
    if(a=1) b=1;c=2;
    else d=3;
    printf("%d,%d,%d,%d\n",a,b,c,d);
  }
程序输出
  A)0,1,2,0
  B)0,0,0,3
  C)1,1,2,0
  D)编译有错
  答案:D
32) 有以下程序
  main()
  { int i,j,x=0;
    for(i=0;i<2;i++)
    { x++;
      for(j=0;j<=3;j++)
{ if(j%2) continue;
  x++;
}
x++;
}
printf{"x=%d\n",x);
  }
程序执行后的输出结果是
  A)x=4
  B)x=8
  C)x=6
  D)x=12
  答案:B
33) 有以下程序
  int fun1(double a){return a*=a;}
  int fun2(double x,double y)
  { double a=0,b=0;
    a=fun1(x);b=fun1(y);return(int)(a+b);
  }
  main()
  {double w; w=fun2(1,1,2.0); ……}
程序执行后变量w中的值是
  A)5.21
  B)5
  C)5.0
  D)0.0
  答案:C
34) 有以下程序
  main()
  {int i,t[][3]={9,8,7,6,5,4,3,2,1};
     for(i=0;j<3;i++) printf("%d",t[2-i]);
  }
程序执行后的输出结果是
  A)7 5 3
  B)3 5 7
  C)3 6 9
  D)7 5 1
  答案:B
35) 有以下程序
  fun(char p[][10])
  {int n=0,i;
    for(i=0;i<7;i++)
      if(p[0]==&#39;T&#39;)n++;
    return n;
  }
  main()
  { char str[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
printf("%d\n",fun(str));
  }
程序执行后的输出结果是
  A)1
  B)2
  C)3
  D)0
  答案:B
36) 有以下程序
  main()
  { int i,s=0,t[]={1,2,3,4,5,6,7,8,9};
    for(i=0;i<9;i+=2) s+=*(t+i);
      printf("%d\n",s);
  }
程序执行后的输出结果是
  A)45
  B)20
  C)25
  D)36
  答案:C
37) 有以下程序
  void fun1(char *p)
  { char *q;
    q=p;
    while(*q!=&#39;\0&#39;)
    { (*q)++;q++;}
  }
  main()
  { char a[]={"Program"},*p;
    p=&a[3]; fun1(p); printf{"%s\n",a);
  }
程序执行后的输出结果是
  A)Prohsbn
  B)Prphsbn
  C)Progsbn
  D)Program
  答案:A
38) 有以下程序
  void swap(char *x, char *y)
  { char t;
    c=*x; *x=*y; *y=t;
  }
  main()
  { char *s1="abc", *s2="123";
    swap(s1,s2); printf("%s,%s\n",s1,s2);
  }
程序执行后的输出结果是
  A)123,abc
  B)abc,123
  C)1bc,a23
  D)321,cba
  答案:C
39) 有以下程序
  int fun(int n)
  { if(n==1) return 1;
    else
      return(n+fun(n-1));
  }
  main()
  { int x;
    scanf("%d",&x); x=fun(x); printf("%d\n",x);
  }
执行程序时,给变量x输入10,程序的输出结果是
  A)55
  B)54
  C)65
  D)45
  答案:A
40) 有以下程序
  int fun(int x[],int n)
  { static int sum=0,i;
    for(i=0;i<n;i++) sum+=x;
    return sum;
  }
  main()
  { int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
    s=fun(a,5)+fun(b,4); printf("%d\n",s);
  }
程序执行后的输出结果是
  A)45
  B)50
  C)60
  D)55
  答案:C
41) 有以下程序
  main()
  {union
    {char ch[2];
     int d;
    }s;
    s.d=0x4321;
    printf("%x,%x\n",s.ch[0],s.ch[1]);
  }
在16位编译系统上,程序执行后的输出结果是




  A)21,43
  B)43,21
  C)43,00
  D)21,00
  答案:A
42) 有以下程序
  main()
  {char *p[]={"3697","2584"};
    int i,j; long num=0;
    for(i=0;i,2;i++)
    { j=0;
     while(p[j]!=&#39;\0&#39;)
     { if((p[j]-&#39;0&#39;)%2) num=10*num+p[j]-&#39;0&#39;;
       j+=2;
     }
    }
    printf("%d\n",num);
  }
程序执行后的输出结果是
  A)35
  B)37
  C)39
  D)3975
  答案:C
43) 执行以下程序后,test.txt文件的内容是(若文件能正常打开)
  #include <stdio.h>
  main()
  { FILE *fb;
    char *s1="Fortran", *s2="Basic";
    if(fb=fopen("test.txt","wb"))==NULL)
    {printf("Can&#39;t open test.txt file\n");exit(1);}
    fwrite(s1,7,1,fp);/* 把从地址s1开始的7个字符写到fp所指文件中 */
    fseek(fp,0L,SEEK_SET); /* 文件位置指针移到文件开头 */
    fwrite(s2,5,1,fb);
    fclose(fb);
  }
  A)Basican
  B)BasicFortran
  C)Basic
  D)FortranBasic
  答案:A
44) 以下叙述中错误的是
  A)C语言源程序经编译后生成后缀为.obj的目标程序
  B)C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
  C)C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中
  D)C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
  答案:D
45) 以下叙述中错误的是
  A)算法正确的程序最终一定会结束
  B)算法正确的程序可以有零个输出
  C)算法正确的程序可以有零个输入
  D)算法正确的程序对于相同的输入一定有相同的结果
  答案:B
46) 以下叙述中错误的是
  A)C程序必须由一个或一个以上的函数组成
  B)函数调用可以作为一个独立的语句存在
  C)若函数有返回值,必须通过return语句返回
  D)函数形参的值也可以传回给对应的实参
  答案:D
47) 设有以下定义和语句
  char str[20]="Program",*p;
  p=str;
则以下叙述中正确的是
  A)*p与str[0]中的值相等
  B)str与p的类型完全相同
  C)str数组长度和p所指向的字符串长度相等
  D)数组str位中存放的内容和指针变量p中存放的内容相同
  答案:A
48) 以下叙述中错误的是
  A)C程序中的#include和#define行均不是C语句
  B)除逗号运算符外,赋值运算符的优先级最低
  C)C程序中,j++;是赋值语句
  D)C程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算
  答案:D
49) 以下叙述中正确的是
  A)预处理命令行必须位于C源程序的起始位置
  B)在C语言中,预处理命令行都以"#"开头
  C)每个C程序必须在开头包含预处理命令行:#include <stdio.h>
  D)C语言的预处理不能实现宏定义和条件编译的功能
  答案:B
50) 以下叙述中错误的是
  A)可以通过typedef增加新的类型
  B)可以用typedef将己存在的类型用一个新的名字来代表
  C)用typedef定义新的类型名后,原有类型名仍有效
  D)用typedef可以为各种类型起别名,但不能为变量起别名
  答案:A
二、填空题 (每空 2 分, 共 40 分)
请将每一个空的正确答案写在答题处【1】至【20】。
1) 对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为【1】。
  本小题第1空答案:45
2) 在面向对象方法中,【2】描述的是具有相似属性与操作的一组对象。
  本小题第1空答案:类
3) 在关系模型中,把数据看成是二维表,每一个二维表称为一个【3】。
  本小题第1空答案:关系 或 关系表
4) 程序测试分为静态分析和动态测试。其中【4】是指不执行程序,而只是对程序文本进行检
查,通过阅读和讨论,分析和发现程序中的错误。
  本小题第1空答案:静态分析
5) 数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,
因此,基于逻辑结构的应用程序不必修改,称为【5】。
  本小题第1空答案:物理独立性
6) 若变量a,b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,请
写出完整的的输出语句【6】。
  本小题第1空答案:printf("a=%d,b=%d\n",a,b); 或 printf("a=%d,b=%d",a,b);
7) 以下程序用于判断a、b、c能否构成三角形,若能,输出YES,否则输出NO。当给a、b、c输
入三角形三条边长时,确定a、b、C能构成三角形的条件是需同时满足三个条件:a+b>c,a+c>b,
b+c>a 。请填空。
  main()
  { float a,b,c;
    scanf("%f%f%f",&a,&b,&c);
    if(【7】) printf("YES\n"); /*a、b、c 能构成三角形 */
    else printf("NO\n");/*a、b、c 不能构成三角形 */
  }
  本小题第1空答案:a+b>c&&a+c>b&&b+c>a 或 a+b>c&&b+c>a&&a+c>b 或
(a+b>c&&a+c>b&&b+c>a) 或 (a+b>c&&b+c>a&&a+c>b)
8) 以下程序的输出结果是【8】。
  main()
  { int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
    for(i=0;i<3;i++) s+=a+a[3-i-1];
    printf("%d\n",s);
  }
  本小题第1空答案:30
9) 当运行以下程序时,输入abed,程序的输出结果是:【9】。
  insert(char str[])
  { int i;
    i=strlen(str);
    while(i>0)
    { str[2*i]=str;str[2*i-1]=&#39;*&#39;;i--;}
    printf("%s\n",str);
  }
  main()
  { char str[40];
    scanf("%s",str);insert(str);
  }
  本小题第1空答案:a*b*c*d*
10) 下面程序的运行结果是:【10】。
  fun(int t[],int n)
  { int i,m;
    if(n==1)return t[0];
    else
     if(n>=2){m=fun(t,n-1); return m;}
  }
  main()
  { int a[]={11,4,6,3,8,2,3,5,9,2};
    printf("%d\n",fun(a,10));
  }
  本小题第1空答案:11
11) 现有两个C程序文件T18.c和myfun.c同在TC系统目录(文件夹)下,其中T18.c文件如下:
  #include <stdio.h>
  #include "myfun.c"
  main()
  { fun(); printf("\n");}
  myfun.c文件如下:
  void fun()
  { char s[80],c; int n=0;
    while((c=getchar())!=&#39;\n&#39;) s[n++]=c;
    n--;
    while(n>=0) printf("%c",s[n--]);
  }
  当编译连接通过后,运行程序T18时,输入Thank!则输出结果是:【11】。
  本小题第1空答案:!knahT
12) 以下函数fun的功能是返回str所指字符串中以形参c中字符开头的后续字符串的首地址,例
如:由所指字符串为:Hello!,c中的字符为e,则函数返回字符串:ello!的首地址。若str所
指字符串为空串或不包含c中的字符,则函数返回NULL。请填空。
  char *fun(char *str,char c)
  { int n=0; char *p=str;
    if(p!=NULL)
      while(p[n]!=c&&p[n]!=&#39;\0&#39;)n++;
    if(p[n]==&#39;\0&#39;) return NULL;
    return(【12】);
  }
  本小题第1空答案:&p[n] 或 p+n
13) 以下程序的功能是:输出100以内(不含100)能被3整除且个位数为6的所有整数,请填空。
  main()
  {int i,j;
  for(i=0;【13】;i++)
  { j=i*10+6;
    if(【14】) continue;
    printf("%d ",j);
  }
  本小题第1空答案:i<10 或 i<=9
  本小题第2空答案:j%3 或 j%3!=0 或 !(j%3==0)
14) 以下isprime函数的功能是判断形参a是否为素数,是素数,函数返回1,否则返回0。请填

  int isprime(int a )
  { int ;
    for(i=2;i<=a/2;i++)
     if(a%i==0)【15】;
   【16】;
   }
  本小题第1空答案:return 0 或 return(0) 或 return 0; 或 return(0);
  本小题第2空答案:return 1 或 return(1) 或 return 1; 或 return(1);
15) 以下程序的功能是输入任意整数给n后,输出n行由大写字母A开始构成的三角形字符阵列图
形。例如,输入整数5时(注意:n不得大于10),程序运行结果如下:
   ABCDE
   FGHI
   JKL
   MN
   O
请填空完成该程序。
   main()
   { int i,j,n; char ch=&#39;A&#39;;
    scanf("%d",&n);
    if{n<11)
    { for(i=1;i<=n;i++)
      { for(j=1;j<=n-i+1;j++)
       { printf("%2c",ch);
        【17】;
       }
       【18】;
      }
    }
    else printf("n is too large!\n")
    printf("\n");
   }
  本小题第1空答案:ch++ 或 ++ch 或 ch=ch+1 或 ch=1+ch 或 ch+=1 或 ch++; 或 ++ch; 或
ch=ch+1; 或 ch=1+ch; 或 ch+=1;
  本小题第2空答案:printf("\n") 或 putchar(&#39;\n&#39;) 或 printf("\n"); 或 putchar(&#39;\n&#39;);
16)
  本小题第1空答案:p 或 p!=0 或 p!=NULL 或 p!=&#39;\0&#39; 或 p!=0
  本小题第2空答案:p->next
一、选择题 ((1)~(10)每小题 2 分 ,(11)~(50)每小题 1 分 , 共 60 分)
下列各题 A)、B)、C)、D)四个选项中, 只有一个选项是正确的。
01) 下列选项中不符合良好程序设计风格的是
  A)源程序要文档化
  B)数据说明的次序要规范化
  C)避免滥用goto语句
  D)模块设计要保证高耦合、高内聚
  答案:D
02) 从工程管理角度,软件设计一般分为两步完成,它们是
  A)概要设计与详细设计
  B)数据设计与接口设计
  C)软件结构设计与数据设计
  D)过程设计与数据设计
  答案:A
03) 下列选项中不属于软件生命周期开发阶段任务的是
  A)软件测试
  B)概要设计
  C)软件维护
  D)详细设计
  答案:C
04) 在数据库系统中,用户所见的数据模式为
  A)概念模式
  B)外模式
  C)内模式
  D)物理模式
  答案:B
05) 数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和
  A)编码设计
  B)测试阶段
  C)运行阶段
  D)物理设计
  答案:D
06)
  A)T=R∩S
  B)T=R∪S
  C)T=R×S
  D)T=R/S
  答案:C
07) 下列叙述中正确的是
  A)一个算法的空间复杂度大,则其时间复杂度也必定大
  B)一个算法的空间复杂度大,则其时间复杂度必定小
  C)一个算法的时间复杂度大,则其空间复杂度必定小
  D)上述三种说法都不对
  答案:D
08) 在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为
  A)63
  B)64
  C)6
  D)7
  答案:B
09) 数据库技术的根本目标是要解决数据的
  A)存储问题
  B)共享问题
  C)安全问题
  D)保护问题
  答案:B
10)
  A)ACBDFEG
  B)ACBDFGE
  C)ABDCGEF
  D)FCADBEG
  答案:A
11) 下列叙述中错误的是
  A)一个C语言程序只能实现一种算法
  B)C程序可以由多个程序文件组成
  C)C程序可以由一个或多个函数组成
  D)一个C函数可以单独作为一个C程序文件存在
  答案:A
12) 下列叙述中正确的是
  A)每个C程序文件中都必须要有一个main()函数
  B)在C程序中main()函数的位置是固定的
  C)C程序中所有函数之间都可以相互调用,与函数所在位置无关
  D)在C程序的函数中不能定义另一个函数
  答案:D
13) 下列定义变量的语句中错误的是
  A)int _int;
  B)double int_;
  C)char For;
  D)float US$;
  答案:D
14) 若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是
  A)++x,y=x--
  B)x+1=y
  C)x=x+10=x+y
  D)double(x)/10
  答案:A
15) 以下关于逻辑运算符两侧运算对象的叙述中正确的是
  A)只能是整数0或1
  B)只能是整数0或非0整数
  C)可以是结构体类型的数据
  D)可以是任意合法的表达式
  答案:D
16) 若有定义int x,y; 并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++) : (y++)
中的条件表达式(x-y) 等价的是
  A)(x-y>0)
  B)(x-y<0)
  C)(x-y<0||x-y>0)
  D)(x-y==0)
  答案:C
17) 有以下程序
  main()
  { int x, y, z;
   x=y=1;
   z=x++,y++,++y;
   printf("%d,%d,%d\n",x,y,z);
  }
程序运行后的输出结果是
  A)2,3,3
  B)2,3,2
  C)2,3,1
  D)2,2,1
  答案:C
18) 设有定义:int a; float b; 执行 scanf("%2d%f",&a,&b); 语句时,若从键盘输入876
543.0<回车>,a和b的值分别是
  A)876和543.000000
  B)87和6.000000
  C)87和543.000000
  D)76和543.000000
  答案:B
19) 有以下程序
  main()
  { int a=0, b=0;
   a=10;/* 给a赋值
b=20;
printf("a+b=%d\n",a+b);
  给b赋值*/
/* 输出计算结果 */
  }
程序运行后的输出结果是
  A)a+b=10
  B)a+b=30
  C)30
  D)出错
  答案:A
20) 在嵌套使用if语句时,C语言规定else总是
  A)和之前与其具有相同缩进位置的if配对
  B)和之前与其最近的if配对
  C)和之前与其最近的且不带else的if配对
  D)和之前的第一个if配对
  答案:C
21) 下列叙述中正确的是
  A)break语句只能用于switch语句\TAB
  B)在switch语句中必须使用default
  C)break语句必须与switch语句中的case配对使用
  D)在switch语句中,不一定使用break语句
  答案:D
22) 有以下程序
  main()
  { int k=5;
   while(--k) printf("%d",k -= 3);
   printf("\n");
  }
执行后的输出结果是
  A)1
  B)2
  C)4
  D)死循环
  答案:A
23) 有以下程序
  main()
  { int i;
   for(i=1; i<=40; i++)
   { if(i++%5==0)
     if(++i%8==0) printf("%d ",i);
   }
   printf("\n");
  }
执行后的输出结果是
  A)5
  B)24
  C)32
  D)40
  答案:C
24) 以下选项中,值为1的表达式是
  A)1 –&#39;0&#39;
  B)1 - &#39;\0&#39;
  C)&#39;1&#39; -0
  D)&#39;\0&#39; - &#39;0&#39;
  答案:B
25) 有以下程序
  fun(int x, int y){ return (x+y); }
  main()
  { int a=1, b=2, c=3, sum;
   sum=fun((a++,b++,a+b),c++);
   printf("%d\n",sum);
  }
执行后的输出结果是
  A)6
  B)7
  C)8
  D)9
  答案:C
26) 有以下程序
  main()
  { char s[]="abcde";
    s+=2;
    printf("%d\n",s[0]);
  }
执行后的结果是
  A)输出字符a的ASCII码
  B)输出字符c的ASCII码
  C)输出字符c
  D)程序出错
  答案:D
27) 有以下程序
  fun(int x, int y)
  { static int m=0, i=2;
   i+=m+1;m=i+x+y;return m;
  }
  main()
  { int j=1, m=1, k;
   k=fun(j,m);printf("%d,",k);
   k=fun(j,m);printf("%d\n",k);
  }
执行后的输出结果是
  A)5, 5
  B)5, 11
  C)11, 11
  D)11, 5
  答案:B
28) 有以下程序
  fun(int x)
  { int p;
   if(x==0||x==1) return(3);
   p=x-fun(x-2);
   return p;
  }
  main()
  { printf("%d\n",fun(7)); }
执行后的输出结果是
  A)7
  B)3
  C)2
  D)0
  答案:C
29) 在16位编译系统上,若有定义int a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错
误的是
  A)p向高地址移了一个字节
  B)p向高地址移了一个存储单元
  C)p向高地址移了两个字节
  D)p与a+1等价
  答案:A
30) 有以下程序
  main()
  { int a=1, b=3, c=5;
   int *p1=&a, *p2=&b, *p=&c;
   *p =*p1*(*p2);
   printf("%d\n",c);
  }
执行后的输出结果是
  A)1
  B)2
  C)3
  D)4
  答案:C
31) 若有定义:int w[3][5]; ,则以下不能正确表示该数组元素的表达式是
  A)*(*w+3)
  B)*(w+1)[4]
  C)*(*(w+1))
  D)*(&w[0][0]+1)
  答案:B
32) 若有以下函数首部
  int fun(double x[10], int *n)
则下面针对此函数的函数声明语句中正确的是
  A)int fun(double x, int *n);
  B)int fun(double , int );
  C)int fun(double *x, int n);
  D)int fun(double *, int *);
  答案:D
33) 若有定义语句:int k[2][3],*pk[3];,则以下语句中正确的是
  A)pk=k;
  B)pk[0]=&k[1][2];
  C)pk=k[0];
  D)pk[1]=k;
  答案:B
34) 有以下程序
  void change(int k[ ]){ k[0]=k[5]; }
  main()
  { int x[10]={1,2,3,4,5,6,7,8,9,10},n=0;
    while( n<=4 ) { change( &x[n]) ; n++; }
    for(n=0; n<5; n++) printf("%d ",x[n]);
    printf("\n");
  }
程序运行后输出的结果是
  A)6 7 8 9 10
  B)1 3 5 7 9
  C)1 2 3 4 5
  D)6 2 3 4 5
  答案:A
35) 若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是
  A)#define N 10
   int a[N];
  B)#define n 5
   int a [2*n];
  C)int a[5+5];
  D)int n=10,a[n];
  答案:D
36) 有以下程序
  main()
  { int x[3][2]={0}, i;
    for(i=0; i<3; i++)scanf("%d",x);
    printf("%3d%3d%3d\n",x[0][0],x[0][1],x[1][0]);
  }
若运行时输入:2 4 6<回车>,则输出结果为
  A)2 0 0
  B)2 0 4
  C)2 4 0
  D)2 4 6
  答案:B
37) 有以下程序
  main()
  { char s[]={ "aeiou" },*ps;
    ps=s;printf("%c\n",*ps+4);
  }
程序运行后的输出结果是
  A)a
  B)e
  C)u
  D)元素s[4]的地址
  答案:B
38) 以下语句中存在语法错误的是
  A)char ss[6][20]; ss[1]= "right?";
  B)char ss[ ][20]={ "right?"};
  C)char *ss[6]; ss[1]= "right?";
  D)char *ss[ ]={ "right?"};
  答案:A
39) 若有定义:char *x="abcdefghi";,以下选项中正确运用了strcpy函数的是
  A)char y[10]; strcpy(y,x[4]);
  B)char y[10]; strcpy(++y,&x[1]);
  C)char y[10],*s; strcpy(s=y+5,x);
  D)char y[10],*s; strcpy(s=y+1,x+1);
  答案:D
40) 有以下程序
  int add( int a,int b){ return (a+b); }
  main()
  { int k, (*f)(), a=5,b=10;
   f=add;
   …
  }
则以下函数调用语句错误的是
  A)k=(*f)(a,b);
  B)k=add(a,b);
  C)k= *f(a,b);
  D)k=f(a,b);
  答案:C
41) 有以下程序
  #include<string.h>
  main( int argc, char *argv[ ])
  { int i=1,n=0;
   while (i<argc) { n=n+strlen(argv); i++; }
   printf("%d\n",n);
  }
该程序生成的可执行文件名为:proc.exe。若运行时输入命令行:
  proc 123 45 67
则程序的输出结果是
  A)3
  B)5
  C)7
  D)11
  答案:C
42) 有以下程序
  void fun2(char a, char b) { printf("%c %c ",a,b); }
  char a=&#39;A&#39;, b=&#39;B&#39;;
  void fun1( ){ a=&#39;C&#39;\TAB ; b=&#39;D&#39; ; }
  main( )
  { fun1( );
    printf("%c %c ",a,b);
    fun2(&#39;E&#39;, &#39;F&#39;);
  }
程序的运行结果是
  A)C D E F
  B)A B E F
  C)A B C D
  D)C D A B
  答案:A
43) 有以下程序
  # include<stdio.h>
  # defineN5
  # defineMN+1
  # definef(x) (x*M)
  main()
  { int i1, i2;
   i1 = f(2) ;
   i2 = f(1+1) ;
   printf("%d %d\n", i1, i2);
  }
程序的运行结果是
  A)12 12
  B)11 7
  C)11 11
  D)12 7
  答案:B
44) 设有以下语句
  typedef struct TT
  { char c; int a[4]; } CIN;
则下面叙述中正确的是
  A)可以用TT定义结构体变量
  B)TT是struct类型的变量
  C)可以用CIN定义结构体变量
  D)CIN是struct TT类型的变量
  答案:C
45) 有以下结构体说明、变量定义和赋值语句
  struct STD
  { char name[10];
   int age;
   char sex;
  } s[5],*ps;
  ps=&s[0];
则以下scanf函数调用语句中错误引用结构体变量成员的是
  A)scanf("%s",s[0].name);
  B)scanf("%d",&s[0].age);
  C)scanf("%c",&(ps->sex));
  D)scanf("%d",ps->age);
  答案:D
46) 若有以下定义和语句
  union data
  { int i; char c;float f; } x;
  int y;
则以下语句正确的是
  A)x=10.5;
  B)x.c=101;
  C)y=x;
  D)printf("%d\n",x);
  答案:B
47)
  A)首结点成为尾结点
  B)尾结点成为首结点
  C)删除首结点
  D)删除尾结点
  答案:A
48) 若变量已正确定义,则以下语句的输出结果是
  s=32; s^=32; printf("%d",s);
  A)-1
  B)0
  C)1
  D)32
  答案:B
49) 以下叙述中正确的是
  A)C语言中的文件是流式文件,因此只能顺序存取数据
  B)打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖
  C)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数

  D)当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
  答案:D
50) 有以下程序
  #include <stdio.h>
  main()
  { FILE *fp;int i;
    char ch[]="abcd",t;
    fp=fopen("abc.dat","wb+");
    for(i=0; i<4; i++) fwrite(&ch,1,1,fp);
    fseek(fp,-2L,SEEK_END);
    fread(&t,1,1,fp);
    fclose(fp);
    printf("%c\n",t);
  }
程序执行后的输出结果是
  A)d
  B)c
  C)b
  D)a
  答案:B
二、填空题 (每空 2 分, 共 40 分)
请将每一个空的正确答案写在答题处【1】至【20】。
1)
  本小题第1空答案:3
2) 【2】的任务是诊断和改正程序中的错误。
  本小题第1空答案:调试 或 调试阶段 或 程序调试 或 程序调试阶段 或 软件调试 或 软件
调试阶段 或 Debug 或 Debug阶段
3) 一个关系表的行称为【3】。
  本小题第1空答案:记录 或 元组
4) 按“先进后出”原则组织数据的数据结构是【4】。
  本小题第1空答案:栈 或 Stack
5) 数据结构分为线性结构和非线性结构,带链的队列属于【5】。
  本小题第1空答案:线性结构
6) 设有定义:float x=123.4567;,则执行以下语句后的输出结果是 【6】 。
  printf("%f\n",(int)(x*100+0.5)/100.0);
  本小题第1空答案:123.46 或 123.460000
7) 以下程序运行后的输出结果是 【7】 。
  main()
  { int m=011,n=11;
   printf("%d %d\n",++m, n++);
  }
  本小题第1空答案:10 11
8) 以下程序运行后的输出结果是 【8】 。
  main()
  { int x,a=1,b=2,c=3,d=4;
   x=(a<b) ? a : b; x=(x<c) ? x : c;x=(d>x) ? x : d;
   printf("%d\n",x);
  }
  本小题第1空答案:1
9) 有以下程序,若运行时从键盘输入:18,11<回车>,则程序的输出结果是 【9】 。
  main()
  { int a,b;
    printf("Enter a,b:"); scanf("%d,%d",&a,&b);
    while(a!=b)
    { while(a>b) a -= b;
      while(b>a) b -= a;
    }
    printf("%3d%3d\n",a,b);
  }
  本小题第1空答案:1 1
10) 以下程序的功能是:将输入的正整数按逆序输出。例如:若输入135则输出531。请填空。
  #include<stdio.h>
  main()
  { int n,s;
   printf("Enter a number : "); scanf("%d",&n);
   printf("Output: ");
   do
   { s=n%10; printf("%d",s); 【10】 ; }
    while(n!=0);
    printf("\n");
  }
  本小题第1空答案:n/=10 或 n=n/10
11)
  本小题第1空答案:x+8 或 8+x 或 x+8.0 或 8.0+x 或 x+8. 或 8.+x
  本小题第2空答案:sin(x)
12)
  本小题第1空答案:j+1 或 j 或 1+j
  本小题第2空答案:i%2 或 i%2!=0 或 i%2==1
13) 下列程序中的函数strcpy2()实现字符串两次复制,即将t所指字符串复制两次到s所指内存
空间中,合并形成一个新字符串。例如,若t所指字符串为:efgh,调用strcpy2后,s所指字符
串为:efghefgh。请填空。
  #include<stdio.h>
  #include<string.h>
  void strcpy2(char *s, char *t)
  { char *p=t;
   while(*s++ = *t++ );
   s=【15】;
   while (【16】=*p++ ) ;
  }
  main()
  { char str1[100]="abcd", str2[]="efgh";
   strcpy2(str1, str2);printf("%s\n", str1);
  }
  本小题第1空答案:s-1 或 --s 或 s--
  本小题第2空答案:*s++
14) 下面程序的运行结果是:【17】 。
  #include <stdio.h>
  int f(int a[],int n)
  { if(n>1)
    return a[0] + f(a+1, n-1);
   else
    return a[0];
  }
  main()
  { int aa[10]={1,2,3,4,5,6,7,8,9,10}, s;
   s = f(aa+2,4);printf("%d\n", s);
  }
  本小题第1空答案:18
15) 下面程序由两个源程序文件:t4.h和t4.c组成,程序编译运行的结果是: 【18】 。
t4.h的源程序为:
  #defineN10
  #definef2(x)(x*N)
t4.c的源程序为:
  #include <stdio.h>
  #defineM8
  #definef(x)((x)*M)
  #include"t4.h"
  main()
  { int i,j;
   i=f(1+1);j=f2(1+1);
   printf("%d %d\n", i,j);
  }
  本小题第1空答案:16 11
16)
  本小题第1空答案:->next->data
17) 有以下程序,其功能是:以二进制“写”方式打开文件d1.dat,写入1~100这100个整数后
关闭文件。再以二进制“读”方式打开文件d1.dat,将这100个整数读入到另一个数组b中,并
打印输出。请填空。
  #include<stdio.h>
  main()
  { FILE *fp;
   int i,a[100], b[100];
   fp = fopen("d1.dat", "wb");
   for (i=0;i<100; i++) a = i+1;
   fwrite(a, sizeof(int), 100, fp);
   fclose(fp);
   fp = fopen("d1.dat", 【20】 );
   fread(b, sizeof(int), 100, fp);
   fclose(fp);
   for(i=0;i<100; i++) printf("%d\n", b);
  }
  本小题第1空答案:"rb" 或 "r+b" 或 "rb+"
一、选择题 ((1)~(10)每小题 2 分 ,(11)~(50)每小题 1 分 , 共 60 分)
下列各题 A)、B)、C)、D)四个选项中, 只有一个选项是正确的。
01) 下列叙述中正确的是
  A)算法的效率只与问题的规模有关,而与数据的存储结构无关
  B)算法的时间复杂度是指执行算法所需要的计算工作量
  C)数据的逻辑结构与存储结构是一一对应的
  D)算法的时间复杂度与空间复杂度一定相关
  答案:B
02) 在结构化程序设计中,模块划分的原则是
  A)各模块应包括尽量多的功能
  B)各模块的规模应尽量大
  C)各模块之间的联系应尽量紧密
  D)模块内具有高内聚度、模块间具有低耦合度
  答案:D
03) 下列叙述中正确的是
  A)软件测试的主要目的是发现程序中的错误
  B)软件测试的主要目的是确定程序中错误的位置
  C)为了提高软件测试的效率,最好由程序编制者自己来完成软件测试的工作
  D)软件测试是证明软件没有错误
  答案:A
04) 下面选项中不属于面向对象程序设计特征的是
  A)继承性
  B)多态性
  C)类比性
  D)封装性
  答案:C
05) 下列对队列的叙述正确的是
  A)队列属于非线性表
  B)队列按“先进后出”原则组织数据
  C)队列在队尾删除数据
  D)队列按“先进先出”原则组织数据
  答案:D
06)
A)DYBEAFCZX
B)YDEBFZXCA
C)ABDYECFXZ
D)ABCDEFXYZ
答案:C
07) 某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为
  A)n+1
  B)n-1
  C)2n
  D)n/2
  答案:A
08) 在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是
  A)并
  B)交
  C)投影
  D)笛卡儿乘积
  答案:B
09) 在E-R图中,用来表示实体之间联系的图形是
  A)矩形
  B)椭圆形
  C)菱形
  D)平行四边形
  答案:C
10) 下列叙述中错误的是
  A)在数据库系统中,数据的物理结构必须与逻辑结构一致
  B)数据库技术的根本目标是要解决数据的共享问题
  C)数据库设计是指在已有数据库管理系统的基础上建立数据库
  D)数据库系统需要操作系统的支持
  答案:A
11) 算法中,对需要执行的每一步操作,必须给出清楚、严格的规定。这属于算法的
  A)正当性
  B)可行性
  C)确定性
  D)有穷性
  答案:C
12) 以下叙述中错误的是
  A)计算机不能直接执行用C语言编写的源程序
  B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件
  C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件
  D)后缀为.obj和.exe的二进制文件都可以直接运行
  答案:D
13) 按照C语言规定的用户标识符命名规则,不能出现在标识符中的是
  A)大写字母
  B)连接符
  C)数字字符
  D)下划线
  答案:B
14) 以下叙述中错误的是
  A)C语言是一种结构化程序设计语言
  B)结构化程序由顺序、分支、循环三种基本结构组成
  C)使用三种基本结构构成的程序只能解决简单问题
  D)结构化程序设计提倡模块化的设计方法
  答案:C
15) 对于一个正常运行的C程序,以下叙述中正确的是
  A)程序的执行总是从main函数开始,在main函数结束
  B)程序的执行总是从程序的第一个函数开始,在main函数结束
  C)程序的执行总是从main函数开始,在程序的最后一个函数中结束
  D)程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束
  答案:A
16) 设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2
赋数值10和20,为变量c1和c2赋字符X和Y。以下所示的输入形式中正确的是(注:□代表空格字
符)
  A)10□X□20□Y<回车>
  B)10□X20□Y<回车>
  C)10□X <回车>
    20□Y<回车>
  D)10X <回车>
   20Y<回车>
  答案:D
17)
  A)sqrt(abs(n^x+e^x))
  B)sqrt(fabs(pow(n,x)+pow(x,e)))
  C)sqrt(fabs(pow(n,x)+exp(x)))
  D)sqrt(fabs(pow(x,n)+exp(x)))
  答案:C
18) 设有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是
  A)k++
  B)k+=1
  C)++k
  D)k+1
  答案:A
19) 有以下程序,其中%u表示按无符号整数输出
  main()
  { unsigned int x=0xFFFF; /* x的初值为十六进制数 */
   printf("%u\n",x);
  }
程序运行后的输出结果是
  A)-1
  B)65535
  C)32767
  D)0xFFFF
  答案:B
20) 设变量x和y均已正确定义并赋值。以下if语句中,在编译时将产生错误信息的是
  A)if(x++);
  B)if(x>y && y!=0);
  C)if(x>0) x--
else y++;
  D)if(y<0) { ; }
else x++;
  答案:C
21) 以下选项中,当x为大于1的奇数时,值为0的表达式是
  A)x%2==1
  B)x/2
  C)x%2!=0
  D)x%2==0
  答案:D
22) 以下叙述中正确的是
  A)break语句只能用于switch语句体中
  B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环
  C)break语句只能用在循环体内和switch语句体内
  D)在循环体内使用break语句和continue语句的作用相同
  答案:C
23) 有以下程序
  main()
  { int k=5,n=0;
   do
   { switch(k)
     { case 1:case 3: n+=1; k--; break;
      default: n=0; k--;
      case 2:case 4: n+=2; k--; break;
     }
     printf("%d",n);
   }while(k>0 && n<5);
  }
程序运行后的输出结果是
  A)235
  B)0235
  C)02356
  D)2356
  答案:A
24) 有以下程序
  main()
  { int i,j;
   for(i=1; i<4; i++)
   { for(j=i; j<4; j++) printf("%d*%d=%d ",i,j,i*j);
     printf("\n");
   }
  }
程序运行后的输出结果是
  A)1*1=1 1*2=2 1*3=3
2*1=2 2*2=4
3*1=3
  B)1*1=1 1*2=2 1*3=3
2*2=4 2*3=6
3*3=9
  C)1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
  D)1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
  答案:B
25) 以下合法的字符型常量是
  A)&#39;\x13&#39;
  B)&#39;\081&#39;
  C)&#39;65&#39;
  D)"\n"
  答案:A
26) 在C语言中,函数返回值的类型最终取决于
  A)函数定义时在函数首部所说明的函数类型
  B)return语句中表达式值的类型
  C)调用函数时主调函数所传递的实参类型
  D)函数定义时形参的类型
  答案:A
27) 已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写字母
转换为对应小写字母的语句是
  A)c=(c-&#39;A&#39;)%26 +&#39;a&#39;
  B)c=c+32
  C)c=c-&#39;A&#39;+&#39;a&#39;
  D)c=(&#39;A&#39;+c)%26-&#39;a&#39;
  答案:D
28) 有以下函数
  int fun(char *s)
  { char *t=s;
   while(*t++);
   return(t-s);
  }
该函数的功能是
  A)比较两个字符串的大小
  B)计算s所指字符串占用内存字节的个数
  C)计算s所指字符串的长度
  D)将s所指字符串复制到字符串t中
  答案:B
29) 设已有定义:float x;,则以下对指针变量p进行定义且赋初值的语句中正确的是
  A)float *p=1024;
  B)int *p=(float)x;
  C)float p=&x;
  D)float *p=&x;
  答案:D
30) 有以下程序
  #include <stdio.h>
  main()
  { int n,*p=NULL;
   *p=&n;
   printf("Input n:");scanf("%d",&p);printf("output n:");
printf("%d\n",p);
  }
该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是
  A)int n,*p=NULL;
  B)*p=&n;
  C)scanf("%d",&p)
  D)printf("%d\n",p);
  答案:A
31) 以下程序中函数f的功能是:当flag为1时,进行由小到大排序;当flag为0时,进行由大到
小排序。
  void f(int b[], int n, int flag)
  { int i,j,t;
   for (i=0; i<n-1; i++)
    for (j=i+1; j<n; j++)
      if (flag ? b>b[j] : b<b[j]) { t=b; b=b[j]; b[j]=t; }
  }
  main()
  { int a[10]={5,4,3,2,1,6,7,8,9,10}, i;
   f(&a[2], 5, 0);f(a, 5, 1);
   for (i=0; i<10; i++) printf("%d,", a);
  }
程序运行后的输出结果是
  A)1,2,3,4,5,6,7,8,9,10,
  B)3,4,5,6,7,2,1,8,9,10,
  C)5,4,3,2,1,6,7,8,9,10,
  D)10,9,8,7,6,5,4,3,2,1,
  答案:B
32) 有以下程序
  void f(int b[])
  { int i;
   for (i=2; i<6; i++) b *= 2;
  }
  main()
  { int a[10]={1,2,3,4,5,6,7,8,9,10}, i;
   f(a);
   for (i=0; i<10; i++) printf("%d,", a);
  }
程序运行后的输出结果是
  A)1,2,3,4,5,6,7,8,9,10,
  B)1,2,6,8,10,12,7,8,9,10,
  C)1,2,3,4,10,12,14,16,9,10,
  D)1,2,6,8,10,12,14,16,9,10,
  答案:B
33) 有以下程序
  typedef struct { int b, p; } A;
  void f(A c) /* 注意:c是结构变量名*/
  { int j;
   c.b += 1; c.p+=2;
  }
  main()
  { int i;
   A a={1,2};
   f(a);
   printf("%d,%d\n", a.b, a.p);
  }
程序运行后的输出结果是
  A)2,3
  B)2,4
  C)1,4
  D)1,2
  答案:D
34) 有以下程序
  main()
  { int a[4][4]={ {1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1} }, i, j, k, t;
   for (i=0; i<4; i++)
    for (j=0; j<3; j++)
      for (k=j+1; k<4; k++)
        if (a[j] > a[k]) { t=a[j]; a[j]=a[k]; a[k]=t;} /* 按列
排序 */
   for (i=0; i<4; i++) printf("%d, ",a);
  }
程序运行后的输出结果是
  A)1, 6, 5, 7,
  B)8, 7, 3, 1,
  C)4, 7, 5, 2,
  D)1, 6, 2, 1,
  答案:A
35) 有以下程序
  main()
  { int a[4][4]={ {1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}}, i, k, t;
   for (i=0; i<3; i++)
    for (k=i+1; k<4; k++) if (a < a[k][k]) { t=a; a=a[k][k];
a[k][k]=t;}
   for (i=0; i<4; i++) printf("%d, ", a[0]);
  }
程序运行后的输出结果是
  A)6, 2, 1, 1,
  B)6, 4, 3, 2,
  C)1, 1, 2, 6,
  D)2, 3, 4, 6,
  答案:B
36) 有以下程序
  void f( int *q )
  { int i=0;
   for ( ;i<5; i++) (*q)++;
  }
  main()
  { int a[5] ={1,2,3,4,5}, i;
   f(a);
   for (i=0;i<5; i++) printf("%d,", a);
  }
程序运行后的输出结果是
  A)2, 2, 3, 4, 5,
  B)6, 2, 3, 4, 5,
  C)1, 2, 3, 4, 5,
  D)2, 3, 4, 5, 6,
  答案:B
37) 有以下程序
  # include<string.h>
  main()
  { char p[20]={&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;}, q[]="abc", r[]="abcde";
   strcpy(p+strlen(q), r);strcat(p, q);
   printf("%d %d\n", sizeof(p), strlen(p));
  }
程序运行后的输出结果是
  A)20 9
  B)99
  C)20 11
  D)11 11
  答案:C
38) 有以下程序
  # include<string.h>
  main()
  { char p[20]={&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;}, q[]="abc", r[]="abcde";
   strcat(p, r);strcpy(p+strlen(q), q);
   printf("%d\n", strlen(p));
  }
程序运行后的输出结果是
  A)9
  B)6
  C)11
  D)7
  答案:B
39) 有以下程序
  # include <string.h>
  void f(char p[][10], int n) /* 字符串从小到大排序 */
  { char t[10];int i,j;
   for (i=0; i<n-1; i++)
     for (j=i+1; j<n; j++)
      if (strcmp(p, p[j]) > 0) { strcpy(t, p); strcpy(p, p[j]);
strcpy(p[j], t); }
  }
  main()
  { char p[5][10]={"abc", "aabdfg", "abbd", "dcdbe", "cd"};
   f(p, 5);
   printf("%d\n", strlen(p[0]));
  }
程序运行后的输出结果是
  A)2
  B)4
  C)6
  D)3
  答案:C
40) 有以下程序
  void f(int n, int *r)
  { int r1=0;
   if (n%3 == 0)r1=n/3;
   else if (n%5 == 0) r1=n/5;
   else f(--n, &r1);
     *r = r1 ;
  }
  main()
  { int m=7, r;
   f(m, &r);printf("%d\n", r);
  }
程序运行后的输出结果是
  A)2
  B)1
  C)3
  D)0
  答案:A
41) 有以下程序
  main(int argc, char *argv[])
  { int n=0, i;
   for (i=1; i<argc; i++) n = n*10 + *argv - &#39;0&#39;;
   printf("%d\n", n);
  }
编译连接后生成可执行文件tt.exe。若运行时输入以下命令行
  tt 12 345 678
程序运行后的输出结果是
  A)12
  B)12345
  C)12345678
  D)136
  答案:D
42) 有以下程序
  int a=4;
  int f(int n)
  { int t = 0; static int a=5;
   if (n%2) {int a=6;t += a++; }
   else{int a=7;t += a++; }
   return t + a++;
  }
  main()
  { int s=a, i=0;\TAB
   for (; i<2;i++) s += f(i);
   printf("%d\n", s);
  }
程序运行后的输出结果是
  A)24
  B)28
  C)32
  D)36
  答案:B
43) 有一个名为init.txt的文件,内容如下:
  #defineHDY(A,B)A/B
  #definePRINT(Y)printf("y=%d\n",Y)
有以下程序
  #include "init.txt"
  main()
  { int a=1,b=2,c=3,d=4,k;
   k=HDY(a+c,b+d);
   PRINT(k);
  }
下面针对该程序的叙述正确的是
  A)编译出错
  B)运行出错
  C)运行结果为y=0
  D)运行结果为y=6
  答案:D
44) 有以下程序
  main()
  { char ch[ ] ="uvwxyz",*pc;
   pc=ch; printf("%c\n", *(pc+5));
  }
程序运行后的输出结果是
  A)z
  B)0
  C)元素ch[5]的地址
  D)字符y的地址
  答案:A
45) 有以下程序
  struct S{int n; int a[20]; };
  void f(struct S *p)
  { int i,j, t;
   for (i=0; i<p->n-1; i++)
    for (j=i+1; j<p->n; j++)
      if (p->a > p->a[j]) { t= p->a; p->a = p->a[j]; p->a[j] = t; }
  }
  main()
  { int i;struct S s={10, {2,3,1,6,8,7,5,4,10,9}};
   f(&s);
   for (i=0; i<s.n; i++) printf("%d,", s.a);
  }
程序运行后的输出结果是
  A)1,2,3,4,5,6,7,8,9,10,
  B)10,9,8,7,6,5,4,3,2,1,
  C)2,3,1,6,8,7,5,4,10,9,
  D)10,9,8,7,6,1,2,3,4,5,
  答案:A
46) 有以下程序
  struct S{ int n; int a[20]; };
  void f(int *a, int n)
  { int i;
   for (i=0; i<n-1; i++) a+=i;
  }
  main()
  { int i;struct S s={10, {2,3,1,6,8,7,5,4,10,9}};
   f(s.a, s.n);
   for (i=0; i<s.n; i++) printf("%d,", s.a);
  }
程序运行后的输出结果是
  A)2,4,3,9,12,12,11,11,18,9,
  B)3,4,2,7,9,8,6,5,11,10,
  C)2,3,1,6,8,7,5,4,10,9,
  D)1,2,3,6,8,7,5,4,10,9,
  答案:A
47) 有以下程序段
  typedef struct node { intdata; struct node *next; } *NODE;
  NODE p;
以下叙述中正确的是
  A)p是指向struct node结构变量的指针的指针
  B)NODE p; 语句出错
  C)p是指向struct node结构变量的指针
  D)p是struct node结构变量
  答案:C
48) 有以下程序
  main()
  { unsigned char a=2, b=4, c=5, d;
   d = a | b;d &= c;printf("%d\n", d);
  }
程序运行后的输出结果是
  A)3
  B)4
  C)5
  D)6
  答案:B
49) 有以下程序
  #include<stdio.h>
  main()
  { FILE *fp; int k, n, a[6]={1,2,3,4,5,6};
   fp = fopen("d2.dat", "w");
   fprintf(fp, "%d%d%d\n", a[0],a[1],a[2]);fprintf(fp, "%d%d%d\n",
a[3],a[4],a[5]);
   fclose(fp);
   fp = fopen("d2.dat", "r");
   fscanf(fp, "%d%d", &k, &n);printf("%d %d\n", k, n);
   fclose(fp);
  }
程序运行后的输出结果是
  A)1 2
  B)1 4
  C)123 4
  D)123 456
  答案:D
50) 有以下程序
  #include<stdio.h>
  main()
  { FILE *fp;int i, a[6]={1,2,3,4,5,6};
   fp = fopen("d3.dat", "w+b");
   fwrite(a, sizeof(int), 6, fp);
   fseek(fp, sizeof(int)*3, SEEK_SET); /* 该语句使读文件的位置指针从文件头向后移
动3个int型数据*/
   fread(a, sizeof(int), 3, fp);fclose(fp);
   for (i=0;i<6; i++) printf("%d,", a);
  }
程序运行后的输出结果是
  A)4,5,6,4,5,6,
  B)1,2,3,4,5,6,
  C)4,5,6,1,2,3,
  D)6,5,4,3,2,1,
  答案:A
二、填空题 (每空 2 分, 共 40 分)
请将每一个空的正确答案写在答题处【1】至【20】。
1) 在深度为7的满二叉树中,度为2的结点个数为【1】。
  本小题第1空答案:63
2) 软件测试分为白箱(盒)测试和黑箱(盒)测试。等价类划分法属于【2】测试。
  本小题第1空答案:黑箱 或 黑盒 或 黑箱(盒) 或 黑箱(盒)
3) 在数据库系统中,实现各种数据管理功能的核心软件称为【3】。
  本小题第1空答案:数据库管理系统 或 DBMS
4) 软件生命周期可分为多个阶段,一般分为定义阶段、开发阶段和维护阶段。编码和测试属于
【4】阶段。
  本小题第1空答案:开发 或 软件开发
5) 在结构化分析使用的数据流图(DFD)中,利用【5】对其中的图形元素进行确切解释。
  本小题第1空答案:数据字典 或 DD
6) 执行以下程序后的输出结果是 【6】。
  main()
  { int a=10;
   a=(3*5,a+4);printf("a=%d\n",a);
  }
  本小题第1空答案:a=14
7) 当执行以下程序时,输入1234567890<回车>,则其中while循环体将执行【7】 次。
  #include <stdio.h>
  main()
  { char ch;
   while((ch=getchar())==&#39;0&#39;) printf("#");
  }
  本小题第1空答案:0
8) 以下程序的运行结果是 【8】 。
  int k=0;
  void fun(int m)
  { m+=k; k+=m; printf("m=%d k=%d ",m,k++); }
  main()
  { int i=4;
   fun(i++); printf("i=%d k=%d \n",i,k);
  }
  本小题第1空答案:m=4 k=4 i=5 k=5
9) 以下程序的运行结果是 【9】 。
  main()
  { int a=2, b=7, c=5;
   switch(a>0)
   { case 1: switch(b<0)
      { case 1: printf("@"); break;
        case 2: printf("!"); break;
      }
    case 0: switch(c==5)
      { case 0: printf("*"); break;
        case 1: printf("#"); break;
        case 2: printf("$"); break;
      }
    default: printf("&");




}
printf("\n");
  }
  本小题第1空答案:#&
10) 以下程序的输出结果是 【10】 。
  #include <string.h>
  main()
  { printf("%d\n",strlen("IBM\n012\1\\")); }
  本小题第1空答案:9
11) 已定义char ch=&#39;$&#39;; int i=1, j;,执行j=!ch && i++以后,i的值为 【11】 。
  本小题第1空答案:1
12) 以下程序的输出结果是 【12】 。
  #include <string.h>
  main()
  { char a[]={&#39;\1&#39;, &#39;\2&#39;, &#39;\3&#39;, &#39;\4&#39;, &#39;\0&#39;};
   printf("%d %d\n",sizeof(a),strlen(a));
  }
  本小题第1空答案:5 4
13) 设有定义语句:int a[][3]={ {0},{1},{2} };,则数组元素a[1][2]的值是【13】 。
  本小题第1空答案:0
14) 以下程序的功能是:求出数组x中各相邻两个元素的和依次存放到a数组中,然后输出。请
填空。
  main()
  { int x[10],a[9],i;
   for(i=0; i<10; i++) scanf("%d",&x);
   for(【14】; i<10; i++ )
    a[i-1]=x+ 【15】 ;
   for(i=0; i<9; i++) printf("%d ",a);
    printf("\n");
  }
  本小题第1空答案:i=1
  本小题第2空答案:x[i-1] 或 x[-1+i]
15) 以下程序的功能是:利用指针指向三个整型变量,并通过指针运算找出三个数中的最大值,
输出到屏幕上。请填空。
  main()
  { int x, y, z, max, *px, *py, *pz, *pmax;
   scanf("%d%d%d",&x,&y,&z);
   px=&x;py=&y;pz=&z; pmax=&max;
    【16】 ;
   if(*pmax<*py) *pmax=*py;
   if(*pmax<*pz) *pmax=*pz;
   printf("max=%d\n",max);
  }
  本小题第1空答案:*pmax=*px 或 *pmax=x 或 max=x 或 max=*px
16) 以下程序的输出结果是 【17】 。
  int fun(int *x,int n)
  { if(n==0) return x[0];
else
return x[0]+fun(x+1,n-1);
  }
  main()
  { int a[]={1,2,3,4,5,6,7}; printf("%d\n",fun(a,3)); }
  本小题第1空答案:10
17) 以下程序的输出结果是 【18】 。
  #include <stdlib.h>
  main()
  { char *s1,*s2,m;
   s1=s2=(char *)malloc(sizeof(char));
   *s1=15;*s2=20;m=*s1 + *s2;
   printf("%d\n",m);
  }
  本小题第1空答案:40
18) 设有说明
  struct DATE { int year; int month; int day; };
请写出一条定义语句,该语句定义d为上述结构体类型变量,并同时为其成员year、month、day
依次赋初值2006、10、1: 【19】 。
  本小题第1空答案:struct DATE d={2006,10,1};
19) 设有定义:FILE *fw;,请将以下打开文件的语句补充完整,以便可以向文本文件
readme.txt的最后续写内容。
  fw= fopen( "readme.txt",【20】 ) ;
  本小题第1空答案:"a" 或 "a+"
一、选择题 ((1)~(10)每小题 2 分 ,(11)~(50)每小题 1 分 , 共 60 分)
下列各题 A)、B)、C)、D)四个选项中, 只有一个选项是正确的。
01) 软件是指
  A)程序
  B)程序和文档
  C)算法加数据结构
  D)程序、数据与相关文档的完整集合
  答案:D
02) 软件调试的目的是
  A)发现错误
  B)改正错误
  C)改善软件的性能
  D)验证软件的正确性
  答案:B
03) 在面向对象方法中,实现信息隐蔽是依靠
  A)对象的继承
  B)对象的多态
  C)对象的封装
  D)对象的分类
  答案:C
04) 下列叙述中,不符合良好程序设计风格要求的是
  A)程序的效率第一,清晰第二
  B)程序的可读性好
  C)程序中要有必要的注释
  D)输入数据前要有提示信息
  答案:A
05) 下列叙述中正确的是
  A)程序执行的效率与数据的存储结构密切相关
  B)程序执行的效率只取决于程序的控制结构
  C)程序执行的效率只取决于所处理的数据量
  D)以上三种说法都不对
  答案:A
06) 下列叙述中正确的是
  A)数据的逻辑结构与存储结构必定是一一对应的
  B)由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构
  C)程序设计语言中的数组一般是顺序存储结构,因此,利用数组只能处理线性结构
  D)以上三种说法都不对
  答案:D
07) 冒泡排序在最坏情况下的比较次数是
  A)
B)
C)
D)
  答案:C
08) 一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树中的总结点数为
  A)219
  B)221
  C)229
  D)231
  答案:A
09) 下列叙述中正确的是
  A)数据库系统是一个独立的系统,不需要操作系统的支持
  B)数据库技术的根本目标是要解决数据的共享问题
  C)数据库管理系统就是数据库系统
  D)以上三种说法都不对
  答案:B
10) 下列叙述中正确的是
  A)为了建立一个关系,首先要构造数据的逻辑关系
  B)表示关系的二维表中各元组的每一个分量还可以分成若干数据项
  C)一个关系的属性名表称为关系模式
  D)一个关系可以包括多个二维表
  答案:C
11) C语言源程序名的后缀是
  A).exe
  B).C
  C).obj
  D).cp
  答案:B
12) 可在C程序中用作用户标识符的一组标识符是
  A)and
_2007
  B)Date
y-m-d
  C)Hi
Dr.Tom
  D)case
Big1
  答案:A
13) 以下选项中,合法的一组C语言数值常量是
  A)028\TAB \TAB \TAB \TAB \TAB \TAB \TAB \TAB \TAB
.5e-3\TAB \TAB \TAB \TAB \TAB \TAB \TAB \TAB \TAB
-0xf
  B)12.
0Xa23
4.5e0
  C).177
4e1.5
0abc
  D)0x8A
10,000
3.e5\TAB \TAB \TAB \TAB \TAB \TAB \TAB \TAB \TAB \TAB \TAB
  答案:B
14) 以下叙述中正确的是
  A)C语言程序将从源程序中第一个函数开始执行
  B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
  C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束
  D)main可作为用户标识符,用以命名任意一个函数作为主函数
  答案:C
15) 若在定义语句:int a,b,c,*p=&c; 之后,接着执行以下选项中的语句,则能正确执行的
语句是
  A)scanf("%d",a,b,c);
  B)scanf("%d%d%d",a,b,c);\TAB
  C)scanf("%d",p);
  D)scanf("%d",&p);
  答案:C
16) 以下关于long、int和short类型数据占用内存大小的叙述中正确的是
  A)均占4个字节
  B)根据数据的大小来决定所占内存的字节数
  C)由用户自己定义
  D)由C语言编译系统决定
  答案:D
17) 若变量均已正确定义并赋值,以下合法的C语言赋值语句是
  A)x=y==5;
  B)x=n%2.5;
  C)x+n=i;
  D)x=5=4+1;
  答案:A
18) 有以下程序段
  int j; float y; char name[50];
  scanf("%2d%f%s", &j, &y, name);
当执行上述程序段,从键盘上输入55566 7777abc 后,y的值为
  A)55566.0
  B)566.0
  C)7777.0
  D)566777.0
  答案:B
19) 若变量已正确定义,有以下程序段
  i=0;
  do printf("%d, ",i); while( i++ );
  printf("%d\n",i);
其输出结果是
  A)0,0
  B)0,1
  C)1,1
  D)程序进入无限循环
  答案:B
20)
  A)if(x>=0) y=sqrt(x);
else y=sqrt(-x);
  B)y=sqrt(x);
if(x<0) y=sqrt(-x);
  C)if(x>=0) y=sqrt(x);
if(x<0) y=sqrt(-x);
  D)y=sqrt(x>=0?x :-x);
  答案:B
21) 设有条件表达式:(EXP)? i++ :j--
  A)(EXP==0)
  B)(EXP!=0)
  C)(EXP==1)
  D)(EXP!=1)
  答案:B
22) 有以下程序
  #include<stdio.h>
  main()
  { int y=9;
,则以下表达式中与(EXP)完全等价的是
for( ; y>0; y--)
  if(y%3==0) printf("%d", --y);
  }
程序的运行结果是
  A)741
  B)963
  C)852
  D)875421
  答案:C
23) 已有定义:char c; ,程序前面已在命令行中包含ctype.h文件。不能用于判断c中的字符
是否为大写字母的表达式是
  A)isupper(c)
  B)&#39;A&#39;<=c<=&#39;Z&#39;
  C)&#39;A&#39;<=c&& c <=&#39;Z&#39;
  D)c <=(&#39;z&#39;-32)&&(&#39;a&#39;-32)<= c
  答案:B
24) 有以下程序
  #include<stdio.h>
  main()
  { int i,j, m=55;
    for(i=1;i<=3;i++)
    for(j=3; j<=i; j++) m=m%j;
      printf("%d\n ", m);
  }
程序的运行结果是
  A)0
  B)1
  C)2
  D)3
  答案:B
25) 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是
  A)函数的实参和其对应的形参共占同一存储单元
  B)形参只是形式上的存在,不占用具体存储单元
  C)同名的实参和形参占同一存储单元
  D)函数的形参和实参分别占用不同的存储单元
  答案:D
26) 已知字符&#39;A&#39;的ASCII代码值是65,字符变量c1的值是&#39;A&#39;,c2的值是&#39;D&#39;。执行语句
printf("%d, %d", c1, c2-2 ); 后,输出结果是
  A)A,B
  B)A,68
  C)65,66
  D)65,68
  答案:C
27) 以下叙述中错误的是
  A)改变函数形参的值,不会改变对应实参的值
  B)函数可以返回地址值
  C)可以给指针变量赋一个整数作为地址值
  D)当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL
  答案:C
28) 以下正确的字符串常量是
  A)"\\\"
  B)&#39;abc&#39;
  C)Olympic Games
  D)""
  答案:D
29) 设有定义:char p[]={&#39;1&#39;, &#39;2&#39;, &#39;3&#39;},*q=p; ,以下不能计算出一个char型数据所占字
节数的表达式是
  A)sizeof(p)
  B)sizeof(char)
  C)sizeof(*q)
  D)sizeof(p[0])
  答案:A
30) 有以下函数
  int aaa(char *s)
  { char *t=s;
    while(*t++);
    t--;
    return(t-s);
  }
以下关于aaa函数的功能的叙述正确的是
  A)求字符串s的长度
  B)比较两个串的大小
  C)将串s复制到串t
  D)求字符串s所占字节数
  答案:A
31) 若有定义语句:int a[3][6]; ,按在内存中的存放顺序,a数组的第10个元素是
  A)a[0][4]
  B)a[1][3]
  C)a[0][3]
  D)a[1][4]
  答案:B
32) 有以下程序
  #include<stdio.h>
  void fun(char **p)
  { ++p;printf("%s\n",*p); }
  main()
  { char *a[]={"Morning", "Afternoon", "Evening","Night"};
    fun(a);
  }
程序的运行结果是
  A)Afternoon
  B)fternoon
  C)Morning
  D)orning
  答案:A
33) 若有定义语句:int a[2][3],*p[3]; ,则以下语句中正确的是
  A)p=a;
  B)p[0]=a;
  C)p[0]=&a[1][2];
  D)p[1]=&a;
  答案:C
34) 有以下程序
  #include<stdio.h>
  void fun(int *a, int n) /* fun函数的功能是将a所指数组元素从大到小排序 */
  { int t, i, j;
    for (i=0; i<n-1;i++)
      for (j=i+1; j<n; j++)
       if (a<a[j]) { t=a; a=a[j]; a[j]=t; }
  }
  main()
  { int c[10]={1,2,3,4,5,6,7,8,9,0},i;
    fun(c+4, 6);
    for (i=0;i<10; i++) printf("%d,", c);
    printf("\n");
  }
程序的运行结果是
  A)1,2,3,4,5,6,7,8,9,0,
  B)0,9,8,7,6,5,1,2,3,4,
  C)0,9,8,7,6,5,4,3,2,1,
  D)1,2,3,4,9,8,7,6,5,0,
  答案:D
35) 有以下程序
  #include <stdio.h>
  int fun( char s[])
  { int n=0;
    while(*s <= &#39;9&#39;&&*s >=&#39;0&#39;) { n=10*n+*s-&#39;0&#39; ; s++; }
    return (n);
  }
  main()
  { char s[10]={ &#39;6&#39;, &#39;1&#39;, &#39;*&#39;, &#39;4&#39;, &#39;*&#39;, &#39;9&#39;, &#39;*&#39;, &#39;0&#39;, &#39;*&#39;};
    printf("%d\n",fun(s));
  }
程序的运行结果是
  A)9
  B)61490
  C)61
  D)5
  答案:C
36) 当用户要求输入的字符串中含有空格时,应使用的输入函数是
  A)scanf()
  B)getchar()
  C)gets()
  D)getc()
  答案:C
37) 以下关于字符串的叙述中正确的是
  A)C语言中有字符串类型的常量和变量
  B)两个字符串中的字符个数相同时才能进行字符串大小的比较
  C)可以用关系运算符对字符串的大小进行比较
  D)空串一定比空格打头的字符串小
  答案:D
38) 有以下程序
  #include<stdio.h>
  void fun(char *t , char *s)
  { while(*t!=0) t++;
    while( (*t++ = *s++ )!=0 ) ;
  }
  main()
  { char ss[10]="acc",aa[10]="bbxxyy";
    fun(ss, aa);printf("%s,%s\n", ss,aa);
  }
程序的运行结果是
  A)accxyy, bbxxyy
  B)acc, bbxxyy
  C)accxxyy, bbxxyy
  D)accbbxxyy, bbxxyy
  答案:D
39) 有以下程序
  #include<stdio.h>
  #include<string.h>
  void fun(char s[][10], int n)
  { char t;int i,j;
    for (i=0; i<n-1; i++)
     for (j=i+1; j<n; j++)
     /* 比较字符串的首字符大小,并交换字符串的首字符 */
      if (s[0] > s[j][0]) { t = s[0]; s[0] = s[j][0]; s[j][0] = t;}
  }
  main()
  { char ss[5][10]={"bcc", "bbcc", "xy", "aaaacc", "aabcc"};
    fun(ss, 5);printf("%s,%s\n", ss[0],ss[4]);
  }
程序的运行结果是
  A)xy,aaaacc
  B)aaaacc,xy
  C)xcc,aabcc
  D)acc,xabcc
  答案:D
40) 在一个C源程序文件中所定义的全局变量,其作用域为
  A)所在文件的全部范围
  B)所在程序的全部范围
  C)所在函数的全部范围
  D)由具体定义位置和extern说明来决定范围
  答案:D
41) 有以下程序
  #include<stdio.h>
  inta=1;
  int f(int c)
  { static int a=2;
    c = c+1;
    return (a++) + c;
  }
  main()
  { int i, k=0;
    for(i=0;i<2;i++) { int a=3; k += f(a); }
    k +=a;
    printf("%d\n",k);
  }
程序的运行结果是
  A)14
  B)15
  C)16
  D)17
  答案:A
42) 有以下程序
  #include <stdio.h>
  void fun(int n, int *p)
  { int f1,f2;
    if(n==1||n==2) *p=1;
    else
    { fun(n-1,&f1);fun(n-2,&f2);
      *p=f1+f2;
    }
  }
  main()
  { int s;
    fun(3,&s);printf("%d\n", s );
  }
程序的运行结果是
  A)2
  B)3
  C)4
  D)5
  答案:A
43) 若程序中有宏定义行:#define N100 则以下叙述中正确的是
  A)宏定义行中定义了标识符N的值为整数100
  B)在编译程序对C源程序进行预处理时用100替换标识符N
  C)对C源程序进行编译时用100替换标识符N
  D)在运行时用100替换标识符N
  答案:B
44) 以下关于typedef的叙述错误的是
  A)用typedef可以增加新类型
  B)typedef只是将已存在的类型用一个新的名字来代表
  C)用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名
  D)用typedef为类型说明一个新名,通常可以增加程序的可读性
  答案:A
45) 有以下程序
  #include <stdio.h>
  struct tt
  { int x; struct tt *y; } *p;
    struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};
  main()
  { int i;
    p=a;
    for(i=1; i<=2; i++) { printf("%d,", p->x ); p=p->y; }
  }
程序的运行结果是
  A)20,30,
  B)30,17
  C)15,30,
  D)20,15,
  答案:D
46) 有以下程序
  #include<stdio.h>
  #include<string.h>
  typedef struct { char name[9]; char sex; float score[2]; } STU;
  STU f(STU a)
  { STU b={"Zhao", &#39;m&#39;, 85.0, 90.0};int i;
    strcpy(a.name, b.name);
    a.sex = b.sex;
    for (i=0; i<2; i++) a.score = b.score;
    returna;
  }
  main()
  { STU c={"Qian", &#39;f&#39;, 95.0, 92.0}, d;
    d=f(c);printf("%s,%c,%2.0f,%2.0f\n", d.name, d.sex, d.score[0],
d.score[1]);
  }
程序的运行结果是
  A)Qian,f,95,92
  B)Qian,m,85,90
  C)Zhao,m,85,90
  D)Zhao,f,95,92
  答案:C
47) 设有以下定义
  union data
  { int d1;float d2; } demo;
则下面叙述中错误的是
  A)变量demo与成员d2所占的内存字节数相同
  B)变量demo中各成员的地址相同
  C)变量demo和各成员的地址相同
  D)若给demo.d1赋99后,demo.d2中的值是99.0
  答案:D
48) 有以下程序
  #include<stdio.h>
  main()
  { int a=1, b=2, c=3, x;
    x=(a^b)&c;printf("%d\n",x);
  }
程序的运行结果是
  A)0
  B)1
  C)2
  D)3
  答案:D
49) 读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中buffer代表的是
  A)一个文件指针,指向待读取的文件
  B)一个整型变量,代表待读取的数据的字节数
  C)一个内存块的首地址,代表读入数据存放的地址
  D)一个内存块的字节数
  答案:C
50) 有以下程序
  #include<stdio.h>
  main()
  { FILE *fp;int a[10]={1,2,3,0,0}, i;
    fp = fopen("d2.dat", "wb");
    fwrite(a, sizeof(int), 5, fp);
    fwrite(a, sizeof(int), 5, fp);
    fclose(fp);
    fp = fopen("d2.dat", "rb");
    fread(a, sizeof(int), 10, fp);
    fclose(fp);
    for (i=0; i<10; i++) printf("%d,", a);
  }
程序的运行结果是
  A)1,2,3,0,0,0,0,0,0,0,
  B)1,2,3,1,2,3,0,0,0,0,
  C)123,0,0,0,0,123,0,0,0,0,
  D)1,2,3,0,0,1,2,3,0,0,
  答案:D
二、填空题 (每空 2 分, 共 40 分)
请将每一个空的正确答案写在答题处【1】至【20】。
1) 软件需求规格说明书应具有完整性、无歧义性、正确性、可验证性、可修改性等特性,其中
最重要的是【1】。
  本小题第1空答案:正确性
2) 在两种基本测试方法中,【2】测试的原则之一是保证所测模块中每一个独立路径至少要执
行一次。
  本小题第1空答案:白盒 或 白箱 或 白盒子 或 White Box
3) 线性表的存储结构主要分为顺序存储结构和链式存储结构。队列是一种特殊的线性表,循环
队列是队列的【3】存储结构。
  本小题第1空答案:顺序
4)
  本小题第1空答案:ACBDFEHGP
5) 在E-R图中,矩形表示【5】。
  本小题第1空答案:实体集 或 实体 或 Entity
6) 执行以下程序时输入1234567<CR>,则输出结果是 【6】 。
  #include<stdio.h>
  main()
  { int a=1,b;
    scanf("%2d%2d",&a,&b); printf("%d %d\n",a,b);
  }
  本小题第1空答案:12 34
7) 以下程序的功能是:输出a、b、c三个变量中的最小值。请填空。
  #include <stdio.h>
  main( )
  { int a,b,c,t1,t2;
    scanf("%d%d%d",&a,&b,&c);
    t1= a<b ? 【7】 ;
    t2= c <t1 ? 【8】 ;
    printf("%d\n", t2 );
  }
  本小题第1空答案:a:b
  本小题第2空答案:c:t1
8) 以下程序的输出结果是 【9】 。
  # include<stdio.h>
  main()
  { int n=12345, d;
    while(n!=0){ d=n%10; printf("%d", d); n/=10; }
  }
  本小题第1空答案:54321
9) 有以下程序段,且变量已正确定义和赋值
  for(s=1.0, k=1; k<=n; k++) s=s+1.0/(k*(k+1));
  printf("s=%f\n\n", s);
请填空,使下面程序段的功能与之完全相同
  s=1.0; k=1;
  while( 【10】 ) { s=s+1.0/(k*(k+1)); 【11】 ; }
  printf("s=%f\n\n", s);
  本小题第1空答案:k<=n 或 n>=k
  本小题第2空答案:k++
10) 以下程序的输出结果是 【12】 。
  #include<stdio.h>
  main()
  { int i;
    for(i=&#39;a&#39;; i<&#39;f&#39;; i++,i++) printf("%c",i - &#39;a&#39; + &#39;A&#39;);
    printf("\n");
  }
  本小题第1空答案:ACE
11) 以下程序的输出结果是 【13】 。
  #include <stdio.h>
  #include <string.h>
  char *fun(char *t)
  { char *p=t;
    return (p+strlen(t)/2);
  }
  main()
  { char *str="abcdefgh";
    str=fun(str);
    puts(str);
  }
  本小题第1空答案:efgh
12) 以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同)中找出最大最小数,将
其中最小的数与第一个数对换,把最大的数与最后一个数对换。请填空。
  # include<stdio.h>
  void f (int x[], int n)
  { int p0, p1, i, j, t, m;
    i=j=x[0];p0=p1=0;
    for(m=0;m<n;m++)
    { if ( x[m]>i ){ i=x[m]; p0=m; }
      else if( x[m]<j ) { j=x[m]; p1=m; }
    }
    t=x[p0]; x[p0]= x[n-1]; x[n-1] =t;
    t= x[p1]; x[p1]= 【14】 ; 【15】 =t;
  }
  main()
  { int a[10], u;
for(u=0;u<10;u++)
f(a, 10);
for(u=0;u<10;u++)
printf("\n");
scanf("%d", &a);
printf(" %d", a);
  }
  本小题第1空答案:x[0]
  本小题第2空答案:x[0]
13) 以下程序统计从终端输入的字符中大写字母的个数,num[0]中统计字母A的个数,num[1]
中统计字母B的个数,其它依次类推。用#号结束输入,请填空。
  #include <stdio.h>
  #include < ctype.h >
  main()
  { int num[26]={0}, i;char c;
    while((【16】) != &#39;#&#39;)
     if(isupper(c)) num [c – &#39;A&#39; ]+= 【17】;
    for(i=0; i<26; i++)
     printf("%c : %d\n ",i+&#39;A&#39;, num);
  }
  本小题第1空答案:c=getchar()
  本小题第2空答案:1
14) 执行以下程序的输出结果是 【18】 。
  #include <stdio.h>
  main()
  { int i, n[4]={1};
    for(i=1;i<=3;i++)
    { n=n[i-1]*2+1; printf("%d ",n); }
  }
  本小题第1空答案:3 7 15
15) 以下程序的输出结果是 【19】 。
  #include <stdio.h>
  #defineM5
  #defineNM+M
  main()
  { int k;
    k = N*N*5;printf("%d\n",k);
  }
  本小题第1空答案:55
16) 函数min()的功能是:在带头结点的单链表中查找数据域中值最小的结点。请填空
  #include<stdio.h>
  struct node
  { int data;
    struct node*next;
  };
  int min(struct node *first) /* 指针first为链表头指针 */
  { struct node*p;int m;
    p=first->next;m=p->data; p=p->next;
    for( ; p!=NULL; p= 【20】 )
  if(p->data<m )
return m;
m=p->data;
}
本小题第1空答案:p->next
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩

相关帖子

2#
发表于 2008-4-4 18:06 | 只看该作者
学校里好像基本上都考浙江省的吧
回复 支持 反对

使用道具 举报

3#
发表于 2008-4-4 18:17 | 只看该作者
hehe,LZ和我是一路的。。。。。年年的上机题不都是 南开100题吗
回复 支持 反对

使用道具 举报

4#
发表于 2008-4-4 18:22 | 只看该作者
LZ你这套题是2004年的全国二级真题,我今天还做过前面的33道选择题。。。。真巧,应该没几道12号要考的题。。。。反正上机考试记牢南开100题是绝对错不了的。。每年的上机题都是上面的
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2008-4-5 03:34 | 只看该作者
这样啊  
   我12号也考  
   那这个星期还要看看南开的题了
        都不知道  
    论坛上也没人说
         看来论坛上有必要多搞点这个了
回复 支持 反对

使用道具 举报

6#
发表于 2008-4-5 09:46 | 只看该作者
因为大部分人都是考计算机浙江省的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋| 碧海潮声大学生网  

Copyright © 2001-2013 Comsenz Inc.   All Rights Reserved.

Powered by Discuz! X3.2( 浙ICP备11026473号 )

快速回复 返回顶部 返回列表