全国计算机等级考试《二级C语言程序设计》试题(网友回忆版)二

二级C语言程序设计 历年真题 共 43 题 1427 次浏览 更新于 2026-09-27
下载试卷(PDF)

一、选择题

每小题1分,共40分。

1
某二叉树的中序序列为DCBAEFG,后序序列为DCBGFEA,则该二叉树的深度(根结点在第1层)为(  )。
  • A.5
  • B.4
  • C.3
  • D.2
2
设有定义:sdivuct{int n;float x;}s[2],m[2]={{10,2.8},{0,0.0}};,则以下赋值语句中正确的是(  )。
  • A.s[0]=m[1];
  • B.s=m;
  • C.s.n=m.n;
  • D.s[2].x=m[2].x;
3
关于C语言标识符,以下叙述错误的是(  )。
  • A.标识符可全部由数字组成
  • B.标识符可全部由下划线组成
  • C.标识符可全部由小写字母组成
  • D.标识符可全部由大写字母组成
4
以下程序段中的变量已定义为int类型,则
sum=pAd=5;
pAd=sum++,++pAd,pAd++;
printf("%d\n",pAd);
程序段的输出结果是(  )。
  • A.6
  • B.4
  • C.5
  • D.7
5
设循环队列为Q(1:m),其初始状态为front=rear=m。经过一系列入队与退队运算后,front=20,rear=15。现要在该循环队列中寻找最小值的元素,最坏情况下需要比较的次数为(  )。
  • A.5
  • B.6
  • C.m-5
  • D.m-6
6
以下选项中,合法的C语言常量是(  )。
  • A.1.234
  • B.'C++'
  • C."\2.0
  • D.2Kb
7
设有定义
int x=0,*p;
立即执行以下语句,正确的语句是(  )。
  • A.p=x;
  • B.*p=x;
  • C.p=NULL;
  • D.*p=NULL;
8
C语言中,最基本的数据类型包括(  )。‘
  • A.整型、实型、逻辑型
  • B.整型、字符型、数组
  • C.整型、实型、字符型
  • D.整型、实型、结构体
9
下列叙述中错误的是(  )。
  • A.算法的时间复杂度与算法所处理数据的存储结构有直接关系
  • B.算法的空间复杂度与算法所处理数据的存储结构有直接关系
  • C.算法的时间复杂度与空间复杂度有直接关系
  • D.算法的时间复杂度与算法程序执行的具体时间是不一致的
10
以下能正确输出字符a的语句是(  )。
  • A.printf("%s","a");
  • B.printf("%s",'a');
  • C.printf("%c","a");
  • D.printf("%d",'a');
11
字符数组a和b中存储了两个字符串,判断字符串a和b是否相等,应当使用的是(  )。
  • A.if(sdivcmp(a,b)==0)
  • B.if(sdivcpy(a,b))
  • C.if(a==b)
  • D.if(a=b)
12
设有定义:
int x=11,y=12,z=0;
以下表达式值不等于12的是(  )。
  • A.(z,x,y)
  • B.(z=x,y)
  • C.z=(x,y)
  • D.z=(x==y)
13
下列叙述中正确的是(  )。
  • A.存储空间连续的数据结构一定是线性结构
  • B.存储空间不连续的数据结构一定是非线性结构
  • C.没有根结点的非空数据结构一定是线性结构
  • D.具有两个根结点的数据结构一定是非线性结构
14
以下选项中,合法的实数是(  )。
  • A.4.5E2
  • B.E1.3
  • C.7.11E
  • D.1.2E1.2
