二级C真题 +答案.docx
《二级C真题 +答案.docx》由会员分享,可在线阅读,更多相关《二级C真题 +答案.docx(15页珍藏版)》请在冰豆网上搜索。
![二级C真题 +答案.docx](https://file1.bdocx.com/fileroot1/2022-11/21/cb6b5657-ccec-44d7-891d-71e0b69d50a5/cb6b5657-ccec-44d7-891d-71e0b69d50a51.gif)
二级C真题+答案
真题第一套
一、选择题
(1)下列叙述中正确的题()
A、算法的空间复杂度与算法所处理的数据存储空间有关
B、算法的空间复杂度是指算法程序控制结构的复杂程度
C、算法的空间复杂度是指算法程序中指令的条数
D、压缩数据存储空间不会降低算法的空间复杂度//A
(2)下列各组排序法中,最坏情况下比较次数相同的是()
A、希尔排序与堆排序B、简单插入排序与希尔排序
C、简单选择排序与堆排序D、冒泡排序与快速排序//D
(3)设栈的存储空间为S(1:
50),初始状态为top=50。
现经过一系列正常的入栈与退栈操作后,top=20,则栈中的元素个数为()
A、31B、30C、21D、20//A
(4)某二叉树共有400个结点,其中有100个度为1的结点,则该二叉树中的叶子结点数为()
A、149B、150C、151D、不存在这样的二叉树//D
(5)下面属于“类-对象”主要特征的是()
A、对象一致性B、对象无关性C、类的多态性D、类的依赖性//C
(6)下面不属于需求分析阶段工作的是()
A、需求获取B、可行性研究
C、需求分析D、撰写软件需求规格说明书//B
(7)软件生命周期是指()//D
A、软件的需求分析、设计与实现B、软件的开发与管理
C、软件的实现和维护D、软件产品从提出、实现、使用维护到停止使用退役的过程
(8)在数据库的三级模式结构中,描述数据库中全体数据的全局逻辑结构和特征的是()
A、内模式B、用户模式C、外模式D、概念模式//D
(9)大学中每个年级有多个班,每个班有多名学生,则实体班级和实体学生之间的联系是()
A、一对多B、一对一C、多对一D、多对多//A
(10)有3个关系R、S和T如下:
RS
A
B
C
a
1
n
b
2
m
c
3
f
d
5
e
A
D
c
4
a
5
e
7
A
B
C
D
A
B
C
D
c
3
f
4
a
1
n
5
T
则由关系R、S得到关系T的操作是()//C
A、交B、投影C、自然连接D、并
(11)以下选项中,合法的C语言常量是()//A
A、1.234B、‘C++’C、“\2.0”D、2Kb
(12)有以下程序:
#include
{ints,t,A=10;
doubleB=6;
s=sizeof(A);
t=sizeof(B);
printf("%d,%d\n",s,t);
}
在VC6平台上编译运行,程序运行后的输出结果是()
A、4,8B、4,4C、2,4D、10,6//A
(13)关于程序模块化,以下叙述错误的是()//A
A、程序模块化可以提高程序运行的效率B、程序模块化可以提高程序编制的效率
C、程序模块化可以提高程序代码复用率D、程序模块化可以提高调试程序的效率
(14)以下选项中不能在C语言程序中用作用户标识符的是()//A
A、autoB、scanfC、FloatD、_3_14
(15)设有语句:
printf("%2d\n",2010);则以下叙述正确的是()//A
A、程序运行时输出2010B、程序运行时输出20
C、程序运行时输出10D、指定的输出宽度不够,编译出错
(16)以下不属于C语言整型常量的是()//B
A、0LB、-018C、0XaD、200U
(17)有以下程序:
#include
main()
{intx=1,y=0;
if(!
x)y++;
elseif(x==0)
if(x)y+=2;
elsey+=3;
printf("%d\n",y);
}
程序运行后的输出结果是()//C
A、1B、2C、0D、3
(18)若变量已正确定义,在if(W)printf("%d\n",k);中,以下不可替代W的是()
A、a<>b+cB、ch=getchar()C、a==b+cD、a++//A
(19)有以下程序:
#include
main()
{inta=0,b=0;
for(;a<7;a++)
{if(a%2==0)continue;
b+=a;
continue;
}
printf("%d\n",b);
}
程序运行后的输出结果是()
A、0B、4C、1D、9//D
(20)有以下程序:
#include
main()
{chara='5',b;
a++;
printf("%d,%d\n",a-'5'+255,b=a-'5');
}
程序运行后的输出结果是()
A、256,1B、1,256C、255,1D、256,0//A
(21)有以下程序:
#include
main()
{inta=7,b=0;
do{b+=a;a-=1;}while(a--);
printf("%d,%d\n",b,a);
}
程序运行后的输出结果是()
A、28,0B、28,1C、16,0D、16,-1//D
(22)有以下程序:
#include
main()
{intx,a=1,b=1;
while
(1)
{scanf("%d",&x);
if(x>0){a*=x;break;}
if(x<0){b*=x;continue;}
printf("%d,%d\n",a,b);
}
}
程序运行时输入:
-1-2012<回车>,则输出结果是()
A、1,2B、2,2C、-1,1D、-2,1//A
(23)有以下程序:
#include
#defineN4
voidfun(inta[][N],intb[])
{inti;
for(i=0;i}
main()
{intx[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i;
fun(x,y);
for(i=0;iprintf("%d\n",y[i]);printf("\n");
}
程序运行后的输出结果是()//A
A、-3,-1,1,3B、-12,-3,0,0C、0,1,2,3D、-3,-3,-3,-3
(24)有以下程序:
#include
main()
{intx[3][2]={0},i;
for(i=0;i<3;i++)scanf("%d",x[i]);
printf("%3d%3d%3d\n",x[0][0],x[0][1],x[1][0]);
}
程序运行时输入:
246<回车>,则输出结果是()//D
A、246B、200C、240D、204
(25)有以下程序:
#include
intm1(intx,inty)
{if(x<=y)return2*x+1;
elsereturny;
}
intm2(intx,inty)
{if(x<=y)return2*y+1;
elsereturnx;
}
main()
{inti,t1=10,t2=0;
for(i=1;i<=4;i++)
{t1=m1(i,t1);t2=m2(i,t2);}
printf("t1=%dt2=%d\n",t1,t2);
}
程序运行后的输出结果是()//A
A、t1=9t2=4B、t1=4t2=9C、t1=9t2=9D、t1=1t2=4
(26)有以下程序:
#include
voidf(int);
main()
{voidf(int);
f(5);
}
voidf(intn)
{printf("%d\n",n);}
以下叙述中错误的是()//A
A、f函数中不可以出现return语句B、在主函数中,f(5);可以正确调用f函数
C、在主函数后的其他函数可以正确调用f函数D、f函数无返回值,应当定义成void类型
(27)有以下程序:
#include
main()
{inti=3,j=5,*p=&i,*q=&j,**r;
r=&q;
printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,**r);
}
程序运行后输出结果是()//A
A、3,5,3,5,5B、5,3,5,3,5C、3,5,3,5,3D、3,5,3,3,5
(28)以下不能使指针s所指存储单元的值增1的选项是()//C
A、(*s)++;B、*s=*s+1;C、*s++;D、++*s
(29)以下语句中存在语法错误的是()//A
A、charss[6][20];ss[1]="right";B、charss[][20]={"right?
"};
C、char*ss[6];ss[1]="right?
";D、char*ss[]={"right?
"};
(30)有以下程序:
#include
intfun()
{staticintx=1;
x*=2;
returnx;
}
main()
{inti,s=1;
for(i=1;i<=3;i++)s*=fun();
printf("%d\n",s);
}
程序运行后输出结果是()//D
A、30B、10C、0D、64
(31)有以下程序(字符a的ASCII码值为97):
main()
{
char*s={"abc"};
do{printf("%d",*s%10);++s;}while(*s);}
程序运行后输出结果是()//B
A、abcB、789C、7890D、979899
(32)有以下程序:
#include
#include
main()
{
inti,len;
charb[]="WelcomeyoutoBeijing!
";
len=strlen(b);
for(i=0;iif(b[i]=='')
{strcpy(b,b+i+1);i=0;}
printf("%s\n",b);
}
程序运行后输出结果是()//A
A、Beijing!
B、toBeijing!
C、WelcomeyoutoBeijing!
D、youtoBeijing!
(33)以下关于字符串处理的叙述正确的是()//A
A、进行字符串复制时,目的串的存储空间必须足够大
B、两个字符串进行比较时,短的一个必定比长的一个小
C、计算一个字符串的长度时,应包含串尾的结束标志
D、两个字符串连接时,对存储空间的大小没有要求
(34)有以下程序:
//A
#include
doublefun(intn)
{
staticdoublef=1;
f*=n;
returnf;
}
main()
{
inti;
doubles=0;
for(i=1;i<6;i++)
s+=fun(i);
printf("%lf\n",s);
}
程序计算的是()
A、s=1!
+2!
+3!
+4!
+5!
B、s=1+2+3+4+5
C、s=1*2*3*4*5D、s=1!
*2!
*3!
*4!
*5!
(35)下面结构体的定义语句中,错误的是()//A
A、structord{intx;inty;intz;}structorda;B、structord{intx;inty;intz;};structorda;
C、structord{intx;inty;intz;}a;D、struct{intx;inty;intz;}a;
(36)有以下程序:
#include
main()
{FILE*fp;inta[10]={1,2,3},i,n;
fp=fopen("d1.dat","w");
for(i=0;i<3;i++)fprintf(fp,"%d",a[i]);
fprintf(fp,"\n");
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d",&n);
fclose(fp);
printf("%d\n",n);
}
程序运行后输出结果是()
A、123B、12300C、1D、321
(37)有以下程序:
#include
#defineMUL1(x,y)x*y
#defineMUL2(x,y)(x)*(y)
#defineMUL3(x,y)(x*y)
main()
{intm=2,n=3;
printf("%d,%d,%d\n",MUL1(m,m+n)*2,MUL2(m,m+n)*2,MUL3(m,m+n)*2);}
程序运行后输出结果是()
A、10,20,14B、20,20,20C、10,10,10D、14,14,14
(38)有以下程序:
#include
voidfun(inta)
{
if(a>1)fun(a-1);
printf("%d",a);
}
main()
{intq=5;fun(q);printf("\n");}
程序运行后输出结果是()
A、12345B、54321C、012345D、543210
(39)以下关于C语言文件的叙述中正确的是()
A、文件由数据序列组成,其类型可以为二进制文件或文本文件
B、文件由记录序列组成,其类型可以为二进制文件或文本文件
C、文件由字符序列组成,其类型可以为二进制文件或文本文件
D、文件由数据序列组成,其类型只能是二进制文件
(40)设有定义和语句(假设shortint型数据占2字节)
shortint*pi,*pj;
pi=pj=(short*)malloc
(2);
则以下叙述正确的是()
A、pi和pj指向了同一个shortint型存储单元
B、pi和pj指向了2个连续的shortint型存储单元的首地址
C、pi和pj分别指向了一个shortint型存储单元
D、pi和pj分别指向了2个shortint型存储单元
二程序填空题
函数fun的功能是:
将一副扑克牌编号为1,2,3,......53,54,以某种特定的方式洗牌,这种方式是将这幅牌分成两半,然后将它们交叉,并始终保持编号为1的牌在最上方,如第一次这样洗牌后的结果为:
1,28,2,29,......53,27,54.两次洗牌后的结果为:
1,41,28,15,2,42...53,40,27,14,54.
程序的功能是:
输出经过n次这样洗牌后的结果。
请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include
voidfun(inta[55],intn)
{inti,k;
/********************found**********************/
int【1】[55];
for(i=0;i{for(k=1;k<=27;k++)
{b[2*k-1]=a[k];
/********************found**********************/
b[【2】*k]=a[k+27];
}
for(k=1;k<=54;k++)
/********************found**********************/
a[k]=【3】;
}
}
main()
{intm,a[55],i;
for(i=1;i<55;i++)
a[i]=i;
printf("请输入洗牌次数:
");
scanf("%d",&m);
fun(a,m);
for(i=1;i<55;i++)
printf("%d",a[i]);
printf("\n");}
三程序修改题
给定程序MODI1.C中,函数fun的功能是:
判断输入的任何一个正整数n,是否等于某个连续正整数序列之和。
若是,则输出所有可能的序列,否则输出“不能分解”。
例如:
当输入100时,输出:
100=9+10+11+12+13+14+15+16
100=18+19+20+21+22
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include
voidfun(intn)
{intj,b,c,m,flag=0;
for(b=1;b<=n/2;b++)
{
/********************found**********************/
n=m;c=b;
while(m!
=0&&m>=c)
{
/********************found**********************/
m=m-c;c++}
/********************found**********************/
if(m!
=0)
{printf("%d=",n);
for(j=b;jprintf("%d\n",j);
flag=1;
}
}
if(flag==0)
printf("不能分解\n");
}
main()
{intn;
printf("请输入一个整数:
");
scanf("%d",&n);
fun(n);
}
四程序设计题
请编写函数fun,其功能是:
判断t所指字符串中的字母是否连续递增字母序列组成(字符串长度大于等于2)。
例如字符串:
uvwxyz满足要求;而字符串:
uvxwyz不满足要求。
注意:
部分源程序存放在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun指定的部位填入所编写的若干语句。
试题程序:
#include
#include
voidNONO();
intfun(char*t)
{
}
main()
{chars[26];
printf("请输入一个字母组成的字符串:
");get(s);
if(fun(s))printf("%s是由连续字母组成的字符串.\n",s);
elseprintf("%s不是由连续字母组成的字符串.\n",s);
NONO();
}
voidNONO()
{
FILE*fp,*wf;
inti;
chars[26],*p;
fp=fopen("c:
\\test\\in.dat","r");
wf=fopen("c:
\\test\\out.dat","w");
for(i=0;i<10;i++)
{fgets(s,26,fp);
p=strchr(s,'\n');
if(p)*p=0;
if(fun(s))fprintf(wf,"%s\n",s+2);
elsefprintf(wf,"%s\n",strrev(s));
}
fclose(fp);
fclose(wf);
}
intfun(char*t)
{intlen=strlen(t);
if(len<2)
{return0;}
charbefore_ch=t[0];
charcurrent_ch;
intflag=1;
for(inti=1;t[i]!
=’\0’;++i)
{current_ch=t[i];
if(before_ch!
=current_ch-1)
{flag=0;
Break;
}
before_ch=current_ch;
}
Returnflag;
}