二级C语言真题2013年09月-(3)
(总分100, 做题时间90分钟)
一、选择题
1. 
设栈的顺序存储空间为S(0:49),栈底指针bottom=49,栈顶指针top=30(指向栈顶元素)。则栈中的元素个数为______。
A 30
B 29
C 20
D 19
2. 
某二叉树的前序序列为ABCDEFG,中序序列为DCBAEFG,则该二叉树的深度(根节点在第1层)为______。
A 2
B 3
C 4
D 5
3. 
下列叙述中正确的是______。
A 存储空间连续的数据结构一定是线性结构
B 存储空间不连续的数据结构一定是非线性结构
C 没有根节点的非空数据结构一定是线性结构
D 具有两个根节点的数据结构一定是非线性结构
4. 
下列叙述中正确的是______。
A 带链队列的存储空间可以不连续,但队头指针必须大于队尾指针
B 带链队列的存储空间可以不连续,但队头指针必须小于队尾指针
C 带链队列的存储空间可以不连续,且队头指针可以大于也可以小于队尾指针
D 带链队列的存储空间一定是不连续的
5. 
某系统结构图如下图所示:

该系统结构图的宽度是______。
A 2
B 3
C 4
D n
6. 
下面不能作为软件需求分析工具的是______。
A PAD图
B 数据字典(DD)
C 数据流程图(DFD图)
D 判定树
7. 
下面不属于对象基本特点的是______。
A 标识唯一性
B 可复用性
C 多态性
D 封装性
8. 
据库设计中,描述数据间内在语义联系得到E-R图的过程属于______。
A 逻辑设计阶段
B 需求分析阶段
C 概念设计阶段
D 物理设计阶段
9. 
两个关系R,S如下,由关系R和S得到关系T,则所使用的操作为______。
R
B C D
a 0 k1
S
B C D
f 3 k2
n 2 x1
T
B C D
a 0 k1
f 3 k2
n 2 x1
A 并
B 自然连接
C 差
D 交
10. 
关系数据模型______。
A 只能表示实体间1:1联系
B 只能表示实体间1:m联系
C 可以表示实体间m:n联系
D 能表示实体间1:n联系而不能表示实体间n:1联系
11. 
以下选项中叙述正确的是______。
A C程序中的语句要经过编译才能转换成二进制机器指令
B 算法需要包含所有三种基本结构
C 有些算法不能用三种基本结构来表达
D 简单算法的操作步骤不能超过20步
12. 
以下选项中叙述正确的是______。
A 复杂任务可以分解成简单子任务
B C语言程序中的所有函数必须保存在同一个源文件中
C 全部三种基本结构都包含的才是结构化程序
D C语言程序可以定义多个不同内容的main函数
13. 
以下选项中,合法的数值型常量是______。
A 3.1415
B "A"
C 092
D 0xDH
14. 
以下选项中,合法的实数是______。
A 4.5E2
B E1.3
C 7.11E
D 1.2E1.2
15. 
若有定义int a,b,c;以下选项中的赋值语句正确的是______。
A a=(b=c)+1;
B (a=b)=c=1;
C a=(b==c)=1;
D a+b=c;
16. 
有如下程序:
#include <stdio.h>
main()
{
int x=0x13;
printf("%d\n",x+1);
}
程序运行后的输出结果是______。
A 12
B 14
C 20
D 13
17. 
对于if(表达式)语句,以下叙述正确的是______。
A “表达式”的值可以是任意合法的数值
B 在“表达式”中不能出现变量
C 在“表达式”中不能出现常量
D “表达式”的值必须是逻辑值
18. 
以下程序段中,不能实现条件“如果a<b则x=10,否则x=-10”的是______。
A x=(a>=b)?-10:10;
B if(a<b)x=10;else x=-10;
C x=-10;if(a<b)x=10;
D if(a<b)x=10;if(b<a)x=-10;
19. 
以下能够实现计算5!的程序段是______。
A int fac=1,k=0;do{k++;fac*=k;} while(k<5);
B int fac=0,k=1;do{fac*=k;k++;} while(k<5);
C int fac=1,k=1;do{k++;fac*=k;} while(k<=5);
D int fac=1,k=0;do{fac*=k;k++;} while(k<5);
20. 
有以下程序:
#include <stdio.h>
main()
{
int x=0,y=6;
do
{while(--y)x++;}
while(y--);
printf("%d,%din",x,y);
}
程序的运行结果是______。
A 5,0
B 6,0
C 5,-1
D 6,-1
21. 
有以下程序:
#include <stdio.h>
main()
{ char*s="120119110";
int n0,n1,n2,nn,i;
n0=n1=n2=nn=i=0;
do{
switch(s[i++])
{ default: nn++;
case"0": n0++;
case"1": n1++;
case"2": n2++;
}
} while(s[i]);
printf("n0=%d,n1=%d,n2=%d,nn=%d\n",n0,n1,n2,nn);
}
程序的运行结果是______。
A n0=3,n1=8,n2=9,nn=1
B n0=2,n1=5,n2=1,nn=1
C n0=2,n1=7,n2=10,nn=1
D n0=4,n1=8,n2=9,nn=1
22. 
有以下程序:
#include <stdio.h>
int m1(int x, int y)
{ return x<=y?x:y;}
int m2(int x,int y)
{ return x<=y?y:x;}
int fun(int a,int b)
{ return a+b; }
main()
{ int x=2,y=3,z=1;
printf("%d\n",fun(m1(x,y),m2(y,z)));
}
程序的运行结果是______。
A 6
B 5
C 4
D 3
23. 
有如下程序:
#include <stdio.h>
int sub(double a,double b)
{
return(int)(a-b);
}
main()
{
printf("%d\n",sub(3.8,2.1));
}
程序运行后的输出结果是______。
A 2.0
B 1.7
C 2
D 1
24. 
有如下程序:
#include <stdio.h>
main()
{
char*p1=0;
int*p2=0;
double*p3=0;
printf("%d,%d,%d\n",sizeof(p1),sizeof(p2),sizeof(p3));
}
程序运行后的输出结果是______。
A 4,4,4
B 1,4,8
C 0,0,0
D 1,2,4
25. 
有如下程序:
#include <stdio.h>
main()
{
int a = 0,*ptr;
ptr = &a;
*ptr = 3;
a = (*ptr)++;
printf("%d,%d\n",a,*ptr);
}
程序运行后的输出结果是______。
A 4,4
B 0,1
C 1,4
D 0,4
26. 
有如下程序:
#include <stdio.h>
main()
{
int i,k;
int array[4][2] = {{1,2},{4,9},{6}};
for(i=0;i<2;i++)
for(k=0;k<4;k++)
{
printf("%d,",array[k][i]);
}
printf("\n");
}
程序运行后的输出结果是______。
A 1,2,4,9,6,
B 1,4,6,0,2,9,0,0,
C 2,9,0,0,1,4,6,0,
D 2,9,6,1,4,
27. 
有如下程序:
#include <stdio.h>
main()
{
int i,*ptr;
int array[3] = {8,2,4};
for(ptr=array,i=0; i<2; i++)
printf("%d,",*ptr++);
printf("\n");
}
程序运行后的输出结果是______。
A 8,2,
B 8,8,
C 2,4,
D 4,8,
28. 
有如下程序:
#include <stdio.h>
main()
{
int i,*ptr;
int array[5] = {5,3,1};
for(ptr=array, i=0; i<5; i++, ptr++)
{
if (*ptr == 0)
putchar("X");
else
putchar("A"+*ptr);
}
printf("\n");
}
程序运行后的输出结果是______。
A FDBXX
B FFFXX
C FDBBB
D ABCDE
29. 
有如下程序:
#include <stdio.h>
#include <string.h>
main()
{
char name[10]= "c-book";
char*str = name;
printf("%d,%d,%d,%d\n", sizeof(name), strlen(name), sized(str), strlen(str));
}
程序运行后的输出结果是______。
A 10,6,4,6
B 11,6,11,6
C 11,6,1,6
D 10,7,1,7
30. 
有如下程序:
#include <stdio.h>
main()
{
char name[10]={"S","T","R","I","N","G,};
name[3]="E";name[5] = 0;
printf("%s\n",name);
}
程序运行后的输出结果是______。
A STRENG
B STRIEG
C STREN
D STRENO
31. 
有如下程序:
#include <stdio.h>
int disp(char*str)
{
while(*str)putchar(*str++);
return*str;
}
main()
{
printf("%d\n", disp("NAME"));
}
程序运行后的输出结果是______。
A NAME0
B NAMEE
C NAME
D NAME\0
32. 
有如下程序:
#include <stdio.h>
main()
{
char*p,old_str[10]="wind";
int password;
scanf("%d",&password);
p = old_str;
while(*p)
{
printf("%c",*p + password);
p++;
}
printf("\n");
}
程序运行时,从键盘输入2<回车>,输出结果是______。
A ykpf
B wind
C xjoe
D 2222
33. 
有如下程序:
#include <stdio.h>
int sum(int*array,int len)
{
if(len == 0)
return array[0];
else
return array[0]+sum(array+1, len-1);
}
main()
{
int array[5] = {1,2,3,4,5};
int res = sum(array,4);
printf("%d\n",res);
}
程序运行后的输出结果是______。
A 15
B 10
C 8
D 1
34. 
有如下程序:
#include <stdio.h>
int*sum(int data)
{
static int init = 0;
init += data;
return &init;
}
main()
{
int i,*p;
for(i=1; i<=4; i++) sum(i);
p = sum(0);
printf("%d\n",*p);
}
程序运行后的输出结果是______。
A 15
B 0
C 1
D 10
35. 
有如下程序:
#include <stdio.h>
#define D(x)4*x+1
main()
{
int i = 2,j = 4;
printf("%d\n", D(i+j));
}
程序运行后的输出结果是______。
A 25
B 13
C 9
D 12
36. 
有如下程序:
#include <stdio.h>
struct S
{
int x,y;
};
main()
{
struct S data[2] = {4,3,1,9};
int i;
for(i=0; i<2; i++)
printf("%d,%d;",data[i].x,data[i].y>>1);
printf("\n");
}
程序运行后的输出结果是______。
A 4,1;1,4;
B 4,1;2,4;
C 4,3;1,9;
D 4,3;2,3;
37. 
有如下程序:
#include <stdio.h>
#include <string.h>
struct S
{
char name[10];
};
void change(struct S *data, int value)
{
strcpy(data->name,"****");
value = 13;
}
main()
{
struct S input;
int num = 4;
strcpy(input.name,"THIS");
change(&input,num);
printf("%s,%d\n",input.name,num);
}
程序运行后的输出结果是______。
A ****,4
B ****,13
C THIS,4
D THIS,13
38. 
有如下程序:
#include <stdio.h>
#include <string.h>
struct S
{
char name[10];
};
main()
{
struct S s1,s2;
strcpy(s1.name,"12345");
strcpy(s2.name,"ABC");
s1 = s2;
printf("%s\n",s1.name);
}
程序运行后的输出结果是______。
A ABC12
B ABC45
C 12345
D ABC
39. 
有如下程序:
#include <stdio.h>
main()
{
int i, array[5] = {3,5,10,4};
fbr(i=0; i<5; i++)
printf("%d,",array[i]&3);
printf("\n");
}
程序运行后的输出结果是______。
A 3,1,2,0,0,
B 3,5,10,4,0,
C 3,3,3,3,0,
D 3,2,2,2,0,
40. 
有如下程序:
#include <stdio.h>
main()
{
int i;
FILE* fp;
for(i=0; i<5; i++)
{
fp = fopen("output.txt","w");
fputc("A"+i,fp);
fclose(fp);
}
}
程序运行后,在当前目录下会生成一个output.txt文件,其内容是______。
A E
B EOF
C ABCDE
D A
二、程序填空题
1. 
程序通过定义学生结构体数组,存储若干名学生的学号、姓名和三门课的成绩。函数fun的功能是:将存放学生数据的结构体数组,按姓名的字典序(从小到大)排序。
请在程序的下画线处填入正确的内容,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
#include <string.h>
struct student {
long sno;
char name[10];
float score[3];
};
void fun(struct student a[], int n)
{
/**********found**********/
______t;
int i, j;
/**********found**********/
for(i=0; i<______; i++)
for(j=i+1; j<n; j++)
/**********found**********/
if(strcmp(______)>0)
{ t = a[i]; a[i] = a[j];
a[j] = t;
}
}
main()
{ struct student s[4]={{10001,"ZhangSan",95,80,88},{10002,"LiSi",85,70,78},{10003,"CaoKai",75,60,88},{10004,"FangFang",90,82,87}};
int i,j;
printf("\n\nThe original data:\n\n");
for(j=0; j<4; j++)
{ printf("\nNo:%ld Name:%-8s Scores: ",s[j].sno,s[j].name);
for(i=0; i<3; i++)
printf("%6.2f",s[j].score[i]);
printf("\n");
}
fun(s,4);
printf("\n\nThe data after soring:\n\n");
for(j=0; j<4; j++)
{ printf("\nNo:%td Name:%-8s Scores:",s[j].sno,s[j].name);
for(i=0; i<3; i++)
printf("%6.2f",s[j].score[i]);
printf("\n");
}
}
三、程序修改题
1. 
下列给定程序中,函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
例如,调用fun函数之前给字符串输入“ABCDeFGH”,调用后字符串中的内容应为“eABCDFGH”。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
void fun(char*p)
{
char max,*q;int i=0;
max=p[i];
while(p[i]!=0)
{
if(max<p[i])
{ max=p[i];
/**********found**********/
q=p+i
}
i++;
}
/**********found**********/
while(q<p)
{
*q=*(q-1);q--;
}
p[0]=max;
}
void main()
{
char str[80];
printf("Enter a string:");gets(str);
printf("\nThe original string:");
puts(str);
fun(str);
printf("\nThe string after moving:");
puts(str);printf("\n\n");
}
四、程序设计题
1. 
学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中。请编写函数fun,其功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。
例如,输入的分数是60、69,则应当把分数在60~69的学生数据输出,包含60分和69分的学生数据。主函数中把60放在low中,把69放在heigh中。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include <stdio.h>
#define N 16
typedef struct
{
char num[10];
int s;
}STREC;
int fun(STREC*a,STREC*b, int 1, int h)
{
}
void main()
{
STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};
STREC h[N];
int i,n,low,heigh,t;
printf("Enter 2 integer number low & heigh:");
scanf("%d%d",&low,&heigh);
if(heigh<low)
{t=heigh;heigh=low;low=t;}
n=fun(s,h,low,heigh);
printf("The student"s data between%d--%d:\n",low,heigh);
for(i=0;i<n;i++)
printf("%s%4d\n",h[i].num,h[i].s);
printf("\n");
}
答题卡