一、选择题((1)~(40)每小题1分,(41)~(50)每小题2分,共60分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,将正确选项涂在答题卡的相应位置上,答在试卷上不得分。
(1)算法的空间复杂度是指 。
A.算法程序的长度 B.算法程序中的指令条数
C.算法程序所占的存储空间 D.执行过程中所需要的存储空间
(2)用链表表示线性表的优点是 。
A.便于随机存取
B.花费的存储空间较顺序存储少
C.便于插入和删除操作
D.数据元素的物理顺序与逻辑顺序相同
(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)应用数据库的主要目的是 。
A.解决数据保密问题 B.解决数据完整性问题
C.解决数据共享问题 D.解决数据量大的问题
(9)在数据库设计中,将E-R图转换成关系数据模型的过程属于 。
A.需求分析阶段 B.逻辑设计阶段
C.概念设计阶段 D.物理设计阶段
(10)在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中,数据独立性最高的阶段是 。
A.数据库系统阶段 B.文件系统阶段
C.人工管理阶段 D.数据项管理阶段
(11)以下叙述中,正确的是 。
A.C语言比其他语言高级
B.C语言可以不用编译就能被计算机识别执行
C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
D.C语言出现的最晚,具有其他语言的一切优点
(12)C语言中,用于结构化程序设计的三种基本结构是 。
A.顺序结构、选择结构、循环结构 B.if、switch、break
C.for、while、do...while D.if、for、continue
(13)在一个C语言程序中, 。
A.main( )函数必须出现在所有函数之前
B.main( )函数可以在任何地方出现
C.main( )函数必须出现在所有函数之后
D.main( )函数必须出现在固定位置
(14)下列叙述中,正确的是 。
A.C语言中既有逻辑类型,也有集合类型
B.C语言中没有逻辑类型,但有集合类型
C.C语言中有逻辑类型,但没有集合类型
D.C语言中既没有逻辑类型,也没有集合类型
(15)以下关于C语言用户标识符的叙述中,正确的是 。
A.用户标识符中可以出现下画线和中画线(减号)
B.用户标识符中不可以出现中画线,但可以出现下画线
C.用户标识符中可以出现下画线,但不可以放在用户标识符的开头
D.用户标识符中可以出现下画线和数字,它们都可以放在用户标识符的开头
(16)以下程序片段(n所赋值是八进制数)的输出结果是 。
int m=32767,n=032767
printf("%d,%o/n",m,n);
A.32767,32767 B.32767,032767
C.32767,77777 D.32767,077777
(17)下列关于单目运算符++、--的叙述中,正确的是 。
A.它们的运算对象可以是任何变量和常量
B.它们的运算对象可以是char型变量和int型变量,但不能是float型变量
C.它们的运算对象可以是int型变量,但不能是double型变量和float型变量
D.它们的运算对象可以是char型变量、int型变量和float型变量
(18)以下程序片段的输出结果是 。
int m=0xabc,n=0xabc;
m-=n;
printf("%x\n",m);
A.0X0 B.0x0
C.0 D.0XABC
(19)以下程序片段执行时,若从键盘上输入10A10<CR>,则输出结果是 。
int m=0,n=0;
char c='a';
scanf("%d%c%d",&m,&c,&n);
printf("%d,%c,%d\n",m,c,n);
A.10,A,10 B.10,a,10 C.10,a,0 D.10,A,0
(20)以下程序的输出结果是 。
main()
{
int i;
for(i=0;i<3;i++)
switch(i)
{
case 1: printf("%d",i);
case 2: printf("%d",i);
default: printf("%d",i);
}
}
A.011122 B.012 C.012020 D.120
(21)以下程序的输出结果是 。
main()
{
int i=1,j=1,k=2;
if((j++||++)&& i++)
printf("%d,%d,%d\n",i,j,k);
}
A.1,1,2 B.2,2,1 C.2,2,2 D.2,2,3
(22)以下程序的输出结果是 。
main()
{
int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else if((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2);
}
A.2 B.3
C.4 D.编译时出错,无结果
(23)以下程序的输出结果是 。
main()
{
int p[7]={11,13,14,15,16,17,18},i=0,k=0;
while(i<7 && p[i]%2)
{
k=k+p[i];
i++;
}
printf("%d\n",k);
}
A.58 B.56 C.45 D.24
(24)以下程序的输出结果是 。
main()
{
int i=0,s=0;
do
{
if(i%2) { i++; continue; }
i++;
s+=i;
} while(i<7);
printf("%d\n",s);
}
A.16 B.12 C.28 D.21
(25)以下程序的输出结果是 。
main()
{
int i=10,j=1;
printf("%d,%d\n",i--,++j);
}
A.9,2 B.10,2 C.9,1 D.10,1
(26)有以下程序:
main()
{
char a,b,c,*d;
a='\'; b='\xbc';
c='\0xab'; d="\017";
printf("%c%c%c\n",a,b,c,*d);
}
若编译时出现错误,则以下叙述中,正确的是 。
A.程序中只有a='\';语句不正确
B.程序中只有b='\xbc';语句不正确
C.程序中只有d="\0127";语句不正确
D.程序中a='\';和c='\0xab';语句都不正确
(27)以下程序的输出结果是 。
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,e,f;
d=f1(a,b);
d=f1(d,c);
e=f2(a,b);
e=f2(e,c);
f=a+b+c-d-e;
printf("%d,%d,%d\n",d,f,e);
}
A.3,4,5 B.5,3,4
C.5,4,3 D.3,5,4
(28)以下程序的输出结果是 。
void f(int x,int y)
{
int t;
if(x<y) { t=x; x=y; y=t;}
}
main()
{
int a=4,b=3,c=5;
f(a,b);
f(a,c);
f(b,c);
printf("%d,%d,%d\n",a,b,c);
}
A.3,4,5 B.5,3,4
C.5,4,3 D.4,3,5
(29)若有如下程序片段:
#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;
(30)以下程序的输出结果是 。
int *f(int *x,int *y)
{
if(*x<*y) return x;
else return y;
}
main()
{
int a=7,b=8,*p=&a,*q=&b,*r;
r=f(p,q);
printf("%d,%d,%d\n",*p,*q,*r);
}
A.7,8,8 B.7,8,7
C.8,7,7 D.8,7,8
(31)以下程序的输出结果是 。
main()
{
char *s[]={"one","two","three"},*p;
p=s[1];
printf("%c,%s\n",*(p+1),s[0]);
}
A.n,two B.t,one
C.w,one D.o,two
(32)以下程序的输出结果是 。
main()
{
int x[8]={8,7,6,5,0,0},*s;
s=x+3;
printf("%d\n",s[2]);
}
A.随机值 B.0 C.5 D.6
(33)以下选项中,能正确定义数组并赋初值的语句是 。
A.int N=5,b[N][N]; B.int a[1][2]={{1},{3}};
C.int c[2][1]={{1,2},{3,4}}; D.int d[3][2]={{1,2},{34}};
(34)以下程序的输出结果是 。
main()
{
int m[][3]={1,4,7,2,5,8,3,6,9};
int i,j,k=2;
for(i=0;i<3;i++)
printf("%d",m[k][i]);
}
A.4 5 6 B.2 5 8 C.3 6 9 D.7 8 9
(35)若以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。
#define N 10
void arrin(int x[N])
{
int i=0;
while(i<N)
scanf("%d", _______);
}
则在下画线处应填入的是 。
A.x+i B.&x[i+1] C.x+(i++) D.&x[++i]
(36)以下程序的输出结果是 。
main()
{
char s[]="\n123\\";
printf("%d,%d\n",strlen(s),sizeof(s));
}
A.赋初值的字符串有错 B.6,7
C.5,6 D.6,6
(37)以下函数的功能是 。
fun(char *s1,char *s2)
{
int i=0;
while(s1[i]==s2[i] && s2[i]!='\0')
i++;
return(s1[i]==s2[i] && s2{i}!=='\0');
}
A.将s2所指字符串赋给s1
B.比较s1和s2所指字符串的大小,若s1比s2所指定符串大,函数值为1,否则函数值为0
C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0
D.比较s1和s2所指字符串的长度,若s1比s2所指字符串长,函数值为1,否则函数值为0
(38)以下叙述中,正确的是 。
A.全局变量的作用域一定比局部变量的作用域范围大
B.静态(static)类别变量的生存期贯穿于整个程序的运行期间
C.函数的形参都属于全局变量
D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值
(39)设有如下说明:
typedef struct
{ int n; char c; double x;} STD;
则以下选项中,能正确定义结构体数组并赋初值的语句是 。
A.STD tt[2]={{1,'A',62},2, 'B',75};
B.STD tt[2]= {1,"A",62},{2, "B",75};
C.struct tt[2]={{1,'A'},{2, 'B'}};
D.struct tt[2]={{1,"A",62.5},{2, "B",75.0}};
(40)以下程序的输出结果是 。
main()
{
union
{
unsigned int n;
unsigned char c;
} u1;
u1.c='A';
printf("%c\n",u1.n);
}
A.产生语法错误 B.随机值
C.A D.65
(41)以下程序的输出结果是 。
main()
{
char str[]="xyz",*ps=str;
while(*ps)
ps++;
for(ps--;ps-str>=0;ps--)
puts(ps);
}
A.yz B.z C.z D.x
xyz yz yz xy
xyz xyz
(42)以下程序的输出结果是 。
main()
{
int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;
pa=a;
for(i=0;i<3;i++)
if(i<2) pa[1][i]=pa[1][i]-1;
else pa[1][i]=1;
printf("%d\n",a[0][1]+a[1][1]+a[1][2]);
}
A.7 B.6
C.8 D.无确定值
(43)以下程序的输出结果是 。
void fun(int *a,int i,int j)
{
int t;
if(i<j)
{
t=a[i]; a[i]=a[j]; a[j]=t;
fun(a,++i,--j);
}
}
main()
{
int a[]={1,2,3,4,5,6},i;
fun(a,0,5);
for(i=0;i<6;i++)
printf("%d ",a[i]);
}
A.6 5 4 3 2 1 B.4 3 2 1 5 6
C.4 5 6 1 2 3 D.1 2 3 4 5 6
(44)有以下程序:
main(int argc,char *argv[])
{
int n,i=0;
while(argv[1][i]!='\0')
{
n=fun();
i++;
}
printf("%d\n",n*argc);
}
int fun()
{
static int s=0;
s+=1;
return s;
}
程序经编译、连接后、生成可执行文件exam.exe,若输入以下命令行:
exam 123<CR>
则运行结果为 。
A.6 B.8
C.3 D.4
(45)以下程序片段中,能够通过调用函数fun( ),使main( )函数中的指针变量p指向一个合法的整型单元的是 。
A.main() B.main
{ {
int *p; int *p;
fun(p); fun(&p);
} }
int fun(int *p) int fun(int **p)
{int s; p=&s;} {int s; *p=&s;}
C.#include <stdlib.h> D.#include <stdlib.h>
main() main()
{ {
int *p; int *p;
fun(&p); fun(p);
} }
int fun(int **p) int fun(int *p)
{*p=(int *)malloc(2);} {p=(int *)malloc(sizeo(int));}
(46)若要说明一个类型名STP,使得定义语句STP s等价于char *s,则以下选项中,正确的是 。
A.typedef STP char *s; B.typedef *char STP;
C.typedef stp *char; D.typedef char* STP;
(47)设有如下定义:
struct ss
{
char name[10];
int age;
char sex;
} std[3],*p=std;
以下各输入语句中,错误的是 。
A.scanf("%d",&(*p).age); B.scanf("%s",&std.name);
C.scanf("%c",&std[0].sex) D.scanf("%c",&(p->sex));
(48)设char型变量x中的值为10100111,则表达式(2+x)^(~3)的值是 。
A.10101001 B.10101000
C.11111101 D.01010101
(49)以下叙述中,不正确的是 。
A.C语言中的文本文件以ASCII码形式存储数据
B.C语言中,对二进制文件的访问速度比文本文件快
C.C语言中,随机读写方式不适用于文本文件
D.C语言中,顺序读写方式不适用于二进制文件
(50)以下程序要把从键盘输入的字符输出到名为abc.txt的文件中,直到从键盘读入字符#时,结束输入和输出操作,但程序有错。
#include <stdio.h>
main()
{
FILE *fout;
char ch;
fout=fopen("abc.txt","w");
ch=fgetc(stdin);
while(ch!='#')
{
fputc(ch,fout);
ch=fgetc(stdin);
}
fclose(fout);
}
出错的原因是 。
A.函数fopen( )的调用形式错误 B.输入文件没有关闭
C.函数fgetc( )的调用形式错误 D.文件指针stdin没有定义
二、填空题(每空2分,共20分)将正确答案分别写在答题卡中序号为【1】~【20】的横线上,答在试卷上不得分。
(1)数据的逻辑结构分为线性结构和【1】两大类。
(2)顺序存储方法是把逻辑上相邻的节点存储在物理位置【2】的存储单元中。
(3)一个类可以从直接或间接的祖先中继承所有属性和方法,采用这个方法提高了软件的【3】。
(4)软件工程研究的内容主要包括【4】技术和软件工程管理。
(5)关系操作的特点是【5】操作。
(6)以下语句的输出结果是【6】。
int i=-19,j=i%4;
printf("%d\n",j);
(7)若有以下程序,要求给i赋值10,给j赋值20,则应该从键盘输入【7】。
main()
{
int i,j;
scanf("i=%d,j=%d",&i,&j);
printf("i=%d,j=%d\n",i,j);
}
(8)以下程序的输出结果是【8】。
main()
{
int p,a=5;
if(p=a!=0)
printf("%d\n",p);
else
printf("%d\n",p+2);
}
(9)以下程序的输出结果是【9】。
main()
{
int a=4,b=3,c=5,t=0;
if(a<b) t=a;a=b;b=t;
if(a<c) t=a;a=c;c=t;
printf("%d %d %d\n",a,b,c);
}
(10)以下程序的输出结果是【10】。
main()
{
int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}};
int i,j,s=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(a[i][j]<0) continue;
if(a[i][j]==0) break;
s+=a[i][j];
}
}
printf("%d\n",s);
}
(11)以下程序的输出结果是【11】。
main()
{
char a;
a='H'-'A'+'0';
printf("%c\n",a);
}
(12)以下程序的输出结果是【12】。
int f(int x,int y)
{ return (y-x)*x; }
main()
{
int a=3,b=4,c=5,d;
d=f(f(3,4),f(3,5));
printf("%d\n",d);
}
(13)函数YangHui( )的功能是将杨辉三角形的数据赋给二维数组的下半三角,形式如下所示。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
其构成规律是:
①第0列元素和主对角线元素均为1。
②其余元素为其左上方和正上方元素之和。
③数据的个数每行递增1。
将以下程序补充完整。
#defint N 6
void YangHui(int x[N][N])
{
int i,j;
x[0][0]=1
for(i=1;i<N;i++)
{
x[i][0]= 【13】 =1;
for(j=1;j<i;j++)
x[i][j]= 【14】 ;
}
}
(14)以下函数的功能是删除字符串s中的所有数字字符。
void dele(char *s)
{
int n=0,i;
for(i=0,s[i];i++)
if(【15】 )
s[n++]=s[i];
s[n]=【16】;
}
(15)设函数findbig( )已定义为求三个数中的最大值。以下程序将利用函数指针调用findbig( )函数。
main()
{
int findbig(int,int,int);
int (*f)(),x,yz,z,big;
f= 【17】 ;
scanf("%d%d%d",&x,&y,&z);
big=(*f)(x,y,z);
printf("bing=%d\n",big);
}
(16)以下程序的输出结果是【18】。
#define MCRA(m) 2*m
#define MCRB(n,m) 2*MCRA(n)+m
main()
{
int i=2,j=3;
printf("%d\n",MCRB(j,MCRA(i)));
}
(17)设有以下定义:
struct ss
{ int info; struct ss *link; } x,y,z;
且已建立如下图所示的链表结构:
|
|
|
|
|
|
X Y Z
写出删除点y的赋值语句【19】。
(18)已有文本文件test.txt,其中的内容为Hello,everyone!。以下程序中,文件test.txt已正确为”读”而打开,由文件指针fr指向该文件,则程序的输出结果是【20】。
#include <stdio.h>
main()
{
FILE *fr;
char str[40];
...
fgets(str,5,fr);
printf("%s\n",str);
fclose(fr);