为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > [计算机软件及应用]2013年9月全国计算机等级《二级C语言程序设计》终极押密卷1--5整理版 2

[计算机软件及应用]2013年9月全国计算机等级《二级C语言程序设计》终极押密卷1--5整理版 2

2017-09-19 50页 doc 225KB 32阅读

用户头像

is_654168

暂无简介

举报
[计算机软件及应用]2013年9月全国计算机等级《二级C语言程序设计》终极押密卷1--5整理版 2[计算机软件及应用]2013年9月全国计算机等级《二级C语言程序设计》终极押密卷1--5整理版 2 2013年9月全国计算机等级 《二级C语言程序设计》终极押密卷(1) 一、选择题(每小题1分,共40分) 1两个或两个以上模块之间关联的紧密程度称为( A )。 耦合度内聚度复杂度数据传输特性A. B. C. D. (模块的独立性是指每个模块保证完成系统要求的独立功能,并且与其他模块的联系少且接口简单。衡量软件的模块独立性有内聚性和耦合性两个定性度量标准。耦合性是模块间互相连接紧密程度的度量。一般较优秀的软件设计,应尽...
[计算机软件及应用]2013年9月全国计算机等级《二级C语言程序设计》终极押密卷1--5整理版 2
[计算机软件及应用]2013年9月全国计算机等级《二级C语言程序》终极押密卷1--5整理版 2 2013年9月全国计算机等级 《二级C语言程序设计》终极押密卷(1) 一、选择题(每小题1分,共40分) 1两个或两个以上模块之间关联的紧密程度称为( A )。 耦合度内聚度复杂度数据传输特性A. B. C. D. (模块的独立性是指每个模块保证完成系统要求的独立功能,并且与其他模块的联系少且接口简单。衡量软件的模块独立性有内聚性和耦合性两个定性度量。耦合性是模块间互相连接紧密程度的度量。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,以利于提高模块的独立性。) 2简单的交换排序方法是( D )。 快速排序选择排序堆排序冒泡排序A. B. C. D. 解析:所谓的交换排序方法是指借助数据元素之间的互相交进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序通过相邻元素的交换,逐步将线性表变成有序是一种最简单的交换排序方法。 3若i和k都是int类型变量,有以下for语句:for(i=0,k=-1;k=1;k++)printf("*****,n");下面关于语句执行情况的叙述中正确的是(D )。 循环体执行两次循环体执行一次循环体一次也不执行构成无限循环A. B. C. D. (循环条件k=1这个循环条件是一个为值1的赋值表达式,因此永真,为死循环,答案D) 4若有定义语句:“int kl=10,k2=20;”,执行表达式(kl=kl>k2)&&(k2=k2> k1)后,kl和k2的值分别为( A )。 和和和和A. 01 B. 020 C. 101 D. 1020 解析:此表达式为逻辑表达式,k1=k1>k2的意义是,如果k1>k2,则k1为真,同理k2=k2>k1,如果k2>k1,则k2为真。所以答案为A。 5下列叙述中正确的是( A )。 为了建立一个关系,首先要构造数据的逻辑关系A. 表示关系的二维表中各元组的每一个分量还可以分成若干数据项B. 一个关系的属性名表称为关系模式C. 一个关系可以包括多个二维表D. 解析:元组分量的原子性要求二维表中元组的分量是不可分割的基本数据项。关系的框架称为关系模式。一个称为关系的二维表必须同时满足关系的7个性质。 6有以下程序段 #include main( ) { . while(getchar( )!=',n'); } 以下叙述中正确的是( C )。 此语句将无限循环A. while ( )不可以出现在语句的条件表达式中B. getcharwhile 当执行此语句时,只有按回车键程序才能继续执行C. while 当执行此语句时,按任意键程序就能继续执行D. while 解析主要是考查和函数,函数是输入字符函数,是循环语句,:whilegetchargetcharwhile所以当输入的字符为换行符时将执行 若有定义,;,则表示( )。7“int b[8]*p=b”p+6B 数组元素的值数组元素的地址A. b[6] B. b[6] 数组元素的地址数组元素的值加上C. b[7] D. b[0]6 解析:指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。所以题中p+6指的是将指针向后移动了6个存储单元,即指向b[6],存放的是b[6]的地址。 8以下程序段中,与语句“k—a>b?(b>c?1:O):0;”功能相同的是( A )。 ;A. if(a>b)&&(b>c)k=1 ; else k=0 ;B. if((a>b)‖(b>c))k=1 ; else k=0 ;C. if(a<=b)k=0 ; else if(b>c)k=1 ;D. if(a>b)k=1 ; else if(b<=c)k=1 : else k=0 解析:本题考查了双重三目运算符的用法。例如:表达式a>b?c:d可以看成,当a>b时取C的值,否则取d的值。在本题中k=a>b?(b>c?1:0):0可以看做:当b>c时为真,则k=a>b?1:0。当bb?0:0。也就是说,当a>b并且b>C时,k=1,否则k=0。所以A选项符合题意。 9有以下程序: #include struct ord {int X,y;)dt[2]={1,2,3,4}; main( ) { struct ord*p=dt; printf("%d,",++(p->x));printf("%d\n",++(p->y)); } 程序运行后的输出结果是( D )。 ,,,,A. 12 B. 41 C. 34 D. 23 解析:p一>x的值为1,++(p->x)作用是取p->x的值加1作为表达式的值即值为2,同理++(p->y)的值为3。所以选D。 10设有定义:“struct{char markp[l2];int numl;double num2;}tl,t2;”,若变量均已正确赋初值,则以下语句中错误的是( C )。 ;((;A. t1=t2 B. t2num1=tlnuml ((;((;C. t2mark=tlmarkD. t2num2=tlnum2 解析:结构体不能通过结构体名字整体赋值,通过结构体名(成员名的方式赋值。所以C选项错 11若有定义语句:“int x=10;”,则表达式x-=x+x的值为( B )。 A. -20 B. -l0 C. 0 D. 10 解析:表达式x-=x+X可以写成x=x-(x+x),所以X的值为-l0。 12有下列程序: int fun(int x[],int n) { static int sum=0,i; for(i=0;i void fun(int x) {if(x/Z>1)fun(x/Z); printf("%d",x); } main() {fun(7);printf("\n");} 程序运行后的输出结果是( D )。 A. 1 3 7 B. 7 3 1 C. 7 3 D. 3 7 解析:本程序主要考查递归函数。fun(7),首先将参数代入函数,因为(7,2)>1,所以执行f(3),依此类推直到f(1(5),(1(5,2)<1,所以执行打印函数,此时X值为3,然后退出f(1(5),返回f(3),打印x值即7。所以选D。 15右两个关系R和S如下: 则由关系R得到关系S的操作是(C )。 自然连接并选择投影A. B. C. D. 解析:选择:是在数据表中给予一定的条件进行筛选数据。投影:是把表中的某几个属性的数据选择出来。连接:有自然连接、外连接,内连接等,连接主要用于多表之间的数据查询。并:与数学中的并是一样的。两张表进行并操作,要求它们的属性个数相同并且需要相容。 16有以下程序: #include main( ) {int b[3][3]=(0,1,2,0,1,2,0,1,2},i,j,t=l; for(i=0;i<3;i++) for(j=1;j<=i;j++)t+=b[i][b[j][i]]; printf("%d\n",t); } 程序运行后的输出结果是( C )。 A. 1 B. 3 C. 4 D. 0 解析:本题考查了两层for循环。外层循环增量i的值作为内层循环执行次数的值使用。 17有以下程序 #include main( ) {char cl,c2; c1='A'+'8'-'4' c2='A'+'8'-'5'; printf(",C,,d\n",cl,c2); } 已知字母A的ASCIl码为65,程序运行后的输出结果是(A )。 ,,,输出无定值A. E69 B. D69 C. ED D. 解析:本值输出两个值,,c为输出一个字母,0,4d输出一个数字。“A”的ASCIl码为65,再加 4之后为69,也就是字母E,所以本题A正确。 18数据库设计中,用E—R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的( C)。 需求阶段逻辑设计阶段概念设计阶段物理设计阶段A. B. C. D. 解析:E-R(Entity—Relationship)图为实体一联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。 19数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是( C )。 包含和包含和A. DBDBSDBMS B. DBMSDBDBS 包含和没有任何关系C. DBSDBDBMS D. 解析:数据库系统DBS包括数据库DB和数据库管理系统DBMS!! 20若有以下定义和语句: char s [10]="abcd!",*s2="\nl23\\"; Drintf("%d%d\n",strlen(sl),strlen(s2)); 则输出结果是( A)。 A. 5 5 B. 10 5 C. 10 7 D. 5 8 解析:\n和\\分别为转义字符,各占据一个字符的位置 21以下选项中表示一个合法的常量是(说明:符号口表示空格)( B )。 口口((A. 999 B. 0Xab C. 123E02 D. 27e 解析:当用指数形式表示浮点数据时,E的前后都要有数据,并且E的后面数要为整数 有以下程序:22 (#include int f(int m) ;{ static int n=0 ;n+=m ;return n } ( )main ;{ int n=0 ,;printf("%d"f(++n)) ,;printf("%d\n"f(n++)) } 程序运行后的输出结果是( )。A ,,,,A. 12 B. 11 C. 23 D. 33 解析:由题可知,输出是调用了f函数,其中有f(++n)和f(n++),其中n=0,所以输出的结果为l,2。 23有以下程序 #include main( ) {char a[3O],b[30]; scanf("%S",a); gets(b); printf("%s\n%s\\n",a,b); } 程序运行时若输入: how are you? I am fine<回车> 则输出结果是( B )。 A. how are you? I am fine B. how are you?I am fine C. how are you?I am fine D. how are you? 解析:此题主要考查scanf函数和gets函数的区别。答案为B。 scanf("",&a)一遇到空格就认不出来,例如你输入hi nihao则scanf只能取到hi,而若换成 gets则都能去 24下列叙述中正确的是( D )。 A. 可以用关系运算符比较字符串的大小 空字符串不占用内存,其内存空间大小是B. 0 两个连续的单引号是合法的字符常量C. 两个连续的双引号是合法的字符串常量D. 解析:比较两个字符串大小用函数strcomp(S,t),空字符串有结束符,所以也要占用字节, 两个双引号表示的是空字符串。 有下列程序:25 ( )main ,,;{int ijx=0 ,;for(i=0i<2i++) ;{x++ ;;for(j=0j<=3j++) ;{if(j%2)continue :x++ } :x++ } ,;printf("x=%dn"x) } 程序执行后的输出结果是( )。B A. x=4 B. x=8 C. x=6 D. x=12 解析:在第1次外层for循环中,首先x++得到x=1。进入到内层for循环,只有循环j的值为奇数时,变量x的值才自加1,所以在内层for循环执行过程中,变量x的值自加两次,当退出内层for循环时,x=3,然后执行x++,得到x=4。在进入执行第2次外层for循环中,首先x++得到x=5。进入到内层for循环,只有循环变量J的值为奇数时,变量X的值才自加1,所以在内层for循环执行过程中,变量X的值自加l两次,当退出内层for循环时,x=7,然后执行x++,得到x=8,所以打印输出变量x的值为8。 26有以下程序: #include main( ) { FILE*fp; int k,n,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]); fclose(fp); fp(i=0;i<3;i++) fscanf(fp,"%d%d",&k,&n); fclose(fp); printf("%d\n,%d\n,k,n); } 程序运行后的输出结果是(C )。 ,,,A. 1, 2 B. 34 C. 56 D. 123456 解析:此题是考查fprintf和fscanf,其中fprintf是向文件输出,文件为da2(dat文件,fscanf是向文件输入,所以根据程序循环写入和写出(可知答案为C。 27设x=011050,则x=x,01252的值是(A )。 A. 0000001000101000 B. 1111110100011001 C. 0000001011100010 D. 1100000000101000 解析:本题主要考查按位与运算,x=Oll050的二进制形式为00010010000101000,Ol252的二进制形式为0000001010101010,两者相与得0000001000101000。 28设有以下语句 char chl,ch2; scanf("%c%C",&chl,&ch2); 若要为变量chl和ch2分别输入字符A和B,正确的输入形式应该是( B )。 和之间用逗号间隔和之间不能有任何间隔符A. AB B. AB 和之间可以用回车间隔和之间用空格间隔C. AB D. AB 解析:scanf输入函数中,格式控制J必须严格按照函数中的要求进行输入,在scanf("%c%c", &chl,,ch2)的格式控制语句中没有任何字符进行间隔,所以在输入时也不能使用任何字符进行间隔,所以答案选择B。 29下列叙述中正确的是(C )。 对长度为的有序链表进行查找,最坏情况下需要的比较次数为A. nn 对长度为的有序链表进行对分查找,最坏情况下需要的比较次数为B. n(n/2) 对长度为的有序链表进行对分查找,最坏情况下需要的比较次数为C. n(log2n) 对长度为的有序链表进行对分查找,最坏情况下需要的比较次数为D. n(nlog2n) 解析:分法查找只适用于顺序存储的有序表,对于长度为n的有序线性表,最坏情况只需比较log2n次。 30某二叉树共有7个结点,其中叶子结点只有l个,则该二叉树的深度为(假设根结点在第1层)( D )。 A. 3 B. 4 C. 6 D. 7 解析:有一个叶子节点而节点的总个数为7,根据题意,这个二叉树的深度为7 31有以下程序 #include #incl ude main( ) {char a[10]=”abcd”; printf(",d,,d\n",strlen(a),sizeof(a)); } 程序运行后的输出结果是( B )。 ,,,A. 74 B. 410 C. 88 D. 10,10 解析:strlen是求字符串的长度,结果为4,sizeof是求数组的长度,而数据在定义时已给出长度为10 32相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和( D )。 可重用性差安全性差非持久性冗余性A. B. C. D. 解析:文件系统所管理的数据文件基本上是分散、相互独立的。相对于数据库系统,以此为基础的数据处理存在3个缺点:数据冗余大、数据的不一致性、程序与数据的依赖性强 33有以下程序: #includc void fun(int *p) {printf("%d\n",p[5]);} main( ) {int a[10]={1,2,3,4,5,6,7,8,9,10}; fun(&a[3]); } 程序运行后的输出结果是( B )。 A. 5 B. 6 C. 8 D. 9 解析:由题可知,fun(&a[3])是将&a[3]作为参数,而fun(int*p)后执行的语句为p[5],由数组a可知输出的为6。 34有以下程序: #include main( ) {char s[]="012xy\O8s34f4w2„; int i;n=0; , for(i=0;s[i]!=0;i++) if(s[i]>='0'&&s[i]<='9')n++; printf("%d\n",n); } 程序运行后的输出结果是( B )。 A. 0 B. 3 C. 7 D. 8 解析:考查简单的C程序数组和循环。for循环是指i=0,如果s,[3]!=0,则i自动加1。if循环指的是s[i]中的元素大于等于0且小于等于9,则n加l,所以答案为B。 35软件生命周期中的活动不包括(B )。 软件维护市场调研软件测试需求分析A. B. C. D. 解析:软件生命周期是指从软件的产生到消亡的一个过程,其中包含需求分析、软件的开发、软件测试、软件维护等阶段。其中不包含市场调研,所以答案选择B。 36.C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是(A )。 预定义标识符如库函数中的函数名可用做用户标识符,但失去原有含义A. () 用户标识符可以由字母和数字任意顺序组成B. 在标识符中大写字母和小写字母被认为是相同的字符C. 关键字可用做用户标识符,但失去原有含义D. 解析:用户标识符不能以数字开头,C语言中标识符是区分大小写的,关键字不能用做用户标识符。 37以下叙述中正确的是( B ) 在语言程序中,函数必须放在其他函数的最前面A. Cmain 每个后缀为的语言源程序都可以单独进行编译B. CC 在语言程序中,只有函数才可单独进行编译C. Cmain 每个后缀为(的语言源程序都应该包含一个函数D. CCmain 解析:C语言是一种成功的系统描述语言,具有良好的移植性,每个后缀为(C的C语言源程序都可以单独进行编译。 38下列关系表达式中,结果为“假”的是( B )。 A. (3+4)>6 B. (3!=4)>2 C. 3<=4 D.E. 3 F. (3<4)=1 解析:在一个表达式中,括号的优先级高,先计算3 !=4,为真即是l,1>2为假 39若有定义和语句:int a,b;scanf("%d,%d",&a,&b);以下选项中的输人数据,不能把值3赋给变量a、5赋给变量b的是( C )。 ,,,,,,A. 35 B. 354 C. 35 D. 35 解析:在输入3和5之间除逗号外不能有其他字符。 40数据库管理系统中负责数据模式定义的语言是( C)。 数据定义语言数据管理语言数据操纵语言数据控制语言A. B. C. D. 解析:模式描述语言(Data Description Language,DDL)来描述、定义的,体现、反映了数据 库系统的整体观。 二、基本操作题(共18分) 41请补充main()函数,该函数的功能是:把一个字符串中的所有小写字母字符全部转换成 大写字母字符,其他字符不变,结果保存原来的字符串中。 例如,当str[M]="abcdefl23ABCD",结果输出:"ABCDEFl23ABCD"。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在横线上填人所编写的若干表达式或语 句。 试题程序: #include #include #include #define M 80 void main() { int j; char str[M]="abcdefl23ABCD"; char*pf=str; system("CLS"); printf("***original string***,n"); puts(str); 【1】 while(*(pf+j)) { if(*(pf+j)>='a'&&*(pf+j)<='Z') { *(pf+j)= 【2】 ; 【3】 ; } else j++; } printf("****new string****,n"); puts(str); system("pause");} 【1】j=0【2】*(pf+j)-32【3】j++ 【解析】由程序中可知,变量j为字符数组的下标,其初始值为0。因此【l】处填“j=0”;大 写字母的ASCIl码值比小写字母的4、32,要将小写字母变为大写字母,因此,【2】处填“* (pf+j)-32”;要将字符串数组中的所有小写字母变为大写字母,需要检查其中的每一个字符, 因此,【3】处填“j++”。 三、程序改错题(共24分) 42下列给定的程序中,函数proc()的功能是:用选择法对数组中的m个元素按从小到大的 顺序进行排序。 例如,排序前的数据为:11 32-5 2 14 则排序后的数据为:-5 2 11 14 32 请修改程序中的错误,使它能得到正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #define M 20 void proc(int a[],int n) { int i,j,t,P; //****found**** for(j=0;j记录
由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出,请编写函数,其功能是:求出该学生的平均分,并放入记录的ave成员中。 例如,学生的成绩是:85(5,76,69(5,85,91,72,64(5,87(5,则他的平均分应为78(875。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数fun()部位中填入你编写的若干语句。 试题程序: #include #define N 8 typedef struct { char num[10]; double s[N]; double ave; }STREC; vold fun(STREC*a) { } void main() STREC s={"GA005",85(5,76,69(5,85,91,72,64.5,87.5}; int i; fun(&s); printf("The%s's student data:\n",s.num); for(i=0;iave=0(0; for(i=0;iave=a->ave+a->s[i]; ,*求各门课程成绩的总和*, a->ave=a->ave,N;,*求平均分*, } 【解析】本题考查的是指向结构体类型的指针变量做参数和结构体类型成员的运算。fun() 函数中求出平均成绩,要带回主函数则必须定义一个指针类型的形参STREC*a,同时引用成员使用指向运算符,a->ave和a->s[i]。 2013年9月全国计算机等级《二级C语言程序设 计》终极押密卷(2) 1有以下程序: #include int fun( ) {static int x=1; X*=2;return X; main( ) {int i,S=1; for(i=1;i<=2;i++)s=fun( ); printf{?%d\n",s); } 程序运行后的输出结果是(C )。 A. 0 B. 1 C. 4 D. 8 解析:本题考查了static的用法。当static用于局部变量中,成为静态局部变量。静态局部变量有两个用法,记忆功能和全局生存期。当static用于全局变量,主要作用是限制此全局变量被其他的文件调用。当static用于类中的成员,表示这个成员是属于这个类,但是不属于类中任意特定对象。所以本题答案为C。 2有以下程序: #include main( ) {int a=1,b=0; printf(",d,",b=a+b); printf(",d\n",a=2+b); „? } 程序运行后的输出结果是( B )。 ,,,,A. 00 B. 13 C. 32 D. 12 解析:本题输出两个值,第一个printf语句输出b的值'b=a+b=1。第二个printf语句输出了a的值,a=2*b,此时b的值为1,所以a的值为2。 3若有定义:“int a,b;”,通过语句“scan[("%d;%d"(,&a,&b);”,能把整数3赋给变量a,5赋给变量b的输入数据是( C)。 A. 3 5 B. 3,5 C. 3;5 D. 35 解析:在输入时必须遵守scanf函数中的格式才能正确地赋值给相应的变量,由于scanf函数为“%d;%d”,所以在输入时要输入3;5,答案为C。 4若有定义:“double a=22;int i=0,k=18;”,则不符合C语言规定的赋值语句是( C )。 ,;;;;A. a=a++i++ B. i=(a+k)<=(i+k) C. i=a D. i=!a 解析:运算符,要求两个运算对象都为整型。C中a为double型,不符合要求 5下列关于C语言文件的叙述中正确的是( C )。 文件由一系列数据依次排列组成,只能构成二进制文件A. 文件由结构序列组成,可以构成二进制文件或文本文件B. 文件由数据序列组成,可以构成二进制文件或文本文件C. 文件由字符序列组成,其类型只能是文本文件D. 解析:本题考查文件的知识点,文件是由数据序列组成的,可以构成二进制文件或文本文件 6有以下程序: #include main( ) {int X=011; printf("%d\n",++x); } 程序运行后的输出结果是(C )。 A. 12 B. 11 C. 10 D. 9 解析:考查简单的c程序,题目中x=011而输出函数中是++x,说明是先加l,所以为l0,答案选择C。 7有以下程序: #include main( ) { FILE*fp; int i,a[6]={1,2,3,4,5,6}; fp=fopen("d2(dat","w+"); for=(i=o;i<6;,i++)fpintf(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]); } 程序运行后的输出结果是( D )。 ,,,,,,,,,,,,A. 456123 B. 123321 ,,,,,,,,,,,,C. 123456 D. 654321 解析:这个是对文件的操作,把数组的数写到文件里,然后再从文件里倒序读出。所以输出 结果为6,5,4,3,2,1 8有下列程序: int fun(int n) {if(n= =1))return l; else return(n+fun(n-1)): } main( ) { int x; seanf("%d",&x);x=fun(x);printf("%d,n",x); } 执行程序时,给变量x输入l0,程序的输出结果是( A )。 A. 55 B. 54 C. 65 D. 45 解析:本题在函数int fun(int n)的定义中又出现了对函数fun的调用,所以函数fun是递归函 数。因而在主函数中调用x=fun(x)时,当输入10赋给变量X时,递归调用的过程为 fun(10)=l0+fun(9)=10+9+fun(8)=10+9+8+fun(7) =10+9++8+7+fun(6)=10+9++8+7+6+fun(6) =10+9++8+7+6+5+fun(4) =10+9++8+7+6+5+4+fun(3) =10+9++8+7+6+5+4+3+fun(2) =10+9++8+7+6+5+4+3+2+fun(1) =10+9++8+7+6+5+4+3+2=55 下列叙述中正确的是( )。9A 程序执行的效率与数据的存储结构密切相关A. 程序执行的效率只取决于程序的控制结构B. 程序执行的效率只取决于所处理的数据量C. 以上三种说法都不对D. 解析:数据的存储结构、程序处理的数据量、程序的算法等都会影响程序执行效率 10数据流程图(DFD)是( D )。 软件概要设计的工具A. 软件详细设计的工具B. 结构化方法的需求分析工具C. 面向对象方法的需求分析工具D. 解析:数据流程图是一种结构化分析描述模型,用来对系统的功能需求进行建模 11以下叙述中正确的是( D )。 程序设计的任务就是编写程序代码并上机调试A. 程序设计的任务就是确定所用数据结构B. 程序设计的任务就是确定所用算法C. 以上三种说法都不完整D. 解析:程序设计是指设计、编制、调试程序的方法和过程。内容涉及有关的基本概念、工具、 方法以及方法学等。程序设计通常分为问题建摸、算法设计、编写代码和编译调试4个阶段。 12假定x和Y为double型,则表达式x=2,y—x+3,2的值是( B )。 (((A. 3500000 B. 3 C. 2000000 D. 3000000 解析:在x=2,y=x+3,2中,3,2=1,2+1=3,因此表达式的值为3,因为X,y为double型 变量,故选择D选项。 13有以下程序: #include main( ) { char a[5][10]={"one","tw0","three","four","five"}; int i,j; char t: 、 for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(a[i][O]>a[j][0]) {t=a[i][O];a[i][O]=a[j][O];a[j][O]=t;) puts(a[1]); } 程序运行后的输出结果是( A )。 A. fwo B. fix C. Two D. Owo 解析:For循环完成的功能是把二维数组a的第一列的字母按从小到大排序,其他列的字母不 变。 14有以下程序: #include main( ) { char a[20],b[20],c[20]; scanf("%s%s",a,b); gets(c); printf("%S%S%s\n",a,b,c); } 程序运行时从第一列开始输入: This is a cat!<回车> 则输出结果是(D )。 A. Thisisacat! B. Thisis a C. Thisis a cat! D. Thisisa cat ! 解析:在输入字符串时,空格表示输入结束,所以a="This",b="is",c="a cat",所以在输出时会输出Thisis a cat! 15有三个关系R、S和T如下: 则由关系R和S得到关系T的操作是( A )。 自然连接交投影并A. B. C. D. 解析:关系之间的操作包括自然连接、交、并、投影等,由题可得此操作属于自然连接,选择A选项。 16有以下程序: #include ( main( ) {char s[]={"012xy"};int i,n=o; for(i=0;s[i]!=0;i++) if(s[i]>='a'&&s[i]<='z')n++; printf(",d\n",n); } 程序运行后的输出结果是(B )。 A. 0 B. 2 C. 3 D. 5 解析:本题考查for循环。当i=0时,开始for循环,因为数组的下标是从0开始的,所以s[o]=0,不符合for循环,不执行下边的语句,当i=1时,继续执行if语句,if语句的功能是如果在小写字母a, z,则记数n加1。所以本题结果为2。 17设有定义"double a[10],*s=a;",以下能够代表数组元素a[3]的是( B )。 A. (*s)[3] B. *(s+3) C. *s[3] D. *s+3 解析:用带下标的指针变量引用一维数组元素若有以下定义和语句:“int*P,s[10],i;P=s}”,且o?i<10,可以用,(s[i]、s+i和p+i三种表达式来表示s[i]的地址。同时可以用s[i]、*(s+i)和*(p+i)三种表达式来表示数组元素s[i]。 18以下选项中有语法错误的是( D )。 ;A. char*str[]={"guest") ;B. char str[][lO]={"guest") ;;C. char*str[3]str[t]="9uest" ;;D. char str[3][lO]str[1]="guest" 解析:在D选项中,首先定义了一个二维数组str,str[1]="9uest,在赋值时"使用一个字符串进行赋值是错误的,所以答案选择D。 19下面描述中错误的是( A )。 系统总体结构图支持软件系统的详细设计A. 软件设计是将软件需求转换为软件表示的过程B. 数据结构与数据库设计是软件设计的任务之一C. 图是软件详细设计的表示工具D. PAD 解析:软件系统的总体结构图是软件架构设计的依据,它并不能支持软件的详细设计。 20以下选项中,合法的是( A )。 ,,,,,;A. char str3[]={'d''e''b''u''g''\0'} ;;B. char str4str4="hello world" ;;C. char name[10]name="china" ,;;D. char strl[5]="pass"str2[6]str2=strl 解析:选项B不能把一个字符串赋值给一个字符变量,选项c和D犯了同样的错误是把字符串赋给了数组名。 21若有定义语句:“int a=10;double b=3(14;”,则表达式'A'+a+b值的类型是(C )。 A. char B. Int C. Double D. Float 解析:如果是字符数据和整数运算将先转换成整型再进行运算,当整型和浮点数进行运算,为了提高精度将会转化为双精度类型然后进行运算,所以此题结构的数值类型为double类型。 22以下程序段完全正确的是( C )。 ;,;;,;A. int*Pscanf("%d"&p) B. int*Pscanf("%d"p) ,;,;,;;,;C. int k*p=&kscanf("%d"p) D. int k*p*p=&kscanf("%d?p) 解析:A中P是指针,没有初始化,且取P的地址即类型为指向地址的地址,与输出参数类型不符。B中指针P没有初始化,且P所指变量值不明。D*p是整型变量,&k是整型变量的地址。所以选C。 23有以下程序: #include main() {int y=10; while(y--); printf("y=%d\n",y); } 程序执行后的输出结果是( B )。 构成无限循环A. y=0 B. y=-1 C. y=l D. while 解析:y--的作用是先取其值作为表达式的值,然后Y的值减1存入Y。当y>0时循环继续,直到y=0时循环结束,然后Y值减l存入Y中,所以选B。 24下面结构体的定义语句中,错误的是( B )。 ;;;;;A. struct ord{int xint Yint Z}struet ord a ;;;;B. struct ord{int xint yint Z}struct ord a ;;;;C. struct ord{int Xint Yint Z}a ;;;;D. struct{int Xint yint Z}a 解析:结构体定义的类型说明的一般形式为:struct结构体标识名{类型名1结构成员名表l;类型名2结构成员名表2;???};。注意:?结构体说明同样要以分号结尾;?紧跟在结构体类型说明之后进行定义;?在说明一个无名结构体类型的同时,直接进行定义;?先说明结构体类型,再单独进行变量定义等。所以B选项错误。 25有以下程序: #include 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[o](name,c[o](sex,c[o](score[o],c[o](score[1]); printf("%s,%c,%d,%d\n",c[1](name,c[1](sex,c[1](score[o],c[1].score [1]); } 程序运行后的输出结果是(D )。 ,,,,,,,A. Zhaom8590Sunm9899 ,,,,,,,B. Zhaom8590Qianf9592 ,,,,,,,C. Qianf9592Sunm9899 D. Qian,f,95,92,Zhao,m,85,90 解析:F函数是为结构体数组的第二个数赋值,数组的第一个数没有变化,所以正确答案应选D。 26有以下程序: #include #define N 3 void fun(int a[][N],int b[]) { int i,j; for(i=0;i #define N l0 void fun(int x[N]) {int i=O; while(i #include!(string(h> void fun(char*w,int m) { char S,*pl,*p2; p1=w;p2=w+m-; while(pl计划
数据库设计软件总体设计算法设计A. B. C. D. 解析:软件设计阶段的主要任务包括丙个:一是进行软件系统的可行性分析,确定软件系统的建设是否值得,能否建成。二是进行软件的系统分析,了解用户的需求,定义应用功能,详细估算开发成本和开发周期。 37数据库设计中反映用户对数据要求的模式是( C )。 内模式概念模式外模式设计模式A. B. C. D. 解析:外模式,也称为用户模式。在一个数据库模式中,有N个外模式,每一个外模式对应一个用户。外模式保证数据的逻辑独立性。内模式属于物理模式,因此,一个数据库只有一个内模式;内模式规定了数据的存储方式、数据操作的逻辑、数据的完整性、数据的安全性、数据存储性能。 38有以下程序: #include main( ) {int x=1,y=0; if(!x)y++; else if(x==0) if(x)y+=2; else y+=3; Drintf(",d,n"。v); } 程序运行后的输出结果是(D )。 A. 3 B. 2 C. 1 D. 0 解析:因为x!=0,所以下列的循环不执行,只执行y++,最后结果为0。 39若有下的定义:"int t[3][2];",能正确表示t数组元素地址的表达式是( C )。 A. &t[3][2] B. t[3] C. t[l] D. t[2][2] 解析:数组的下标是从0开始的,A中越界,行下标和列下标都不能越界;B中,虽然是个地址,但是也同样越界了;选项c中表示的是第一个的首地址;选项D表示的为其元素的值,并不是地址。 40有以下程序: #include main( ) { int a=12,C; c=(a<<2)<<1; printf("%d\n",c); } 程序运行后的输出结果是( D )。 A. 3 B. 50 C. 2 D. 96 解析:本题考查左移运算符,左移运算符相当于乘以2的2n,所以a<<2=12*22=48,所以 (a<<2)<1—48*2=96。 二、基本操作题(共18分) 41str是一个由数字和字母字符组成的字符串,由变量num传人字符串长度。请补充函数p roc(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中, 函数返回数组bb的长度。 例如,str="abcl23de45f967",结果为:l234567。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干 表达式或语句。 试题程序: #include #define M 80 int bb[M]; int proc(char str[],int bb[],int num) { int i,n=0; for(i=0;i='0'&&str[i]<='9'【2】str[i]-'O'【3】n 【解析】题目中要求把字符串str中的数字字符转换成数字并存放到整型数组bb中。首先, 应判断字符串str中每个字符是否是数字字符。因此,【1】处填“str[i]>='0'&&str[i]<='9'”将每 一个数字字符转化为数字放在整型数组bb中,因此,【2】处填“str[i]-'0';由函数proc()可 知,变量n中存放整型数组bb中的元素个数,最后要返回到主函数当中,因此,【3】处填 'n'。 三、程序改错题(共24分) 42下列给定程序中,函数proc()的功能是根据整型形参n,计算如下公式的值: Y=1-1,(22)+1,(33)-1,(44)+…+(-1)(n+1),(nn) 例如,n中的值为l0,则应输出0(817962。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include double proc(int n) { double y=1(0; //****found**** int J=1; ( int i; for(i=2;i<=n;i++) { j=-l*j;,,****found**** y+=1,(i*i); } return(y); } void main() { int n=10: system("CLS"): printf("\nThe result is%1f\n",proc(n)); } 解析:(1)错误:int j=1;正确:double j=1(0; (2)错误:y+=1,(i*i); 正确:y+=j,(i*i); 【解析】由函数proc()可知,变量j的作用是控制每一项符号的变化,并且作为运算的分子,应改为double型变量。因此,“int j=1;”应改为“double j=1(0;”。变量y中存放多项式的值,多项式中的每一项符号由变量j决定。因此,“y+=1,(i*i);”应改为“y+=j,(i*i);”。 四、程序设计题(共18分) 43请编写函数proc(),它的功能是计算:s=(In(1)4+ln(2)4+ln(3)+…+In(m))0(5 在C语言中可调用log(n)函数求ln(n)。 例如,若m的值为30,则proc()函数值为8(640500。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所编写的若干语句。 试题程序: #include #include #inclllde #include double proc(int m) { } void main() { system("CLS"); printf("%f\n",proc(30)); } 解析: double proc(int m) { int i; double s=0(0; //s是表示其和 for(i=1;i<=m;i++) s=s+log(i); //计算s=ln(1)+ln(2)+ln(3)+…+ln(m) return sqrt(s); //最后将其开平方的值返回到主函数中 } 【解析】由题目中所给表达式可知,表达式的值为m项表达式的和然后开平方。可以首先 通过m次循环求得m项表达式的和,然后将其和开平方2013年9月全国计算机等级《二级C语言程序设计》终极押密卷(3) 1以下叙述中错误的是( C )。 语言编写的函数源程序,其文件名后缀可以是A. CC 语言编写的函数都可以作为一个独立的源程序文件B. C 语言编写的每个函数都可以进行独立的编译并执行C. C 一个语言程序只能有一个主函数D. C 解析:函数是指预先定义功能块,其目的是提高程序的重用性。在C语言中函数的源程序,后缀名可以为C。C语言所编写的函数都可以是一个独立的源文件。一个C语言程序只能有一个主函数。C语言中编写的函数不是每个都可以独立地编译和执行的,因为C语言中程序的开始为主函数,如果程序中没有主函数则无法进行编译和执行。 2设循环队列的存储空间为Q(1:35),初始状态为front=rear=35。现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为(B )。 或A. 20 B.035 C. 15 D. 16 解析:Q(1:35)则队列的存储空间为35;对空条件:front=rear(初始化时:front=rear),队满时:(rear+1),n= =front,n为队列长度(所用数组大小),因此当执行一系列的出队与入队操作,front=rear(则队列要么为空,要么为满。 3有以下程序: #include main( ) {int a[5]={1,2,3,4,5),b[5]={0,2,1,3,o},i,s=0; for(i=o;i<5;i++)s=s+a[b[i]]; printf(”%d\n”,s); } 程序运行后的输出结果是( C )。 A. 6 B. 10 C. 11 D. 15 解析:本题考查数组的使用。本题定义了两个数组,注意数组的下标是从0开始的,进行第1次for循环:当i=0时,b[0]为数组b中第l个元素,结果为0,那么a[0]也是数组a中第l个元素,结果为1,所以S的值为1。第2次循环:i此时自加为l,b[1]为数组的第2个元素,值为2,所以可求出a[2](数组中的第3个元素)的值为3,s=s+3,所以S的值为4。进入第3次for循环,依此类推,第3次for循环结束时s的值为6。第4次for循环,s的值变为l0。第5次for循环时,此时i的值为4,s的值变为ll,i=5不符合题意,所以跳出循环,输出结果,所以本题答案为C。 4下列叙述中正确的是( D )。 算法就是程序设计算法时只需要考虑数据结构的设计A. B. 设计算法时只需要考虑结果的可靠性以上种说法都不对C. D. 3 解析:程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。设计算法时要考虑到数据结构的设计,但是不仅仅是要考虑到数据结构的设计,还要考虑到其他的程序结构的问题。设计算法时不能只考虑结果的正确性和可靠性,还需要考虑到程序的时间冗余度等方面。所以答案选择D。 5若有定义语句:“int a=3,b=2,c=1;”,以下选项中错误的赋值表达式是( A )。 ;:;一;A. a=(b=4)=3 B. a=b=c+1 C. a=(b=4)+C D. a=1+(b=c4) 解析:由等式的规则可知,A选项错误。先对括号的b进行等式运算,得出b=4,然后计算得出a=4=3,所以会导致错误。答案选择A。 6有3个关系R、S和T如下( 则由关系R和S得到关系T的操作是(B )。 自然连接差交并A. B. C. D. 解析:关系之间的操作分为自然连接、投影、交、并、差等,由图可知此操作为差操作 7有以下程序: #include main( ) { int a=7; while(a--); print[("%d\n",a); } 程序运行后的输出结果是(A )。 A. -l B. 0 C. 1 D. 7 解析:此题考查a--和--a之间的区别,当while(a--)为真循环执行,a--是执行再减1,所以答案选择A。 8有以下程序: #include int f(int x): main() {int n=1,m; m=f(f(f(n)));printf("%d\n",m); } int f(int x) {return x*2;) 程序运行后的输出结果是( D )。 A. 1 B. 2 C.4 D. 8 解析:本题考查函数返回值作参数,最初n=1,f(n)=f(1)=2,将f(n)的结果代入第二个f(n)中,即f(f(n))=f(2)=4,所以f(f(f(f(n))))=f(4)=8 9软件详细设计产生的图如图所示。该图是(C )。 图图程序流程图图A. N—S B. PAD C. D. E—R 解析:N-S图(也被称为盒图或CHAPIN图)、PAD(问题分析图)及PFD(程序流程图)是详细设计阶段的常用工具。E—R图即实体一联系图,是数据库设计的常用工具。从题中图可以看出该图属于程序流程图。 10有以下程序: #include main( ) { int a=-2,b=0; while(a++&&++b); printf("%d,%d\n",a,b); } 程序运行后的输出结果是( D )。 ,,,,A. 13 B. 02 C. 03 D. 12 统解析:输出的结果是:-1,1 0,2 1,2 11若有定义语句:“char S[3][10],(*k)[3],*p;”,则以下赋值语句正确的是( C )。 ;;;;A. p=S B. p=k C. p=s[0] D. k=s 解析:答案C的意思是*P指向数组的第一个值 12一棵二叉树共有25个结点,其中5个是叶子结点,则度为l的结点数为(A )。 A. 16 B. 10 C. 6 D. 4 解析:根据二叉树的性质,n=n0+n1+n2(n表示总结点数,n0表示叶子结点数,nl表示度数为1的结点数,n2表示度数为2的结点数),而叶子结点数总是比度数为2的结点数多1,所以n2=n1-1=5-1=4,而n=25,所以nl=n-n0-n2=25-5-4=16。 13冒泡排序在最坏情况下的比较次数是(C )。 A. n(n+1)/2 B. nlog2n C. n(n-1)/2 D. n/2 解析: 对n个结点的线性表采用冒泡排序,在最坏情况下,需要经过n/2次的从前往后的扫描和 n/2次的从后往前的扫描,需要的比较次数为n(n-1)/2 a 14程序调试的任务是( D )。 设计测试用例验证程序的正确性A. B. 发现程序中的错误诊断和改正程序中的错误C. D. 解析:程序调试的主要任务是改正程序中的错误,而软件测试是发现错误。 15在关系数据库中,用来表示实体间联系的是(D )。 网状结构树状结构属性二维表A. B. C. D. 解析:单一的数据结构——关系,现实世界的实体以及实体间的各种联系均用关系来表示。数据的逻辑结构——二维表,从用户角度,关系模型中数据的逻辑结构是一张二维表。但是关系模型的这种简单的数据结构能够表达丰富的语义,描述出现实世界的实体以及实体间的各种关系。 16下列条件语句中,输出结果与其他语句不同的是( D )。 ,;,A. if(a)printf("%d n"x) else print[("%d\n"y) ,;,B. if(a=0)pritf("%d n"y) else print[("%d\n"x) 一,;,C. if(a!0)printf("%d n"x) else print[("%a\n"y) ,;,D. if(a=O)print[("%d n"x) else printf("%d\n"y) 解析:主要考查if判断语句,A选项if(a),如果a为真,则输出X,否则输出Y。B选项if(a= =0),如果a恒等于0,则输出 Y,否则输出 X。C选项a(!=o),如果a不等于0,则输出X,否则输出y 。 D选项if(a= =0),如果a恒等于0,则输出X,否则输出y。由以上结论可知,输出结果不同的为D选项。 17C语言中char类型数据占字节数为(C )。 A. 3 B. 4 C. 1 D. 2 解析:Char类型数据占1个字节。 18层次型、网状型和关系型数据库划分原则是( D )。 记录长度文件的大小A. B. 联系的复杂程度数据之间的联系方式C. D. 解析:层次型、网状型和关系型数据库划分的原则是数据之河的联系方式。 19下面不属于需求分析阶段任务的是(C )。 确定软件系统的功能需求确定软件系统的性能需求A. B. 制定软件集成测试计划需求规格说明书评审C. D. 解析:需求分析阶段是确定软件的功能和性能的要求,最后产生一个需求规格说明书,在同时制定系统测试计划。其中集成测试计划不是在需求分析阶段,所以答案选择C。 20以下程序的输出结果是( B )。 main( ) { char st[20]="hell0,O,t,,,”; printf("%d%d,n",strlen(st),sizeof(st)); } A. 9 9 B. 5 20 C. 13 20 D. 20 20 解析:从题目中可知,',O'、',t'、',,'分别为一个字符,而sizeof是求字节个数的函数,其中包括',O'占的字节,strlen函数是求数组长度的函数;其以',0'结束,因此strlen的值为5,sizeof的值为20。 21软件设计中划分模块的一个准则是( B )。 低内聚低耦合高内聚低耦合低内聚高耦合高内聚高耦合A. B. C. D. 解析:耦合性和内聚性是模块独立性的两个定性标准,是互相关联的。在软件设计中,各模块间的内聚性越强,则耦合性越弱。一般优秀的软件设计,应尽量做到高内聚,低耦合,有利于提高模块的独立性。 22有以下程序: #include #define S(x)4*(x)*x+1 main( ) {int k=5,j=2; printf("%d\n",S(k+j)); } 程序运行后的输出结果是(B )。 A. 197 B. 143 C. 33 D. 28 解析:此程序考查带参数的宏定义,S(k+j)展开后即4*(k+j)*k+j+1,所以结果为l43 23有以下程序: #include main( ) { int a[]={10,20,30,40},*p=a,j; for(i=0;i<=3;i++){a[i]=*P;p++;} printf("oAd\n",a[2]); } 程序运行后的输出结果是(A )。 A. 30 B. 40 C. 10 D. 20 解析:For循环结束后,数组a的值并没有变化,由于数组是由0开始,所以a[2]的值是30。 24有以下程序: #include main() { int a=1,b=2; while(a<6){b+=a;a4+=2;b%=10;) printf("%d,%d\n",a,b); } 程序运行后的输出结果是( B )。 ,,,,A. 511 B. 71 C. 711 D. 61 解析:“b+=a;”等价于“b=b+a;”,“a+=2;”等价于“a=a?2;”,“b A=10;”等价于“b=b, =10;”。 循环体执行3次,最终结果为7,1。 25有以下程序: #include main( ) {int i,j,m=1; for(i=1;i<3;i++) {for(j=3;j>0;j--) {if(i*j>3)break; m*=i+j; } } printf("m=%d\n",m); } 程序运行后的输出结果是( A )。 A. m=6 B. m=2 C. m=4 D. m=3 解析:本题考查了多重for循环。当(i*j)>3时,跳出循环,本题中i=1,j=3,i*J后值为3,所 以执行下边语句:m*=i+j,也可写成m=m*i+j,这时要注意优先级,所以m的值为6。 26若有定义语句:"int a[4][10],*P,*q[4];"且0?i<4,则错误的赋值是(A )。 A. D=a B. q[i]=a[i] C. p=a[l] D. P=&a[2][1] 解析:数组名是一个存放一个数组首地址的值,是一个地址常量。而p=a不是合法的,因为 p和a的基本类型不同。 27若有定义语句:double a,*p=,a;,以下叙述中错误的是(C )。 定义语句中的号是一个间址运算符A. * 定义语句中的号只是一个说明符B. * 定义语句中的只能存放类型变量的地址C. Pdouble 定义语句中,把变量的地址作为初值赋给指针变量D. *p=&naP 解析:double a,*p=&a语句的意思是将a的值存放到指针变量P中,P是指针可以随意指向 任何地址,所以答案C错误。 28有以下程序: #include main( ) { int a=2,b; b=a<<2;printf("%d\n",b); } 程序运行后的输出结果是(D )。 A. 2 B. 4 C. 6 D. 8 解析:本题考查运算符“<<”,b=a<<2,是左移2位,a=2,即b=2*2*2=8。 29若有定义语句:“int x=12,y=8,z;”,在其后执行语句“z=0(9+x/y;”,则2的值为(A ) ((A. 19 B. 1 C. 2 D. 24 解析:此题考查除法运算,根据先乘除后加减,有括号先算括号的原则,先计算x,y,即l2 ,8=1,所以z=0(9+1=1(9。 30有以下程序: main( ) {int X,i; for(i=1;i<=50;i++) {x=i; if(X%2=O) if(x%3=O) if(X%7=0) printf("%d,i)"; } } 输出结果是(C )。 A. 28 B. 27 C. 42 D. 41 解析:只有当3个if条件同时成立,即能够同时被2、3、7整除时,才输出i的值,而从0到50 能够同时被2、3、7整除的数只有42,故选择c选巩。 31有以下程序: #include main( ) { int a=0,b=0,c=0; c=(a=a=5);(a=b,b+=4); printf("%d,%d,%d\n",a,bc); } 程序运行后的输出结果是(A )。 ,,,,,,,,A. 045 B. 445 C. 444 D. 000 解析:本题考查简单的赋值运算,在程序中c=(a-=am 5),先算括号中的a-=a-5=5,所以c=5, 再计算(a=b,b+=4);,a=b=0,b+=4=0+4=4,所以b=4,所以a=0,b=4,c=5,答案选择A。 32下述程序执行的输出结果是(A )。 #include main( ) {char a[2][4]; , strcpy(a。"are");strcpy(a[1],"you"); a[o][3]='&'; printf("%s,n",a); } A. are&you B. you C. are D. & 解析:strcpy实现的功能是复制,该操作把are复制到a中,aE03 E33一?,?,且strcpy(aEl], "you")把you复制到a[l]中,故输出a为“are&you”。 33下面属于黑盒测试方法的是( A )。 边界值分析路径覆盖语句覆盖逻辑覆盖A. B. C. D. 解析:黑盒测试方法主要有等价类划分、边界值分析、因果图、错误推测等。白盒测试的主要方法有逻辑驱动、路径测试等,主要用于软件验证。 34以下关于简单程序设计的步骤和顺序的说法中正确的是( B )。 确定算法后,整理并写出文档,最后进行编码和上机调试A. 首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档B. 先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档C. 先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构D. 解析:选项C和D可直接排除,程序是数据结构和算法的组合体,所以是先选择数据结构,然后继而选择相对应的算法,编码并上机调试,最后整理文档 35有以下程序: #include #include struct A {int a;char b[10];double C;); void f(struct A t); main( ) {struct A a={"1001,"ZhangDa",l098,0}; f(a);printf("%d,%S,%6(1f\n",a(a,a(b,a(c);} void f(struct A t) {t(a=1002;strcpy(t(b,"ChangRon9");t(c=1202(0;} 程序运行后的输出结果是( A )。 ,,(A. 1001ZhangDa10980 ,,(B. 1002ChangRong12020 ,,(C. 1001ChangRong10980 ,,(D. 1002ZhangDa12020 解析:将结构变量作为形参,通过函数间形参与实参相结合的方式将整个结构传递给函数,这种传递方式是值传递。在被调用函数中,对结构形参变量值进行的任何修改都不会影啊到调凋函数中的结构变量。 36软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是(B )。 学生成绩管理系统语言编译程序操作系统数据库管理系统A. B. C C. UNIX D. 解析:应用软件(application software)是用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的应用程序的集合,分为应用软件包和用户程序。所以答案选择B。 37若k是int类型变量,且有以下for语句: for(k=-1;k int fun() {static int x=1; x+=1;return X; } main() {int i,S=1; for(i=1;i<=S;i++)s+=fun(); printf("%d\n",s); } 程序运行后的输出结果是( B )。 A. 11 B. 21 C. 6 D. 120 解析:本题考查静态变量,C语言中静态变量的生存期是从程序的开始到结束。本题中静态变量x,随着每次进入循环不断增长5次,返回的值分别为2、3、4、5、6。所以S=1+2+3+4+5+6=21, 选B。 39数据字典(DD)所定义的对象都包含于(C )。 软件结构图方框图数据流图图程序流程图A. B. C. (DFD) D. 解析:数据字典(DD)是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。 40有定义语句:“int*p[4];”,以下选项中与此语句等价的是( D )。 ;;;;A. int p[4] B. int**PC. int*(p[4]) D. int(*p)[4] 解析:本题int*p[4]的作用是声明一个指针数组,每个元素都是int*型指针。 二、基本操作题(共18分) 41给定程序的功能是计算score中m个人的平均成绩aver,将低于aver的成绩放在be-low中,通过函数名返回人数。 例如,当score={10,20,30,40,50,60,70,80,90},m=9时,函数返回的人数应该是4,below={10,20,30,40}。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在横线上填人所编写的若干表达式或语句。 试题程序: #include #include int fun(int score[],int m,int below[]) { int i,j=0; float aver=0(0; for(i=0;i long fun(int g) { //****found**** switch(g); { case 0:return 0; //****found**** case l:case 2:return1; } return(fun(g-1)+fun(g-2)); } void main() { long fib;int n; printf("Input n:"); scanf("%d",&n); printf("n=%d\n",n); fib=fun(n); printf("fib=%d\n\n",fib); } 解析:(1)错误:switch(g); 正确:switch(g) (2)错误:case l:case2:return l; 正确:case l;case 2:return l; 【解析】此题考查C语言的语法规则,switch(表达式)后不应该带有“;”,case语句常量后 应该是“:”。 switch语句的一般形式如下: switch(表达式){ case常量表达式1:语句1; case常量表达式2:语句2; case常量表达式n:语句i; default:语句n+1; 四、程序设计题(共18分) 43假定输人的字符串中只包含字母和*号。请编写函数proc(),它的功能是:将字符串中 的前导*号全部删除,中间和后面的*号不删除。 例如,若字符串中的内容为****a*bc*def*g****,删除后,字符串中的内容则 应当是a*bc*def*g****。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编 写的若干语句。 试题程序: #include #include void proc(char*str) { } void main() { char str[81]; printf("Enter a string:kn"); gets(str); proc(str); printf("The string after deleted:kn"); puts(str);} 解析:void proc(char * str) { char*p=str; while(* p= ='*')p++; ,,通过p的移动来达到使p指向第一个不是*号的字符 for(;* p!=',0';p++,str++) ,,把从第一个不是*号的字符放到a中 * str=* P: * str=',0'; ,,最后用',0'作为字符串结束标志 } 【解析】题目中要求将字符串中的前导*号全部删除,首先将指针P移动到第一个不是*的 字符,将指针P之后的字符放入原来的字符串中,并为新的字符串添加结束符。 2013年9月全国计算机等级《二级C语言程序设 计》终极押密卷(4) 一、选择题(每小题1分,共40分) 1设变量已正确定义,则以下能正确计算f=n!的程序是(D )。 ;;;;;;;;f=0 for(i=1i<=ni++)f*=i f=1for(i=1i1i++)f*=i f=1for(i=ni>=2i--)f*=i C. D. 解析:由n!的数字定义可知n!=n*(n-1)*(n-2)*…*1。在选项A中,由于f的初值 为0,在for循环语句中,f依次乘以l,2,3,…,n,最后计算得到f=n!=0,所以选项A不正确。在选项B中,f的初值为1,在for循环语句中,f依次乘以l,2,3,…,(n-1),最后计算得到f=(n-1)!,所以选项B不正确。在选项C中,f的初值为l,在for循环语句中,f依次乘以n,n+1,n+2,……,所以选项C不正确。在选项D中,f的初值为l,在for循环语句中,f依次乘以n,n-1,n-2,…,2,最后计算得到f=n!,所以选项D正确。 2有以下程序: #include void fun(int*s) { static int i=0; do{s[J]=s[J]+s[j+I];}while(++j<2); } main( ) { int k(a[l0]={1,2,3,4,5}; k<3;k++)fun(a); for(k=1; for(k=0;k<5;k++)pfintf("%d",a[k]); printf("\n"); } 程序运行后的输出结果是(D )。 12345 23445 34756 35745 A. B. C. D. 解析:本题考查静态变量,静态变量有储存已经操作过的值,所以fun(a)s[O]=3,s[1]=5, s[2]=7,所以答案选择D。 3有下列程序: 、 fun(int X,int y){return(x+y);) main( ) { int a=1,b=2,c=3,sum; sum=fun((a++,b++,a+b),c++); printf("%d,n",sum); } 执行后的输出结果是(C )。 6 7 8 9 A. B. C. D. 解析:函数fun(int x,int y)的功能是返回x+Y的值。在主函数中,变量a,b,c的初始值分别为 1,2,3。因此逗号表达式“a++,b++,a+b”的值等于5,表达式c++的值为3,调用于函数的表达式为“fun(5,3);”,其返回值等于8。 4现有以下结构体说明和变量定义,如图所示,指针P、q、r分别指定一个链表中连续的3个结点。 struct node {har data; struct node*next;)*P,*q,*r; 现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句 是( D )。 :;:;:;q->next=r->nextp-->next=rrm>next=q A. :;;;q->next=rq->next=r->nextr->next=q B. :;;;q->next=r->nextr->next=qp->next=r C. :;;;q->next=qp->next=rq->next=r->next D. 解析:由题目中线性链表的定义可知,要将q和r所指的结点交换前后位置,只要使q指向 r的后一个结点,P指向r结点,r指向q结点即可。而在选项D中,r->next=q,这时r指向 的节点为q;p->next=r,这时P指向的节点为r;q->next:r->next,因为r节点已经指向q, 所以执行这个语句后q又指向q,所以选项D不正确。 5有以下程序: #include main( ) { char*s="[2]34";int k=0,a=0; whil(s[k+1]!='\0') { k++; if(k%2=o){a=a+(s[k]-'0'+1);continue; } a=a+(s[k]-'0'); printf("k=%d a=%d\n",k,a); } 程序运行后的输出结果是(C )。 A. k=6 a=11 k=3 a=14 k=4 a=12 k=5 a=15 B. C. D. 解析: 输出结果:k=1 a=2 k=2 a=4 k=3 a=7 k=4 a=12 6若a是数值类型,则逻辑表达式(a= =1)I I(a!=1)的值是(A )。 不知道的值,不能确定1 0 2 a A. B. C. D. 解析:由于a= =l和a!=1两者互斥,即总有一个为真,因此二者的或也必定为真。 7阅读以下程序: #include main( ) {int case;float printF; printf("请输人2个数:"); scanf("%d,fl"&case,&printF); printf("%d ofof\n",case,printF); } 该程序在编译时产生错误,其出错原因是(A )。 定义语句出错,是关键字,不能用做用户自定义标识符case A. 定义语句出错,不能用做用户自定义标识符printF B. 定义语句无错,不能作为输入函数使用scanf C. 定义语句无错,不能输出的值printfcase D. 解析:本题中定义了整形变量case,但case是关键字,关键字不能用做标识符。单精度printF 不是关键字,因为标识符区分大小写。所以A不正确。 8有以下程序: #include main( ) {int a=1,b=2; for(;a<8;a++){b+=a;a+=2;) printf("%d,%d\n",a,b); } 程序运行后的输出结果是(D )。 ,,,,918 811 711 1014 A. B. C. D. 解析:第一次执行循环前,a=1,满足a<8,执行循环后,b=3,a=3。执行完a++操作后,a=4。由于a<8,执行第二次循环后,b=7,a=6,执行完a++操作后,a=7。由于a<8,执行第三次循环后,b=14,a=9,执行完a++操作后a=10。此时不满足a<8,跳出循环。 9有以下程序: #include main( ) { int a,b,k,m,*pl,*p2; k=1,m=8; p1=&k,p2=&m; a=/*pl-m;b=*p1+*p2+6; printf("%d",a);printf("%d\n",b); } 编译时编译器提示错误信息,你认为出错的语句是(A )。 ;;,;,;A. a=/*pl-m b=*p1+*p2+6 k=1m=8 pl=&kp2-&m B. C. D. 解析:本题考查指针,pl=&k表示P指向k的地址,则*p=k,依次类推,在对指针进行赋值时没有错误。a=,*p+m赋值,在c语言中",*"表示的注释,所以答案选择A。 10在学生管理的关系数据库中,存取一个学生信息的数据单位是(D )。 文件数据库字段记录A. B. C. D. 解析:一个数据库由一个文件或文件集合组成。这些文件中的信息可分解成一个个记录。 11下列叙述中正确的是(B )。 循环队列是队列的一种链式存储结构 A. 循环队列是队列的一种顺序存储结构 B. 循环队列是非线性结构 C. 循环队列是一种逻辑结构 D. 解析:循环队列是线性结构,所以C选项错误,存储结构是数据在计算机中的表示,循环队列在计算机内是顺序存储结构,所以答案选择B。 12以下关于return语句的叙述中正确的是( B )。 一个自定义函数中必须有一条语句return A. 一个白定义函数中可以根据不同情况设置多条语句return B. 定义成类型的函数中可以有带返回值的语句voidreturn C. 没有语句的自定义函数在执行结束时不能返回到调用处return D. 解析:return语句又称为返回语句。该语句的格式如下:“return;”和“return(<表达式>);”。其中,return是关键字。该语句有两种格式:不带返回值格式和带返回值格式。该语句用在被调用函数中,在被调用函数中执行到该语句时,将结束对被调用函数的执行,并把控制权返回给调用函数,继续执行调用函数后边的语句。在带有返回值的情况下,将return语句所带的表达武的值返回给调用函数,作为被调用函数的值。在被调用函数中,可以用return语句,也可以不用return语句。如果要求被调用函数有返回值,则一定要用return语句,采用return(<表达式>);格式。如果被调用函数不需要返回值,并且当被调用函数的所有语句执行完后进行返回,则被调用函数可以不用return语句。 13有三个关系R,S和T如下: 其中关系T由关系R和S通过某种操作得到,该操作为(D ) 选择投影交并A. B. C. D. 解析:关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元素。由题可以看出,T是R和S的并运算得到的。 14设有以下程序段: struct MP3 { char name[20]; char color; float price; }std,*ptr; ptr=&std: 若要引用结构体变量std中的color成员,写法错误的是(A )。 (A. stdcolor ptr->color std->color (*ptr)color B. C. D. 解析:本题中要引用结构体变量std中的color,要使用指针,而std(color不是一个指针类型, 所以答案选择A 15有以下程序: #include void exch(int t[]) { t[0]=t[5];} main( ) { int x[10]={1,2,3,4,5,6,7,8,9,10},i=0; while(i<=4){exch(&x[i]);i++;} for(i=0;i<5;i++)printf("%dl"x[i]); printf("\n"); } 程序运行后输出的结果是(D )。 2 4 6 8 10 1 3 5 7 9 1 2 3 4 5 6 7 8 9 10 A. B. C. D. 解析:本题中exch函数是用数组中的第6个元素对第1个元素进行赋值,所以数组的值应该为 6 7 8 9 10。 16表达式a+=a-=a=9的值是( D )。 9 -9 18 0 A. B. C. D. 解析:+=、-=、=等符号优先级相同结合性是由右至左,所以选D。 17数据库管理系统是(B )。 A. 操作系统的一部在操作系统支持下的系统软件 B. 一种编译系统一种操作系统 C. D. 解析:数据库系统属于系统软件的范畴 18以下选项中叙述错误的是(A )。 程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值C A. 在同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内 B. 程序函数中定义的自动变量,系统不自动赋确定的初值C C. 程序函数的性能不可以说明为型变量Cstatic D. 解析:静态变量不是每调用一次就赋一次初值,而是将需要定义许多相同的具有相同属性的 值时,使用静态变量来节省空间,所以A选项错误 19有以下程序段: int i,n; for(i=0;i<8;i++) {n=rand( )%5; switch(n) {case l: case 3:printf("%d\n",n);break; case 2: case 4:print?("%d\n",n);continue; case( ):exit(0); } printf("%d\n",n); } 以下关于程序段执行情况的叙述,正确的是( A )。 循环语句固定执行次for8 A. 当产生的随机数为时结束循环操作n4 B. 当产生的随机数为和时不做任何操作n12 C. 当产生的随机数为时结束程序运行n0 D. 解析:程序中的if循环是固定地执行8次,属于计数器,程序是从中随机抽取一个数,然后对 5进行求余再输出,共抽取8个数。所以答案为A。 20有以下程序: #include main( ) {FILE*fp;char str[10]; fp=fopen("myfile,dat",""); {puts("abe",ip);fclose(fp); fp=fopen("myfile(dat","a*"); fprintf(fp,",d",28); rewind(fp); fscanf(fp,",S",str);puts(str); fclose(fp); } 程序运行后的输出结果是(C )。 内类型不一致而出错A. abc 28c abc28 B. C. D. 解析:本题考查文件的操作,首先打开文件,进行写操作,把“abc”写入“myfile”文件,再打 开“myfile(data"文件,输入28,在键盘上接收字符,输出并关闭文件。本题结果为abc28 21以下程序的输出结果是(A )。 main( ) {int a[3][3]={{1,2},{3,4),{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++)s+=a[i][j]; printf("%d,n",s); } 18 19 20 21 A. B. C. D. 解析:循环的作用是求行下标从l到2列下标从0到i的元素之和,即 s=a[1][0]+a[1][1]+a[2][o]+a[2][1]+a[2][2]=3+4+5+6+0一18。 22下列选项中,能够满足“若字符串sl等于字符串s2,则执行ST”要求的是( A )。 ,;;,;,;A. if(stremp(s2s1)==0)ST if(s1==s2)STif(strcpy(sls2)==l)STif(sls2==O)ST B. C. D. 解析:strcmp(char*,char*),函数strcmp用于比较两个字符串的长度,长者为大,若字符个数也一样,则从左至右依次比较相同位上的字符,字符大小按ASCIl表值计算,直到最后一个字符,若还相同,则两个字符串相等,返回值0。选项A中if(strcmp(s2,sl)= =0)ST,若s2等于sl,则返回值0,0等于0,所以逻辑表达式strcmp(s2,sl)= =0为真,执行ST。 23下列关于数据库设计的叙述中,正确的是(A )。 在需求分析阶段建立数据字典在概念设计阶段建立数据字典 A. B. 在逻辑设计阶段建立数据字典在物理设计阶段建立数据字典 C. D. 解析:在数据库设计时必须在需求分析阶段建立数据字典,确定数据库中所需要的数据。 24有两个关系R和T如下: 则由关系R得到关系T的操作是(D )。 选择投影交并A. B. C. D. 解析:选择是建立一个含有与原始关系相同列数的新表,但是行只包括那些满足某些特定标准的原始关系行 25针对简单程序设计,以下叙述的实施步骤顺序正确的是(A )。 确定算法和数据结构、编码、调试、整理文档 A. 编码、确定算法和数据结构、调试、整理文档 B. 整理文档、确定算法和数据结构、编码、调试 C. 确定算法和数据结构、调试、编码、整理文档 D. 解析:C语言中程序中的步骤实现为:先确定程序中的算法和数据结构,然后进行程序的编码,再进行对程序的调试,最后进行文档的整理和记录。使用这种步骤可以方便程序的编写以及在完成后提高代码的重用性 26以下叙述中错误的是( A )。 函数的返回值类型不能是结构体类型,只能是简单类型 A. 函数可以返回指向结构体变量的指针 B. 可以通过指向结构体变量的指针访问所指结构体变量的任何成员 C. 只要类型相同,结构体变量之间可以整体赋值 D. 解析:函数返回值类型可以是简单类型和结构体类型。 27若有定义:“int a[2][3];”,则对a数组的第i行第J列元素的正确引用为( A )。 A. *(*(a+i)+j) (a+i)[j] *(a+i+j) *(a+i)+j B. C. D. 解析:通过地址来引用数组元素的方法有下列5种: (1)a[i][j];(2)*(a[i]+j);(3)*(*(a+j)+j);(4)*(a[i][j]);(5)(&a[o][0]+3*i+j)。故A正确。 28软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指(B )。 模块间的关系系统结构部件转换成软件的过程描述 A. B. 软件层次结构软件开发过程 C. D. 解析:软件的过程设计是指系统结构部件转换成软件的过程描述 29设有定义:“char*c;”,以下选项中能够使字符型指针c正确指向一个字符串的(A )。 ;;,,:( );A. char str[]="string"c=str scanf(sc) c=getchar *c="strin9"; B. C. D. 解析:选项B是从键盘上输入字符串,选项C是接收字符,选项D不正确 30以下选项中不能用做C程序合法常量的是(A )。 ,1234 „\123? 123 “\x7G”A. B. C. D. 解析:A选项中逗号是一个操作符 31有以下程序: #include int fun(int X,int y) {if(X!=y)return((x+y)/2); else return(x); } main( ) {int a=4,b=5,c=6; printf("%d/n",fun(2*a,fun(b,c))); } 程序运行后的输入结果是(B )。 3 6 8 12 A. B. C. D. 解析:此题考查的是函数fun(),fun(b,c)=5,然后fun(2*a,5)=fun(8,5)=6。 32有以下程序: #include #include main( ) {char str[][20][{"One*World","One*Dream!"},*p=str[1]; prinft(",d,",strlen(p));printf(",s,n",p); } 程序运行后的输出结果是(C )。 ,,,,90ne*World 90ne*Dream! 10One*Dream! 10Ome*World A. B. C. D. 解析:本题输出两个结果,第一个是求字符串的长度。第二个是输出的字符串,数组的下标 是从0开始的,所以当str取1的时候,应为“One*Dream!” 33有以下函数 int fun(char*X,char*y) { int n=0; while((*x= = =*y)&&*x!='\O'){x++; y++; n++;} return n; } 函数的功能是(B )。 查找和所指字符串中是否有Xy'\o' A. 统计和所指字符串中最前面连续相同的字符个数xY B. 将所指字符串赋给所指定存储空间YX C. 统计和所指字符串中相同的字符个数XY D. 解析:由题中while(*x==*y&&*x!='\n')可知此函数是统计x和y所指向的字符串中最前面的 联系相同的字符的个数。 34if语句基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是(D )。 必须是逻辑值必须是整数值必须是正数可以是任意合法的数值A. B. C. D. 解析:考查if循环语句。if(表达式),其中表达式是一个条件,条件中可以是任意的合法的数 值。 35软件需求规格说明书的作用不包括( B )。 软件设计的依据软件可行性研究的依据 A. B. 软件验收的依据用户与开发人员对软件要做什么的共同理解 C. D. 解析:《软件可行性分析报告》是软件可行性研究的依据。 36下列关于栈的叙述中,正确的是( B )。 栈底元素一定是最后入栈的元素栈操作遵循先进后出的原则 A. B. 栈顶元素一定是最先入栈的元素以上三种说法都不对 C. D. 解析:栈是先进后出,因此,栈底元素是先入栈的元素,栈顶元素是后入栈的元素。 37设有如下定义语句: int m[]={2,4,6,8,10},*k=m; 以下选项中,表达式的值为6的是(A )。 A. *(k+2) k+2 *k+2 *k+=2 B. C. D. 解析:本题考查数组和指针,*k指针是指向rn数组的首地址,所以要使表达武的值为6,只 需要指针指向第m[2],所以答案选择A。 38以下选项中与“if(a= =l)a=b;else a++;”语句功能不同的switch语句是(B )。 switch(a) A. :;; {case la=bbreak :; defaulta++ } switch(a= =l) B. :;; {case 0a=bbreak : case la++; } switch(a) C. :;; {defaulta++break :; case la=b } switch(a= =l) D. :;; {case la=bbreak :; case 0a++ } 解析:题中当a的值为l时,关系表达式a= =l的值为真,即1,因此程序将跳转到easel执 行a++操作,与题干程序刚好相反。 39有以下程序段: char name[20】;int num; scanf("name=,S num=,d",name,&num); 当执行上述程序段,并从键盘输入:name=Lili mum=1001<回车>后,name的值为( A )。 A. Lili name=Lili Lili num= name=Lili num=1001 B. C. D. 解析:考查简单的C程序。由题可知,程序中输入name的值为Lili,所以输出的必定是Lili, 答案选择A。 40下列描述错误的是( C )。 继承分为多重继承和单继承 A. 对象之间的通信靠传递消息来实现 B. 在外面看不到对象的内部特征是基于对象的模块独立性好这个特征“” C. 类是具有共同属性、共同方法的对象的集合 D. 解析:对象的封装性是指从外面看只能看到对象的外部特性,而对象的内部,其处理能力的 实行和内部状态对外是不可见的,是隐蔽的。 二、基本操作题(共18分) 41请补充函数proc(),函数proc()的功能是求7的阶乘。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干 表达式或语句。 试题程序: #include long proc(int n) { if( 【1】 ) return(n*proc( 【2】 ); else if(【3】) return l; } void main() { int k=7: printf(",d!=,ld,n",k,proc(k)); } 解析:【l】n>1【2】n-1【3】n= =1 【解析】本题求阶乘是由函数递归调用来实现的。阶乘公式为N!=N*(N-1)!,因此【l】处填 “n>1”;由递归的性质可知【2】处填“n-1”;直到N=1时结束递归调用,因此【3】处填“n= =l”。 题(共24分) 42下列给定程序中,函数proc()的功能是:从字符串str中,删除所有大写字母'F'。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include void proc(char*str) { int i,j; //****found**** for(i=j=0;str[i]一'0';i++) if(str[i]!='F') //****found**** str[i]=str[i]; str[j]='\0'; } void main() { char str[80]; printf("\nEnter a string:"); gets(str); printf("The original string:"); puts(str); proc(str); printf("The string after deleted:"); puts(str); printf("\n\n");} 解析:(1)错误:for(i=j=0;str[i]!='0';i++) 正确:for(i=j=0;str[i]!=',0';i++) (2)错误:str[j]=str[i]; 正确:str[i++]=str[i]; 【解析】根据题目中的要求,从字符串str中删除所有大写字母'F',需要检查字符串str中的 每一个字符,直到字符串结束,因此,“for(i=j=0;str[i]!='0';i++)”应改为“for(i=J=0;str[i]!='0';i++)”;将每一个不是'F'的字符放入原来的字符串中,形成新的字符串,因此,“str[j]= str[i];”应改为“str[j++]=str[i];” 四、程序设计题(共18分) 43请编写函数proc(),其功能是:将str所指字符串中除下标为偶数、同时ASCIl码值为奇数的字符外,其余的字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若str所指字符串中的内容为ABCDEFGl2345,其中字符B的ASCIl码值为偶数,所在元素的下标为奇数,因此必须删除;而字符A的ASCIl码值为奇数,所在数组中的下标为偶数,因此不应当删除。依此类推,最后t所指的数组中的内容应是ACEG。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所写的若干语句。 试题程序: #include #include #include #include void proc(char*str,char t[]) { } void main() { char str[100],t[100]; system("CLS"); printf("\nPlease enter string str:"); scanf("%S",str); proc(str,t); printf("\nThe result iS:%s\n",t); 解析:void proc(char*str。chart[3]) { int i,j=0; for(i=0;str[i]! ='\O';i++)//从数组的第一个元素开始,到其最后一个 {if(i,2= =0&&str[i]%2 1=o)//下标为偶数、同时ASCIl码值为奇数的字符 t[j++]=str[i];} //如果成立,则把它放到t数组中 t[i]='\o';//字符串结束标志为'\0' } 【解析】题目中要求将字符串str中下标为偶数,同时ASCIl码值为奇数的字符放在数组t中。首先,需要检查字符串str中下标为偶数的字符其ASCIl码值是否为奇数,将符合要求的字符放在数组t中。最后,为新的字符串数组添加结束符。 一2013年9月全国计算机等级《二级C语言程序设 计》终极押密卷(5) 、选择题(每小题1分,共40分) 1有以下定义语句,编译时会出现编译错误的是( C )。 ;;;A. char a='a' char a='\n' char a='aa'char a='\x2d' B. C. D. 解析:char类型用于存储单个字符的简单变量类型,它可以被指定为一个字符常量或一个整数。 2下列链表中,其逻辑结构属于非线性结构的是( C )0、 双向链表带链的栈二叉链表循环链表A. B. C. D. 解析:数据的逻辑结构是描述数据之间的关系,分两大类:线性结构和非线性结构。线性结构是n个数据元素的有序(次序)集合,指的是数据元素之间存在着“一对一”的线性关系的数据结构。常用的线性结构有:线性表,栈,队列,双队列,数组,串。非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后驱。常见的非线性结构有:树(二叉树等),图(网等),广义表。 在黑盒测试方法中,设计测试用例的主要根据是( )。D 3 程序外部功能程序内部逻辑程序数据结构程序流程图 A. B. C. D. 解析:黑盒测试是不考虑内部结构,而程序流程图是程序内部的表示方法,所以此测试是根据程序流程图进行的,答案选择D 4定义无符号整数类为UInt,下面可以作为类UInt实例化值的是(B )。 (整数集合,,,,A. -369 369 0369 {12345} B. C. D. 解析:其中A选项是有符号的,C选项是小数,D选项是结合并不是类的实例化对象,只有B完全符合。 5有以下程序: #include main() { short C=124; C=C_; printf("%d\n",c); } 若要使程序的运行结果为248,应在下划线处填入的是( D )。 ,A. >>2 248 &0248 <<1 B. C. D. 解析:124的2进制值为1111100,要输出为248即124*2,则2进制值为11111000,即右移l位,所以选D 6设有定义:int x[2][3];,则以下关于二维数组X的叙述错误的是(D )。 可看做是由个整型元素组成的一维数组x[0]3 A. 和是数组名,分别代表不同的地址常量x[0]x[l] B. 数组包含个元素X6 C. 可以用语句;为数组所有元素赋初值x[o]=00 D. 解析:x[0]是不能赋值的。 7以下程序的主函数中调用了在其面前定义的fun函数 #include main( ) {double a[15],k; k=fun(a); . . } 则以下选项中错误的fun函数首部是( A )。 、 。double fun(double a[l5]) double fun(double *a) A. B. double fun(double a[]) double fun(double a) C. D. 解析:由题可知fun的参数为变量,而a[15]为常量,所以答案为A。 8有以下程序: #include, main( ) {int S; scanf("%d",&s); while(s>O) {switch(s) {case l:printf("%d",s+5); case 2:printf("%d",s+4);break; case 3:printf("%d",s+3); default:("%d",s+1);break; } scanf("%d",&s); } } 运行时,若输入1 2 3 4 5 0<回车>,由输出结果是(A )。 6566456 66656 66666 6666656 A. B. C. D. 解析:根据题意,当s=1时,输出65;当s=2时,输出6;当S=3时,则输出64;当S=4时,输 出5;当s=5时,输出6;当s=0时,程序直接退出。所以最后答案为6566456,A选项正确。 9有三个关系R、S和T如下: 则由关系R和S得到关系T的操作是( D )。 自然连接并交差A. B. C. D. 解析:关系的基本运算有差、交、并、投影等。根据R和S得到T,可以看出,此关系为差, 所以答案选择D。 10有以下定义和语句: struct workers {int num;char name[20];char C; struct {int day;int month;int year;)S; }; struct workers w,*pw; pw=&w; 能给w中year成员赋1980的语句是( D )。 (;(;*pwyear=1980 wyear=1980 A. B. ((;pw->year=1980 wSyear=1980 C. D. 解析:结构workers中的成员s是一个嵌套的结构类型定义,因此在给year赋值时,要用“(” 运算在深入一层访问到最基本的成员year,只有D项反映出了这一点。 11在软件开发中,需求分析阶段产生的主要文档是(D )。 软件集成测试计划软件详细设计说明书 A. B. 用户手册软件需求规格说明书 C. D. 解析:软件需求分析阶段所生成的说明书为需求规格说明书。 12以下叙述中错误的是( C )。 一个程序中可以包含多个不同名的函数C A. 一个程序只能有一个主函数C B. 程序在书写时,有严格的缩进要求,否则不能编译通过C C. 程序的主函数必须用作为函数名Cmain D. 解析:C语言程序中有且只有一个主函数,但允许自定义多个函数。主函数的表示方法为 main(),所以答案选择C。 13下列叙述中正确的是( B )。 数据库系统是一个独立的系统,不需要操作系统的支持 A. 数据库技术的根本目标是要解决数据的共享问题 B. 数据库管理系统就是数据库系统 C. 以上三种说法都不对 D. 解析:数据库、数据库管理系统、数据库管理员、硬件平台、软件平台这五部分共同构成了一个以数据库为核心的完整的运行实体,称为数据库系统。数据库技术的根本目的是要解决数据的共享问题a数据库管理系统是一种系统软件,负责数据库中的数据组织、数据操作、数据维护、控制及保护和数据服务等,是数据库系统的核心,它是数据库系统的一部分,二者不能等同。 14以下定义数组的语句错误的是( B )。 ,,,,,;int num[]={123456} A. ,,,,,;int num[][3]={{12}3456} B. ,,,,,;int num[2][4]={{12}{34}{56}} C. ,,,,,;int num[][4]={123456} D. 解析:二维数组的定义有3种形式,第一种是分行为两位数组赋值,即int num[]={{12},{3, 4},{5,6}},第二种是按照数组排列顺序进行赋值,即int num[]={1,2,3,4,5,6},第三种为对部分元素赋初值,即int num[]={{1,2}{},{3,4},{5,6}},所以错误的为B。 15有以下程序: #include struct S {int a,b;)data[2]=10,100,20,200); main( ) {struet S p=data[l]; printf("%d\n",++(p(a)); } 程序运行后的输出结果是(D )。 10 11 20 21 A. B. C. D. 16有如下嵌套的if语句: if(ac)?bc) B. :::;k=(a?<表达式2>:<表达式3>。在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式2的值;如果为假,则返回表达式3的值。 17有以下程序: #include int a=1,b=2: void funl(int a,int b) {printf( "%d%d",a,b); } void fun2( ) { a=3;b=4; } main( ) { funl(5,6);fun2( ); printf("%d%d\n",a,b); } 程序运行后的输出结果是( B )。 1 2 5 6 5 6 3 4 5 6 1 2 3 4 5 6 A. B. C. D. 解析:Funl是输出局部变量的值,fun2是把全局变量的值改成3和4,所以输出的结果是5634 18若有定义语句“int a,b;double X;”,则下列选项中没有错误的是( C )。 switch(X%2) A. :;; {case 0a++break :;; case lb++break :;; defaulta++b++ } (switch((int)x/2O) B. :;; {case 0a++break :;; case lb++break :;; defaulta++b++ } switch((int)X%2) C. :;; {case 0a++break :;; case lb++break :;; defaulta++b++ } switch((int)(x)%2) D. (:;; {case 00a++break (:;; case l0b++break :;; defaulta++b++ } 解析:C语言中,switch语句中的表达式和case表达式都不能是浮点类型。所以选C。 19有以下程序(函数fun只对下标为偶数的元素进行操作): #include void fun(int*a。int n) { int i,j,k,t; for(i=0;ia[k])k=j; t[a[i];a[i]=a[k];a[k]=t; } } main() {int aa[lO]=[1,2,3,4,5,6,7],a; fun(aa,7); for(i=0;i<7;i++)printf("%d,",aa[i]); printf("n"); } 程序运行后的输出结果是( A )。 ,,,,,,,,,,,,,,7254361 1634527 A. B. ,,,,,,,,,,,,,,7654321 1735621 C. D. 解析:对下标为偶数的元素进行降序排序,下标为奇数元素保持不变。 20有以下程序: #include #include main( ) {printf{"%d\n",strlen("%d\n",strlen("ATS\n012\,"));} 程序运行后的输出结果是(B )。 3 8 4 9 A. B. C.D. 解析:本题考查strlen函数和转移字符,strlen函数的功能是求字符串的长度,在本题中有“,”, C语言中“,”是转义字符,在计算长度时会将转义符以及后面的第一个字符作为1个长度进 行计算,所以答 21下列定义数组的语句中,正确的是( D )。 ;:;;int N=10int x[N] #define N l0 int x[N] A. B. ((;;int x[010] int x[] C. D. 解析:选项A、B中n为变量,C语言中不允许动态定义数组维数,即维数不能是变量。选 项C无此语法。 22有以下程序: #include int fun( ) {static int x=1; X*=2: return x; } main( ) {int i,S=1; for(i=1;i<=3;i++)S*=fun( ); printf("%d\n",s); } 程序运行后的输出结果是(D )。 0 10 30 64 A. B. C.D. 解析:函数fun()是2的次方的运算,而s*=fun(),所以答案为64。 23设有以下函数: void fun(int n,char*s){…} 则下面对函数指针的定义和赋值均正确的是(A )。 ( );;void(*pf)pf=fun A. ( );void*pfpf=fun B. ( );;void*pf*pf=fun C. ,;;void(*pf)(intchar)pf=&fun D. 解析:函数指针的定义格式为函数类型(*指针变量名)(形参列表);函数名和数组名一样代表 了函数代码的首地址,因此在赋值时,直接将函数指针指向函数名就行了。选项A正确。 24有如下程序: main( ) {int x=1,a=0,b=0; switch(x) { case 0:b++; case l:a++; case 2:a++;b++; } printf("a=%d,b=%d,n",a,b); } 该程序的输出结果是( A )。 ,,,,A. a=2b=1 a=1b=1 a=1b=0 a=2b=2 B. C. D. 解析:当X为1时,执行case1,a自加等于1,因为case1后没有break,接着执行case 2,此 时a的值为2,b自加为1,故选择A选项。 25函数fseek(pf,OL,SEEK_END)中的SEEK_END代表的起始点是( B )。 文件开始文件末尾文件当前位置以上都不对A. B. C. D. 解析:SEEK_SET代表文件的开始,SEEK_END代表文件末尾,SEEK_CUR代表文件当前位 置。 26有以下程序: #include main( ) {unsigned char a=8,C; C=a>>3: printf("%d\n",c); } 程序运行后的输出结果是( C )。 32 16 1 0 A. B. C. D. 解析:题中定义了无符号数,c=a>>3;是指右移3位,然后输出。结果为C 27以下叙述中错误的是( B )。 程序在运行过程中所有计算都以二进制方式进行C A. 程序在运行过程中所有计算都以十进制方式进行C B. 所有程序都需要编译链接无误后才能运行C C. 程序中整型变量只能存放整数,实型变量只能存放浮点数C D. 解析:C语言中,参与运算的数可以以八进制、十进制、十六进制等多种形式表示。 28以下选项中非法的字符常量是( D )。 A. '\101' '\65' '\xff' '\019' B. C. D. 解析:在选项中,'\019',以0开头的数都为八进制数,而八进制的表示数字是0,7,所以答案 选择D。 29有以下程序 #include main( ) {int a[]={2,3,5,4),i; for(i=0;i<4;i++) switch(i,2) {case 0:switch(a[i],2) {case 0:a[i]++;break; case l:a[i]--; }break; case1:a[i]=0; } for(i=0;i<4;i++)printf(",d",a[i]);printf(",n"); } 程序运行后的输出结果是(C )。 3344 2050 3040 0304 A. B. C. D. 解析:本题考查嵌套分支语句。共输出4个值:当i=0时,i,2取余后还是0,则执行ease 0语 句,继续switch语句,此时i为0,数据的下标是从0开始的,a[03的值为2,则a[0],2=0,继续执行case 0,数组a[0]++,值变为3,执行break跳出第二重开关语句。出来后继续执行break,跳出第一重开关语句,继续循环;输出第一个值为3。i++后值为1,i,2=1,2取余后值为1,执行case l,将0赋给a[l],退出开关语句,输出第二个值为0。i++后值为2,i,2=2,2取余后值为0?a[2]的值为5,则a[2],2=1,继续执 行case l,数组a[2]--,值变为4,执行break跳出第二重开关语句。出来后继续执行break,跳出第一重开关语句,继续循环;输出第三个值为4。i++后值为3,i,2=3,2取余后值为1,执行case l,将0赋给a[3],退出开关语句,输出第四个值为0。结果为3 0 4 0。 30有以下程序(注:字符a的ASCIl码值为97) #include main( ) { char*s={"abc") do {printf("%d",*S%10");++S; } while(*s); } 陧序运行后的输出结果是(B )。 A. abc 789 7890 979899 B. C. D. 解析:程序中的*s%10是求余运算,分别是a、b、C的ASCIl码值对10进行求余运算然后输出,所以输出的答案为789。 31有下列程序: main( ) { char*P[]={"3697","2584"); int i,j;long num=0; for(i=0;i<2;i++) {j=0; while(p[i][j]!=',0') {if((p[i][j]-t,0')%2)num=10*num+p[j][j]-'0'; j+=2; } } printf("%d,n",num); } 程序执行后的输出结果是( D )。 35 37 39 3975 A. B. C. D. 解析:执行第一次for循环时,用表达式p[i][J]!=',o'来判断字符串数组指针P是否到达字符串的结尾,如果没有到达,继续执行while中的语句。if语句表示(p[i][j]-',o')除2的余数不为0时,即字符串所有奇数,执行后面的语句。所以退出第1次for的循环体时,输出为397,执行第2次循环体。对字符串“2584”进行处理,输出结果为5,因而最后输出结果为3975。 32软件生命周期可分为定义阶段、开发阶段和维护阶段。详细设计属于(B )。 定义阶段开发阶段维护阶段上述三个阶段A. B. C. D. 解析:开发阶段在开发初期分为需求分析、总体设计、详细设计3个阶段,在开发后期分为编码、测试两个子阶段。 33在软件设计中不使用的工具是(C )。 系统结构图程序流程图图数据流图图A. PAD (DFD) B. C. D. 解析:数据分析主要使用的是数据流图和数据字典,概念设计阶段使用的是系统结构图,在详细设计阶段使用的是程序流程图。所以答案选择C。 34面向对象方法中,继承是指( D )。 一组对象所具有的相似性质一个对象具有另一个对象的性质 A. B. 各对象之间的共同性质类之间共享属性和操作的机制 C. D. 解析:在程序设计中,继承是指子类自动享用父类的属性和方法,并可以追加新的属性和方法的一种机制。它是实现代码共享的重要手段,可以使软件更具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,也是面向对象的主要优点之一。继承又分为单重继承和多重继承。单重继承是指子类只能继承一个父类的属性和操作;而多重继承是指子类可以继承多个父类的属性和操作。java是一种单重继承语言,而C++是一种多重继承语言。 35以下关于结构化程序设计的叙述中正确的是( C )。 一个结构化程序必须同时由顺序、分支、循环三种结构组成 A. 结构化程序使用语句会很便捷goto B. 在语言中,程序的模块化是利用函数实现的C C. 由三种基本结构构成的程序只能解决小规模的问题 D. 解析:在程序设计中,继承是指子类自动享用父类的属性和方法,并可以追加新的属性和方法的一种机制。它是实现代码共享的重要手段,可以使软件更具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,也是面向对象的主要优点之一。继承又分为单重继承和多重继承。单重继承是指子类只能继承一个父类的属性和操作;而多重继承是指子类可以继承多个父类的属性和操作。java是一种单重继承语言,而C++是一种多重继承语言。 36下列叙述中正确的是( B )。 有一个以上根结点的数据结构不一定是非线性结构 A. 只有一个根结点的数据结构不一定是线性结构 B. 循环链表是非线性结构双向链表是非线性结构 C. D. 解析:有一个根节点的数据结构不一定是线性结构a 37有以下程序: #include main( ) { int a; scanf("%d",&a); if(a++<9)printf("%d\n",a); clsc printf("%d\n",a--); } 程序运行时从键盘输入9<回车>,则输出结果是(A )。 10 11 9 8 A. B. C. D. 解析:有一个根节点的数据结构不一定是线性结构a 38若有函数 void fun(double a[]。int*n) {…} 以下叙述中正确的是(B )。 调用函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送fun A. 形参和都是指针变量an B. 形参是一个数组名,是指针变量an C. 调用函数时将把型参数组元素一一对应地传送给形参数组fundoublea D. 解析:本题考查函数中数组和指针的传值,数组a[]在参数传递时,是传递的数组a的首地址, 所以形参a和n都是指针变量。 39有以下程序: #include main( ) { char a='H'; a=(a>='A'&&a<='2')?(a-'A'+'a'):a; printf("%c\n",a); } 程序运行后的输出结果是( D )。 A. A a H H B. C. D. 解析:多元运算符问号前面表达式为真,所以(a-'A'+'a')赋值给a,括号里的运算是把大写字母 变成小写字母,所以答案应为选项D。 40有以下程序: #include void func(int n) { static int num=1); num=num+n;printf("%d",num); } main( ) { funo(3);func(4);printf("n"); } 程序运行后的输出结果是( A )。 4 8 3 4 3 5 4 5 A. B. C. D. 解析:第一调用func函数时输出4,第二次调用func函数时num的值并不会释放,仍然是上 次修改后的值4,第二次调用结果为8,所以输出结果是4 8。 二、基本操作题(共18分) 41请补充main()函数,该函数的功能是:如果数组arr的前一个元素比后一个元素小,则把它保存在数组bb中并输出。 例如,若数组中的元素为:“40,68,62,33,35,52,48,95,66,73”,则输出:“40,33,35,48,66”。 注意:部分源程序给出如下。 请勿改动函数()main和其他函数中的任何内容,仅在main()函数的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #define M l0 void main() { int i,n=0; int arr[M]=(40,68,62,33,35,52,48,95,66,73); int bb[M]; system("CLS"); for(i=0;i<【1】;i++) if(arr[i] #include,stdlib(h> #include #include //****found**** int proc(char str[]) { char C; unsigned i,j; for(i=0;istr[j]) { c=str[j]: //****found**** str[j]=str[i++]; str[i]=C; } } void main() { char st/[81]; system("CLS"); printf("\nPlease enter a character string:"); gets(str); printf("\nknBefore sorting:\n %s",str); proc(str); printf("\nAfter sorting decendingly:\n %S",str); } 解析:【1】M-1【2】bb[n++]=arr[i]【3】i,bb[i] 【解析】由整个for循环可知,变量i为数组arr的下标,题目中要求取出前一个元素比后 一个元素小的元素,所以只需要判断前M-1个元素即可。因此,【1】处填“M-1”;如果第i 个元素比第i+1个元素小,将第1个元素放入数组bb中,因此,【2】处填“bb[n++]=arr[i]”。 最后,要输出数组bb中的每一个元素。因此,【3】处填“i,bb[i]”。 四、程序设计题(共18分) 43请编写函数proc(),该函数的功能是:将放在字符串数组中的M个字符串(每串的长度 不超过N),按顺序合并组成一个新的字符串。 例如,若字符串数组中的M个字符串为: ABCD BCDEFG CDEFGHI 则合并后的字符串内容应该是ABCDBCDEFGCDEFGHl。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若 干语句。 试题程序: #include #include #define M 3 #define N 20 void proc(char arr[M][N],char*b) { } void main() { char str[M][N]={"ABCD","BCDEFG","CDEFGHl"),i; char arr[100]={"##################"}; printf(”The strin9:kn”); for(i=0;i
/
本文档为【[计算机软件及应用]2013年9月全国计算机等级《二级C语言程序设计》终极押密卷1--5整理版 2】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索