(总分96,考试时间90分钟)
一、选择题
下列各题A)、B)、C)、D)4个选项中,只有1个选项是正确的。
1. 有以下程序:
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
2. 若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是( )。
A. ++x,y=x– B. x+1=y
C. x=x+10=x+y D. double(x)/10
3. 有以下程序段:
main()

int a=5,*b,**c;
c=&b; b=&a;
……

程序在执行了“c=&b; b=&a;”语句后,表达式“**c”的值是( )。
A. 变量a的地址 B. 变量b中的值
C. 变量a中的值 D. 变量b的地址
4. 下列叙述中正确的是( )。
A. break语句只能用于switch语句
B. 在switch语句中必须使用default
C. break语句必须与switch语句中的case配对使用
D. 在switch语句中,不一定使用break语句
5. 有以下程序:
#include <stdio.h>
int fun(char s[])
int n=0;
while(*s<=’9’&&*s>=’0′) n=10*n+*s-‘0’;s++;
return(n);

main()
char s[10]=’6′,’1′,’*’,’4′,’*’,’9′,’*’,’0′,’*’;
printf(“%d\n”,fun(s));

程序的运行结果是( )。
A. 9 B. 61490
C. 61 D. 5
6. 有以下程序;
main()
char s[]=”aaiou”,*ps;
ps=s; printf(“%c\n”,*ps+4);

程序运行后的输出结果是( )。
A. a B. e
C. u D. 元素s[4]的地址
7. 数据库技术的根本目标是要解决数据的( )。
A. 存储问题 B. 共享问题
C. 安全问题 D. 保护问题
8. 有以下程序:
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
9. 有以下程序:
#include <stdio.h>
main()

FILE *fp;
int i,k,n;
fp=fopen(“data.dar”,”w+”);
for(i=1;i<6;i++)

fprintf(fp,”%d “,i);
if(i%3==0)
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
10. 以下不能正确计算代数式sin2()值的C语言表达式是( )。
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)
11. 以下程序的输出结果是( )。
main()
int a=0,i;
for(i=1;i<5;i++)
switch(i)
casc 0:
case 3:a+=2;
case 1:
case 2:a+=3;
default:a+=5;

printf(“%d\n”,
A. ;
&nbsp 12. 有以下程序:
main()
char str[]=”xyz”,*ps=str;
while(*ps) ps++;
for(ps–;ps-str>=0;ps–) puts(ps);

执行后输出结果是( )。
A. yz
xyZ
B. z
yz
C. z
yz
D. x
xy
xyz xyz
13. 下列叙述中正确的是( )。
A. 在面向对象的程序设计中,各个对象之间具有密切的联系
B. 在面向对象的程序设计中,各个对象都是公用的
C. 在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小
D. 上述3种说法都不对
14. 若有以下函数首部:
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*);
15. 以下程序中,while循环的循环次数是( )。
main()

int i=0;
while(i<10)

if(i<1) continue;
if(i==5) break;
i++;

……

A. 1 B. 10
C. 6 D. 死循环,不能确定次数
16. 可在C程序中用作用户标识符的一组标识符是( )。
A. and
_2007
B. Date
y-m-d
C. Hi
Dr.Tom
D. case
Bigl
17. 在关系数据库中,用来表示实体之间联系的是( )。
A. 树结构 B. 网结构
C. 线性表 D. 二维表
18. 有以下程序段:
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
19. 有定义语句:“int x,y;”,若要通过“scanf(“%d,%d”,&x,&y);”语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是( )。
A. 11 12<回车> B. 11, 12<回车>
C. 11,12<回车> D. 11,<回车>
12<回车>
20. 有以下程序:
main()
int c=35; printf(“%d\n”,c&c);
程序运行后的输出结果是( )。
A. 0 B. 70
C. 35 D. 1
21. 设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是( )。
A. c1^c2 B. c1&c2
C. ~c2 D. c1|c2
22. 有以下程序:
main()
int y=10;
while(y–); printf(“y=%d\n”,y);

程序执行后的输出结果是( )。
A. y=0 B. y=-1
C. y=1 D. while构成无限循环
23. 有以下程序:
#include <stdio.h>
main()
FILE *fp; int i,k=0, n=0;
fp=fopen(“d1.dat”,”w”);
for(i=1;i<4;i++) fprintf(fp,”%d”,i);
fclose(fp);
fp=fopen(“d1.dat”,”r”);
fscanf(fp,”%d%d”,&k,&n); printf(“%d%d\n”,k,n);
fclose(fp);

