2008年4月全国计算机等级考试二级笔试试卷 C语言程序设计.doc_第1页
2008年4月全国计算机等级考试二级笔试试卷 C语言程序设计.doc_第2页
2008年4月全国计算机等级考试二级笔试试卷 C语言程序设计.doc_第3页
2008年4月全国计算机等级考试二级笔试试卷 C语言程序设计.doc_第4页
2008年4月全国计算机等级考试二级笔试试卷 C语言程序设计.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

27校园网()2008年4月全国计算机等级考试二级笔试试卷C语言程序设计(考试时间90分钟,满分100分)一、 选择题(1)(10)、(21)(40)每题2分,(11)(20)每题1分。共70分)下列各题A)、B)、C)、D)4个选项中,只有一个选项是正确的,请将正确的选择涂写在答题卡相应位置上,答在试卷上不得分。(1)程序流程图中的带有箭头的线段表示的是( )A)图元关系B)数据流C)控制流D)调用关系(2)结构化程序设计的基本原则不包括( )A)多态性B)自顶向下C)模块化D)逐步求精(3)软件设计中模块划分应遵循的准则是( )A)低内聚低耦合B)高内聚低耦合C)低内聚高耦合D)高内聚高耦合(4)在软件开发中,需求分析阶段产生的主要文档是( )A)可行性分析报告B)软件需求规格说明书C)概要设计说明书D)集成设计计划(5)算法的有穷性是指( )A)算法程序的运行时间是有限的B)算法程序处理的数据量是有限的C)算法程序的长度是有限的D)算法只能被有限的用户使用(6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是( )A)快速排序B)冒泡排序C)直接插入排序D)堆排序(7)下列关于栈的叙述正确的是( )A)栈按“先进先出”组织数据B)栈按“先进后出”组织数据C)只能在栈底插入数据D)不能删除数据(8)在数据库设计中,将E-R图转换成关系数据模型的过程属于( )A)需求分析阶段B)概念设计阶段C)逻辑设计阶段D)物理设计阶段(9)有3个关系R、S和T如下:由关系R和S通过运算得到关系T,则所使用的运算为( )A)并B)自然连接C)笛卡尔积D)交(10)设有表示学生选课的3张表,学生S(学号、姓名、性别、年龄、身份证号),课程C(课号、课名),选课SC(学号、课号、成绩),则表SC的关键字(键或码)为( )A)课号,成绩B)学号,成绩C)学号,课号D)学号,姓名,成绩(11)以下叙述中正确的是( )A)C程序中的注释只能出现在程序的开始位置和语句的后面。B)C程序书写格式严格,要求一行内只能写一个语句。C)C程序书写格式自由,一个语句可以写在多行上。D)用C程序编写的程序只能放在一个程序文件中。(12)以下选项中不合法的标识符是( )A)printB)FORC)&aD)_00(13)以下选项中不属于字符常量的是( )A)CB)CC)xCCD)072(14)设变量已正确定义并赋值,以下正确的表达式是( )A)x=y*5=x+zB)int(15.8%5)C)x=y+z+5,+yD)x=25%5.0(15)以下定义语句中正确的是( )A)int a=b=0B)char A=65+1,b=bC)float a=1,*b=&a,*c=&bD)double a=0.0;b=1.1(16)有以下程序段char ch: int k:ch=a: k=12:printf(%c,%d, ,ch,ch,k); printf(k=%dn,k):已知a的ASCII十进制代码为97,则执行上述程序段偶输出结果是( )A)因变量类型与格式描述符的类型不匹配,输出无定值。B)输出项与格式描述符个数不符,输出为零值或不定值。C)a,97,12k=12D)a,97,k=12(17)已知字母A的ASCII代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是( )A)kk=A& kk=A | kk= a & (kk+32)= zD)isalpha(kk)&(kk=2&c=2&c=2&cb) a=b; c=a;if (c!=a) c=b;printf (%d,%d,%dn,a,b,c);其输出结果是( )A)程序段有语法错B)3,5,3C)3,5,5D)3,5,7(20)有以下程序#include main() int x=1,y=0,a=0,b=0;swith (x) case 1: swith(y) case 0: a+; break;case 1: b+; break;case 2: a+; b+; break;case 3: a+; b+; printf(a=%d, b=%dn, a,b); 程序的运行结果是( )A)a=1, b=0B)a=2, b=2C)a=1, b=1D)a=2, b=1(21)有以下程序#include main() int x=8;for( ; x0; x-) if(x%3) printf(%d, x-); continue; 程序的运行结果是( )A)7,4,2,B)8,7,5,2,C)9,7,6,4,D)8,5,4,2,(22)以下不构成无限循环的语句或语句组是( )A)n=0; B)n=0;do +n; while (n=0); while (1) n+;C)n=10; D)for(n=0, i=1; ;+)n+=iwhile (n); n-;(23)有以下程序#include main() int a =1,2,3,4,y, *p=& a3;-p; y=*p; printf(y=%dn,y); 程序的运行结果是( )A)y=0B)y=1C)y=2D)y=3(24)以下错误的定义语句是( )A)int x 3=0,1,1,2,3;B)int x4 3=1,2,3,1,2,3,1,2,3,1,2,3;C)int x4 =1,2,3,1,2,3,1,2,3,1,2,3;D)int x 3=1,2,3,4;(25)设有如下程序段char s20=Beijing, *p;p=s;则执行p=s;语句后,以下叙述正确的是( )A)可以用*p表示s0。B)s数组中元素的个数和p所指字符串长度相等。C)s和p都是指针变量。D)数组s中的内容和指针变量p中的内容相同。(26)若有定义:int a23;,以下选项中a数组元素正确引用的是( )A)a2!1B)a23 C)a03 D)a11!1(27)有定义语句:char s10;,若要从终端输入5个字符,错误的输入语句是( )A)gets(&s0);B)scanf(%s,s=1);C)gets(s);D)scanf(%s,s1);(28)以下叙述中错误的是( )A)在程序中凡是以“#”开始的语句行都是预处理命令行。B)预处理命令行的最后不能以分号表示结束。C)#define MAX是合法的宏定义命令行。D)C程序对预处理命令行的处理是在程序执行的过程中进行的。(29)以下结构体类型说明和变量定义中正确的是( )A)typedef struct B)struct REC; int n; char c; REC; int n; char c;REC t1,t2; REC t1,t2;C)typedef struct REC; D)struct int n=0; char c=A; t1, t2; int n; char c; REC; REC t1,t2;(30)以下叙述中错误的是( )A)gets函数用于从终端读入字符串。B)getchar函数用于从磁盘文件读入字符。C)fputs函数用于把字符串输出到文件。D)fwrite函数用于以二进制形式输出数据到文件。(31)有以下程序#include main() int s12=1,2,3,4,4,3,2,1,1,1,2,3,c5=0,i;for(i=0; i12; i+) csi+;for(i=0; i5;i+) printf(%d, ci);printf(n);程序的运行结果是( )A)1 2 3 4B)2 3 4 4C)4 3 3 2D)1 1 2 3(32)有以下程序#include void fun(int *s, int nl, int n2) int i,j,t;i=n1; j=n2;while(ij) t=si; si=sj; sj=t; i+;j-;main() int a10=1,2,3,4,5,6,7,8,9,0,k;fun(a,0,3); fun(a,4,9); fun(a,0,9);for(k=0; k10;k+)printf(%d, ak); printf(n);程序的运行结果是( )A)0987654321B)4321098765C)5678901234D)0987651234(33)有以下程序#include #include void fun(char *s, int n) char *t; int i,j;for(i=0; in-1;i+)for(j=i+1; jstrlen(sj) t =si; si=sj=t;main() char *ss=bcc,bbcc,xy,aaaacc,aabcc;fun(ss,5); printf(%s,%sn,ss0,ss4);程序的运行结果是( )A)xy,aaaaccB)aaaacc,xyC)bcc,aabccD)aabcc,bcc(34)有以下程序#include int f(int x) int y;if(x=0 | x=1) return(3);y=x*x-f(x-2);return y;main() int z;z=f(3); print(%d, z);程序的运行结果是( )A)0B)9C)6D)8(35)有以下程序#include void fun(char *a,char *b0while( *a=*) a+;while( *b=*a)b+;a+;main() chau *s=*a*b*,t80; fun(s,y; puts(t);程序的运行结果是( )A)*a*bB)a*bC)a*b*D)ab(36)有以下程序#include #inclued typedef struct cahr name9; char sex; float score2; STU;void f(STU a) STU b=Zhao, m, 85.0,90.0; int i;strcpy(, );a.sex=b.sex;for(i=0;i2;i+) a.scorei=b.scorei;main() STU c=Qian,f, ;f(c): printf(%s,%c, %2.0f ,%2.0fn,,c,sex,c.score0,c,score1);程序的运行结果是( )A)Qian,f,95,92B)Qian,m,85,90C)Zhao,f,95,92D)Zhao,m,85,90(37)有以下程序#include main() FILE *fp; int a10=1,2,3,i,n;fp=fopen(d1.dat,w);for(i=0; i3;i+) fprint(fp, %d, ai);fprintf(fp, n);fclose(fp);fp=foprn(d1,dat,r);fscant(fp, %d,&n);fclose(fp);printf(%dn,n);程序的运行结果是( )A)12300B)123C)1D)321(38)变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000,若要求将a的高4位取反,低4位不变,所要执行的运算是( )A)abB)a|bC)a&bD)a4(39)在C语言中,只有在使用时才占用的内存单元的变量,其存储类型是( )A)anto和registerB)extern和registerC)auto和staticD)static和register(40)设有定义语句int (*f)(int) ,则以下叙述正确的是( )A)f是基类型为int的指针变量。B)f是指向函数的指针变量,该函数具有一个int类型的形态。C)f是指向int类型一维数组的指针变量。D)f是函数名,该函数的返回值是其类型为int类型的地址。二、填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡【1】至【15】序号的横线上,答在试卷上不得分。(1)测试用例包括输入值集和 【1】 值集。(2)深度为5的满二叉树有 【2】 个叶子结点。(3)设某循环队列的容量为50,头指针front=5(指向对头元素的前一位置),尾指针rear=29(指向队尾元素),则该循环队列中共有 【3】 个元素。(4)在关系数据库中,用来表示实体之间联系的是 【4】 。(5)在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制语言中, 【5】 负责数据的模式定义与数据的物理存取构建。(6)已有定义:char c= ;int a=1, b; (此处c的初值为空格字符),执行b=!c &a;后b的值为 【6】 。(7)改变量已正确定义为整型,则表达式n=i=2,+i,i+的值为 【7】 。(8)若有定义:int k; ,以下程序段的输出结果是 【8】 。for (k=2; k6; k+,k+) printf(#%d,k);(9)以下程序的定义语句中,x1的初值是 【9】 ,程序运行后输出的内容是 【10】 。#include main() int x=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, *p4,i;for(i=0; i4; i+) pi=&x2*i+1;printf(%d, pi0);printf(n);(10)以下程序的输出结果是 【11】 。#include void swap(int *a, int *b) int *t, t=a; a=b; b=t;main() int i=3, j=5, *p=&i, *q=&j;swap(p,q); printf(%d %dn, *p,*q)(11)以下程序的输出结果是 【12】 。#include main() int a5=2,4,6,8,10, *p;p=a; p+;printf(%d, *p);(12)以下程序的输出结果是 【13】 。#include void fun(int x) if(x/20) fun(x/2);printf(%d, x);main() fun(3); printf(n);(13)以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并作为函数值返回。请填空。#include #defing N 3typedef struct int num; char nam10; char sex; SS;int fun(SS person) int i,n=0;for(i=0; iN; i+)if( 【14】 =M) n+;return n;main() SS WN=1,AA,F,2,BB,M,3,CC,M; int n;n=fun(W); printf(n=%dn, n)(14)以下程序从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上,请填空。#include main() FILE *fp; char ch;fp = fopen( 【15】 );ch = fgetc(fp);while (!feof(fp) putchar(ch); ch=fgetc(fp); prtchar(n); fclose(fp);2008年4月全国计算机等级考试二级笔试试卷C语言程序设计答案和解析一、选择题(1)【答案】C【解析】本题考查程序流程图的组成。一般的流程图由以下几种基本图形组成:椭圆。表示流程的开始或终止;矩形。表示处理;平行四边形。表示输入输出;菱形。表示判断;带箭头的线段。表示控制流;圆。表示连接点。所以,本题应该选择C。(2)【答案】A【解析】本题考查结构化程序设计的原则。结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化和限制使用goto语句4点。由此可见,本题应该选择A。(3)【答案】B【解析】本题考查软件工程中软件设计的概念和原理。人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得到如下的启发式原则:改进软件结构,提高模块独立性。通过模块的分解或合并,力求降低耦合提供内聚。低耦合也就是降低不同模块间相互依赖的紧密程度,高内聚是提高一个模块内各元素彼此结合的紧密程度。模块的规模应适中。一个模块的规模不应过大,过大的模块往往是由于分解不够充分;过小的模块开销大于有益操作,而且模块过多将使系统接口复杂。因此过小的模块有时不值得单独存在。模块的功能应该可以预测,但也要防止模块功能过分局限。如果模块包含的功能太多,则不能体现模块化设计的特点:如果模块的功能过分的局限,使用范围就过分狭窄。经过上述分析,本题的正确答案是选项B。(4)【答案】B【解析】本题考查需求分析的过程。需求分析阶段的工作,可以概括为需求获取、需求分析、编写需求规格说明书和需求评审4个方面。其中,需求规格说明书是需求分析的阶段成果,可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进程的依据。所以,本题应该选择B。(5)【答案】A【解析】本题考查算法的有穷性。算法的有穷性是指一个算法应包含有限个操作步骤,即算法程序的运行时间是有限的。故本题应该选择A。(6)【答案】D【解析】本题考查常见排序算法的效率。假设线性表的长度为n,则在最坏情况下,快速排序算法、冒泡排序算法和直接插入算法需要的比较次数均为n(n-1)/2。而堆排序的比较次数为nlog2n。所以,本题应该选择D。(7)【答案】B【解析】本题考的是栈的基本概念。栈是限定在一端进行插入与删除的线性表,栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素,即栈是按照“先进后出”或“后进先出”的原则组织数据的,这便是栈的记忆作用。所以,本题应该选择B。(8)【答案】C【解析】本题考查数据库设计。数据库设计一般分为以下4个阶段:需求分析阶段:通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。概念设计阶段。分析数据间内在语义关联,在此基础上建立一个数据的抽象模型。逻辑设计阶段。将E-R图转换成指定RDBMS中的关系模式。物理设计阶段。对数据库内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度及有效利用存储空间。(9)【答案】D【解析】本题考查基本关系运算。“并”是求两个结构相同的关系的记录的总和,排除完全相同的记录;“自然连接”是通过两个关系间的公共域进行等值连接;“笛卡尔积”是两个关系的合并,包含两个关系的所有域,并且包含两个关系中的人员记录两两组合而成的记录;“交”是求两个结构相同的关系中所有完全相同的记录。题目中的结果关系T只包含1条记录a、0、k1,它是关系R和S中唯一一条完全相同的记录,所以使用的运算为“交”。(10)【答案】C【解析】本题考查关系模型。在二维表中凡是能唯一标识元组的最小属性集称为该表的关键字(键或码)。在选课关系中,“学号”有可能重复,因为1个学生可能会选修多门课程;而“课号”也有可能重复,因为1门课程可能被多个学生选修;“成绩”更容易重复。所以,3个属性都不能单独用作选课关系的关键字。因为每个学生多选修的课程是不会重复的,所以学号和课号的组合是不可能重复的,所以SC的关键字应该为(学号,课号)。(11)【答案】C【解析】本题主要考查C语言程序的书写格式。C程序中的注释是用/*和*/括起来的部分,可以出现在程序的任何地方,所以选项A不正确。C程序的书写格式很自由,一个语句可以写在多行上,多个语句也可以写在一行上,所以选项B不正确。用C语言编写的可以放在多个程序文件中,它们之间可以通过#include命令行来进行关联,所以选项D也不正确。故本题应该选择C。(12)【答案】C【解析】本题主要考查用户标识符的定义。在C语言中,合法的标识符只能由字母、数字或下划线组成,其中关键字不能作为用户的标识符,且开头的第一个字符必须为字母或下划线。选项C中包含的&字符不合法,所以应该选择C。(13)【答案】B【解析】本题主要考查字符常量。字符常量是用单引号括起来的一个字符,而以双引号括起来的任意多个字符是字符串常量,所以本题中B不属于字符常量。注意,选项C和D虽然用单引号括起来的并不止一个字符,但它们都是以开头的,都是代表一个字符的转义字符。(14)【答案】C【解析】本题主要考查C语言中一些运算符的简单应用。在C语言中,要求等号的左边是一个“左值”,即为一个变量或者能够代表一个变量的表达式(例如,*p),而选项A中,后面的等号左边是y*5,不符合“左值”的要求,所以不正确。%是整数求余运算,所以要求两个运算分量均为整数,所以选项B和D都不正确。故本题应该选择C。(15)【答案】B【解析】本题主要考查变量定义的基本概念。选项A中定义变量时用了连续的赋值语句,这在定义变量中是不正确的,故选项A不正确。选项C中b被定义为一个指针变量,接着又定义了一个同样的指针变量c,并让c初始化为b的地址,这是错误的。c被定义为float类型的指针变量,因此只能指向float类型变量的地址而不是指向float类型指针变量的地址,所以选项C不正确。C语言中,可以在一条定义语句中对变量进行连续的定义,但必须用逗号隔开,而不是分号,所以选项D也不正确。故本题的正确答案是B。(16)【答案】D【解析】本题主要考查标准输出函数printf。printf函数在进行参数匹配时,并不会检查参数类型是否一一匹配,也不会检查参数个数是否一致,而是从它认为应该是第1个参数地址的内存位置开始,依次将内存中的内容逐个匹配给格式化字符串内所给定的各个类型。因此,前一个printf调用,两个ch分别匹配给%c和%d,而参数k多余,被抛弃。所以会输出a,97(字符a的ASCII值为97)。后一个printf很正常,这里就不解释了。故应该选择D。(17)【答案】B【解析】本题主要考查逻辑表达式。选项A中的表达式意思是kk大于等于A且小于等于Z,因此只有那个kk是一个大写字母的时候,该表达式才能被满足,所以选项A能够判断出kk中的值为大写字母。我们知道(kk+32)= a等价于kk=a-32,又因为相同的大小写字母的ASCII值,小写字母的要比大写字母大32。所以a-32等于A。故选项C和选项A是等价的。isalpha()函数的功能是判断一个参数是否为字母。又因为小写字母的ASCII值范围是97122,大写字母的ASCII值范围是6590。所以,如果一个字符既是一个字母,其ASCII值又小于91,那它肯定是大写字母。所以选项D也是正确的。故本题应该选择B。(18)【答案】B【解析】本题主要考查逻辑表达式。选项A中表达式的意思是:当c等于2或4或6时,表达式的值为真,否则为假。所以不满足题意。选项C中表达式的意思是:当c大于等于2且小于等于6,并且c不是奇数时,表达式的值为真,否则为假。这样,满足该表达式的c,只能取值为2、4、6了,所以也不满足题意。选项D中后面一个子表达式(c%d!=1)和选项C中的!(c%2)是等价的,都是判断c不是奇数。因此也不满足题意。故本题正确答案为B。(19)【答案】B【解析】本题是一道陷阱题,以书写格式来考查考生对if语句的理解。if语句只对紧跟其后的一条语句或语句块产生作用。因此,题目中两条if语句只有a=b;和c=b是if子句。第1条if语句中ab为假,所以跳过语句a=b;,执行c=a;后,a=3、b=5、c=3。第2条if语句的判断条件c!=a为假,所以跳过语句c=b;。故最终输出的结果是:3,5,3,应该选择B。(20)【答案】D【解析】本题主要考查switch语句的嵌套。首先看外层switch,因为x初始时为1,进入外层case 1分支,这里又是一个switch语句。因为y初始时为0,进入内层case 0分支,执行a+; break;,所以此时应该跳出内层switch语句,跳出来后由于没有碰到break;语句,所以应执行外层case 2分支,a+; b+; break;,此时又遇到break;所以跳出外层switch语句。由此可见,整个switch语句中,a被增1两次,b增1一次,所以执行最后一条printf输出a和b的值分别是2和1,故应该选择D。(21)【答案】D【解析】本题主要考查continue语句。continue语句只能用在for循环中,表示提前结束该次循环,开始新的一轮循环。所以,执行到continue时,循环体内剩下的语句均会被跳过。程序首先定义并初始化变量x为8,然后进入for循环,因为80,所以执行循环体。循环体中首先是一条if语句,判断条件是x%3,即当x不能被3整除时执行if子句printf(%d, , x-); continue;,此时if外面的continue(%d, ,x-);语句将被跳过。由此可见,进入for循环体后,如果循环变量x能被3整除,则执行printf(%d, , x-);,不能被3整除,则执行printf(%d, x-);;。现在x等于8,不能被3整除,执行printf(%d, , x-);。这里x-表达式的值是减1之前的值,所以首先输出的是“8,”,而后x被减1。根据for循环的特性,准备开始新一轮循环时,会执行for后面括号中的第3个语句,这里是x-,所以现在x的值为6,满足x0这个条件,再次进入for循环。这一次,由于x能被3整除,所以执行printf(%d, ,x-);,x-表达式的值是减1之后的值,所以这次输出“5,”,x的值为5。准备开始新一轮循环,x再次被减1,值为4,满足x0。此时x不能被3整除,执行prinrf(%d, , x-);,输出“4,”,x值为3。x再次被减1,值为2,进入循环。不能被3整除,执行printf(%d, , x-);,所以输出“2,”,x值为1。现在,x被减1后结果为0,不满足循环条件了,循环结束。故最终输出内容为“8,5,4,2”,应该选择D。(22)【答案】A【解析】本题主要考查循环语句。dowhile循环首先执行一遍循环体,然后判断循环条件,如果成立则再次循环,否则退出。选项A中,n初始值为0,循环体+n;使n不断增1。所以n1的值是“假”,可以被看做整数“0”,表达式!1的值也是“假”,所以整个a11!1就是a00,这是对a数组元素的正确引用,故应该选择D。(27)【答案】D【解析】本题主要考查输入函数scanf和gets。gets()函数的原型是:char *gets(char *s);。功能是通过键盘读入一个字符串,并放到指针参数s所指的内存地址中。选项A给gets传入的实参是&s0,也就是数组s的第1个元素的地址,这是合法的。选项C传入的是数组名s,它出现在表达式中表示的是数组的首地址,所以也是合法的。scanf()函数要求输入的参数均为地址形式。选项B中表达式s+1,表示的是数组首地址往后移动一位的地址,所以是合法的。选项D直接引用数组中下标为1的元素,这是不合法的。故本题应该选择D。(28)【答案】D【解析】本题主要考查编译预处理的概念。所谓“编译预处理”就是在C编译程序对C源程序进行编译前,由编译预处理程序对这些编译预处理命令行进行处理的过程。所以,只有选项D的说法是错误的。(29)【答案】A【解析】本题主要考查结构体类型。说明结构体类型并定义结构体变量一般有3种方式: 第一种,说明结构体类型的同时定义结构体变量。 struct 结构体名 成员说明列表 结构体变量名; 其中的结构体名可以省略。 第二种,先说明一个结构体类型,然后使用该类型来定义结构体变量。 struct 结构体名 成员说明列表; struct 结构体名 结构体变量名; 第三种,使用typedef关键字,先给说明的结构体类型起一个别名,然后通过这别名来定义结构体变量。 typedef struct 结构体名 成员说明列表 别名; 别名 结构体变量名; 注意:这种形式很容易跟第二种混淆了。区别在于,第二种使用结构体名来定义变量时,前面要使用struct关键字,而别名就不需要。本题的选项A使用的就是这种方式,所以A是正确的。选项B看起来很像第二种方式,但它的第1行末尾多了一个分号,而且即使去掉分号,第3行也没有使用struct关键字,所以不正确。选项C像第一种方式,又像第三种方式,但实际上哪一种都不是,而且第1行末尾也多了一个分号。所以错得很严重。选项D只有前2行是符合第一种方式的,REC被定义成结构体变量了。但第3行又使用REC去定义变量,这就不对了。(30)【答案】B【解析】本题主要考查输入输出函数。从终端输入的函数有:scanf、getchar、gets。输出到屏幕的函数有:printf、putchar、puts。从磁盘文件输入的函数有:fscanf、fgetc、fgets、fread、getc。输出到磁盘文件的函数有:fprintf、fputc、fputs、fwrite、putc。由此可见,选项B的说法是错误的。(31)【答案】C【解析】本题主要考查for循环。前一个for循环,循环变量i从0循环递增到11,共循环12次,每次执行csi+;。所以,它的功能是,以数组s中的12个元素为下标,对数组c中的元素进行增1操作。s的数值中,共有4个1、3个2、3个3和2个4。所以,循环结束后,数组c的内容是0,4,3,3,2。后一个for循环,从数组c下标为1的元素开始,循环输出后面的4个元素。所以,最终输出结果时4 3 3 2,应该选择C。(32)【答案】C【解析】本题主要考查函数。在fun函数中,首先将形参n1和n2分别赋给局部变量i和l,然后使用while循环,交换si和sj的内容,并使i增1,j减1,直到i不小于j为止。所以该函数实现的功能是:对形参指针s所指的一系列元素,从第n1位到第n2位进行逆序。主函数中,连续调用了3次fun函数,依次对数组a的第03位、第49位和第09位进行了逆序。对03位逆序后,数组a的内容是4,3,2,1,5,6,7,8,9,0;再对49位逆序后是4,3,2,1,0,9,8,7,6,5;最后对09位进行逆序,结果是5,6,7,8,9,0,1,2,3,4。所以程序最后,通过for循环输出数组a的内容是5678901234,应该选择C。(33)【答案】A【解析】本题主要考查字符串排序。在fun函数中是一个双重for循环。外循环变量i从0循环递增到n-2,内循环变量j从i+1循环递增到n-1,这是一个选择排序算法。循环体中if的条件是strlen(si)strlen(sj),说明实现的是对字符串数组s的前n个字符串按字符串长度进行从小到大的排序。在主函数中,调用fun函数对字符串数组ss的前5个字符串进行排序,所以排序后数组ss的内容是xy,bcc,bbcc,aabcc,aaaacc,最后一条语句输出数组ss的第1个和第5个字符串的内容。所以结果是xy,aaaacc,应该选择A。(34)【答案】C【解析】本题考查递归函数。题目中的f()函数直接调用了自身,是一个递归函数。主函数中调用f()函数时传入的参数是3,所以会跳过if语句,执行y=x*x-f(x-2);,也就是y=32-f(1);就等价于y=32-3;,结果是6,所以返回给主函数的结果是6。故本题应该选择C。(35)【答案】C【解析】本题主要考查while循环。在fun函数中只有两个while循环。前一个不停比较a所指内容,如果是*字符,将a移向后一位。后一个循环的条件是*b=*a,注意这是一个赋值语句,不是比较a和b所指内容,而是将a所指内容赋到b所指内存地址中去。因为赋值表达式的结果就是所赋的值,又因为C语言规定,只要值不为0,就可以将其看作逻辑值“真”。所以只要a所指内容不为0,循环就不会被中断。循环体中的语句是将a和b向后移一位。由此可见,这个循环的作用就是将a所指字符串复制到b所指内存区域中。整个fun函数的作用就不难看出来了,是将前一个参数传入的字符串减去前面连续的*字符后复制到后一个参数传入的内存区域中去。所以,结果是a*b*,应该选择C。(36)【答案】A【解析】本题考查结构体变量用作函数参数。结构体变量用作函数参数时是传值调用,即在函数内部无论怎样修改形参结构体变量的内容,都不会影响到调用函数时传递给函数的实参结构体变量。因此,本题的f()函数没有任何实际作用,它改变不了什么内容。故本题的结果是定义结构体c时给出的初始值,应该选择A。(37)【答案】B【解析】本题主要考查文件的操作。程序一开始定义了一个文件指针FILE *fp;,然后通过fopen函数以只写方式打开d1.dat文件,使用一个for循环往d1.dat文件里面依次写入数组a的3个值,再写入一个换行符,最后通过fclose函数关闭d1.dat文件,使用fscanf函数读取1个整数,考

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论