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

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

一、选择题

每小题1分,共40分。

1
有以下定义:
sdivuct data
{ int i;char c;double d; } x;
以下叙述中错误的是(  )。
  • A.x的内存地址与x.i的内存地址相同
  • B.sdivuct data是一个类型名
  • C.初始化时,可以对x的所有成员同时赋初值
  • D.成员i、c和d占用的是同一个存储空间
2
以下函数的功能是:计算a的n次方作为函数值返回。
double fun(double a,int n)
{
 int i;
 double s=1.0;
 for(i=1;i<=n;i++)s=______;
 return s;
}
为实现上述功能,函数中下划线处应填入的是(  )。
  • A.s*i
  • B.s*a
  • C.s+i*i
  • D.s+a*a
3
有以下程序:
#include
#include
main()
{
 char sdiv[]={"Hello,Beijing"};
 printf("%d,%d\n",sdivlen(sdiv),sizeof(sdiv));
}
程序的运行结果是(  )。
  • A.13,13
  • B.13,14
  • C.13,15
  • D.14,15
4
若有说明:typedef sdivuct{int a;char c;}w;,则以下叙述正确的是(  )。
  • A.编译后系统为w分配5个字节
  • B.编译后系统为w分配6个字节
  • C.编译后系统为w分配58个字节
  • D.编译后系统不为w分配存储空间
5
以下叙述中错误的是(  )。
  • A.同一个数组中所有元素的类型相同
  • B.不可以跳过前面的数组元素,给后面的元素赋初值0
  • C.定义语句:int a[10]={0};,给a数组中所有元素赋初值0
  • D.若有定义语句:int a[4]={1,2,3,4,5};,编译时将忽略多余的初值
6
若有以下定义:
sdivuct tt{char name[10];char sex;} aa={"aaaa",'F'},*p=&aa;
则错误的语句是(  )。
  • A.scanf("%c",aa.sex);
  • B.aa.sex=getchar();
  • C.printf("%c\n",(*p).sex);
  • D.printf("%c\n",p->sex);
7
C语言编译程序的功能是(  )。
  • A.执行一个C语言编写的源程序
  • B.把C源程序翻译成ASCⅡ码
  • C.把C源程序翻译成机器代码
  • D.把C源程序与系统提供的库函数组合成一个二进制执行文件
8
有以下程序:
#include
int fun(int n)
{
 if(n)return fun(n-1)+n;
 else return 0;
}
main()
{
 printf("%d\n",fun(3));
}
程序的运行结果是(  )。
  • A.4
  • B.5
  • C.6
  • D.7
9
有以下程序:
#include
main()
{
 int sum=0,x=5;
 do{ sum+=x; } while(!--x);
 printf("%d\n",sum);
}
程序的运行结果是(  )。
  • A.0
  • B.5
  • C.14
  • D.15
10
下面不属于软件设计阶段任务的是(  )。
  • A.软件的功能确定
  • B.软件的总体结构设计
  • C.软件的数据设计
  • D.软件的过程设计
11
有以下程序:
#include
#include
typedef sdivuct
{
 char name[9];
 char sex;
 float score[2];
} STU;
void f(STU *A)
{
 sdivcpy(a->name,"Zhao");
 a->sex='m';
 a->score[1]=90.0;
}
main()
{
 STU c={"Qian",'f',95.0,92.0}, *d=&c;
 f(d);
 printf("%s,%c,%2.0f,%2.0f\n", d->name, c.sex, c.score[0], c.score[1]);
}
程序的运行结果是(  )。
  • A.Qian,f,95,92
  • B.Zhao,f,95,90
  • C.Zhao,m,95,90
  • D.Zhao,f,95,92
12
在C语言程序中,下列说法正确的是(  )。
  • A.函数的定义可以嵌套,但函数的调用不可以嵌套
  • B.函数的定义不可以嵌套,但函数的调用可以嵌套
  • C.函数的定义和调用均不可以嵌套
  • D.函数的定义和调用均可以嵌套
13
执行以下程序段后,s的值为(  )。
int a[]={1,2,3,4,5,6,7,8,9}, s=0,k;
for(k=0;k<8;k+=2) s+=*(a+k);
  • A.13
  • B.16
  • C.17
  • D.45
