二级C语言真题2013年09月-(4)
(总分100, 做题时间90分钟)
一、选择题
1. 
下列叙述中正确的是______。
A 栈与队列都只能顺序存储
B 循环队列是队列的顺序存储结构
C 循环链表是循环队列的链式存储结构
D 栈是顺序存储结构而队列是链式存储结构
2. 
设某二叉树的前序序列为ABC,中序序列为CBA,则该二叉树的后序序列为______。
A BCA
B CBA
C ABC
D CAB
3. 
下列排序方法中,最坏情况下时间复杂度最小的是______。
A 冒泡排序
B 快速排序
C 堆排序
D 直接插入排序
4. 
为了对有序表进行对分查找,则要求有序表______。
A 只能顺序存储
B 只能链式存储
C 可以顺序存储也可以链式存储
D 任何存储方式
5. 
软件设计中模块划分应遵循的准则是______。
A 低耦合低内聚
B 高耦合高内聚
C 低耦合高内聚
D 内聚与耦合无关
6. 
下面属于整数类的实例是______。
A 0x518
B 0.518
C "-518"
D 518E-2
7. 
下面属于白盒测试方法的是______。
A 边界值分析法
B 基本路径测试
C 等价类划分法
D 错误推测法
8. 
设有一个商店的数据库,记录客户及其购物情况,由三个关系组成:商品(商品号,商品名,单价,商品类别,供应商),客户(客户号,姓名,地址,电邮,性别,身份证号),购买(客户号,商品号,购买数量),则关系购买的键为______。
A 客户号
B 商品号
C 客户号,商品号
D 客户号,商品号,购买数量
9. 
有两个关系R,S如下,由关系R和S通过运算得到关系T,则所使用的操作为______。
R
B C D
a 0 k1
b 1 n1
S
B C D
f 3 k2
a 0 k1
n 2 x1
T
B C D
a 0 k1
A 并
B 自然连接
C 差
D 交
10. 
在数据库管理系统提供的数据语言中,负责数据的查询、增加、删除和修改等操作的是______。
A 数据定义语言
B 数据管理语言
C 数据操纵语言
D 数据控制语言
11. 
流程图是描述算法的很好的工具,一般的流程图中由几种基本图形组成。其中判断框的图形是______。
A 菱形
B 长方形
C 平行四边形
D 椭圆型
12. 
以下叙述错误的是______。
A 在进行模块化程序设计的时候,应首先完成每个模块的编写调试,再集中考虑主程序中的算法
B 同一程序各模块可由一组人员同时进行编写调试,可提高编写程序的效率
C 模块化的程序设计是采用自顶向下、逐步细化的原则
D 程序的每个模块都可通过三种基本结构实现
13. 
关于C语言的变量名,以下叙述正确的是______。
A 变量名不可以与关键字同名
B 变量名不可以与预定义标识符同名
C 变量名必须以字母开头
D 变量名是没有长度限制的
14. 
有以下程序:
#include <stdio.h>
main()
{ int a;
a = (int)1.99*3;
printf("%d\n",a);
}
程序的运行结果是______。
A 3
B 5
C 6
D 结果不确定
15. 
有以下程序:
#include <stdio.h>
main()
{ int k=-17;
printf("%d,%o,%x\n",k,1-k,1-k);
}
程序的运行结果是______。
A -17,22,12
B -17,12,22
C -17,-22,-12
D 17,22,12
16. 
若有定义:int a;float b;double c;,程序运行时输入:a=1,b=2,c=3<回车>,能把值1输入给变量a、值2输入给变量b、值3输入给变量c的输入语句是______。
A scanf("a=%d,b=%f,c=%lf",&a,&b,&c);
B scanf("%d%f%lf",&a,&b,&c);
C scanf("a=%d,b=%lf,c=%lf",&a,&b,&c);
D scanf("a=%d,b=%f,c=%f",&a,&b,&c);
17. 
有以下程序:
#include <stdio.h>
main()
{ int a=0,b=0,c=0,d=0;
(++a‖++b)?++c : ++d;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
程序的运行结果是______。
A 1,0,1,0
B 1,1,0,1
C 1,0,0,1
D 1,1,1,0
18. 
有以下程序:
#include <stdio.h>
main()
{ int a,b;
for(a=0;a<3;a++)
{ scanf("%d",&b);
switch(b)
{ case 1: printf("%d,", b++);
case 2: printf("%d,", b++);
default: printf("%d,", b++);
}
}
printf("\n");
}
执行时输入:1 2 3<回车>,则输出结果是______。
A 1,2,3,2,3,3,
B 1,2,3,
C 2,3,4,3,4,4,
D 1,1,1,2,2,3
19. 
有以下程序:
#include <stdio.h>
main()
{ int a=1,b=1;
while(a--)
b--;
printf("%d,%d\n",a,b);
}
程序的运行结果是______。
A -1,0
B 0,0
C -1,-1
D 1,1
20. 
有以下程序:
#include <stdio.h>
main()
{ int a=1,b=0;
for(;a<5;a++)
{ if(a%2==0)break;
b+=a;
}
printf("%d\n",b);
}
程序的运行结果是______。
A 1
B 10
C 0
D 4
21. 
以下能正确输出字符a的语句是______。
A printf("%s","a");
B printf("%s","a");
C printf("%c","a");
D printf("%d","a");
22. 
有以下程序:
#include <stdio.h>
main()
{ char c;
do {
c=getchar();
putchar(c);
} while(c !="#");
printf("\n");
}
执行时如输入:abcdefg##<回车>,则输出结果是______。
A abcdefg#
B abcdefg
C abcdefg##
D ##
23. 
以下关于C语言函数参数传递方式的叙述正确的是______。
A 数据只能从实参单向传递给形参
B 数据可以在实参和形参之间双向传递
C 数据只能从形参单向传递给实参
D C语言的函数,参数既可以从实参单向传递给形参,也可以在实参和形参之间双向传递,可视情况选择使用
24. 
以下关于指针的叙述正确是______。
A 所有类型的指针变量所占内存的大小是一样的
B 指针变量所占内存的大小与其类型有关,char型指针变量只占1个字节,double型指针变量占8个字节
C 指针变量可直接指向任何类型的变量,而不会出现编译或运行错误
D 指针变量既可以直接指向结构体,也可直接指向结构体中某个成员,而不会出现编译或运行错误
25. 
有以下程序:
#include <stdio.h>
int k=5;
void f(int *s)
{ s=&k; }
main()
{ int m=3,*p=&m;
f(P);
printf("%d,%d\n",m,*p);
}
程序的运行结果是______。
A 3,3
B 5,5
C 3,5
D 5,3
26. 
有以下程序:
#include <stdio.h>
int *f(int *s,int*t)
{ if(*s < *t)
*s=*t;
return s;
}
main()
{ int i=3, j=5, *p=&i, *q=&j, *r;
r=f(p,q);
printf("%d,%d,%d,%d,%d\n",i,j,*p,*q, *r);
}
程序的运行结果是______。
A 5,5,5,5,5
B 3,5,5,5,5
C 5,3,3,3,5
D 3,5,3,5,5
27. 
有以下程序:
#include <stdio.h>
#define N 4
void fun(int a[][N])
{ int b[N][N],i,j;
for(i=0; i<N; i++)
for(j=0; j<N; j++)
b[i][j]=a[N-1-j][i];
for(i=0; i<N; i++)
for(j=0; j<N; j++)
a[i][j] = b[i][j];
}
main()
{ int x[N][N]={{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}
},i;
fun(x); fun(x);
for(i=0; i<N; i++)
printf("%d,",x[i][i]);
printf("\n");
}
程序的运行结果是______。
A 16,11,6,1,
B 1,6,11,16,
C 4,7,10,13,
D 13,10,7,4,
28. 
有以下程序:
#include <stdio.h>
void fun(int a[], int n)
{ int i,j=0,k=n/2,b[10];
for(i=n/2-1;i>=0; i--)
{ b[i]=a[j];
b[k]=a[j+1];
j+=2; k++;
}
for(i=0; i<n; i++)
a[i] = b[i];
}
main()
{ int c[10] = {10,9,8,7,6,5,4,3,2,1},i;
fun(c,10);
for(i=0;i<10;i++)
printf("%d,",c[i]);
printf("\n");
}
程序的运行结果是______。
A 2,4,6,8,10,9,7,5,3,1,
B 10,8,6,4,2,1,3,5,7,9,
C 1,2,3,4,5,6,7,8,9,10,
D 1,3,5,7,9,10,8,6,4,2,
29. 
有以下程序:
#include <stdio.h>
#include <string.h>
main()
{ int i;
char a[]="How are you!";
for(i=0;a[i];i++)
if(a[i]=="")
{ strcpy(a, &a[i+1]);
i=0;
}
printf("%s\n",a);
}
程序的运行结果是______。
A you!
B Howareyou!
C areyou!
D are you!
30. 
有以下程序(其中的strstr()函数头部格式为:char*strstr(char*p1,char*p2)确定p2字符串是否在p1中出现,并返回p2第一次出现的字符串首地址):
#include <stdio.h>
#include <string.h>
char*a="you";
char*b="Welcome you to Beijing!";
main()
{ char*p;
p=strstr(b,a)+strlen(a)+1;
printf("%s\n",p);
}
程序的运行结果是______。
A to Beijing!
B you to Beijing!
C Welcome you to Beijing!
D Beijing!
31. 
有以下程序:
#include <stdio.h>
main()
{ char b[4][10]; int i;
for(i=0; i<4; i++)
scanf("%s", b[i]);
printf("%s%s%s%s\n",b[0],b[1],b[2],b[3]);
}
执行时若输入:Fig fower is red.<回车>则输出结果是______。
A Figflowerisred.
B Figfloweris red.
C Figflower is red.
D Fig flower is red.
32. 
有以下程序:
#include <stdio.h>
#include <string.h>
main()
{ char w[20], a[5][10]={"abcdef","ghijkl","mnopq","rstuv","wxyz."};
int i;
for(i=0; i<5; i++)
w[i] = a[i][strlen(a[i])-1];
w[5]="\0";
puts(w);
}
程序的运行结果是______。
A flqv
B agmrw
C ekpuy
D flqvz
33. 
有以下程序:
#include <stdio.h>
void f(int x[],int n)
{ if(n>1)
{ f(&x[1], n-1);
printf("%d,",x[0]);
}
else
printf("%d,",x [0]);
}
main()
{int z[6]={1,2,3,4,5,6};
f(z,6); printf("\n");
}
程序的运行结果是______。
A 6,5,4,3,2,1,
B 1,1
C 1,1,1,1,1,1,
D 1,2,3,4,5,6,
34. 
有以下程序:
#include <stdio.h>
int a=2;
int f()
{ static int n;
int m;
m=n=0;
n++;a++;m++;
return n+m+a;
}
main()
{int k;
for(k=0; k<3; k++)
printf("%d,",f());
printf("\n");
}
程序的运行结果是______。
A 5,6,7,
B 5,7,9,
C 5,8,11,
D 5,5,5,
35. 
有以下程序:
#include <stdio.h>
#define S(x)x*x
main()
{ int k=5, j=2;
printf("%d,%d\n",S(k+j+2),S(j+k+2));
}
程序的运行结果是______。
A 21,18
B 81,81
C 21,21
D 18,18
36. 
有以下程序:
#include <stdio.h>
typedef struct stu {
char name[10];
char gender;
int score;
} STU;
void f(STU *a, STU *b)
{ *b = *a;
print[("%s,%c,%d,",b->name,b->gender,b->score);
}
main()
{ STU a={"Zhao","m",290}, b={"Qian","f",350};
f(&a,&b);
printf("%s,%c,%d\n",b.name,b.gender,b.score);
}
程序的运行结果是______。
A Zhao,m,290,Zhao,m,290
B Zhao,m,290,Qian,f,350
C Qian,f,350,Qian,f,350
D Qian,f,350,Zhao,m,290
37. 
有以下程序:
#include <stdio.h>
#include <string.h>
typedef struct stu {
char name[10];
char gender;
int score;
} STU;
void f(char*name, char gender, int score)
{ strcpy(name,"Qian");
gende r = "f";
score = 350;
}
main()
{ STU a={"Zhao","m",290},b;
b=a;
f(b.name,b.gender,b.score);
printf("%s,%c,%d,", a.name, a.gender, a.score);
printf("%s,%c,%d\n",b.name,b.gender,b.score);
}
程序的运行结果是______。
A Zhao,m,290,Qian,m,290
B Zhao,m,290,Zhao,m,290
C Zhao,m,290,Qian,m,350
D Zhao,m,290,Qian,f,350
38. 
若有定义:
typedef int T[10];
T * a[20];
则与上述定义完全等价的说明语句是______。
A int *a[20][10];
B int *a[20];
C int *a[10];
D int *a[10][20];
39. 
有以下程序:
#include <stdio.h>
main()
{ int c,d;
c=13&5;d=10&&5;
printf("%d,%d\n",c,d);
}
程序的运行结果是______。
A 5,1
B 1,1
C 18,1
D 13,1
40. 
有以下程序:
#include <stdio.h>
main()
{ FILE*fp;
int i,a[6] = {1,2,3,4,5,6},k;
fp = fopen("data.dat", "w+b");
fwrite(&a[0],sizeof(int),1,fp);
for(i=1; i<6; i++)
{ fseek(fp, 0L, 0);
fread(&k, sizeof(int), 1, fp);
fseek(fp, 0L, 0);
a[i] +=k;
fwrite(&a[i], sizeof(int), 1, fp);
}
rewind(fp);
fread(&k, sizeof(int), 1, fp);
fclose(fp);
printf("%d\n",k);
}
程序的运行结果是______。
A 21
B 6
C 123456
D 11
二、程序填空题
1. 
下列给定程序中,函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]…中,把奇数从数组中删除,偶数的个数通过函数值返回。
例如,若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后,a所指数组中的数据为:4、2、6、8,返回值为4。
请在程序的下画线处填入正确的内容,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
#define N 9
int fun(int a[], int n)
{ int i,j;
j=0;
for(i=0; i<n; i++)
/**********found**********/
if(______==0) {
/**********found**********/
______ = a[i]; j++;
}
/**********found**********/
return ______ ;
}
main()
{ int b[N]={9,1,4,2,3,6,5,8,7},i,n;
printf("\nThe original data;\n");
for(i=0; i<N; i++)
printf("%4d",b[i]);
printf("\n");
n = fun(b,N);
printf("\nThe number of even:%d\n", n);
printf("\nThe even:\n");
for(i=0; i<n; i++)
printf("%4d", b[i]);
printf("\n");
}
三、程序修改题
1. 
下列给定程序中,函数fun的功能是:按以下递归公式求函数的值。

例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
/**********found**********/
fun(n)
{
int c;
/**********found**********/
if(n=1)
c=10;
else
c=fun(n-1)+2;
return(c);
}
main()
{
int n;
printf("Enter n;");
seanf("%d",&n);
printf("The result:%d\n\n",fun(n));
}
四、程序设计题
1. 
规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:使字符串中尾部的*号不多于n个,若多于n个,则删除多余的*号;若少于或等于n个,则不做任何操作,字符串中间和前面的*号不删除。
例如,字符串中的内容为“****A*BC*DEF*G*******”,若n的值为4,删除后,字符串中的内容应为“****A*BC*DEF*G****”;若n的值为7,则字符串中的内容仍为“****A*BC*DEF*G*******”。n的值在主函数中输入。编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include <stdio.h>
void fun(char*a,int n)
{
}
main()
{ char s[81]; int n;
printf("Enter a string:\n");
gets(s);
printf("Enter n:");
scanf("%d",&n);
fun(s,n);
printf("The string after deleted:\n");
puts(s);
}
答题卡