全国计算机等级考试《二级C语言程序设计》考前点题卷二
二级C语言程序设计
考前点题
共 43 题
1427 次浏览
更新于 2026-09-28
一、选择题
每小题1分,共40分。
1
下列叙述中正确的是( )。
- A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构
- B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况
- C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
- D.循环队列中元素的个数是由队头指针和队尾指针共同决定
2
下列各序列中不是堆的是( )。
- A.(91,85,53,36,47,30,24,12)
- B.(91,85,53,47,36,30,24,12)
- C.(47,91,53,85,30,12,24,36)
- D.(91,85,53,47,30,12,24,36)
3
设循环队列为Q(1: m),其初始状态为front=rear=m。经过一系列入队与退队运算后,front=15,rear=20。现要在该循环队列中寻找最大值的元素,最坏情况下需要比较的次数为( )。
- A.4
- B.6
- C.m-5
- D.m-6
4
定义无符号整数类为UInt,下面可以作为类UInt实例化值的是( )。
- A.-369
- B.369
- C.0.369
- D.整数集合{1,2,3,4,5}
5
一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈f顺序是( )。
- A.12345ABCDE
- B.EDCBA54321
- C.ABCDE12345
- D.54321EDCBA
6
某系统结构图如下图所示,该系统结构图的最大出扇数是( )。