14
有以下程序:
#include 
#define M 5
#define f(x,y)x*y+M
main()
{
 int k;
 k=f(2,3)*f(2,3);
 printf("%d\n",k);
}
程序的运行结果是(  )。
  • A.22
  • B.41
  • C.100
  • D.121
15
有以下程序:
#include 
main()
{
 char ch='Z';
 ch=(ch-'A'+1)%26+'A';
 putchar(ch);
}
程序的运行结果是(  )。
  • A.Z
  • B.Y
  • C.B
  • D.A
16
下面属于黑盒测试方法的是(  )。
  • A.基本路径测试
  • B.等价类划分
  • C.判定覆盖测试
  • D.语句覆盖测试
17
有以下程序:
#include
main()
{
 int i,j,k,a=5,b=6;
 i=(a==b)?++a:--b;
 j=a++;
 k=b;
 printf("%d,%d,%d\n",i,j,k);
}
程序的运行结果是(  )。
  • A.7,6,5
  • B.5,5,5
  • C.7,5,5
  • D.5,6,5
18
C语言程序中,若函数无返回值,则应该对函数说明的类型是(  )。
  • A.int
  • B.double
  • C.char
  • D.void
19
有以下程序:
#include
main()
{
 int k,n=0;char c,sdiv[]="teach";
 for(k=0;sdiv[k];k++)
 {
  c=sdiv[k];
  switch(k)
  {
   casel: case3: case5: putchar(C); printf("%d",++n); break;
   default:putchar('N');
  }
 }
}
程序的运行结果是(  )。
  • A.Ne1NN
  • B.e1a2e3
  • C.Ne1Nc2N
  • D.Na1NNNN
20
有以下程序:
#include
void fun(char(*p)[6])
{
 int i;
 for(i=0;i<4;i++)printf("%c",p[i][i]);
 printf("\n");
}
main()
{
 char s[6][6] = {"ABCD", "abcde", "12345", "FGHIJ", "fghij", "54321"};
 fun(s);
}
程序的运行结果是(  )。
  • A.Aa1F
  • B.Ab3I
  • C.ABCD
  • D.fghij
21
设变量x为long int型并已正确赋值,以下表达式中能将x的百位上的数字提取出的是(  )。
  • A.x/10%100
  • B.x%10/100
  • C.x%100/10
  • D.x/100%10
22
在E-R图中,表示实体的图形是(  )。
  • A.矩形
  • B.椭圆
  • C.菱形
  • D.圆
23
下面对软件特点描述不正确的是(  )。
  • A.软件是一种逻辑实体,具有抽象性
  • B.软件开发、运行对计算机系统具有依赖性
  • C.软件开发涉及软件知识产权、法律及心理等社会因素
  • D.软件运行存在磨损和老化问题
24
设x,y,z均为实型变量,代数式题目图片在C语言中的正确写法是(  )。
  • A.x/y*z
  • B.x%y%z
  • C.x/y/z
  • D.x*z/y
