全国计算机等级考试《二级C语言程序设计》预测试卷二

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

一、选择题

每小题1分,共40分。

1
结构化程序的三种基本控制结构是(  )。
  • A.顺序、选择和重复(循环)
  • B.过程、子程序和分程序
  • C.顺序、选择和调用
  • D.调用、返回和转移
2
软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是(  )。
  • A.学生成绩管理系统
  • B.C语言编译程序
  • C.UNIX操作系统
  • D.数据库管理系统
3
通常软件测试实施的步骤是(  )。
  • A.集成测试、单元测试、确认测试
  • B.单元测试、集成测试、确认测试
  • C.确认测试、集成测试、单元测试
  • D.单元测试、确认测试、集成测试
4
下面描述中错误的是(  )。
  • A.系统总体结构图支持软件系统的详细设计
  • B.软件设计是将软件需求转换为软件表示的过程
  • C.数据结构与数据库设计是软件设计的任务之一
  • D.PAD图是软件详细设计的表示工具
5
结构化程序所要求的基本结构不包括(  )。
  • A.顺序结构
  • B.GOTO跳转
  • C.选择(分支)结构
  • D.重复(循环)结构
6
某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)(  )。
  • A.3
  • B.4
  • C.6
  • D.7
7
下列关于栈叙述正确的是(  )。
  • A.栈顶元素最先能被删除
  • B.栈顶元素最后才能被删除
  • C.栈底元素永远不能被删除
  • D.栈底元素最先能被删除
8
在数据库中,数据模型包括数据结构、数据操作和(  )。
  • A.数据约束
  • B.数据类型
  • C.关系运算
  • D.查询
9
一名教师可讲授多门课程,一门课程可由多名教师讲授。则实体教师和课程问的联系是(  )。
  • A.1:1联系
  • B.1:m联系
  • C.m:1联系
  • D.m:n联系
10
若变量均已正确定义并赋值,以下合法的C语言赋值语句是(  )。
  • A.x=n%2.5;
  • B.x=y==5;
  • C.x+n=i;
  • D.x=5=4+1;
11
以下叙述中错误的是(  )。
  • A.C程序经过编译、链接步骤之后才能形成一个真正可执行的二进制机器指令文件
  • B.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
  • C.用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中
  • D.C语言源程序经编译后生成后缀为.obj的目标程序
12
下列叙述中错误的是(  )。
  • A.C程序可以由一个或多个函数组成
  • B.C程序可以由多个程序文件组成
  • C.一个C语言程序只能实现一种算法
  • D.一个C函数可以单独作为一个C程序文件存在
13
设有定义:
int a;float b;
执行scanf("%2d%f",&a,&b);
语句时,若从键盘输入876 543.0,则a和b的值分别是(  )。
  • A.87和6.0
  • B.876和543.0
  • C.87和543.0
  • D.76和543.0
14
关于C语言标识符,以下叙述错误的是(  )。
  • A.标识符可全部由数字组成
  • B.标识符可全部由下划线组成
  • C.标识符可全部由小写字母组成
  • D.标识符可全部由大写字母组成
15
以下合法的转义字符是(  )。
  • A.'\x41'
  • B.'\0x41'
  • C.'\X41'
  • D.'\0X41'
16
以下能正确表述算式 sin(2πr+30°)的C语言表达式是(  )。
  • A.sin(2*π*r+30)
  • B.sin(2*3.14*r+30)
  • C.sin(2*3.14*r+3.14*30/180.0)
  • D.sin(2*3.14*r+30*3.14/360.0)
17
设有定义:char s[81];int i=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是(  )。
  • A.gets(s);
  • B.while((s[i++]=getchar())!='\n');s[i]='\0';
  • C.scanf("%s",s);
  • D.do{ scanf("%c",&s[i]);} while(s[i++]!='\n');s[i]='\0';
18
有以下程序
#include 
main()
{
char c1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c", &c1,&c2,&c3,&c4);
c5=getchar();
c6=getchar();
putchar(c1);
putchar(c2);
printf("%c%c\n",c5,c6);
}
程序运行后,若从键盘输入(从第1列开始)
123<回车>
45678<回车>
则输出结果是(  )。
  • A.1256
  • B.1245
  • C.1278
  • D.1267