执行后输出结果是( )。
A. 1 2 B. 123 0
C. 1 23 D. 0 0
24. 有以下程序:
point(char *p) p+=3;
main()
char b[4]=’a’,’b’,’c’,’d’, *p=b;
point(p);
printf(“%c\n”,*p);

程序运行后的输出结果是( )。
A. a B. b
C. c D. d
25. 以下选项中非法的表达式是( )。
A. 0<=x<100 B. i=j==0
C. (char)(65+3) D. x+1=x+1
26. 设有如下3个关系表:

下列操作中正确的是( )。

27. 有以下程序:
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[i]<a[j])

t=a[i];
a[i]=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[i]);
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,
28. 以下叙述中错误的是( )。
A. C程序必须由一个或一个以上的函数组成
B. 函数调用可以作为一个独立的语句存在
C. 若函数有返回值,必须通过咖语句返回
D. 函数形参的值也可以传回给对应的实参
29. 下面程序的功能是输出以下形式的金字塔图案:
*
***
*****
*******
main()
int i,j;
for(i=1;i<=4;i++)
for(j=1;j<=4-i;j++)printf(” “);
for(j=1;j<=( );j++)printf(“*”);
printf(“\n”);

在下划线处应填入的是( )。
A. i B. 2*1-1
C. 2*i+1 D. i+2
30. 有定义语句: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);
31. 已有定义:char a[]=”xyz”,b[]=’x’,’y’,’z’;,以下叙述中正确的是( )。
A. 数组a和b的长度相同 B. a数组长度小于b数组长度
C. a数组长度大于b数组长度 D. 以述说法都不对
32. 一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树中的总结点数为( )。
A. 221 B. 219
C. 231 D. 229
33. 程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量s总是作为头指针指向链表的第一个结点。

若有以下程序段:
q=s; s=s->next; p=s;
while (p->next) p=p->next;
p->next=q; q->next=NULL;
该程序段实现的功能是( )。

34. 在结构化程序设计中,模块划分的原则是( )。
A. 各模块应包括尽量多的功能 B. 各模块的规模应尽量大
C. 各模块之间的联系应尽量紧密 D. 模块内具有高内聚度、模块间具有低耦合度
35. 设有定义: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-
36. 有以下程序:
#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
37. 有以下程序:
main()

char a1=’M’,a2=’m’;
printf(“%c\n”,(a1,a2));

以下叙述中正确的是( )。
A. 程序输出大写字母M B. 程序输出小写字母m
C. 格式说明符不足,编译出错 D. 程序运行时产生出错信息
38. 有以下程序:
#include <string.h>
main()

char str[][20]=”Hello”,”beijing”,*p=str;
ptintf(“%\n”,strlen(p+20));

程序运行后的输出结果是( )。
A. 0 B. 5
C. 7 D. 20
39. 有以下计算公式:

若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是( )。

40. 若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式a<b?a:c<d?c:d的值是( )。
A. 1 B. 2
C. 3 D. 4
41. 下面选项中不属于面向对象程序设计特征的是( )。
A. 继承性 B. 多态性
C. 类比性 D. 封装性
42. 若有一些定义和语句:
#include <stdio.h>
int a=4,b=3,*p,*q,*w;
p=&a; q=&b; w=q; q=NULL;
则以下选项中错误的语句是( )。
A. *q=0; B. w=p;
C. *p=a; D. *p=*w;
43. 以下不能定义为用户标识符的是( )。
A. scanf B. Void
C. _3com_ D. int
44. 以下叙述中正确的是( )。
A. 构成C程序的基本单位是函数
B. 可以在一个函数中定义另一个函数
C. main()函数必须放在其他函数之前
D. 所有被调用的函数一定要在调用之前进行定义
45. 以下数组定义中错误的是( )。
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;
46. 以下程序调用fmdmax函数返回数组中的量大值:
findmax(int *a,int n)
int *p,*s;
for(p=a,s=a;p-a<n;p++)
if( )s=p;
return(*s);

main()
int x[5]=12,21,13,6,18;
printf(“%d\n”,findmax(x,5));

在下划线处应填入的是( )。
A. p>s B. *p>*s
C. a[p]>a[s] D. p-a>p-s
47. 有以下程序;
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[i]);