15
以下选项中叙述正确的是(  )。
  • A.函数体必须由{开始
  • B.C程序必须由main语句开始
  • C.C程序中的注释可以嵌套
  • D.C程序中的注释必须在一行完成
16
在源程序的开始处加上“#include”进行文件引用的原因,以下叙述正确的是(  )。
  • A.sdivio.h文件中包含标准输入输出函数的函数说明,通过引用此文件以便能正确使用prinff、scanf等函数
  • B.将sdivio.h中标准输入输出函数链接到编译生成的可执行文件中,以便能正确运行
  • C.将sdivio.h中标准输入输出函数的源程序插入到引用处,以便进行编译链接
  • D.将sdivio.h中标准输入输出函数的二进制代码插入到引用处,以便进行编译链接
17
下面属于白盒测试方法的是(  )。
  • A.边界值分析法
  • B.基本路径测试
  • C.等价类划分法
  • D.错误推测法
18
有以下程序(其中的sdivsdiv()函数头部格式为:char *sdivsdiv(char *p1,char *p2)确定p2字符串是否在p1中出现,并返回p2第一次出现的字符串首地址):
#include
#include
char *a="you";
char *b="Welcome you to Beijing!";
main()
{
char *p;
p=sdivsdiv(b,a)+sdivlen(a)+1;
printf("%s\n",p);
}
程序的运行结果是(  )。
  • A.to Beijing!
  • B.you to Beijing!
  • C.Welcome you to Beijing!
  • D.Beijing!
19
有如下程序:
#include
void change(int* array, int len)
{
for(; len>=0;len--)
array[len]-= 1;
}
main()
{
int i, array[5] ={2,2};
change(array,4);
for(i=0;i<5;i++)
printf("%d,",array[i]);
printf("\n");
}
程序运行后的输出结果是(  )。
  • A.1,1,-1,-1,-1,
  • B.1,0,-1,1,-1,
  • C.1,1,1,1,1,
  • D.1,-1,1,-1,1,
20
有如下程序:
#include
main()
{
int i,data;
scanf("%d",&data);
for(i=0;i<5;i++)
{
if(i < data) continue;
printf("%d,",i);
}
printf("\n");
}
程序运行时,从键盘输入:3<回车>后,程序输出结果为(  )。
  • A.3,4,
  • B.1,2,3,4,
  • C.0,1,2,3,4,5,
  • D.0,1,2,
21
设序列长度为n,在最坏情况下,时间复杂度为O(1og2n)的算法是(  )。
  • A.二分法查找
  • B.顺序查找
  • C.分块查找
  • D.哈希查找
22
有以下程序:
#include
main()
{
int x;
scanf("%d",&x);
if(x>10) printf("1");
else if(x>20) printf("2");
else if(x>30) printf("3");
}
若运行时输入:35<回车>,则输出结果是(  )。
  • A.123
  • B.2
  • C.3
  • D.1
23
以下非法的字符常量是(  )。
  • A.'\\n'
  • B.'\101'
  • C.'\x21'
  • D.'\0'
24
有以下程序:
#include
#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
25
一名雇员就职于一家公司,一个公司有多名雇员,则实体公司和实体雇员之间的联系是(  )。
  • A.1:1联系
  • B.1:m联系
  • C.m:1联系
  • D.m:n联系
26
将E-R图转换为关系模式时,E-R图中的实体和联系都可以表示为(  )。
  • A.属性
  • B.键
  • C.关系
  • D.域
27
以下针对全局变量的叙述错误的是(  )。
  • A.全局变量的作用域是从定义位置开始至源文件结束
  • B.全局变量是在函数外部任意位置上定义的变量
  • C.用extern说明符可以限制全局变量的作用域
  • D.全局变量的生存期贯穿于整个程序的运行期间
28
有以下程序:
#include
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
29
在最坏情况下(  )。
  • A.快速排序的时间复杂度比冒泡排序的时间复杂度要小
  • B.快速排序的时间复杂度比希尔排序的时间复杂度要小
  • C.希尔排序的时间复杂度比直接插入排序的时间复杂度要小
  • D.快速排序的时间复杂度与希尔排序的时间复杂度是一样的
30
有如下程序:
#include
main()
{
int x = 0x13;
if (x=0x18) printf("T");
printf("F");
printf("\n");
}
程序运行后的输出结果是(  )。
  • A.TF
  • B.T
  • C.F
  • D.TFT
31
以下关于宏的叙述错误的是(  )。
  • A.宏替换不具有计算功能
  • B.宏是一种预处理指令
  • C.宏名必须用大写字母构成
  • D.宏替换不占用运行时间
32
有以下程序:
#include
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
33
计算机软件包括(  )。
  • A.算法和数据
  • B.程序和数据
  • C.程序和文档
  • D.程序、数据及相关文档
34
有如下程序:
#include
main()
{
int i, array[5] = {3,5,10,4};
for (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,
35
以下叙述正确的是(  )。
  • A.do-while语句构成的循环,当while语句中的表达式值为0时结束循环
  • B.do-while语句和while-do构成的循环功能相同
  • C.while-do语句构成的循环,当while语句中的表达式值为非0时结束循环
  • D.do-while语句构成的循环,必须用break语句退出循环
36
关于地址和指针,以下说法正确的是(  )。
  • A.通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量
  • B.可以取一个常数的地址赋值给同类型的指针变量
  • C.可以取一个表达式的地址赋值给同类型的指针变量
  • D.可以取一个指针变量的地址赋值给基类型相同的指针变量
37
下面描述不属于软件特点的是(  )。
  • A.软件是一种逻辑实体,具有抽象性
  • B.软件在使用中不存在磨损、老化问题
  • C.软件复杂性高
  • D.软件使用不涉及知识产权
38
以下程序的功能是:通过调用calc函数,把所求得的两数之和值放入变量add中,并在主函数中输出。
#include 
void calc(float x,float y,float *sum)
{
______ = x+y;
}
main ()
{
float x,y,add;
scanf("%f%f",&x,&y);
calc(x,y,&add);
printf("x+y=%f\n",add);
}
calc函数中下划线处应填入的是(  )。
  • A.*sum
  • B.sum
  • C.&sum
  • D.add
39
有以下程序:
#include
mian()
{
char c;
for(;(c=getchar())!= '#';) putchar(++c);
}
执行时如输入为:abcdefgh#,则输出结果是(  )。
  • A.abcdefg
  • B.bcdefgh$
  • C.bcdefgh$$
  • D.bcdefgh
40
有以下程序:
#include
void fun(int *x,int s,int e)
{
int i,j,t;
for(i=s,j=e;i{
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

二、程序填空题

共18分。

41
下列给定程序的功能是调用fun函数建立班级通信录。通信录中记录每位学生的编号、姓名和电话号码。班级人数和学生信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。
  请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
  注意:部分源程序给出如下。
  不得增行或删行,也不得更改程序的结构!
/**********code.c**********/
#include
#include
#define N 5
typedef sdivuct
{
int num;
char name[10];
char tel[10];
}STYPE;
void check();
/**********found**********/
int fun(①______ *sdiv)
{
/**********found**********/
②______ *fp; int i;
if((fp=fopen("myfile5.dat","wb"))==NULL)return(0);
printf("\nOutput data to file! \n");
for(i=0;i/**********found**********/
fwrite(&sdiv[i],sizeof(STYPE),1, ③______);
fclose(fp);
return(1);
}
void 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);
}
printf("\nRead file and output to screen: \n");
printf("\n num  name  tel\n");
for(i=0;i{
fread(&s[i],sizeof(STYPE),1,fp);
printf("%6d %s %s\n",s[i].num, s[i].name,s[i].tel);
}
fclose(fp);
}
/**********-code.c**********/

三、程序改错题

共18分。

42
下列给定程序中,函数fun的功能是:从s所指字符串中,找出t所指字符串的个数作为函数值返回。例如,当s所指字符串中的内容为“abcdabfab”,t所指字符串的内容为“ab”,则函数返回整数3。
  请改正程序中的错误,使它能得出正确的结果。
  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
/**********code.c**********/
#include
#include
#include
#include
int fun(char *s, char *t)
{
int n;
char *p, *r;
n=0;
while(*s)
{
p=s;
r=t;
while(*r)
/**********found**********/
if(*r==*p){r++; p++}
else break;
/**********found**********/
if(r=='\0')
n++;
s++;
}
return n;
}
void main()
{
char s[100],t[100]; int m;
system("CLS");
printf("\nPlease enter sdivings:");
scanf("%s",s);
printf("\nPlease enter subsdivings:");
scanf("%s",t);
m=fun(s,t);
printf("\nThe result is:m=%d\n", m);
}
/**********-code.c**********/

四、程序设计题

共24分。

43
请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。
  注意:部分源程序给出如下。
  请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
/**********code.c**********/
#include 
#include 
#include 
#define M 3
#define N 4
void fun(int tt[M][N],int pp[N])
{

}
void main()
{
int t[M][N]={{68,32,54,12},{14,24,88,58},{42,22,44,56}};
int p[N],i,j,k;
system("CLS");
printf("The riginal data is:\n");
for(i=0;i{
for(j=0;jprintf("\n");
}
fun(t,p);
printf("\nThe result is:\n");
for(k=0;kprintf("\n");
}