19
有以下程序
#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,
20
对于if(表达式)语句,以下叙述正确的是(  )。
  • A.“表达式”的值可以是任意合法的数值
  • B.变量不能出现在“表达式”中
  • C.常量不能出现在“表达式”中
  • D.如果“表达式”的值不是逻辑值,程序会出编译错误
21
以下程序段中的变量已正确定义
for( i=0; i<4; i++,i++ )
for( k=1; k<3; k++ );
printf("*" );
该程序段的输出结果是(  )。
  • A.********
  • B.****
  • C.**
  • D.*
22
有以下程序
#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.结果不确定
23
有以下程序:
#include   
main( )
{
int i, array[6] = {1, 5, 0, 4};
for (i=0; i<5; i++)
printf("%d,", array[i] & 4);
printf("\n");
}
程序运行后的输出结果是(  )。
  • A.0,4,0,4,0,
  • B.1,5,0,4,0,
  • C.1,5,5,4,0,
  • D.1,2,1,2,0
24
以下叙述中正确的是(  )。
  • A.数组说明符的一对方括号中只能使用整型常量,而不能使用表达式
  • B.一条语句只能定义一个数组
  • C.每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元
  • D.在引用数组元素时,下标表达式可以使用浮点数
25
若有定义语句:int m[][3]={1,2,3,4,5,6,7};,则与该语句等价的是(  )。
  • A.int m[][3]={{1,2,3},{4,5},{6,7}};
  • B.int m[][3]={{1,2},{3,4},{5,6,7}};
  • C.int m[][3]={{1,2,3},{4,5,6},{7}};
  • D.int m[][3]={{1},{2,3,4},{5,6,7}};
26
以下叙述中正确的是(  )。
  • A.char c1, c2, *c3, c4[40];是合法的变量定义语句
  • B.数组下标的下限由数组中第一个非零元素的位置决定
  • C.数组下标的下限由数组中第一个被赋值元素的位置决定
  • D.数组下标的下限是1
27
字符数组a和b中存储了两个字符串,判断字符串a和b是否相等,应当使用的是(  )。
  • A.if(sdivcmp(a,b)==0)
  • B.if(sdivcpy(a,b))
  • C.if(a==b)
  • D.if(a=b)
28
若有定义:
char s[30] = {0};
运行时输入:
This is a sdiving.<回车>
则以下不能正确读入整个字符串:
This is a sdiving.
到字符数组 s 中的语句组是(  )。
  • A.scanf("%s",s);
  • B.gets(s);
  • C.for(i=0;(c=getchar())!= '\n';i++)s[i] = c;
  • D.i=0;while((c=getchar())!='\n')s[i++] = c;
29
以下叙述中正确的是(  )。
  • A.函数调用时,不必区分函数名称的大小写
  • B.调用函数时,函数名必须与被调用的函数名完全一致
  • C.函数名允许用数字开头
  • D.在函数体中只能出现一次return语句
30
有以下程序
#include 
void fun(int a,int b)
{
int t;
t=a; a=b; b=t;
}
main()
{
int c[10]={1,2,3,4,5,6,7,8,9,0}, i;
for (i=0; i<10; i+=2) fun(c[i], c[i+1]);
for (i=0;i<10; i++) printf("%d,", c[i]);
printf("\n");
}
程序的运行结果是(  )。
  • A.1,2,3,4,5,6,7,8,9,0,
  • B.2,1,4,3,6,5,8,7,0,9,
  • C.0,9,8,7,6,5,4,3,2,1,
  • D.0,1,2,3,4,5,6,7,8,9,
31
有以下程序
#include 
int fun(int n)
{
int a;
if(n==1) return 1;
a = n+fun(n-1);
return (a);
}
main()
{
printf("%d\n", fun(5));
}
程序的输出结果是(  )。
  • A.10
  • B.14
  • C.15
  • D.9
32
设有定义:
int x=0, *p;
紧接着的赋值语句正确的是(  )。
  • A.*p=x;
  • B.*p=NULL;
  • C.p=x;
  • D.p=NULL;