程序运行后的输出结果是( )。
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,
48. 下列叙述中错误的是( )。
A. 在数据库系统中,数据的物理结构必须与逻辑结构一致
B. 数据库技术的根本目标是要解决数据的共享问题
C. 数据库设计是指在已有数据库管理系统的基础上建立数据库
D. 数据库系统需要操作系统的支持
49. 某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为( )。
A. n+1 B. n-1
C. 2n D. n/2
50. 下列选项中不属于结构化程序设计方法的是( )。
A. 自顶向下 B. 逐步求精
C. 模块化 D. 可复用
二、填空题
1. 设一棵完全二叉树共有700个结点,则在该二叉树中有 【1】 个叶子结点。
2. 在面向对象方法中, 【2】 描述的是具有相似属性与操作的一组对象。
3. 诊断和改正程序中错误的工作通常称为 【3】 。
4. 对下列二叉树进行中序遍历的结果为 【4】 。

5. 在结构化分析使用的数据流图(DFD)中,利用 【5】 对其中的图形元素进行确切解释。
6. 执行以下程序后的输出结果是 【6】 。
main()
int a=10;
a=(3*5,a+4); printf(“a=%d\n”,a);

7. 以下程序运行后的输出结果是 【7】 。
main()
int m=011,n=11;
printf(“%d %d\n”,++m,n++);

8. 有以下程序:
main()
int t=1,i=5;
for(; i>=0;i–) t*=i;
printf(“%d\n”,t);

执行后输出结果是 【8】 。
9. 以下程序的运行结果是 【9】 。
main()
int a=2,b=7,c=5;
switch(a>0)

case 1:
switch (b<0)
case 1:printf(“@”); break;
case 2:pnntf(“!”); break;

case 0:
switch (c==5)
case 0:pnntf(“*”); break;
case 1:printf(“#”); break;
case 2:printf(“$”); break;

default: printf(“&”);

printf(“\n”);

有以下程序段,且变量已正确定义和赋值。
for(s=1.0, k=1; k<=n;k++) s=s+1.0/(k*(k/1));
printf(“s=%f\n\”,s);
请填空,使下面程序段的功能与之完全相同。
s=1.0; k=1;
while( 【10】 ) s=s+1.0/(k*(k+1)); 【11】 ;
printf(“s-=%f\n\n”,s);
10. 以下程序的输出结果是 【12】 。
#include <stdio.h>
main()
int i;
for(i-‘a’; i<’f’; i++,i++) printf(“%c”,i-‘a’+’A’);
printf(“\n”);

11. 函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
其构成规律是:
①第0列元素和主对角线元素均为1。
②其余元素为其左上方和正上方元素之和。
③数据的个数每行递增1。
请将程序补充完整。
#define N 6
void yanghui(int x[N][N])
int i,j;
x[O][0]=1;
for(i=1;i<N;i++)
x[i][0]= 【13】 =1;
for(j=1;j<i;j++)
x[i][j]= 【14】 ;

)
12. 以下sstrcpy()函数实现字符串复制,即将t所指字符串复制到s所指向内存空间中,形成一个新的字符串s。请填空。
void sstrcpy(char *s,char *t)
while(*s++= 【15】 );
main()
char str1[100],str2[]=”abcdefgh”;
sstrcpy(str1,str2);
printf(“%s\n”,str1);

13. 请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。
【16】 (double,double);
main()
double x,y;
scanf(“%1f%1f”,&x,&y);
printf(“%1f\n”,max(x,y));

double max(double a,double B)
return(a>b ? a:b);
14. 以下程序的功能是输入任意整数给n后,输出n行由大写字母A开始构成的三角形字符阵列图形。例如,输入整数5时(注意:n不得大于10),程序运行结果如下:
ABCDE
FGHI
JKL
MN
O
请填空完成该程序。
main()
int i,j,n; char ch=’A’;
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”0);

设有说明;
struct DATE int year; int month; int day;
请写出一条定义语句,该语句定义d为上述结构体类型变量,并同时为其成员year、month、day依次赋初值2006、10、1: 【19】 。
15. 以下程序的功能是将宁符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abcl23edf4568h,执行程序后输出:123456。请填空。
#include <stdio.h>
#include <ctype.h>
main()
char s[80],d[80]; int i,j;
gets(s);
for(i=j=0;s[i]!=’\0′;i++)
if( 【20】 ) d[j]=s[i];j++;
d[j]=’\0′;
puts(d);