2012年9月全国计算机等级考试
二级C语言
考试真题
一、选择题(每小题2分,共70分) (1)下列链表中,其逻辑结构属于非线性结构的是 A)循环链表 B)双向链表 C)带链的栈 D)二叉链表 (2)设循环队列的存储空间为Q(1:35),初始状态为front=rear=35,现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为 A)16 B)20 C)0或35 D)15 (3)下列关于栈的叙述中,正确的是 A)栈顶元素一定是最先入栈的元素 B)栈操作遵循先进后出的原则 C)栈底元素一定是最后入栈的元素 D)以上三种说法都不对 (4)在关系数据库中,用来表示实体间联系的是 A)二维表 B)树状结构 C)属性 D)网状结构 (5)公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,则实体部门和职员间的联系是 A)m:1联系 B)1:m联系 C)1:1联系 D)m:n联系 (6) 有两个关系R和S 如下:
则由关系R得到关系S的操作是 A)自然连接 B)选择 C)并 D)投影 (7)数据字典(DD)所定义的对象都包含于 A)程序流程图 B)数据流图(DFD图) C)方框图 D)软件结构图 (8)软件需求规格说明书的作用不包括 A)软件可行性研究的依据 B)用户与开发人员对软件要做什么的共同理解 C)软件验收的依据 D)软件设计的依据 (9)下面属于黑盒测试方法的是 A)逻辑覆盖 B)语句覆盖 C)路径覆盖 D)边界值分析 (10)下面不属于软件设计阶段任务的是 A)数据库设计 B)算法设计 C)软件总体设计 D)制定软件确认测试计划 (11)以下叙述正确的是
A)在C语言程序中,,main函数必须放在其他函数的最前面
B)每个后缀为.c的C语言源程序都可以单独进行编译
C)在C语言程序中,只有main函数才可以单独编译
D)每个后缀为.c的C语言源程序都应该包含一个main函数
(12)C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是
A)预定义标识符(如库函数中的函数名)可用作用户标识符,但失去原有含义
B)用户标识符可以由字母和数字任意顺序组成
C)在标识符中大写字母和小写字母被认为是相同的字符
D)关键字可用作用户标识符,但失去原有含义
(13)以下选项中表示一个合法的常量是(说明:符号口表示空格)
A)9口9口9 B)0Xab
C)123E0.2 D)2.7e
(14)C语言主要是借助以下哪个功能来实现程序模块化
A)定义函数
B)定义常量和外部变量
c)三种基本结构语句
D)丰富的数据类型
(15)以下叙述中错误的是
A)非零的数值型常量有正值和负值的区分
B)常量是在程序运行过程中值不能被改变的量
C)定义符号常量必须用类型名来设定常量的类型
D)用符号名表示的常量叫符号常量
(16)若有定义和语句:
int a,b;
scanf("%d,%d",&a,&b);
以下选项中的输入数据,不能把值3赋给变量a、5赋给变量b的是
A)3,5, B)3,5,4
C)3 ,5 D)3,5
(17)C语言中char类型数据占字节数为
A)3 B)4
C)1 D)2
(18)下列关系表达式中,结果为"假"的是
A)(3+4)>6
B)(3!=4)>2
C)3<=4||3
D)(3<4)==1
(19)若以下选项中的变量全部为整型变量,且已正确定义并赋值,则语法正确的
switch语句是
A)switch(a+9)
{ case c1:y=a-b;
case c2:y=a+b;
)
B)switch a*b
{ case 10:x=a+b;
default:y=a-b;
}
C)switch(a+b)
{case1:case3:y=a+b;break;
case0:case4:y=a-b;
}
D)switch(a*a+b*b)
{default:break;
case 3:y=a+b;break;
case 2:y=a-b;break
}
(20)有以下程序
#include<stdio.h>
main()
{int a=-2,b=0;
while(a++&&++b);
printf("%d,%d\n",a,b);
}
程序运行后的输出结果是
A)1,3 B)0,2
C)0,3 D)1,2
(21)设有定义:int x=0,*p;,立刻执行以下语句,正确的语句是
A)p=x; B)*p=x;
C)p=NULL; D)*p=NULL;
(22)下列叙述中正确的是
A)可以用关系运算符比较字符串的大小
B)空字符串不占用内存,其内存空间大小是0
C)两个连续的单引号是合法的字符常量
D)两个连续的双引号是合法的字符串常量
(23)有以下程序
#include <stdio.h>
main()
{ char a='H';
a=(a>='A'&&a<='Z')?(a-'A'+'a'):a;
printf("%c\n",a);
}
程序运行后的输出结果是
A)A B)a
C)H D)h
(24)有以下程序
#include<stdio.h>
int f(int x);
main()
{ int a,b=0;
for(a=0;a<3;a++)
{ b=b+f(a);putchar('A'+b);}
}
int f(int x)
{ return x*x+1; }
程序运行后的输出结果是
A)ABE B)BDI
C)BCF D)BCD
(25)设有定义:int x[2][3];,则以下关于二维数组x的叙述错误的是
A)x[0]可看作是由3个整型元素组成的一维数组
B)x[0]和x[1]是数组名,分别代表不同的地址常量
C)数组x包含6个元素
D)可以用语句x[0]=0;为数组所有元素赋初值0
(26)设变量p是指针变量,语句p=NULL;是给指针变量赋NULL值,它等价于
A)p=""; B)p='0';
C)p=0; D)p='';
(27)有以下程序
#include<stdio.h>
main()
{int a[]={10,20,30,40},*p=a,i;
for(i=0;i<=3;i++)
{a[i]=*p; p++;)
printf("%d\n",a[2]);
}
程序运行后的输出结果是
A)30 B)40
C)10 D)20
(28)有以下程序
#include<stdio.h>
#define N 3
void fun(int a[][N],int b[])
{ int i,j;
for(i=0;i<N;i++)
{ b[i]=a[i][0];
for(j=1;j<N;j++)
if(b[i]<a[i][j]) b[i]=a[i][j];
}
}
main()
{int x[N][N]={1,2,3,4,5,6,7,8,9},y[N],i;
fun(x,y);
for(i=0;i<N;i++) ’
printf("%d,",y[i]);
printf("\n");
)
程序运行后的输出结果是
A)2,4,8, B)3,6,9,
C)3,5,7, D)1,3,5,
(29)有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数)
#include<stdio.h>
#include <string.h>
main()
{char a[10]="abc",b[10]="012",c[10]="xyz":
strcpy(a+1,b+2);
puts(strcat(a,c+1));
}
程序运行后的输出结果是
A)a12xyz B)12yz
C)a2yz D)bc2yz
(30)以下选项中,合法的是
A)char str3[]={'d','e','b','u','g','\0'};
B)char str4;str4="hello world";
C)char name[10];name="china";
D)char str1[5]="pass",str2[6];str2=str1;
(31)有以下程序
#include<stdio.h>
main() ’
{ char *s="12134";
int k=0,a=0;
while(s[k+1]!='\0')
{ k++;
if(k%2==0)
{a=a+(s[k]-'0'+1);continue;}
a=a+(s[k]-'0');
}
printf("k=%d a=%d\n",k,a);
}
程序运行后的输出结果是:
A)k=6 a=11 B)k=3 a=14
C)k=4 a=12 D)k=5 a=15
(32)有以下程序
#include<stdio.h>
main()
{ char a[5][10]={"one","two","three","four","five");
int i,j;
char t;
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(a[i][0]>a[j][0])
{t=a[i][0];a[i][0]=a[j][0];
a[j][0]=t;}
puts(a[1]);
}
程序运行后的输出结果是
A)fwo B)fix
C)two D)OWO
(33)有以下程序
#include <stdio.h>
int a=1,b=2;
void fun1(int a,int b)
{printf("%d%d",a,b);)
void fun2()
{ a=3;b=4; )
main()
{ fun1(5,6);fun2();
printf("%d%d\n",a,b);
}
程序运行后的输出结果是
A)1 2 5 6 B)5 6 3 4
C)5 6 1 2 D)3 4 5 6
(34)有以下程序
#include<stdio.h>
void func(int n)
{ static int num=1;
num=num+n;printf("%d",num);
)
main()
{func(3);func(4);printf("\n");)
程序运行后的输出结果是
A)4 8 B)3 4
C)3 5 D)4 5
(35)有以下程序
#include<stdio.h>
#include <stdlib.h>
void fun(int *p1,int *p2,int *s)
{ s=(int*)malloc(sizeof(int));
*s=*p1+*p2:
free(s);
}
main()
{int a=1,b=40,*q=&a;
fun(&a,&b,q);
printf("%d\n",*q);
)
程序运行后的输出结果是
A)42 B)0
C)1 D)41
(36)有以下程序
#include <stdio.h>
struct STU
{char name[9];
char sex;
int score[2];
};
void f(struct STU a[])
{struct STU b={"Zhao",'m',85,90};
a[1]=b;
}
main()
{struct STU c[2]={{"Qian",'f',95,92},{"Sun",'m',98,99}};
f(c);
printf("%s,%c,%d,%d,",c[0].name,c[0].sex,c[0].score[0],c[0].score[1]);
printf("%s,%c,%d,%d\n",c[1].name,c[1].sex,c[1].score[0],c[1].score[1]); ’
}
程序运行后的输出结果是
A)Zhao,m,85,90,Sun,m,98,99
B)Zhao,m,85,90,Qian,f,95,92
C)Qian,f,95,92,Sun,m,98,99
D)Qian,f,95,92,Zhao,m,85,90
(37)以下叙述中错误的是
A)可以用typedef说明的新类型名来定义变量
B)typedef说明的新类型名必须使用大写字母,否则会出编译错误
C)用typedef可以为基本数据类型说明一个新名称
D)用typedef说明新类型的作用是用一个新的标识符来代表已存在的类型名
(38)以下叙述中错误的是
A)函数的返回值类型不能是结构体类型,只能是简单类型
B)函数可以返回指向结构体变量的指针
C)可以通过指向结构体变量的指针访问所指结构体变量的任何成员
D)只要类型相同,结构体变量之间可以整体赋值
(39)若有定义语句int b=2;则表达式(b<<2)/(3||b)的值是
A)4 B)8
C)0 D)2
(40)有以下程序
#include<stdio.h>
main()
{FILE *fp;int i,a[6]={1,2,3,4,5,6};
fp=fopen("d2.dat","w+");
for(i=0;i<6;i++)
fprintf(fp,"%d\n",a[i]);
rewind(fp);
for(i=0;i<6;i++)
fscanf(fp,"%d",&a[5-i]);
fclose(fp); ‘
for(i=0;i<6;i++)
printf("%d,",a[i]);
}
程序运行后的输出结果是
A)4,5,6,1,2,3,B)1,2,3,3,2,1,
C)1,2,3,4,5,6,D)6,5,4,3,2,1,
二、填空题(每空2分,共30分) 请将每一个空的正确答案写在答题卡【1】~【15】序号的横线上,答在试卷上不得分。 注意:以命令关键字填空的必须拼写完整 (1)一棵二叉树共有47个结点,其中有23个度为2的结点,假设根结点在底1层,则该二叉树的深度为【1】 。 (2)设栈的存储空间为S(1:40),初始状态为bottom=0,top=0,现经过一系列入栈与出栈运算后,top=20,则当前栈中有【2】个元素。 (3)数据独立性分为逻辑独立性和物理独立性。当总体逻辑结构改变时,其局部逻辑结构可以不变,从而根据局部逻辑结构编写的应用程序不必修改,称为【3】 。 (4)关系数据库中能实现的专门关系运算包括【4】、连接和投影。 (5)软件按功能通常可以分为应用软件、系统软件和支撑软件(或工具软件),Unix操作系统属于【5】软件。
(6)请写出与!(a<=b)等价的C语言表达式___【6】___。
(7)以下程序运行时从键盘输入:1.0 2.0,输出结果是:1.000000 2.000000,请填空。
#include<stdio.h>
main()
{double a; float b;
scanf("___【7】___",&a,&b);
printf("%f %f",a,b);
}
(8)有以下程序
#include <stdio.h>
main()
{int n1=0,n2=0,n3=0;char ch;
while((ch=getchar())!='!')
switch(ch)
{ case '1':
case '3':n1++;break:
case '2':
case '4':n2++;break;
default:n3++;break;
}
printf("%d %d %d\n",n1,n2,n3);
}
若程序运行时输入01234567!<回车>,则输出结果是___【8】___。
(9)有以下程序
#include <stdio.h>
main()
{ int i,sum=0;
for(i=1;i<9;i+=2)sum+=i;
printf("%d\n",sum);
}
程序运行后的输出结果是___【9】___ 。
(10)有以下程序
#include <stdio.h>
main()
{ int d,n=1234;
while(n!=0)
{d=n%10;n=n/10;
printf("%d",d);
}
}
程序运行后的输出结果是___【10】___ 。
(11)有以下程序
#include <stdio.h>
int k=7;
int *st(int *a)
{ int *c=&k:
if(*a>*c) c=a;
return c;
}
main()
{ int i=3,*p=&i,*r;
r=st(p);printf("%d\n",*r);
}
程序运行后的输出结果是111|。
(12)以下程序的输出结果是___【12】___。
#include <stdio.h>
#define N 3
#define M(n) (N+1)*n
main()
{ int x;
x=2*(N+M(2));
printf("%d\n",x);
}
(13)若有定义语句:char str[]="0";,则字符串str在内存中实际占___【13】___字节。
(14)有以下程序
#include<stdio.h>
int fun(int n)
{ if(n==0)return(1);
return(fun(n-1)*n);
}
main()
{ int t;
t=fun(3);printf("%d\n",t);
}
程序运行后的输出结果是___【14】___
(15)以下程序的功能是输出链表结点中的数据,形参指针h已指向如下链表
请填空:
struct list{
char data; struct list *next;
};
void fun(struct list *h)
{ struct slist *p;
p=h;
while(p)
{printf("%c ",p->data);
p=___【15】___;
}
printf("\n");
} |