33
有以下程序
#include 
int add(int a,int b)
{
return (a+b);
}
main()
{
int k, (*f)(),a=5,b=10;
f=add;
…
}
则以下函数调用语句错误的是(  )。
  • A.k= *f(a,b);
  • B.k=add(a,b);
  • C.k=(*f)(a,b);
  • D.k=f(a,b);
34
以下叙述中错误的是(  )。
  • A.当在程序的开头包含头文件sdivio.h时,可以给指针变量赋NULL
  • B.函数可以返回地址值
  • C.改变函数形参的值,不会改变对应实参的值
  • D.可以给指针变量赋一个整数作为地址值
35
设已有定义:
float x;
则以下对指针变量p进行定义且赋初值的语句中正确的是(  )。
  • A.float *p=&x;
  • B.int *p=(float)x;
  • C.float p=&x;
  • D.float *p=1024;
36
以下叙述中正确的是(  )。
  • A.在C语言中,预处理命令行都以“#”开头
  • B.预处理命令行必须位于C源程序的起始位置
  • C.#include 必须放在C程序的开头
  • D.C语言的预处理不能实现宏定义和条件编译的功能
37
有以下程序:
#include
#define PT 3.5;
#define S(x) PT*x*x;
main()
{
int a=1,b=2;
printf("%4.1f\n",S(a+b));
}
程序运行后的输出结果是(  )。
  • A.31.5
  • B.7.5
  • C.程序有错无输出结果
  • D.14.0
38
下面结构体的定义语句中,错误的是(  )。
  • 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;
39
有以下程序
#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
40
有以下程序
#include 
void main()
{
unsigned char a=8, c;
c = a>>3;
printf("%d\n",c);
}
程序运行后的输出结果是(  )。
  • A.32
  • B.16
  • C.1
  • D.0

二、程序填空题

共18分。

41
给定程序中,函数fun的功能是:计算下式前n项的和作为函数的返回值
题目图片
  例如,当形参n的值为10时,函数返回:9.612558。
  请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。
  不得增行或删行,也不得更改程序的结构!
/**********code.c**********/
#include
double fun(int n)
{
 int i;
 double s,t;
 /**********found**********/
 s=①______;
 /**********found**********/
 for(i=1; i<=②______; i++)
 {
  t=2.0*i;
  /**********found**********/
  s=s+(2.0*i-1)*(2.0*i+1)/③______;
 }
 return s;
}
main()
{
 int n=-1;
 while(n<0)
 {
  printf("Please input(n>0): ");
  scanf("%d",&n);
 }
 printf("\nThe result is: %f\n",fun(n));
}
/**********-code.c**********/

三、程序改错题

共18分。

42
给定程序MODI1.C中函数fun的功能是:统计subsdiv所指子字符串在sdiv所指字符串中出现的次数。
  例如,若字符串为aaas lkaaas,子字符串为as,则应输出2。
  请改正程序中的错误,使它能计算出正确的结果。
  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
/**********code.c**********/
#include
int fun (char *sdiv,char *subsdiv)
{
int i,j,k,num=0;
/**********found**********/
for(i = 0, sdiv[i], i++)
for(j=i,k=0;subsdiv[k]==sdiv[j];k++,j++)
/**********found**********/
If(subsdiv[k+1]=='\0')
{
num++;
break;
}
return num;
}
void main()
{
char sdiv[80],subsdiv[80];
printf("Input a sdiving:") ;
gets(sdiv);
printf("Input a subsdiving:") ;
gets(subsdiv);
printf("%d\n",fun(sdiv,subsdiv));
}
/**********-code.c**********/

四、程序设计题

共24分。

43
请编写一个函数fun,他的功能是:根据以下公式求 π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):
题目图片
  程序运行后,如果输入精度0.0005,则程序输出为3.14…。
  注意部分源程序存在文件PROG1.C立件中。
  请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
/**********code.c**********/
#include
#include
double fun(double eps)
{

}
void main()
{
 double x;
 printf("Input eps:") ;
 scanf("%lf",&x);
 printf("\neps = %lf,PI=%lf\n", x, fun(x));
}