二级C语言真题2013年03月-(2)
(总分100, 做题时间90分钟)
一、选择题
1. 
设循环队列为Q(1:m),其初始状态为front=rear=m。经过一系列入队与退队运算后,front=20,rear=15。现要在该循环队列中寻找最小值的元素,最坏情况下需要比较的次数为______。
A 5
B 6
C m-5
D m-6
2. 
某二叉树的前序序列为ABCDEFG,中序序列为DCBAEFG,则该二叉树的后序序列为______。
A EFCDCBA
B DCBEFGA
C BCDGFEA
D DCBGFEA
3. 
下列叙述中错误的是______。
A 在链表中,如果每个节点有两个指针域,则该链表一定是非线性结构
B 在链表中,如果有两个节点的同一个指针域的值相等,则该链表一定是非线性结构
C 在链表中,如果每个节点有两个指针域,则该链表一定是线性结构
D 在链表中,如果有两个节点的同一个指针域的值相等,则该链表一定是线性结构
4. 
下列叙述中错误的是______。
A 在带链队列中,队头指针和队尾指针都是在动态变化的
B 在带链栈中,栈顶指针和栈底指针都是在动态变化的
C 在带链栈中,栈顶指针是在动态变化的,但栈底指针是不变的
D 在带链队列中,队头指针和队尾指针可以指向同一个位置
5. 
软件生命周期中,确定软件系统要做什么的阶段是______。
A 需求分析
B 软件测试
C 软件设计
D 系统维护
6. 
下面对软件测试和软件调试有关概念叙述错误的是______。
A 严格执行测试计划,排除测试的随意性
B 程序调试通常也称为Debug
C 软件测试的目的是发现错误和改正错误
D 设计正确的测试用例
7. 
下面属于系统软件的是______。
A 财务管理系统
B 编译软件
C 编辑软件word
D 杀毒软件
8. 
将E-R图转换为关系模式时,E-R图中的实体和联系都可以表示为______。
A 属性
B .键
C 关系
D .域
9. 
有两个关系R与S如下,由关系R和S得到关系T,则所使用的操作为______。
R
A A1
a 0
b 1
S
B B1 B2
f 3 k2
n 2 x1
T
A A1 B B1 B2
a 0 f 3 k2
a 0 n 2 x1
b 1 f 3 k2
b 1 n 2 x1
A .并
B 自然连接
C 笛卡尔积
D .交
10. 
在数据管理的三个发展阶段中,数据的共享性好且冗余度最小的是______。
A 人工管理阶段
B 文件系统阶段
C 数据库系统阶段
D 面向数据应用系统阶段
11. 
以下叙述中错误的是______。
A 书写风格良好的程序执行效率高
B 书写风格良好的程序易读性好
C C程序可以在一行上写多条语句
D C程序允许将一条语句分写在多行上
12. 
在C语言中,以下选项中不能正确表示10×1000之值的是______。
A 1.0E4.0
B 1.FA
C 10E3
D 1.0e4
13. 
设有定义:int a=0,b=1,c=1;以下选项中,表达式值与其他三个不同的是______。
A b=a==c
B a=b=c
C a=c==b
D c=a!=c
14. 
设有两行定义语句:
int scanf;
float case;
则以下叙述正确的是______。
A 两行定义语句都不合法
B 两行定义语句都合法
C 第1行语句不合法
D 第2行语句不合法
15. 
设有定义:double x=2.12;,以下不能完整输出变量x值的语句是______。
A printf("x=%5.0f\n",x);
B printf("x=%f\n",x);
C printf("x=%lf\n",x);
D printf("x=%0.5f\n",x);
16. 
设有定义:int a,b;float x,y;,则以下选项中对语句所作的注释叙述错误的是______。
A scanf("%d%d%f",&a,&b);/*多余的格式符%f完全不起作用*/
B scanf("%d%d",&a,&b,&x);/*多余的输入项不能获得输入数据*/
C scanf("%d%%d",&a,&h,&x);/*输入项与格式符类型不匹配,变量b和X得不到正确的输入数据+/
D scanf("Input:%d%d",&a,&b);/*格式串中允许加入格式符以外的字符串*/
17. 
有如下程序:
#include <stdio.h>
main()
{
int a = 0, b = 1;
if(++a == b++)
printf("T");
else
printf("F");
printf("a=%d,b=%d\n",a,b);
printf("\n");
}
程序运行后的输出结果是______。
A Ta=0,b=1
B Fa=1,b=2
C Ta=1,b=2
D Fa=0,b=2
18. 
有如下程序:
#include <stdio.h>
main()
{
int i=1;
for(printf("%d",i); i<4; i++)
printf("%d", i);
printf("\n");
}
程序运行后的输出结果是______。
A 1123
B 123
C 0123
D 001
19. 
有如下程序:
#include <stdio.h>
main()
{
char ch="A";
while(ch<"D")
{
printf("%d", ch-"A");
ch++;
}
printf("\n");
}
程序运行后的输出结果是______。
A ABC
B 012
C abc
D 123
20. 
有如下程序:
#include <stdio.h>
main()
{
if("\0" == 0) putehar("X");
if("0" == 0) putehar("Y");
if("a">"b") putchar("Z").
printf("\n");
}
程序运行后的输出结果是______。
A .X
B XYZ
C YZ
D .Y
21. 
有如下程序:
#include <stdio.h>
main()
{
char ch="M";
while(ch !="K")
{
ch--;
putchar(ch);
}
printf("\n");
}
程序运行后的输出结果是______。
A MN
B LK
C OP
D MM
22. 
有以下程序段:
scanf("%d%d%d",&a,&b,&c);
if(a>b) a=b;
if(a>c) a=c;
printf("%d\n",a);
该程序段的功能是______。
A 输出a、b、c中的最小值
B 输出a、b、c中的最大值
C 输出a的原始值
D 输出a、b、c中值相等的数值
23. 
以下关于函数的叙述中正确的是______。
A 函数调用必须传递实参
B 函数必须要有形参
C 函数必须要有返回值
D 函数形参的类型与返回值的类型无关
24. 
设有定义:int a,b[10],*c=NULL,*p;,则以下语句错误的是______。
A p=a;
B p=b;
C p=c;
D p=&b[0];
25. 
有以下程序:
#include <stdio.h>
void fun(int *x,int s,int e)
{ int i,j,t;
for(i=s,j=e; i<j; i++,j--)
{t = *(x+i); *(x+i)=*(x+j); *(x+j)=t;}
}
main()
{ int m[]={0,1,2,3,4,5,6,7,8,9},k;
fun(m,0,3); fun(m+4,0,5); fun(m,0,9);
for(k=0; k<10;k++)
printf("%d",m[k]);
}
程序的运行结果是______。
A 4567890123
B 3210987654
C 9876543210
D 0987651234
26. 
设有n个数按从大到小的顺序存放在数组x中,以下能使这n个数在X数组中的顺序变为从小到大的是______。
A for(i=0;i<n/2;i++){ t=x[i];x[i]=x[n-i-1];x[n-i-1]=t;}
B for(i=0;i<n;i++){ t=x[i];x[i]=x[n-i-1];x[n-i-1]=t;}
C for(i=0;i<n/2;i++){ t=x[i];x[i]=x[n-i+1];x[n-i+1]=t;}
D for(i=0;i<n/2;i+=2){t=x[i];x[i]=x[n-i-1];x[n-i-1]=t;}
27. 
设有一个M*N的矩阵已经存放在一个M行N列的数组x中,且有以下程序段:
sum=0;
for(i=0;i<M;i++) sum+=x[i][0]+x[i][N-1];
for(j=1;j<N-1;j++) sum+=x[0][j]+x[M-1][j];
以上程序段计算的是______。
A 矩阵两条对角线元素之和
B 矩阵所有不靠边元素之和
C 矩阵所有元素之和
D 矩阵所有靠边元素之和
28. 
有以下程序:
#include <stdio.h>
main()
{ int s[3][2]= {1,2,3,4,5,6},*ps[3],k;
for(k=0;k<3;k++)
{ ps[k]=s[k];
printf("%d",*(ps[k]+1));
}
}
程序的运行结果是______。
A 2 4 6
B 1 3 5
C 1 2 3
D 4 5 6
29. 
设有以下定义:
char s1[]="0123";
char s2[]= {"0","1","2","3"};
则以下叙述正确的是______。
A 数组s1的长度小于s2的长度
B 数组s1和s2的长度相同
C 数组s1的长度大于s2的长度
D 数组s1和s2完全等价
30. 
以下能正确进行字符串赋值的语句组是
A thai *ch; ch="abc";
B char ch[]={"a","b","c"};
C char ch[3]="abc";
D char ch[4]; ch="abc";
31. 
有以下程序:
#include <stdio.h>
int fun(char*s)
{ char*p=s;
while(*p++ != "\0");
return(p-s);
}
main()
{ char*p="01234";
printf("%d\n",fun(p));
}
程序的运行结果是______。
A 6
B 5
C 4
D 3
32. 
有以下程序:
#include <stdio.h>
main()
{ char*mm[4]={"abcd","1234","mnop","5678"};
char** pm=mm;
int i;
for(i=0; i<4; i++) printf("%s",pm[i]+i);
printf("\n");
}
程序的运行结果是______。
A abed1234mnop5678
B abcd234op8
C a2o8
D a1m5
33. 
有以下程序:
#include <stdio.h>
void fac2(int);
void fac1(int n)
{ printf("*");
if(n>0)fac2(n-1);
}
void fac2(int n)
{ printf("#");
it(n>0)fac2(--n);
}
main()
{ fac1(3); }
程序的运行结果是______。
A * ####
B *##*
C * *##
D *#*#
34. 
有以下程序:
#include <stdio.h>
int fun(int n)
{ static int t=1; int i=1;
for( ; i<=n; i++)t* =i;
return t;
}
main()
{ int t=1,i;
for(i=2;i<4; i++)
t+=fun(i);
printf("%d\n",t);
}
程序的运行结果是______。
A 8
B 11
C 15
D 4
35. 
有以下程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main()
{ char *p1,*p2;
p1=p2=(char*)malloc(sizeof(char)*10);
strcpy(p1,"malloc");
strcpy(p2, p1+1);
printf("%c%c\n",p1[0],p2[0]);
}
程序的运行结果是______。
A aa
B ma
C am
D mm
36. 
设有定义:struct{int n;float x;} s[2],m[2]={{10,2.8},{0,0.0}};
则以下赋值语句中正确的是______。
A s[0]=m[1];
B s=m;
C n=m.n;
D s[2].x=m[2].x;
37. 
有以下程序:
#include <stdio.h>
struct S{ int a; int *b;};
main()
{ int x1[] = {3,4},x2[]={6,7};
struct S x[]={1,x1,2,x2};
printf("%d,%d\n",*x[0].b,*x[1].b);
}
程序的运行结果是______。
A 1,2
B 3,6
C 4,7
D 变量的地址值
38. 
有以下程序:
#include <stdio.h>
#include <string.h>
typedef struct {
char name[10];
char sex;
int age;} STU;
void fun(STU *t)
{ strcpy((*t).name,"Tong");
(*t).age++;
}
main()
{ STU s[2]={"Hua","m",18,"Qin","f",19};
fun(s+1);
printf("%s,%d,%s,%d\n",s[0].name,s[0].age,s[1].name,s[1].age);
}
程序运行后的输出结果是______。
A Hua,18,Tong,20
B Hua,18,Qin,19
C Tong,19,Qin,19
D Hua,19,Tong,19
39. 
以下不属于C语言位运算符的是______。
A !
B |
C ^
D ~
40. 
有以下程序段:
FILE *fp;
if((fp=fopen("test.txt","w"))==NULL)
{ printf("不能打开文件!");
exit(0);}
else
printf("成功打开文件!");
若指定文件test.txt不存在,且无其他异常,则以下叙述错误的是______。
A 输出"不能打开文件!"
B 输出"成功打开文件!"
C 系统将按指定文件名新建文件
D 系统将为写操作建立文本文件
二、程序填空题
1. 
下列给定程序的功能是调用fun函数建立班级通信录。通信录中记录每位学生的编号、姓名和电话号码。班级人数和学生信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。
请在程序的下画线处填入正确的内容,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct
{ int num;
char name[10];
char tel[10];
}STYPE;
void cheek();
/**********found**********/
int fun(______ *std)
{
/**********found**********/
______*fp; int i;
if((fp=fopen("myfile5.dat","wb"))==NULL)
return(0);
printf("\nOutput data to file!\n");
for(i=0; i<N; i++)
/**********found**********/
fwrite(&std[i],sizeof(STYPE),1,______);
felose(fp);
return(1);
}
main()
{ STYPE s[10]= {{1,"aaaaa","111111"},{1,"bbbbb","222222"},{1,"CCCCC","333333"},{1,"ddddd","444444"},{1,"eeeee","555555"}};
int k;
k=fun(s);
if(k==1)
{ printf("Succeed!"); check(); }
else
printf("Fail!");
}
void check()
{ FILE*fp; int i;
STYPE s[10];
if((fp=fopen("myfile5.dat","rb"))==NULL)
{ printf("Fail!\n"); exit(0);}
plintf("\nRead file and output to screen:\n");
printf("\n num name tel\n");
for(i=0;i<N;i++)
{ fread(&s[i],sizeof(STYPE),1,fp);
printf("%6d %s %s\n",s[i].num,s[i].name,s[i].tel);
}
fclose(fp);
}
三、程序修改题
1. 
下列给定程序中,函数fun的功能是:先将字符串s中的字符按正序存放到字符串t中,然后把s中的字符按逆序连接到字符串t的后面。
例如,当s中的字符串为“ABCDE”时,则t中的字符串应为“ABCDEEDCBA”。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdlib.h>
#include <conio<a>h<a>
#include <stdio.h>
#include <string.h>
void fun(char *s, char *t)
{
int i,s1;
s1=strlen(s);
/**********found**********/
for(i=0;i<=s1;i++)
t[i]=S[i];
for(i=0;i<s1;i++)
t[s1+i]=S[i];
/**********found**********/
t[s1]="\0";
}
void main()
{
char s[100],t[100];
system("CLS");
printf("\nPlease enter string s:");
scanf("%s",s);
fun(s,t);
printf("The result is:%s\n",t);
}
四、程序设计题
1. 
函数fun的功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在e数的千位和十位上,b数的十位和个位数依次放在e数的百位和个位上。
例如,当a=45,b=12时,调用该函数后c=4152。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include <conio.h>
#include <stdio.h>
void fun(int a,int b,iong*c)
{
}
main()
{
int a,b;
long c;
printf("Input a,b:");
scanf("%d%d",&a,&b);
fun(a,b,&c);
pfintf("The result is:%d\n",c);
}
答题卡