- A.n
- B.1
- C.3
- D.4
7
软件设计中模块划分应遵循的准则是( )。
- A.低耦合低内聚
- B.高耦合高内聚
- C.低耦合高内聚
- D.内聚与耦合无关
8
在数据库中,数据模型包括数据结构、数据操作和( )。
- A.数据约束
- B.数据类型
- C.关系运算
- D.查询
9
在数据库设计中,描述数据间内在语义联系得到E-R图的过程属于( )。
- A.逻辑设计阶段
- B.需求分析阶段
- C.概念设计阶段
- D.物理设计阶段
10
一个运动队有多个队员,一个队员仅属于一个运动队,一个队一般都有一个教练,则实体运动队和队员的联系是( )。
- A.一对多
- B.一对一
- C.多对一
- D.多对多
11
以下叙述中错误的是( )。
- A.使用三种基本结构构成的程序只能解决简单问题
- B.结构化程序由顺序、分支、循环三种基本结构组成
- C.C语言是一种结构化程序设计语言
- D.结构化程序设计提倡模块化的设计方法
12
C源程序中不能表示的数制是( )。
- A.十进制
- B.八进制
- C.二进制
- D.十六进制
13
关于C语言标识符,以下叙述错误的是( )。
- A.标识符可全部由数字组成
- B.标识符可全部由下划线组成
- C.标识符可全部由小写字母组成
- D.标识符可全部由大写字母组成
14
若有定义语句:
int x=10;
则表达式x-=x+x的值为( )。
int x=10;
则表达式x-=x+x的值为( )。
- A.10
- B.-20
- C.0
- D.-10
15
以下叙述中正确的是( )。
- A.分支结构是根据算术表达式的结果来判断流程走向的
- B.在C语言中,逻辑真值和假值分别对应1和0
- C.对于浮点变量x和y,表达式:x==y 是非法的,会出编译错误
- D.关系运算符两边的运算对象可以是C语言中任意合法的表达式
16
以下合法的转义字符是( )。
- A.'\x41'
- B.'\0x41'
- C.'\X41'
- D.'\0X41'
17
设有定义: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);
18
设有定义:
int a,b; float x,y;
则以下选项中对语句所作的注释叙述错误的是( )。
int a,b; float x,y;
则以下选项中对语句所作的注释叙述错误的是( )。
- A.scanf("%d%d",&a,&b,&x); /* 多余的输入项不能获得输入数据 */
- B.scanf("%d%d%f",&a,&b); /* 多余的格式符%f完全不起作用 */
- C.scanf("%d%f%d",&a,&b,&x); /* 输入项与格式符类型不匹配,变量b和x得不到正确的输入数据 */
- D.scanf("Input:%d%d",&a,&b); /* 格式串中允许加入格式符以外的字符串 */
19
有以下程序
#include
main()
{
int x=1, y=0;
if (!x) y++;
else if (x==0)
if (x) y+=2;
else y+=3;
printf("%d\n", y);
}
程序运行后的输出结果是( )。
#include
main()
{
int x=1, y=0;
if (!x) y++;
else if (x==0)
if (x) y+=2;
else y+=3;
printf("%d\n", y);
}
程序运行后的输出结果是( )。
- A.0
- B.2
- C.1
- D.3
20
有以下程序
#include
main()
{
int a,b;
for(a=0; a<3; a++)
{
scanf("%d", &b);
switch(b)
{
default: printf("%d,", ++b);
case 1: printf("%d,", ++b);
case 2: printf("%d,", ++b);
}
}
}
执行时输入:1 2 3 <回车>,则输出结果是( )。
#include
main()
{
int a,b;
for(a=0; a<3; a++)
{
scanf("%d", &b);
switch(b)
{
default: printf("%d,", ++b);
case 1: printf("%d,", ++b);
case 2: printf("%d,", ++b);
}
}
}
执行时输入:1 2 3 <回车>,则输出结果是( )。
- A.2,3,3,4,5,6,
- B.2,3,4,
- C.2,2,3,4,4,4,
- D.2,3,4,3,4,4,
21
有以下程序
#include
main()
{
int a=-1, b=-1;
for(; ++a;)++b;
printf("%d,%d\n", a, b);
}
程序运行后的输出结果是( )。
#include
main()
{
int a=-1, b=-1;
for(; ++a;)++b;
printf("%d,%d\n", a, b);
}
程序运行后的输出结果是( )。
- A.0,-1
- B.0,0
- C.-1,-1
- D.结果不确定
22
以下叙述中正确的是( )。
- A.三种循环for、while、do-while可以互相嵌套
- B.循环发生嵌套时,最多只能两层
- C.循环嵌套时,如果不进行缩进形式书写代码,则会有编译错误
- D.for语句的圆括号中的表达式不能都省略掉
23
有以下程序
#include
main()
{
int a=1,b=1;
while(a--)
b--;
printf("%d,%d\n", a,b);
}
程序的运行结果是( )。
#include
main()
{
int a=1,b=1;
while(a--)
b--;
printf("%d,%d\n", a,b);
}
程序的运行结果是( )。
- A.-1,-1
- B.0,0
- C.-1,0
- D.1,1
24
以下数组定义中错误的是( )。
- A.int x[2][3]={1,2,3,4,5,6};
- B.int x[][3]={0};
- C.int x[][3]={{1,2,3},{4,5,6}};
- D.int x[2][3]={{1,2},{3,4},{5,6}};
25
有以下程序
#include
main()
{
char *p1 = 0;
int *p2 = 0;
float *p3 = 0;
printf("%d,%d,%d\n", sizeof(p1), sizeof(p2), sizeof(p3));
}
程序运行后的输出结果是( )。
#include
main()
{
char *p1 = 0;
int *p2 = 0;
float *p3 = 0;
printf("%d,%d,%d\n", sizeof(p1), sizeof(p2), sizeof(p3));
}
程序运行后的输出结果是( )。
- A.4,4,4
- B.1,4,8
- C.1,2,4
- D.1,1,4
26
字符数组a和b中存储了两个字符串,判断字符串a和b是否相等,应当使用的是( )。
- A.if(sdivcmp(a,b)==0)
- B.if(sdivcpy(a,b))
- C.if(a==b)
- D.if(a=b)
27
C语言程序的模块化通过以下哪个选项来实现?( )
- A.函数
- B.变量
- C.程序行
- D.语句
28
有以下程序
#include
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)));
}
程序的运行结果是( )。
#include
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.5
- B.6
- C.4
- D.3
29
以下叙述正确的是( )。
- A.C语言函数不可以单独编译
- B.C语言程序是由过程和函数组成的
- C.C语言函数可以嵌套调用,例如:fun(fun(x))
- D.C语言中除了main函数,其他函数不可作为单独文件形式存在
30
有以下程序
#include
int f(int x);
main()
{
int n=1,m;
m=f(f(f(n)));
printf("%d\n",m);
}
int f(int x)
{
return x*2;
}
程序运行后的输出结果是( )。
#include
int f(int x);
main()
{
int n=1,m;
m=f(f(f(n)));
printf("%d\n",m);
}
int f(int x)
{
return x*2;
}
程序运行后的输出结果是( )。
- A.4
- B.2
- C.8
- D.1
31
有以下程序:
#include
void fun(int a[],int n)
{
int i,t;
for(i=0;i
{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
}
main()
{
int k[10]={1,2,3,4,5,6,7,8,9,10},i;
fun(k,5);
for(i=2;i<8;i++)printf("%d",k[i]);
printf("\n");
}
程序运行的结果是( )。
#include
void fun(int a[],int n)
{
int i,t;
for(i=0;i
{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
}
main()
{
int k[10]={1,2,3,4,5,6,7,8,9,10},i;
fun(k,5);
for(i=2;i<8;i++)printf("%d",k[i]);
printf("\n");
}
程序运行的结果是( )。
- A.345678
- B.876543
- C.1098765
- D.321678
32
若有定义语句:
int year=2009, *p=&year ;
以下不能使变量year中的值增至2010的语句是( )。
int year=2009, *p=&year ;
以下不能使变量year中的值增至2010的语句是( )。
- A.(*p)++;
- B.*p++;
- C.++(*p);
- D.*p+=1;
33
有以下程序
#include
#include
void fun( double *p1,double *p2,double *s)
{
s = (double *)calloc( 1,sizeof(double) );
*s = *p1 + *( p2+1 );
}
main()
{
double a[2] = { 1.1, 2.2 }, b[2] = { 10.0, 20.0 }, *s=a;
fun( a, b, s );
printf( "%5.2f\n", *s);
}
程序的输出结果是( )。
#include
#include
void fun( double *p1,double *p2,double *s)
{
s = (double *)calloc( 1,sizeof(double) );
*s = *p1 + *( p2+1 );
}
main()
{
double a[2] = { 1.1, 2.2 }, b[2] = { 10.0, 20.0 }, *s=a;
fun( a, b, s );
printf( "%5.2f\n", *s);
}
程序的输出结果是( )。
- A.11.10
- B.1.10
- C.12.10
- D.21.10
34
以下叙述中错误的是( )。
- A.当在程序的开头包含头文件sdivio.h时,可以给指针变量赋NULL
- B.函数可以返回地址值
- C.改变函数形参的值,不会改变对应实参的值
- D.可以给指针变量赋一个整数作为地址值
35
设p是指针变量,语句p = NULL;等价于( )。
- A.p = '0';
- B.p = '';
- C.p = "";
- D.p = 0;
36
以下叙述中正确的是( )。
- A.在C语言中,预处理命令行都以“#”开头
- B.预处理命令行必须位于C源程序的起始位置
- C.#include 必须放在C程序的开头
- D.C语言的预处理不能实现宏定义和条件编译的功能
37
若要使用C数学库中的sin函数,需要在源程序的头部加上
#include
关于引用数学库,以下叙述正确的是( )。
#include
关于引用数学库,以下叙述正确的是( )。
- A.将数学库中sin函数的源程序插入到引用处,以便进行编译链接
- B.将数学库中sin函数链接到编译生成的可执行文件中,以便能正确运行
- C.通过引用math.h文件,说明sin函数的参数个数和类型,以及函数返回值类型
- D.实际上,不引用math.h文件也能正确调用sin函数
38
有以下程序
#include
typedef sdivuct stu
{
char name[10];
char gender;
int score;
} STU;
void f(STU a, STU *b)
{
*b = a;
printf("%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);
}
程序运行后的输出结果是( )。
#include
typedef sdivuct stu
{
char name[10];
char gender;
int score;
} STU;
void f(STU a, STU *b)
{
*b = a;
printf("%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.Qian,f,350,Zhao,m,290
- C.Qian,f,350,Qian,f,350
- D.Zhao,m,290,Qian,f,350
39
下面结构体的定义语句中,错误的是( )。
- A.sdivuct ord {int x; int y; int z; } sdivuct ord a;
- B.sdivuct ord {int x; int y; int z; }; sdivuct ord a;
- C.sdivuct ord {int x; int y; int z; } a;
- D.sdivuct {int x; int y; int z; } a;
40
有以下程序
#include
typedef sdivuct {int b, p;} A;
void f(A c)
{
int j;
c.b+=1;
c.p+=2;
}
void main()
{
int i;
A a={1,2};
f(a);
printf("%d,%d\n", a.b, a.p);
}
程序运行后的输出结果是( )。
#include
typedef sdivuct {int b, p;} A;
void f(A c)
{
int j;
c.b+=1;
c.p+=2;
}
void main()
{
int i;
A a={1,2};
f(a);
printf("%d,%d\n", a.b, a.p);
}
程序运行后的输出结果是( )。
- A.2,4
- B.1,2
- C.1,4
- D.2,3
二、程序填空题
共18分。
41
给定程序中,函数fun功能是:找出100~999之间(含100和999)所有整数中各位上数字之和为x(x为一正整数)的整数.然后输出;符合条件的整数个数作为函数值返回。
例如,当x值为5时,l00~999之间各位上数字之和为5的整数有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500。共有15个。当x值为27时,各位数字之和为27的整数是:999。只有1个。
请在程序的下划线处填入正确的内容并把下划线删除.使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLAIIK1.C中。
不得增行或删行.也不得更改程序的结构!
/**********code.c**********/
#include
int fun(int x)
{
int n, s1, s2, s3, t;
n=0;
t=100;
while(t<=①______)
{
s1=t%10;
s2=(②______)%10;
s3=t/100;
if(s1+s2+s3==③______)
{
printf("%d ",t);
n++;
}
t++;
}
return n;
}
void main()
{
int x=-1;
while(x<0)
{
printf("Please input(x>0): ");
scanf("%d",&x);
}
printf("\nThe result is: %d\n",fun(x));
}
/**********-code.c**********/
例如,当x值为5时,l00~999之间各位上数字之和为5的整数有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500。共有15个。当x值为27时,各位数字之和为27的整数是:999。只有1个。
请在程序的下划线处填入正确的内容并把下划线删除.使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLAIIK1.C中。
不得增行或删行.也不得更改程序的结构!
/**********code.c**********/
#include
int fun(int x)
{
int n, s1, s2, s3, t;
n=0;
t=100;
while(t<=①______)
{
s1=t%10;
s2=(②______)%10;
s3=t/100;
if(s1+s2+s3==③______)
{
printf("%d ",t);
n++;
}
t++;
}
return n;
}
void main()
{
int x=-1;
while(x<0)
{
printf("Please input(x>0): ");
scanf("%d",&x);
}
printf("\nThe result is: %d\n",fun(x));
}
/**********-code.c**********/
三、程序改错题
共18分。
42
绐定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。
例如,当s中的数为:7654321时,t中的数为:642。
请改正程序中的错误,使它自能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
/**********code.c**********/
#include
/**********found**********/
void fun (long s, long t)
{
long sl=10;
s /= 10;
*t = s % 10;
/**********found**********/
while (s < 0)
{
s = s/100;
*t = s%10*sl + *t;
sl = sl * 10;
}
}
main()
{
long s, t;
printf("\nPlease enter s:");
scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
}
/**********-code.c**********/
例如,当s中的数为:7654321时,t中的数为:642。
请改正程序中的错误,使它自能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
/**********code.c**********/
#include
/**********found**********/
void fun (long s, long t)
{
long sl=10;
s /= 10;
*t = s % 10;
/**********found**********/
while (s < 0)
{
s = s/100;
*t = s%10*sl + *t;
sl = sl * 10;
}
}
main()
{
long s, t;
printf("\nPlease enter s:");
scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
}
/**********-code.c**********/
四、程序设计题
共24分。
43
学生的记录由学号和成绩组成,N名学生的数据已在主函数中敲入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。
注意:部分源程序给出如下。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
/**********code.c**********/
#include
#define N 16
typedef sdivuct
{
char num[10];
int s;
}STREC;
void fun( STREC a[] )
{
STREC tmp;
int i,j;
for(i = 1; i < N; i++)
for(j = 0; j < N-1; j++)
{
/* 请按题目要求,完成一下代码*/
}
}
void main()
{
STREC s[N] = {{"GA005",85}, {"GA003",76}, {"GA002",69}, {"GA004",85}, {"GA001",91}, {"GA007",72}, {"GA008",64}, {"GA006",87},
{"GA015",85}, {"GA013",91}, {"GA012",64}, {"GA014",91}, {"GA011",66}, {"GA017",64}, {"GA018",64}, {"GA016",72}};
int i;
FILE *out ;
fun(s);
printf("The data after sorted :\n");
for(i=0;i {
if((i)%4==0 )printf("\n");
printf("%s %4d ",s[i].num,s[i].s);
}
printf("\n");
out = fopen("out.dat","w");
for(i=0;i {
if( (i)%4==0 && i) fprintf(out, "\n");
fprintf(out, "%4d ",s[i].s);
}
fprintf(out,"\n");
fclose(out) ;
}
注意:部分源程序给出如下。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
/**********code.c**********/
#include
#define N 16
typedef sdivuct
{
char num[10];
int s;
}STREC;
void fun( STREC a[] )
{
STREC tmp;
int i,j;
for(i = 1; i < N; i++)
for(j = 0; j < N-1; j++)
{
/* 请按题目要求,完成一下代码*/
}
}
void main()
{
STREC s[N] = {{"GA005",85}, {"GA003",76}, {"GA002",69}, {"GA004",85}, {"GA001",91}, {"GA007",72}, {"GA008",64}, {"GA006",87},
{"GA015",85}, {"GA013",91}, {"GA012",64}, {"GA014",91}, {"GA011",66}, {"GA017",64}, {"GA018",64}, {"GA016",72}};
int i;
FILE *out ;
fun(s);
printf("The data after sorted :\n");
for(i=0;i
if((i)%4==0 )printf("\n");
printf("%s %4d ",s[i].num,s[i].s);
}
printf("\n");
out = fopen("out.dat","w");
for(i=0;i
if( (i)%4==0 && i) fprintf(out, "\n");
fprintf(out, "%4d ",s[i].s);
}
fprintf(out,"\n");
fclose(out) ;
}
输入阅读码
查看答案与解析需要输入阅读码