一、选择题((1)~(40)每题1分,(41)~(50)每题2分,共60分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,将正确选项涂在答题卡的相应位置上,答在试卷上不得分。
(1)栈和队列的共同特点是 。
A.都是先进先出 B.都是先进后出
C.只允许在端点处插入和删除元素 D.没有共同点
(2)已知如下图所示的二叉树的后序遍历序列是dabec,中序遍历序列是debac,则它的前序遍历序列是 。
A.acbed B.decab
C.deabc D.cedba
(3)链表不具有的特点是 。
A.不必事先估计存储空间 B.可随机访问任意一个元素
C.插入、删除不需要移动元素 D.所需空间与线性表长度成正比
(4)结构化程序设计的三种结构是 。
A.顺序结构、选择结构、转移结构
B.分支结构、等价结构、循环结构
C.多分支结构、赋值结构、等价结构
D.顺序结构、选择结构、循环结构
(5)为了提高测试的效率,应该 。
A.随机选取测试数据
B.选取一切可能的输入数据作为测试数据
C.在完成编码以后,制定软件的测试计划
D.集中处理那些错误群集的程序
(6)算法的时间复杂度是指 。
A.执行算法程序所需要的时间 B.算法程序的长度
C.算法执行过程中所需要的基本运算次数 D.算法程序中的指令条数
(7)软件生命周期中,所花费用最多的阶段是 。
A.详细设计 B.软件编码 C.软件测试 D.软件维护
(8)数据库管理系统DBMS中,用来定义模式、内模式和外模式的语言为 。
A.C B.Basic C.DDL D.DML
(9)以下有关数据库的描述中,正确的是 。
A.数据库是一个DBF文件 B.数据库是一个关系
C.数据库是一个结构化的数据集合 D.数据库是一组文件
(10)以下有关数据库的描述中,正确的是 。
A.数据处理是将信息转化为数据的过程
B.数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变
C.关系中的每一列称为元组,一个元组就是一个字段
D.如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字
(11)以下叙述中,正确的是 。
A.构成C语言程序的基本单位是函数
B.可以在一个函数中定义另一个函数
C.main( )函数必须放在其他函数之前
D.所有被调用的函数一定要在调用之前进行定义
(12)以下选项中,合法的实型常数是 。
A.5E2.0 B.E-3 C..2E0 D.1.3E
(13)以下选项中,合法的用户标识符是 。
A.long B._2Test C.3Dmax D.A.dat
(14)已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常量‘\101’是 。
A.字符A B.字符a C.字符e D.非法的常量
(15)以下选项中,非法的赋值语句是 。
A.n=(i=2,++i); B.j++; C.++(i+1); D.x=j>0;
(16)设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是 。
A.6.500000 B.6
C.5.500000 D.6.000000
(17)已知i、j、k均为int型变量,若从键盘上输入1,2,3<CR>,使i的值为1,j的值为2,k的值为3,则以下选项中,正确的输入语句是 。
A.scanf("%2d%2d%2d",&i,&j,&k);
B.scanf("%d %d %d",&i,&j,&k);
C.scanf("%d,%d,%d",&i,&j,&k);
D.scanf("i=%d,j=%d,k=%d",&i,&j,&k);
(18)与数学式对应的C语言表达式是 。
A.3*x^n(2*x-1) B.3*x**n(2*x-1)
C.3*pow(x,n)*(1/(2*x-1)) D.3*pow(n,x)/(2*x-1)
(19)设有定义语句long x=-123456L;,则以下能够正确输出变量x值的语句是 。
A.printf("x=%d\n",x); B.printf("x=%1d\n",x);
C.printf("x=%8dL\n",x); D.printf("x=%LD\n",x);
(20)以下程序的输出结果是 。
main()
{
int k=2,i=2,m;
m=(k+=i*=k);
printf("%d,%d\n",m,i);
}
A.8,6 B.8,3 C.6,4 D.7,4
(21)若已有定义语句int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是 。
A.6 B.0 C.2 D.1
(22)利用函数,以下程序片段中,不能根据x值正确计算出y值的是
。
A.if(x>0) y=1; B.y=0;
else if(x==0) y=0; if(x>0) y=1;
else y=-1; else if(x<0) y=-1;
C.y=0; D.if(x>=0)
if(x>=0); if(x>0) y=1;
if(x>0) y=1; else y=0;
else y=-1; else y=-1;
(23)以下选项中,与k=n++等价的表达式是 。
A.k=n,n=n+1 B.n=n+1,k=n C.k=++n D.k+=n+1
(24)以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出。程序如下:
main()
{
int n,k;
float score,sum,ave;
sum=0.0;
for(n=1;n<=10;n++)
{
for(k=1;k<=4;k++)
{
scanf("%f",&score);
sum+=score;
}
ave=sum/4.0;
printf("NO%d:%f\n",n,ave);
}
}
上述程序运行后,结果不正确。调试过程中,发现有一条语句出现在程序中的位置不正确,这条语句是 。
A.sum=0.0; B.sum+=score;
C.ave=sun/4.0; D.printf("NO%d:%f\n",n,ave);
(25)有以下程序片段:
int n=0,p;
do
{
scanf("%d",&p);
n++;
} while(p!=12345&&n<3);
此处do...while循环的结束条件是 。
A.P的值不等于12345,并且n的值小于3
B.P的值等于12345,并且n的值大于等于3
C.P的值不等于12345,或者n的值小于3
D.P的值等于12345,或者n的值大于等于3
(26)以下程序的输出结果是 。
main()
{
int a=15,b=21,m=0;
switch(a%3)
{
case 0: m++; break;
case 1: m++;
switch(b%2)
{
default: m++;
case 0: m++; break;
}
}
printf("%d\n",m);
}
A.1 B.2 C.3 D.4
(27)C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是 。
A.void B.int C.float D.double
(28)若有定义语句int n=2,*p=&n,*q=p;,则以下非法的赋值语句是 。
A.p=q; B.*p=*q; C.n=*q; D.p=n;
(29)以下程序的输出结果是 。
float fun(int x,int y)
{
return (x+y);
}
main()
{
int a=2,b=5,c=8;
printf("%3.0f\n",fun fun(a+c,b),a-c));
}
A.编译出错 B.9 C.21 D.9.0
(30)以下程序的输出结果是 。
void fun(char *c,int d)
{
*c=*c+1; d=d+1;
printf("%c,%c,",*c,d);
}
main()
{
char a='A',b='a';
fun(&b,a); printf("%c,%c\n",a,b);
}
A.B,a,B,a B.a,B,a,B C.A,b,A,b D.b,B,A,b
(31)以下程序中,函数sort( )的功能是对a所指数组中的数据进行由大到小的排序。
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[3],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.10,9,8,7,6,5,4,3,2,1,
C.1,2,3,8,7.6.5.4.9,10 D.1,2,10,9,8,7,6,5,4,3
(32)以下程序的输出结果是 。
int f(int n)
{
if(n==1) return 1;
else return f(n-1)+1;
}
main()
{
int i,j=0;
for(i=1;i<3;i++)
j+=f(i);
printf("%d\n",j);
}
A.4 B.3 C.2 D.1
(33)以下程序的输出结果是 。
main()
{
char a[]={'a','b','c','d','e','f','g','h','\0'};
int i,j;
i=sizeof(a);
j=strlen(a);
printf("%d,%d\b",i,j);
}
A.9,9 B.8,9 C.1,8 D.9,8
(34)以下程序中,函数reverse( )的功能是将a所指数组中的内容进行逆置。
void reverse(int a[],int n)
{
int i,t;
for(i=0;i<n/2;i++)
{ t=a[i]; a[i]=a[n-1-i]; a[n-1-i]=t; }
}
main()
{
int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;
reverse(b,8);
for(i=6;i<10;i++)
s+=b[i];
printf("%d\n",s);
}
则以上程序的输出结果是 。
A.22 B.10 C.34 D.30
(35)以下程序的输出结果是 。
main()
{
int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};
int i,s=0;
for(i=0;i<4;i++)
s+=aa[i][1];
printf("%d\n",s);
}
A.11 B.19 C.13 D.20
(36)以下程序的输出结果是 。
#include <string.h>
main()
{
char *p="abcde\Ofghjik\0";
printf("%d\n",strlen(p));
}
A.12 B.15 C.6 D.5
(37)若程序中头文件typel.h 的内容是:
#define N 5
#define M1 N*3
则以下程序的输出结果是: 。
#include <stdio.h>
#include"typel.h"
#define M2 N*2
main()
{
int i;
i=M1+M2;
printf("%d\n",i);
}
A.10 B.20 C.25 D.30
(38)以下程序的输出结果是 。
#include <stdio.h>
main()
{
FILE *fp;
int i=20,j=30,k,n;
fp=fopen("d1.dat","w");
fprintf(fp,"%d\n",i);
fprintf(fp,"%d\n",j);
fclose(fp);
fp=fopen("d1.dat","r");
fp=fscanf(fp,"%d%d",&k,&n);
printf("%d %d\n",k,n);
fclose(fp);
}
A.20 30 B.20 50 C.30 50 D.30 20
(39)以下叙述中,错误的是 。
A.二进制文件打开后,可以先读文件的末尾,而顺序文件不可以
B.在程序结束时,应用fclose( )函数关闭已打开的文件
C.在利用fread( )函数从二进制文件中读数据时,可以用数组名给数组中的所有元素读入数据
D.不可以用FILE定义指向二进制文件的文件指针
(40)有以下程序:
#include <string.h>
main(int argc,char *argv[])
{
int i,len=0;
for(i=1;i<argc;i++)
len+=strlen(argv[i]);
printf("%d\n",len);
}
程序经过编译、连接后,生成的可执行文件是ex1.exe,若运行时输入带参数的命令行是:
ex1 abcd efg 10<CR>
则运行的结果是 。
A.22 B.17 C.12 D.9
(41)以下程序的输出结果是 。
int fa(int x)
{ return x*x;}
int fb(int x)
{ return x*x*x;}
int f(int (*f1)(),int (*f2)(),int x)
{ return f2(x)-f1(x);}
main()
{
int i;
i=f(fa,fb,2);
printf("%d\n",i);
}
A.-4 B.1 C.4 D.8
(42)以下程序的输出结果是 。
int a=3;
main()
{
int s=0;
{
int a=5;
s+=a++;
}
s+=a++;
printf("%d\n",s);
}
A.8 B.10 C.7 D.11
(43)以下程序的输出结果是 。
void ss(char *s,char t)
{
while(*s)
{
if(*s==t) *s=t-'a'+'A';
s++;
}
}
main()
{
char str[100]="abcddfefdbd",c='d’;
ss(str,c);
printf("%s\n",str);
}
A.ABCDDEFEDBD B.abcDDfefDbD
C.abcAAfefAbA D.Abcddfefdbd
(44)以下程序的输出结果是 。
struct STU
{
char num[10];
float score[3];
};
main()
{
struct STU s[3]={{"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}},*p=s;
int i;
float sum=0;
for(i=0;i<3;i++)
sum=sum+p->score[i];
printf("%6.2f\n",sum);
}
A.260.00 B.270.00 C.280.00 D.285.00
(45)设有如下定义:
struck sk
{
int a;
float b;
} data;
int *p;
若要使P指向data中的a域,以下正确的赋值语句是 。
A.p=&a; B.p=data.a;
C.p=&data.a; D.*p=data.a;
(46)以下程序的输出结果是 。
#include <stdlib.h>
struct NODE
{
int num;
struct NODE *next;
};
main()
{
struct NODE *p,*q,*r;
p=(struct NODE*)malloc(sizeof(struct NODE));
q=(struct NODE*)malloc(sizeof(struct NODE));
r=(struct NODE*)malloc(sizeof(struct NODE));
p->num=10; q->num=20; r->num=30;
p->next=q; q->next=r;
printf("%d\n",p->num+q->next->num);
}
A.10 B.20 C.30 D.40
(47)若有以下定义:
typedef int *INTEGER;
INTEGER p,*q;
以下叙述中,正确的是 。
A.p是int型变量
B.p是基类型为int的指针变量
C.q是基类型为int的指针变量
D.程序中可用INTEGER代替int类型名
(48)以下程序的输出结果是 。
main()
{
unsigned char a,b,c;
a=0x3; b=a|0x8; c=b<<1;
printf("%d %d\n",b,c);
}
A.–11 12 B.–6 –13 C.12 24 D.11 22
(49)有以下程序:
#include <stdlib.h>
main()
{
char *p,*q;
p=(char*)malloc(sizeof(char)*20);
q=p;
scanf("%s%s",p,q);
printf("%s %s\n",p,q);
}
若从键盘输入abc def<CR>,则输出结果是 。
A.def def B.abc def C.abc d D.d d
(50)以下程序中,函数f( )的功能是将n个字符串按由大到小的顺序进行排序。则以下程序的输出结果是 。
#include <string.h>
void f(char p[][10],int n)
{
char t[20];
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(p[i],p[j])<0)
{
strcpy(t,p[i]);
strcpy(p[i],p[j]);
strcpy(p[j],t);
}
}
main()
{
char p[][10]={"abc","aabdfg","abbd","dcdbe","cd"};
int i;
f(p,5);
printf("%d\n",strlen(p[0]));
}
A.6 B.4 C.5 D.3
二、填空题(每空2分,共40分)将正确答案分别写在答题卡中序号为【1】至【20】的横线上,答在试卷上不得分。
(1)算法的基本特征是可行性、确定性、【1】和拥有足够的情报。
(2)在长度为n的有序线性表中进行二分查找。最坏的情况下,需要的比较次数为
【2】。
(3)在面向对象的程序设计中,类描述的是具有相似性质的一组【3】。
(4)通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为【4】。
(5)数据库管理系统常见的数据模型有层次模型、网状模型和【5】三种。
(6)设有定义语句int n,*k=&n;,以下语句的功能是利用指针变量k读写变量n中的内容,将语句补充完整。
scanf("%d", 【6】 );
printf("%d\n", 【7】 );
(7)以下程序的输出结果是【8】。
main()
{
int x=10,y=20,t=0;
if(x==y) t=x; x=y; y=t;
printf("%d,%d \n",x,y);
}
(8)以下程序运行后的输出结果是【9】。
main()
{
int x=15;
while(x>10 && x<50)
{
x++;
if(x/3) { x++; break;}
else continue;
}
printf("%d\n",x);
}
(9)以下程序运行时,如果从键盘输入Y?N?<CR>,则输出结果为【10】。
#include <stdio.h>
main()
{
char c;
while((c=getchar())!='?') putchar(--c);
}
(10)以下程序运行后的输出结果是【11】。
void fun(int x,int y)
{
x=x+y; y=x-y; x=x-y;
printf("%d,%d,",x,y);
}
main()
{
int x=2,y=3;
fun(x,y);
printf("%d,%d\n",x,y);
}
(11)以下函数的功能是计算s=1+++……+。
double fun(int n)
{
double s=0.0,fac=1.0; int i;
for(i=1;i<=n;i++)
{
fac=fac 【12】 ;
s=s+fac;
}
return s;
}
(12)fun( )函数的功能是:首先对a所指的N行N列的矩阵,找出各行中最大的数,再求这N个最大值中的最小值,将其作为函数值返回。
#include <stdio.h>
#define N 100
int fun(int(*a)[N])
{
int row,col,max,min;
for(row=0;row<N;row++)
{
for(max=a[row][0],col=1;col<N;col++)
if( 【13】 ) max=a[row][col];
if(row==0) min=max;
else if( 【14】 ) min=max;
}
return min;
}
(13)函数sstrcmp( )的功能是对两个字符串进行比较。当s所指字符串和t所指字符串相等时,返回值为0;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp( ))。
#include <stdio.h>
int sstrcmp(char *s,char *t)
{
while(*s&&*t&&*s== 【15】 )
{ s++;t++;}
return 【16】 ;
}
(14)以下程序的输出结果是【17】。
#define N 10
#define s(x) x*x
#define f(x) (x*x)
main()
{
int i1,i2;
i1=1000/s(N);
i2=1000/f(N);
printf("%d %d\n",i1,i2);
}
(15)以下程序的输出结果是【18】。
void swap(int *a,int *b)
{
int *t;
t=a; a=b; b=t;
}
main()
{
int x=3,y=5,*p=&x,*q=&y;
swap(p,q);
printf("%d %d\n",*p,*q);
}
(16)以下程序的输出结果是:【19】。
typedef union student
{
char name[10];
long sno;
char sex;
float score[4];
} STU;
main()
{
STU a[5];
printf("%d\n",sizeof(a));
}
(17)若fp已被正确定义为一个文件指针,d1.dat为二进制文件,为读而打开此文件的语句是fp=fopen( 【20】 );。