25
有以下程序:
#include
#define N 4
void fun(int a[][N],int b[])
{
 int i;
 for(i=0;i
}
main()
{
 int x[N][N] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16}, y[N], i;
 fun(x,y);
 for(i=0;i
 printf("\n");
}
程序的运行结果是(  )。
  • A.1,2,3,4,
  • B.3,6,9,12,
  • C.4,7,10,13,
  • D.1,5,9,13,
26
在下列链表中,能够从任意一个结点出发直接访问到所有结点的是(  )。
  • A.单链表
  • B.循环链表
  • C.双向链表
  • D.二叉链表
27
有以下程序:
#include
#include
main()
{
 int i,j,x = 0;
 for(i = 0;i < 2;i++)
 {
  x++;
  for(j = 0;j <= 3;j++)
  {
   if(j%2==0)continue;
   x++;
  }
  x++;
 }
 printf("x = %d\n",x);
}
程序的运行结果是(  )。
  • A.x=4
  • B.x=6
  • C.x=8
  • D.x=12
28
对图书进行编目时,图书有如下属性:ISBN书号,书名,作者,出版社,出版日期。能作为关键字的是(  )。
  • A.ISBN书号
  • B.书名
  • C.作者,出版社
  • D.出版社,出版日期
29
若主函数中有定义语句:
int a[10],b[10],c;
在主函数前定义的fun函数首部为
void fun(int x[])
则以下选项中错误的调用语句是(  )。
  • A.fun(b);
  • B.fun(&c);
  • C.fun(&a[3]);
  • D.fun(b[11]);
30
构成C语言程序的三种基本结构是(  )。
  • A.顺序结构、转移结构、递归结构
  • B.顺序结构、嵌套结构、递归结构
  • C.顺序结构、选择结构、循环结构
  • D.选择结构、循环结构、嵌套结构
31
下列形式中不合法的常量是(  )。
  • A.2.E8
  • B.-.28
  • C.-028
  • D.2e-8
32
下列与栈结构有关联的是(  )。
  • A.数组的定义域使用
  • B.操作系统的进程调度
  • C.函数的递归调用
  • D.选择结构的执行
33
以下不是C语言字符型或字符串常量的是(  )。
  • A."It's"
  • B."0"
  • C.'a=0'
  • D.'\010'
34
下列数据结构中,属于非线性结构的是(  )。
  • A.双向链表
  • B.循环链表
  • C.二叉链表
  • D.循环队列
35
有以下程序:
#include
main()
{
 int k=10;
 printf("%4d,%o,%x\n",k,k,k);
}
程序的运行结果是(  )。(u代表一个空格)
  • A.10,12,a
  • B.uu10,012,a
  • C.010,12,a
  • D.uu10,12,a
36
数据库管理系统是(  )。
  • A.操作系统的一部分
  • B.在操作系统支持下的系统软件
  • C.一种编译系统
  • D.一种通信软件系统
37
若有定义:
int a=1,b=2,c=3;
则执行表达式(a=b+c)‖(++b)后,a、b、c的值依次为(  )。
  • A.1,2,3
  • B.5,3,2
  • C.5,2,3
  • D.5,3,3
38
有两个关系R和T如下:
题目图片则由关系R得到关系T的操作是(  )。
  • A.选择
  • B.交
  • C.投影
  • D.并
39
设有:char s[5],c;,则调用函数scanf能正确给s和c读入数据的是(  )。
  • A.scanf("%s%c",s,c);
  • B.scanf("%d%c",&s,&c);
  • C.scanf("%d%c",s,&c);
  • D.scanf("%s%c",s,&c);
40
若变量已正确定义并赋值,则错误的赋值语句是(  )。
  • A.a=a+1;
  • B.a=sizeof(double);
  • C.a=d‖c;
  • D.a+1=a;

二、程序填空题

共18分。

41
下列给定的程序中,函数fun()的功能是:求出以下分数序列的前n项和。2/1,3/2,5/3,8/5,13/8,21/13,……和值通过函数值返回main()函数。例如,若输入n=5,则应输出8.391667。
  注意:部分源程序给出如下。
  请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
/**********code.c**********/
#include
#include
double fun(int n)
{
int a=2,b=1,c,k;
double ①______;
for(k=1;k<=n;k++)
{
s=s+1.0*a/b;
c=a;
a+=②______;
b=c;
}
return(s);
}
main()
{
int n=5;
/**********found**********/
printf("\nThe value of function is:%1f\n",③______);
}
/**********-code.c**********/

三、程序改错题

共18分。

42
给定程序中函数fun的功能是:根据整型形参m,计算如下公式的值。
题目图片
例如,若m中的值为:5,则应输出:1.463611。请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
/**********code.c**********/
#include
double fun(int m)
{
 double y=1.0;
 int i;
 /**********found**********/
 for(i=2;i
  /**********found**********/
  y+=1/(i*i);
 return(y);
}
main()
{
 int n=5;
 printf("%\nThe result is %1f\n",fun(n));
}
/**********-code.c**********/

四、程序设计题

共24分。

43
请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从p~n-1(p  例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为6。移动后,一维数组的内容应为7,8,9,10,11,12,13,14,15,1,2,3,4,5,6。
  注意:部分源程序给出如下。
  请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
/**********code.c**********/
#include
#define N 80
void fun(int*w,int p,int n)
{

}
void main()
{
int a[N]={ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int i,p,n=15;
printf("The original data:\n");
for(i=0;iprintf("%3d",a[i]);
printf("\n\nEnter p: ");
scanf("%d",&p);
fun(a,p,n);
printf("\nThe data after moving:\n");
for(i=0;iprintf("%3d",a[i]);
printf("\n\n");
}