C.f=1;for(i=n;i>1;i++)f*=i;D.f=1;for(i=n;i>=2;i--)f*=i;
解析:
由n!
的数字定义可知n!
=n*(n-1)*(n-2)*…*1。
在选项A中,由于f的初值为0,在for循环语句中,f依次乘以l,2,3,…,n,最后计算得到f=n!
=0,所以选项A不正确。
在选项B中,f的初值为1,在for循环语句中,f依次乘以l,2,3,…,(n-1),最后计算得到f=(n-1)!
,所以选项B不正确。
在选项C中,f的初值为l,在for循环语句中,f依次乘以n,n+1,n+2,……,所以选项C不正确。
在选项D中,f的初值为l,在for循环语句中,f依次乘以n,n-1,n-2,…,2,最后计算得到f=n!
,所以选项D正确。
2有以下程序:
#include
voidfun(int*s)
{staticinti=0;
do{s[J]=s[J]+s[j+I];}while(++j<2);
}
main( )
{intk.a[l0]={1,2,3,4,5};
for(k=1;k<3;k++)fun(a);
for(k=0;k<5;k++)pfintf("%d",a[k]);
printf("\n");
}
程序运行后的输出结果是(D )。
A.12345B.23445C.34756D.35745
解析:
本题考查静态变量,静态变量有储存已经操作过的值,所以fun(a)s[O]=3,s[1]=5,s[2]=7,所以答案选择D。
3有下列程序:
、
fun(intX,inty){return(x+y);)
main( )
{inta=1,b=2,c=3,sum;
sum=fun((a++,b++,a+b),c++);
printf("%d\n",sum);
}
执行后的输出结果是(C )。
A.6B.7C.8D.9
解析:
函数fun(intx,inty)的功能是返回x+Y的值。
在主函数中,变量a,b,c的初始值分别为1,2,3。
因此逗号表达式“a++,b++,a+b”的值等于5,表达式c++的值为3,调用于函数的表达式为“fun(5,3);”,其返回值等于8。
4现有以下结构体说明和变量定义,如图所示,指针P、q、r分别指定一个链表中连续的3个结点。
structnode
{hardata;
structnode*next;)*P,*q,*r;
现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句是( D )。
A.q-:
>next=r->next;p--:
>next=r;rm:
>next=q;
B.q-:
>next=r;q->next=r->next;r->next=q;
C.q-:
>next=r->next;r->next=q;p->next=r;
D.q-:
>next=q;p->next=r;q->next=r->next;
解析:
由题目中线性链表的定义可知,要将q和r所指的结点交换前后位置,只要使q指向r的后一个结点,P指向r结点,r指向q结点即可。
而在选项D中,r->next=q,这时r指向的节点为q;p->next=r,这时P指向的节点为r;q->next:
r->next,因为r节点已经指向q,所以执行这个语句后q又指向q,所以选项D不正确。
5有以下程序:
#include
main( )
{char*s="[2]34";intk=0,a=0;
whil(s[k+1]!
='\0')
{k++;
if(k%2=o){a=a+(s[k]-'0'+1);continue;}
a=a+(s[k]-'0');
printf("k=%da=%d\n",k,a);
}
程序运行后的输出结果是(C )。
A.k=6a=11B.k=3a=14C.k=4a=12D.k=5a=15
解析:
输出结果:
k=1a=2k=2a=4k=3a=7k=4a=12
6若a是数值类型,则逻辑表达式(a==1)II(a!
=1)的值是(A )。
A.1B.0C.2D.不知道a的值,不能确定
解析:
由于a==l和a!
=1两者互斥,即总有一个为真,因此二者的或也必定为真。
7阅读以下程序:
#include
main( )
{intcase;floatprintF;
printf("请输人2个数:
");
scanf("%d%fl"&case,&printF);
printf("%dofof\n",case,printF);
}
该程序在编译时产生错误,其出错原因是(A )。
A.定义语句出错,case是关键字,不能用做用户自定义标识符
B.定义语句出错,printF不能用做用户自定义标识符
C.定义语句无错,scanf不能作为输入函数使用
D.定义语句无错,printf不能输出case的值
解析:
本题中定义了整形变量case,但case是关键字,关键字不能用做标识符。
单精度printF不是关键字,因为标识符区分大小写。
所以A不正确。
8有以下程序:
#include
main( )
{inta=1,b=2;
for(;a<8;a++){b+=a;a+=2;)
printf("%d,%d\n",a,b);
}
程序运行后的输出结果是(D )。
A.9,18B.8,11C.7,11D.10,14
解析:
第一次执行循环前,a=1,满足a<8,执行循环后,b=3,a=3。
执行完a++操作后,a=4。
由于a<8,执行第二次循环后,b=7,a=6,执行完a++操作后,a=7。
由于a<8,执行第三次循环后,b=14,a=9,执行完a++操作后a=10。
此时不满足a<8,跳出循环。
9有以下程序:
#include
main( )
{inta,b,k,m,*pl,*p2;
k=1,m=8;
p1=&k,p2=&m;
a=/*pl-m;b=*p1+*p2+6;
printf("%d",a);printf("%d\n",b);
}
编译时编译器提示错误信息,你认为出错的语句是(A )。
A.a=/*pl-m;B.b=*p1+*p2+6;C.k=1,m=8;D.pl=&k,p2-&m;
解析:
本题考查指针,pl=&k表示P指向k的地址,则*p=k,依次类推,在对指针进行赋值时没有错误。
a=/*p+m赋值,在c语言中"/*"表示的注释,所以答案选择A。
10在学生管理的关系数据库中,存取一个学生信息的数据单位是(D )。
A.文件B.数据库C.字段D.记录
解析:
一个数据库由一个文件或文件集合组成。
这些文件中的信息可分解成一个个记录。
11下列叙述中正确的是(B )。
A.循环队列是队列的一种链式存储结构
B.循环队列是队列的一种顺序存储结构
C.循环队列是非线性结构
D.循环队列是一种逻辑结构
解析:
循环队列是线性结构,所以C选项错误,存储结构是数据在计算机中的表示,循环队列在计算机内是顺序存储结构,所以答案选择B。
12以下关于return语句的叙述中正确的是( B )。
A.一个自定义函数中必须有一条return语句
B.一个白定义函数中可以根据不同情况设置多条return语句
C.定义成void类型的函数中可以有带返回值的return语句
D.没有return语句的自定义函数在执行结束时不能返回到调用处
解析:
return语句又称为返回语句。
该语句的格式如下:
“return;”和“return(<表达式>);”。
其中,return是关键字。
该语句有两种格式:
不带返回值格式和带返回值格式。
该语句用在被调用函数中,在被调用函数中执行到该语句时,将结束对被调用函数的执行,并把控制权返回给调用函数,继续执行调用函数后边的语句。
在带有返回值的情况下,将return语句所带的表达武的值返回给调用函数,作为被调用函数的值。
在被调用函数中,可以用return语句,也可以不用return语句。
如果要求被调用函数有返回值,则一定要用return语句,采用return(<表达式>);格式。
如果被调用函数不需要返回值,并且当被调用函数的所有语句执行完后进行返回,则被调用函数可以不用return语句。
13有三个关系R,S和T如下:
其中关系T由关系R和S通过某种操作得到,该操作为(D )
A.选择B.投影C.交D.并
解析:
关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元素。
由题可以看出,T是R和S的并运算得到的。
14设有以下程序段:
structMP3
{charname[20];
charcolor;
floatprice;
}std,*ptr;
ptr=&std:
若要引用结构体变量std中的color成员,写法错误的是(A )。
A.std.colorB.ptr->colorC.std->colorD.(*ptr)color
解析:
本题中要引用结构体变量std中的color,要使用指针,而std.color不是一个指针类型,所以答案选择A
15有以下程序:
#include
voidexch(intt[])
{t[0]=t[5];}
main( )
{intx[10]={1,2,3,4,5,6,7,8,9,10},i=0;
while(i<=4){exch(&x[i]);i++;}
for(i=0;i<5;i++)printf("%dl"x[i]);
printf("\n");
}
程序运行后输出的结果是(D )。
A.246810B.13579C.12345D.678910
解析:
本题中exch函数是用数组中的第6个元素对第1个元素进行赋值,所以数组的值应该为678910。
16表达式a+=a-=a=9的值是(D)。
A.9B.-9C.18D.0
解析:
+=、-=、=等符号优先级相同结合性是由右至左,所以选D。
17数据库管理系统是(B )。
A.操作系统的一部B.在操作系统支持下的系统软件
C.一种编译系统D.一种操作系统
解析:
数据库系统属于系统软件的范畴
18以下选项中叙述错误的是(A )。
A.C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值
B.在同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内
C.C程序函数中定义的自动变量,系统不自动赋确定的初值
D.C程序函数的性能不可以说明为static型变量
解析:
静态变量不是每调用一次就赋一次初值,而是将需要定义许多相同的具有相同属性的值时,使用静态变量来节省空间,所以A选项错误
19有以下程序段:
inti,n;
for(i=0;i<8;i++)
{n=rand( )%5;
switch(n)
{casel:
case3:
printf("%d\n",n);break;
case2:
case4:
print?
("%d\n",n);continue;
case( ):
exit(0);
}
printf("%d\n",n);
}
以下关于程序段执行情况的叙述,正确的是( A )。
A.for循环语句固定执行8次
B.当产生的随机数n为4时结束循环操作
C.当产生的随机数n为1和2时不做任何操作
D.当产生的随机数n为0时结束程序运行
解析:
程序中的if循环是固定地执行8次,属于计数器,程序是从中随机抽取一个数,然后对5进行求余再输出,共抽取8个数。
所以答案为A。
20有以下程序:
#include
main( )
{FILE*fp;charstr[10];
fp=fopen("myfile,dat","");
{puts("abe",ip);fclose(fp);
fp=fopen("myfile.dat","a*");
fprintf(fp,"%d",28);
rewind(fp);
fscanf(fp,"%S",str);puts(str);
fclose(fp);
}
程序运行后的输出结果是(C )。
A.abcB.28cC.abc28D.内类型不一致而出错
解析:
本题考查文件的操作,首先打开文件,进行写操作,把“abc”写入“myfile”文件,再打开“myfile.data"文件,输入28,在键盘上接收字符,输出并关闭文件。
本题结果为abc28
21以下程序的输出结果是(A )。
main( )
{inta[3][3]={{1,2},{3,4),{5,6}},i,j,s=0;
for(i=1;i<3;i++)
for(j=0;j<=i;j++)s+=a[i][j];
printf("%d\n",s);
}
A.18B.19C.20D.21
解析:
循环的作用是求行下标从l到2列下标从0到i的元素之和,即s=a[1][0]+a[1][1]+a[2][o]+a[2][1]+a[2][2]=3+4+5+6+0一18。
22下列选项中,能够满足“若字符串sl等于字符串s2,则执行ST”要求的是(A)。
A.if(stremp(s2,s1)==0)ST;B.if(s1==s2)ST;C.if(strcpy(sl,s2)==l)ST;D.if(sl,s2==O)ST;
解析:
strcmp(char*,char*),函数strcmp用于比较两个字符串的长度,长者为大,若字符个数也一样,则从左至右依次比较相同位上的字符,字符大小按ASCIl表值计算,直到最后一个字符,若还相同,则两个字符串相等,返回值0。
选项A中if(strcmp(s2,sl)==0)ST,若s2等于sl,则返回值0,0等于0,所以逻辑表达式strcmp(s2,sl)==0为真,执行ST。
23下列关于数据库设计的叙述中,正确的是(A )。
A.在需求分析阶段建立数据字典B.在概念设计阶段建立数据字典
C.在逻辑设计阶段建立数据字典D.在物理设计阶段建立数据字典
解析:
在数据库设计时必须在需求分析阶段建立数据字典,确定数据库中所需要的数据。
24有两个关系R和T如下:
则由关系R得到关系T的操作是(D )。
A.选择B.投影C.交D.并
解析:
选择是建立一个含有与原始关系相同列数的新表,但是行只包括那些满足某些特定标准的原始关系行
25针对简单程序设计,以下叙述的实施步骤顺序正确的是(A )。
A.确定算法和数据结构、编码、调试、整理文档
B.编码、确定算法和数据结构、调试、整理文档
C.整理文档、确定算法和数据结构、编码、调试
D.确定算法和数据结构、调试、编码、整理文档
解析:
C语言中程序中的步骤实现为:
先确定程序中的算法和数据结构,然后进行程序的编码,再进行对程序的调试,最后进行文档的整理和记录。
使用这种步骤可以方便程序的编写以及在完成后提高代码的重用性
26以下叙述中错误的是( A )。
A.函数的返回值类型不能是结构体类型,只能是简单类型
B.函数可以返回指向结构体变量的指针
C.可以通过指向结构体变量的指针访问所指结构体变量的任何成员
D.只要类型相同,结构体变量之间可以整体赋值
解析:
函数返回值类型可以是简单类型和结构体类型。
27若有定义:
“inta[2][3];”,则对a数组的第i行第J列元素的正确引用为( A )。
A.*(*(a+i)+j)B.(a+i)[j]C.*(a+i+j)D.*(a+i)+j
解析:
通过地址来引用数组元素的方法有下列5种:
(1)a[i][j];
(2)*(a[i]+j);(3)*(*(a+j)+j);(4)*(a[i][j]);(5)(&a[o][0]+3*i+j)。
故A正确。
28软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指(B )。
A.模块间的关系B.系统结构部件转换成软件的过程描述
C.软件层次结构D.软件开发过程
解析:
软件的过程设计是指系统结构部件转换成软件的过程描述
29设有定义:
“char*c;”,以下选项中能够使字符型指针c正确指向一个字符串的(A )。
A.charstr[]="string";c=str;B.scanf(%s,c):
C.c=getchar( );D.*c="strin9";
解析:
选项B是从键盘上输入字符串,选项C是接收字符,选项D不正确
30以下选项中不能用做C程序合法常量的是(A )。
A.1,234B.‘\123’C.123D.“\x7G”
解析:
A选项中逗号是一个操作符
31有以下程序:
#include
intfun(intX,inty)
{if(X!
=y)return((x+y)/2);
elsereturn(x);
}
main( )
{inta=4,b=5,c=6;
printf("%d/n",fun(2*a,fun(b,c)));
}
程序运行后的输入结果是(B )。
A.3B.6C.8D.12
解析:
此题考查的是函数fun(),fun(b,c)=5,然后fun(2*a,5)=fun(8,5)=6。
32有以下程序:
#include
#include
main( )
{charstr[][20][{"One*World","One*Dream!
"},*p=str[1];
prinft("%d,",strlen(p));printf("%s\n",p);
}
程序运行后的输出结果是(C )。
A.9,0ne*WorldB.9,0ne*Dream!
C.10,One*Dream!
D.10,Ome*World
解析:
本题输出两个结果,第一个是求字符串的长度。
第二个是输出的字符串,数组的下标是从0开始的,所以当str取1的时候,应为“One*Dream!
”
33有以下函数
intfun(char*X,char*y)
{intn=0;
while((*x===*y)&&*x!
='\O'){x++;y++;n++;}
returnn;
}
函数的功能是(B )。
A.查找X和y所指字符串中是否有'\o'
B.统计x和Y所指字符串中最前面连续相同的字符个数
C.将Y所指字符串赋给X所指定存储空间
D.统计X和Y所指字符串中相同的字符个数
解析:
由题中while(*x==*y&&*x!
='\n')可知此函数是统计x和y所指向的字符串中最前面的联系相同的字符的个数。
34if语句基本形式是:
if(表达式)语句,以下关于“表达式”值的叙述中正确的是(D )。
A.必须是逻辑值B.必须是整数值C.必须是正数D.可以是任意合法的数值
解析:
考查if循环语句。
if(表达式),其中表达式是一个条件,条件中可以是任意的合法的数值。
35软件需求规格说明书的作用不包括( B )。
A.软件设计的依据B.软件可行性研究的依据
C.软件验收的依据D.用户与开发人员对软件要做什么的共同理解
解析:
《软件可行性分析报告》是软件可行性研究的依据。
36下列关于栈的叙述中,正确的是( B )。
A.栈底元素一定是最后入栈的元素B.栈操作遵循先进后出的原则
C.栈顶元素一定是最先入栈的元素D.以上三种说法都不对
解析:
栈是先进后出,因此,栈底元素是先入栈的元素,栈顶元素是后入栈的元素。
37设有如下定义语句:
intm[]={2,4,6,8,10},*k=m;
以下选项中,表达式的值为6的是(A )。
A.*(k+2)B.k+2C.*k+2D.*k+=2
解析:
本题考查数组和指针,*k指针是指向rn数组的首地址,所以要使表达武的值为6,只需要指针指向第m[2],所以答案选择A。
38以下选项中与“if(a==l)a=b;elsea++;”语句功能不同的switch语句是(B )。
A.switch(a)
{casel:
a=b;break;
default:
a++;
}
B.switch(a==l)
{case0:
a=b;break;
casel:
a++;
}
C.switch(a)
{default:
a++;break;
casel:
a=b;
}
D.switch(a==l)
{casel:
a=b;break;
case0:
a++;
}
解析:
题中当a的值为l时,关系表达式a==l的值为真,即1,因此程序将跳转到easel执行a++操作,与题干程序刚好相反。
39有以下程序段:
charname[20】;intnum;
scanf("name=%Snum=%d",name,&num);
当执行上述程序段,并从键盘输入:
name=Lilimum=1001<回车>后,name的值为( A )。
A.LiliB.name=LiliC.Lilinum=D.name=Lilinum=1001
解析:
考查简单的C程序。
由题可知,程序中输入name的值为Lili,所以输出的必定是Lili,答案选择A。
40下列描述错误的是( C )。
A.继承分为多重继承和单继承
B.对象之间的通信靠传递消息来实现
C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征
D.类是具有共同属性、共同方法的对象的集合
解析:
对象的封装性是指从外面看只能看到对象的外部特性,而对象的内部,其处理能力的实行和内部状态对外是不可见的,是隐蔽的。
二、基本操作题(共18分)
41请补充函数proc(),函数proc()的功能是求7的阶乘。
注意:
部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。
试题程序:
#include
longproc(intn)
{
if(【1