returnsum;
}
main( )
{inta[3]={1,2,3,4,5),b[3]={6,7,8,9),s=0;
s=fun(a,5)+fun(b,4);printf("%d\n",s);
}
程序执行后的输出结果是( C )。
、
A.45B.50C.60D.55
解析:
在函数intfun(intx[],intn)的定义中,变量sum为一个静态局部变量。
由于在整个程序运行期间,静态局部变量在内存中的静态存储中占据着永久的存储单元。
函数intfun(intx[],intn)的功能是求出数组x[]各个元素的和,所以在主函数中,调用函数fun(a,5)后,变量sum=1+2+3+4+5=15,当再次调用fun(b,4)后,变量sum=15+6+7+8+9=45,所以s=15+45=60。
13若有定义语句:
“intyear=2009,*p=&year;”,以下不能使变量year中的值增至2010的语句是( C )。
A.*p+=1;B.(*p)++;C.++(*p);D.*++P
解析:
此题考查的是指针的自加,*p+=1,即为*p=*p+1,其中B和D都相等,所以答案选择C
14有以下程序
#include
voidfun(intx)
{if(x/Z>1)fun(x/Z);
printf("%d",x);
}
main()
{fun(7);printf("\n");}
程序运行后的输出结果是(D)。
A.137B.731C.73D.37
解析:
本程序主要考查递归函数。
fun(7),首先将参数代入函数,因为(7/2)>1,所以执行f(3),依此类推直到f(1.5),(1.5/2)<1,所以执行打印函数,此时X值为3,然后退出f(1.5),返回f(3),打印x值即7。
所以选D。
15右两个关系R和S如下:
则由关系R得到关系S的操作是(C )。
A.自然连接B.并C.选择D.投影
解析:
选择:
是在数据表中给予一定的条件进行筛选数据。
投影:
是把表中的某几个属性的数据选择出来。
连接:
有自然连接、外连接,内连接等,连接主要用于多表之间的数据查询。
并:
与数学中的并是一样的。
两张表进行并操作,要求它们的属性个数相同并且需要相容。
16有以下程序:
#include
main( )
{intb[3][3]=(0,1,2,0,1,2,0,1,2},i,j,t=l;
for(i=0;i<3;i++)
for(j=1;j<=i;j++)t+=b[i][b[j][i]];
printf("%d\n",t);
}
程序运行后的输出结果是( C )。
A.1B.3C.4D.0
解析:
本题考查了两层for循环。
外层循环增量i的值作为内层循环执行次数的值使用。
17有以下程序
#include
main( )
{charcl,c2;
c1='A'+'8'-'4'
c2='A'+'8'-'5';
printf("%C,%d\n",cl,c2);
}
已知字母A的ASCIl码为65,程序运行后的输出结果是(A )。
A.E,69B.D,69C.E,DD.输出无定值
解析:
本值输出两个值,%c为输出一个字母,0/4d输出一个数字。
“A”的ASCIl码为65,再加4之后为69,也就是字母E,所以本题A正确。
18数据库设计中,用E—R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的( C)。
A.需求分析阶段B.逻辑设计阶段C.概念设计阶段D.物理设计阶段
解析:
E-R(Entity—Relationship)图为实体一联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。
19数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是( C )。
A.DB包含DBS和DBMSB.DBMS包含DB和DBS
C.DBS包含DB和DBMSD.没有任何关系
解析:
数据库系统DBS包括数据库DB和数据库管理系统DBMS!
!
20若有以下定义和语句:
chars[10]="abcd!
",*s2="\nl23\\";
Drintf("%d%d\n",strlen(sl),strlen(s2));
则输出结果是( A)。
A.55B.105C.107D.58
解析:
\n和\\分别为转义字符,各占据一个字符的位置
21以下选项中表示一个合法的常量是(说明:
符号口表示空格)( B )。
A.9口9口9B.0XabC.123E0.2D.2.7e
解析:
当用指数形式表示浮点数据时,E的前后都要有数据,并且E的后面数要为整数
22有以下程序:
#include
intf(intm)
{staticintn=0;
n+=m;
returnn;
}
main( )
{intn=0;
printf("%d,"f(++n));
printf("%d\n",f(n++));
}
程序运行后的输出结果是( A )。
A.1,2B.1,1C.2,3D.3,3
解析:
由题可知,输出是调用了f函数,其中有f(++n)和f(n++),其中n=0,所以输出的结果为l,2。
23有以下程序
#include
main( )
{chara[3O],b[30];
scanf("%S",a);
gets(b);
printf("%s\n%s\\n",a,b);
}
程序运行时若输入:
howareyou?
Iamfine<回车>
则输出结果是( B )。
A.howareyou?
IamfineB.howareyou?
Iamfine
C.howareyou?
IamfineD.howareyou?
解析:
此题主要考查scanf函数和gets函数的区别。
答案为B。
scanf("",&a)一遇到空格就认不出来,例如你输入hinihao则scanf只能取到hi,而若换成gets则都能去
24下列叙述中正确的是( D )。
A.可以用关系运算符比较字符串的大小
B.空字符串不占用内存,其内存空间大小是0
C.两个连续的单引号是合法的字符常量
D.两个连续的双引号是合法的字符串常量
解析:
比较两个字符串大小用函数strcomp(S,t),空字符串有结束符,所以也要占用字节,两个双引号表示的是空字符串。
25有下列程序:
main( )
{inti,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);
}
程序执行后的输出结果是(B )。
A.x=4B.x=8C.x=6D.x=12
解析:
在第1次外层for循环中,首先x++得到x=1。
进入到内层for循环,只有循环j的值为奇数时,变量x的值才自加1,所以在内层for循环执行过程中,变量x的值自加两次,当退出内层for循环时,x=3,然后执行x++,得到x=4。
在进入执行第2次外层for循环中,首先x++得到x=5。
进入到内层for循环,只有循环变量J的值为奇数时,变量X的值才自加1,所以在内层for循环执行过程中,变量X的值自加l两次,当退出内层for循环时,x=7,然后执行x++,得到x=8,所以打印输出变量x的值为8。
26有以下程序:
#include
main( )
{FILE*fp;
intk,n,i,a[6]={1,2,3,4,5,6};
fp=fopen("d2.dat","w");
for(i=0;i<6;i++)fprintf(fp,"%d\n",a[i]);
fclose(fp);
fp(i=0;i<3;i++)fscanf(fp,"%d%d",&k,&n);
fclose(fp);
printf("%d\n,%d\n,k,n);
}
程序运行后的输出结果是(C )。
A.1,2B.3,4C.5,6D.123,456
解析:
此题是考查fprintf和fscanf,其中fprintf是向文件输出,文件为da2.dat文件,fscanf是向文件输入,所以根据程序循环写入和写出.可知答案为C。
27设x=011050,则x=x&01252的值是(A )。
A.0000001000101000
B.1111110100011001
C.0000001011100010
D.1100000000101000
解析:
本题主要考查按位与运算,x=Oll050的二进制形式为00010010000101000,Ol252的二进制形式为0000001010101010,两者相与得0000001000101000。
28设有以下语句
charchl,ch2;scanf("%c%C",&chl,&ch2);
若要为变量chl和ch2分别输入字符A和B,正确的输入形式应该是( B )。
A.A和B之间用逗号间隔B.A和B之间不能有任何间隔符
C.A和B之间可以用回车间隔D.A和B之间用空格间隔
解析:
scanf输入函数中,格式控制J必须严格按照函数中的要求进行输入,在scanf("%c%c",&chl,&ch2)的格式控制语句中没有任何字符进行间隔,所以在输入时也不能使用任何字符进行间隔,所以答案选择B。
29下列叙述中正确的是(C )。
A.对长度为n的有序链表进行查找,最坏情况下需要的比较次数为n
B.对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)
C.对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)
D.对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n)
解析:
分法查找只适用于顺序存储的有序表,对于长度为n的有序线性表,最坏情况只需比较log2n次。
30某二叉树共有7个结点,其中叶子结点只有l个,则该二叉树的深度为(假设根结点在第1层)( D )。
A.3B.4C.6D.7
解析:
有一个叶子节点而节点的总个数为7,根据题意,这个二叉树的深度为7
31有以下程序
#include
#include
main( )
{chara[10]=”abcd”;
printf("%d,%d\n",strlen(a),sizeof(a));
}
程序运行后的输出结果是( B )。
A.7,4B.4,10C.8,8D.10,10
解析:
strlen是求字符串的长度,结果为4,sizeof是求数组的长度,而数据在定义时已给出长度为10
32相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和( D )。
A.可重用性差B.安全性差C.非持久性D.冗余性
解析:
文件系统所管理的数据文件基本上是分散、相互独立的。
相对于数据库系统,以此为基础的数据处理存在3个缺点:
数据冗余大、数据的不一致性、程序与数据的依赖性强
33有以下程序:
#includc
voidfun(int*p)
{printf("%d\n",p[5]);}
main( )
{inta[10]={1,2,3,4,5,6,7,8,9,10};
fun(&a[3]);
}
程序运行后的输出结果是( B )。
A.5B.6C.8D.9
解析:
由题可知,fun(&a[3])是将&a[3]作为参数,而fun(int*p)后执行的语句为p[5],由数组a可知输出的为6。
34有以下程序:
#include
main( )
{chars[]="012xy\O8s34f4w2‘;
inti;n=0;,
for(i=0;s[i]!
=0;i++)
if(s[i]>='0'&&s[i]<='9')n++;
printf("%d\n",n);
}
程序运行后的输出结果是( B )。
A.0B.3C.7D.8
解析:
考查简单的C程序数组和循环。
for循环是指i=0,如果s/[3]!
=0,则i自动加1。
if循环指的是s[i]中的元素大于等于0且小于等于9,则n加l,所以答案为B。
35软件生命周期中的活动不包括(B )。
A.软件维护B.市场调研C.软件测试D.需求分析
解析:
软件生命周期是指从软件的产生到消亡的一个过程,其中包含需求分析、软件的开发、软件测试、软件维护等阶段。
其中不包含市场调研,所以答案选择B。
36.C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是(A )。
A.预定义标识符(如库函数中的函数名)可用做用户标识符,但失去原有含义
B.用户标识符可以由字母和数字任意顺序组成
C.在标识符中大写字母和小写字母被认为是相同的字符
D.关键字可用做用户标识符,但失去原有含义
解析:
用户标识符不能以数字开头,C语言中标识符是区分大小写的,关键字不能用做用户标识符。
37以下叙述中正确的是( B )
A.在C语言程序中,main函数必须放在其他函数的最前面
B.每个后缀为C的C语言源程序都可以单独进行编译
C.在C语言程序中,只有main函数才可单独进行编译
D.每个后缀为.C的C语言源程序都应该包含一个main函数
解析:
C语言是一种成功的系统描述语言,具有良好的移植性,每个后缀为.C的C语言源程序都可以单独进行编译。
38下列关系表达式中,结果为“假”的是( B )。
A.(3+4)>6B.(3!
=4)>2C.3<=4D.E.3F.(3<4)=1
解析:
在一个表达式中,括号的优先级高,先计算3!
=4,为真即是l,1>2为假
39若有定义和语句:
inta,b;scanf("%d,%d",&a,&b);以下选项中的输人数据,不能把值3赋给变量a、5赋给变量b的是( C )。
A.3,5,B.3,5,4C.3,5D.3,5
解析:
在输入3和5之间除逗号外不能有其他字符。
40数据库管理系统中负责数据模式定义的语言是( C)。
A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言
解析:
模式描述语言(DataDescriptionLanguage,DDL)来描述、定义的,体现、反映了数据库系统的整体观。
二、基本操作题(共18分)
41请补充main()函数,该函数的功能是:
把一个字符串中的所有小写字母字符全部转换成大写字母字符,其他字符不变,结果保存原来的字符串中。
例如,当str[M]="abcdefl23ABCD",结果输出:
"ABCDEFl23ABCD"。
注意:
部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在横线上填人所编写的若干表达式或语句。
试题程序:
#include
#include
#include
#defineM80
voidmain()
{
intj;
charstr[M]="abcdefl23ABCD";
char*pf=str;
system("CLS");
printf("***originalstring***\n");
puts(str);
【1】
while(*(pf+j))
{
if(*(pf+j)>='a'&&*(pf+j)<='Z')
{
*(pf+j)=【2】;
【3】;
}
else
j++;
}
printf("****newstring****\n");
puts(str);
system("pause");}
【1】j=0【2】*(pf+j)-32【3】j++
【解析】由程序中可知,变量j为字符数组的下标,其初始值为0。
因此【l】处填“j=0”;大写字母的ASCIl码值比小写字母的4、32,要将小写字母变为大写字母,因此,【2】处填“*(pf+j)-32”;要将字符串数组中的所有小写字母变为大写字母,需要检查其中的每一个字符,因此,【3】处填“j++”。
三、程序改错题(共24分)
42下列给定的程序中,函数proc()的功能是:
用选择法对数组中的m个元素按从小到大的顺序进行排序。
例如,排序前的数据为:
1132-5214
则排序后的数据为:
-52111432
请修改程序中的错误,使它能得到正确结果。
注意:
不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#defineM20
voidproc(inta[],intn)
{