全国计算机等级考试2019年二级C语言程序设计模拟试题2
(总分100, 做题时间120分钟)
选择题
(每题 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
**
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 的值为( )。
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=%1f\\n",x);
D
printf("x=%0.5f\\n",x);
18.
设有定义:
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);
}
程序运行后的输出结果是( )。
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 <回车>, 则输出结果是( )。
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);
}
程序运行后的输出结果是( )。
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);
}
程序的运行结果是( )。
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));
}
程序运行后的输出结果是( )。
A
4,4,4
B
1,4,8
C
1,2,4
D
1,1,4
26.
字符数组 a 和 b 中存储了两个字符串, 判断字符串 a 和 b 是否相等, 应当使用的是( )。
A
if(strcmp(a,b)==0)
B
if(strcpy(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)));
}
程序的运行结果是( )。
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;
}
程序运行后的输出结果是( )。
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");
}
程序运行的结果是( )。
A
345678
B
876543
C
1098765
D
321678
32.
若有定义语句:
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);
}
程序的输出结果是( )。
A
**
B
**
C
**
D
**
34.
以下叙述中错误的是( )。
A
当在程序的开头包含头文件 stdio.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
关于引用数学库, 以下叙述正确的是( )。
A
将数学库中 sin 函数的源程序插入到引用处, 以便进行编译链接
B
将数学库中 sin 函数链接到编译生成的可执行文件中, 以便能正确运行
C
通过引用 math.h 文件, 说明 sin 函数的参数个数和类型, 以及函数返回值类型
D
实际上, 不引用 math.h 文件也能正确调用 sin 函数
38.
有以下程序
#include
typedef struct 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
struct ord {int x; int y; int z; } struct ord a;
B
struct ord {int x; int y; int z; }; struct ord a;
C
struct ord {int x; int y; int z; } a;
D
struct {int x; int y; int z; } a;
40.
有以下程序
#include
typedef struct {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
程序填空题
41.
给定程序中, 函数 fun 功能是: 找出 100~999 之间(含 100 和 999) 所有整数中各位上数字之和为 x(x 为一正整数) 的整数, 然后输出; 符合条件的整数个数作为函数值返回。
例如, 当 x 值为 5 时, 100~999 之间各位上数字之和为 5 的整数有: 104、 113、 122、 131、 140、 203、 212、221、 230、 302、 311、 320、 401、 410、 500。 共有 15 个。 当 x 值为 27 时, 各位数字之和为 27 的整数是: 999。只有 1 个。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
注意: 源程序存放在考生文件夹下的 BLANK1.C 中。
不得增行或删行, 也不得更改程序的结构!
/**********code.c**********/
#include
int fun(int x)
{
int n, s1, s2, s3, t;
n=0;
t=100;
/**********found**********/
while(t<=①______)
{
/**********found**********/
s1=t%10; s2=(②______)%10;
s3=t/100;
/**********found**********/
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**********/
程序修改题
42.
绐定程序 MODI1.C 中函数 fun 的功能是: 从低位开始取出长整型变量 s 中偶数位上的数, 依次构成一个新数放在 t 中。 高位仍在高位, 低位仍在低位。
例如, 当 s 中的数为: 7654321 时, t 中的数为: 2。
请改正程序中的错误, 使它自能得出正确的结果。
注意: 不要改动 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; } } void main() { long s, t; printf("\\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); printf("The result is: %ld\\n", t); } /**********-code.c**********/ 程序设计题 43. 学生的记录由学号和成绩组成, N 名学生的数据已在主函数中敲入结构体数组 s 中, 请编写函数 fun, 它的功能是: 按分数的高低排列学生的记录, 高分在前。注意: 部分源程序给出如下。 请勿改动主函数 main 和其它函数中的任何内容, 仅在函数 fun 的花括号中填入你编写的若干语句。 /**********code.c**********/ #include #define N 16 typedef struct { char num[10]; int s; }STREC; void fun( STREC a[] ) { STREC tmp; int i,j; for(i=1; i /* 请按题目要求, 完成一下代码*/ } } main() { STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",},{"GA014",91},{"GA011",66},{"GA017",},{"GA018",},{"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 for(i=0;i if( (i)%4==0 && i) fprintf(out, "\\n"); fprintf(out, "%4d ",s[i].s); } fprintf(out,"\\n"); fclose(out) ; } /**********-code.c**********/ /**********indat**********/ /**********-indat**********/ /**********outdat**********/ 91 91 91 87 85 85 85 76 72 72 69 66 /**********-outdat**********/ 窗体顶端 窗体底端