全国计算机等级考试《二级C语言程序设计》试题(网友回忆版)六
二级C语言程序设计
历年真题
共 43 题
1427 次浏览
更新于 2026-09-28
一、选择题
每小题1分,共40分。
1
有以下定义:
sdivuct data
{ int i;char c;double d; } x;
以下叙述中错误的是( )。
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;
}
为实现上述功能,函数中下划线处应填入的是( )。
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));
}
程序的运行结果是( )。
#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;
则错误的语句是( )。
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));
}
程序的运行结果是( )。
#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);
}
程序的运行结果是( )。
#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]);
}
程序的运行结果是( )。
#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);
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);
}
程序的运行结果是( )。
#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);
}
程序的运行结果是( )。
#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);
}
程序的运行结果是( )。
#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');
}
}
}
程序的运行结果是( )。
#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);
}
程序的运行结果是( )。
#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语言中的正确写法是( )。
在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");
}
程序的运行结果是( )。
#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);
}
程序的运行结果是( )。
#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[])
则以下选项中错误的调用语句是( )。
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代表一个空格)
#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的值依次为( )。
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的操作是( )。
则由关系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**********/
注意:部分源程序给出如下。
请勿改动主函数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**********/

例如,若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;i printf("%3d",a[i]);
printf("\n\nEnter p: ");
scanf("%d",&p);
fun(a,p,n);
printf("\nThe data after moving:\n");
for(i=0;i printf("%3d",a[i]);
printf("\n\n");
}
注意:部分源程序给出如下。
请勿改动主函数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;i
printf("\n\nEnter p: ");
scanf("%d",&p);
fun(a,p,n);
printf("\nThe data after moving:\n");
for(i=0;i
printf("\n\n");
}
输入阅读码
查看答案与解析需要输入阅读码