2012年9月计算机二级C语言真题及答案 下载本文

内容发布更新时间 : 2024/5/2 12:06:44星期一 下面是文章的全部内容请认真阅读。

} 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)可以用trpedef说明的新类型名来定义变量

B)trpedef说明的新类型名必须使用大写字母,否则会出编译错误 C)用trpedef可以为基本数据类型说明一个新名称

D)用trpedef说明新类型的作用是用一个新的标识符来代表已存在的类型名 (38)以下叙述中错误的是

A)函数的返回值类型不能是结构体类型,只能是简单类型 B)函数可以返回指向结构体变量的指针

C)可以通过指向结构体变量的指针访问所指结构体变量的任何成员 D)只要类型相同,结构体变量之间可以整体赋值

(39)若有定义语句 int b=2; 则表达式(b<<2)/(3||b)的值是

A)4 B)8 C)0 (40)有以下程序

#include 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 二、填空题(每空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

2012年9月笔试真卷及答案详解 第6页(共12页)

D)2

C)1,2,3,4,5,6

D)6,5,4,3,2,1

main()

{ double a; float b; }

scanf(“ 【7】 ”,&a,&b); printf(\%f%f \\n\,a,b);

(8)有以下程序

#include 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 main()

{ int i,sum=0;

for(i=1;i<9;i+=2)sum+=i; printf(\%d\\n\,sum); } 程序运行后的输出结果是 【9】 。 (10)有以下程序

#include main()

{ int d,n=1234; while(n!=0)

{ d=n;n=n/10;printf(\%d\,d);} } 程序运行后的输出结果是【10】 。 (11)有以下程序

#include 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); } 程序运行后的输出结果是 【11】 。 (12)以下程序的输出结果是 【12】 #include

2012年9月笔试真卷及答案详解 第7页(共12页)

#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 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已指向如下链表 h A B C\\0

请填空。

struct slist{ char data; struct slist *next}; void fun(struct slist *h) { struct slist *p; p=h; while(p)

{ printf(\%c \,p->data);p= 【15】 ; } printf(\\\n\); }

2012年9月笔试真卷及答案详解 第8页(共12页)

2012年9月全国计算机等级考试 二级C语言程序设计答案及详解

一、选择题 (1)C)

结点和下一个兄弟结点。

(2)B)

【解析】循环队列的当前指针和尾指针都等于15,此循环队列中元素的个数有两种情况,

第一种情况是当前指针和尾指针都是第一次到达15,此时元素个数为0;第二种情况是当前指针第一次到达15, 而尾指针第二次到达15,此时元素个数为35。

(3)B) 则操作元素。

(4)D) (5)A) (6)C) (7)C) (8)B) (9)A) 图和综合策略。

(10)A)

【解析】软件设计阶段总体分为两部分:概要设计和详细设计,此阶段的主要任务就是将需

求规格说明文档转换为软件设计文档,将需求阶段提出的问题,一一解释,形成详细设计文档,并根据功能要求, 定制相应数据结构、各种流程图等,为下一步编码做准备。

(11)B) (12)A) 失去系统规定的原义。

(13)B) (14)A) (15)C)

【解析】0xab是十六进制表示的常量。 【解析】C语言用函数实现软件的模块化设计。

【解析】C语言中,常常用一个标识符来代表一个常量,称为符号常量。符号常量在使用之 【解析】每一个C语言的文件或函数都可以单独编译,但只有main函数的才可以执行。 【解析】预定义标识符是C语言中的标识符,在C语言中也有特定的含义,如函数printf、 【解析】在关系数据库中,实体间的联系由一个二维表来表示。

【解析】一个部门可以有多名员工,所以实体部门和职员间的联系是1:m联系。 【解析】关系S是由关系R中的一行元组组成,应通过选择运算得到。

【解析】数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实 【解析】软件规格说明书主要有三个作用:①用户和软件开发人员之间的合同;②开发人员 【解析】采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果 【解析】栈是限定只能在表的一端进行插入和删除操作的线性表,必须按“后进先出”的规 【解析】二叉链表作为树的存储结构。链表中结点的两个链域分别指向该结点的第一个孩子

体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。 进行设计和编程的依据;③软件工程项目验收的依据。

scanf、sin等和编译预处理命令名(如define和include)。预定义标识符可以作为用户标识符使用,只是这样会

前要先定义,定义格式如下:

#define<符号常量名>(常量)

其中,<符号常量名)用标识符,习惯上用大写字母,<常量>可以是数字常量,也可以是字符 (16)C) (17)C) (18)B) (19)D) switch(表达式)

2012年9月笔试真卷及答案详解 第9页(共12页)

【解析】题目中用scanf函数以整数的形式输入a,b的值。选项C)整型数字3后面有一个 【解析】C语言中char类型数据占字节数为1. 【解析】由于3!=4的结果为1,而1>2的结果为假。 【解析】使用switch语句直接处理多个分支,其一般形式为:

空格,当输入空格时,scanf函数输入就会终止。

{

case 常量表达式1: 语句1; break;

case 常量表达式2: 语句2; break;

??

case 常量表达式n: 语句n; break;

default:

语句n+1; break; }

switch语句的执行流程是:首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表 达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后 遇break语句就退出switch语句;若圆括号中表达式的值与所有case后面的常量表达式都不等,则执行default 后面的语句n+1,然后退出switch语句。

(20)D) 1,变量b的等于2。

(21)C) (22)D) (23)D) 'h'。

(24)B) (25)D) 元素赋初值0。

(26)C) p=0;。

(27)A) 的值不变。

(28)B) (29)C) (30)A) (31)C)

【解析】函数fun()的作用是求出二维数组a[][N]中每一行中的最大元素,所以在main()函数 【解析】程序执行后strcpy(a+1,b+2)后,字符数组a的值为“a2”,再进行字符串的连接

中执行完fun(x,y)后,数组y中的元素为二维数组x[N][N]每一行的最大元素。 strcat(a,c+1),此时字符数组a的值为“a2yz”。

【解析】选项A)是定义了字符数组str3[],并对其赋初值。

【解析】这个程序的执行过程如下:当k=0时,s[1]=2!= '\\0',k++=1,a=0+(s[1]- '\\0')=2;当 【解析】因为指针变量p的初始值指向数组a,所以执行for循环语句后,数组a中的元素 【解析】给指针变量p赋NULL值,NULL是在stdio.h头文件中定义的预定义符,其代码

值为0,当执行p=NULL;语句后,称p为空指针。因为NULL的代码值为0,所以p=NULL;语句等价于p='\\0';或

【解析】在函数main()中,第一次执行for循环时,b的值等于1,此时输出字母B;第二次 【解析】x[0]可看作是由3个整型元素组成的一维数组,不可以用语句x[0]=0,为数组所有

执行for循环时,b的值等于3,此时输出字母D;第三次执行for循环时,b的值等于8,此时输出字母I。

【解析】定义指针变量时,必须将指针变量初始化为NULL(为空),否则,如果不赋给它 【解析】两个连续的双引号:\,是一个字符串常量,称为“空串”。 【解析】由于a的值为'H',符合(a>='A'&&a<='Z'),所以条件表达式的值等于(a-'A'+'a'),即

地址,系统会随机给它分配一个地址。

【解析】由于a的初始值等于-2,所以while循环语言执行两次结束,此时变量a的值等于

k=1时,s[2]=1!= '\\0',k++=2,a=2+(s[2]- '\\0'+1)=2+(1+1)=4;当k=2时,s[3]=3!= '\\0',k++=3,a=4+(s[3]- '\\0')=4+3=7;

2012年9月笔试真卷及答案详解 第10页(共12页)