98(10)[11]35【解析】函数swap(int*a,int*b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,参形指针变量a和b分别指向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35。(11)[12]abcdefglkjlh【解析】本题主要考查了字符变量可参与的运算。因为字符在计算机中是以ASCII码的形式存放的,所以字符变量可看作整型变量来处理,如参与算术运算等,某字符的大写字母的ASCH码值比它对应的小写字母ASCII码值小32。(12)[13]4【解析】在主函数中,语句p=a;p++使用指针p指向数组a[l],所以输出结果为4。(13)[14]->【解析】若结构体变量abc有成员a,并有指针忆2卜指向结构变量abc,则引用变*tabc成员a的标记形式有abc.a和p_abc->a。(14)[15]1,2,3,0,0,1,2,3,0,0,【解析】本题考查文件读写函数的ad和fwrite的用法。fwrite函数将数组a的前5个元素输出到文件fp中两次,共10个字节,再调用fread函数从文件fp中读取这10个字节的数据到数组a中,此时数组a的内容就变为{123,0,0,1,2,3,0,0},最后的输出结果为“1,2,3,0,0,1,2,3,0,0,"。一、选择题在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(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)数据处理的最小单位是A)数据B)数据元素C)数据项D)数据结构(7)假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为A)log2nB)n2C)O(nl..5)D)n(n-l)/2(8)在深度为5的满二叉树中,叶子结点的个数为A)32B)31C)16D)15(9)数据库系统的核心是A)数据库B)数据库管理系统C)模拟模型D)软件工程(10)一个关系中属性个数为1时,称此关系为A)对应关系B)单一关系C)一元关系D)二元关系(11)下面各选项中,均是C语言合法标识符的选项组是A)33weautoB)_23me_3ewC)_433e_elseD)ER-DF32(12)可在C程序中用作用户标识符的一组标识符是A)andB)DateC)HiD)case
99_2007y-m-dDr.TomBigl(13)以下对C语言函数的有关描述中,正确的是A)在C语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参B)C函数既可以嵌套定义又可以递归调用C)函数必须有返回值,否则不能使用函数D)函数必须有返回值,返回值类型不定(14)若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是A)函数的实参和其对应的形参共占同一存储单元B)形参只是形式上的存在,不占用具体存储单元C)同名的实参和形参占同一存储单元D)函数的形参和实参分别占用不同的存储单元(15)现有定义inta;doubleb;floatc;chark;,则表达式a/b+c-k值的类型为:A)intB)doubleC)floatD)char(16)以下关于long、int和short类型数据占用内存大小的叙述中正确的是A)均占4个字节B)根据数据的大小来决定所占内存的字节数C)由用户自己定义D)由C语言编译系统决定(17)有以下程序段intj;floaty;charname[50];scanf("%2d%f%s",&j,&y,name);当执行上述程序段,从键盘上输入555667777abe后,y的值为A)55566.0B)566.0C)7777.0D)566777.0(18)若变量已正确定义,有以下程序段i=0;doprintf("%d;',i);while(i++);printf("%d
100”,i);其输出结果是A)0,0B)0,lC)l,lD)程序进入无限循环(19)下列程序的运行结果是#include"stdio.h"main(){intx=-9,y=5,z=8;if(x101",z);}A)6B)7C)8D)9(20)若程序执行时的输入数据是“2473”,则下述程序的输出结果是#includevoidmain(){intcs;while((cs=getchar())!=;
102'){switch(cs・'2'){case0case1:putchar(cs+4);
103case1:putchar(cs+4);break;case2:putchar(cs+3);default:putchar(cs+2);}}}A)668977B)66896606677877D)6688766(21)以下程序的输出结果是main(){inta,i;a=0;for(i=l;i<5;i4-+){switch(i){case0:case3:a+=2;case1:case2:a+=3;default:a+=5;}}printf(M%d
104n,a);}A)31B)13C)10D)20(22)现有如下程序段#include"stdio.hMmain(){intk[30]={12,324,45,6,768,98,21,34,453,456};intcount=0,i=0;while(k[i]){if(k[i]%2==0llk[i]%5==0)count++;i++;}printf("%d,%d
105”,count」);}则程序段的输出结果为A)7,8B)8,8C)7,10D)8,10(23)若有以下程序#includeinta[]={2,4,6,8};main(){inti;int*p=a;for(i=0;i<4;i-H-)a|i]=*p;prinlf("%d
106”,a[2]);}上面程序的输出结果是A)6B)8C)4D)2(24)有以下程序#includemain(){inti,j,m=55;fbr(i=l;i<=3;i++)for(j=3;j<=i;j++)m=m%j;
107printf(n%d
108",m);)程序的运行结果是A)0B)1C)2D)3(25)已知字符'A'的ASCII码值是65,字符变量cl的值是'A',c2的值是'D'。执行语句printf("%d,%d”,c1,c2・2);后,输出结果是A)A,BB)A,68C)65,66D)65,68(26)下列程序是用来判断数组中特定元素的位置所在的。#include#includeintfun(int*s,intt,int*k){inti;*k=0;for(i=0;i109M,k,a[k]);}如果输入如下整数:876675896101301401980431451777则输出结果为A)7,431B)6C)980D)6,980(27)下面程序的文件名为t.exe,在DOS下输入的命令行参数为:ttomeetme<回车〉则程序输出的结果是include"stdio.h"main(argc,argv)intargc;char*argv[];{inti;printf("%d
110",argc);)A)3B)4C)2D)以上答案都不正确(28)有如下程序inta[10]={1,2,3,4,5,6,7,8,9,10};int*p=&a[3],b;b=p[5];则b的值是A)5B)6C)9D)8(29)以下叙述中错误的是A)改变函数形参的值,不会改变对应实参的值B)函数可以返回地址值C)可以给指针变量赋一个整数作为地址值D)当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL(30)下面程序的输出结果是#includemain(){inta[]={1,2,3,4,5,6,7,8,9,0),*p;P=a;printf("%d
111",*p+9);}A)0B)1C)10D)9(31)有下面程序段#include"stdio.h"
112#include"string.h"main(){chara[3][20]={{MchinaM},{MisaM),{"bigcountry!M});chark[100]={0},*p=k;inti;fbr(i=0;i<3;i-H-){p=strcat(p,a[i]);}i=strlen(p);printf("%d
113”,i);}则程序段的输出结果是A)18B)19C)20D)21(32)若有定义:char*st="howareyou,下列程序段中正确的是A)chara[l11,*p;strcpy(p=a+1,&st[4]);B)chara[l1];strcpy(++a,st);C)chara[ll];strcpy(a,st);D)chara[],*p;strcpy(p=&a[1],st+2);(33)有以下程序#includeintfun(chars[]){intn=0;while(*s<=/9'&&">二'O'){n=10*n+*s-zO';s++;}return(n);}main(){chars[10]={z6'1'4f/9'Of/*'};prinlf("%d
114”,fun(s));)程序的运行结果是A)9B)61490C)61D)5(34)设有定义:charp[]={'1'2'3'},*q=p;,以下不能计算出一个char型数据所占字节数的表达式是A)sizeof(p)B)sizeof(char)C)sizeof(*q)D)sizeof(p[0])(35)有以下函数intaaa(char*s){char*t=s;while(*t-H-);t-;return(t-s);}以下关于aaa函数的功能的叙述止确的是A)求字符串s的长度B)比较两个串的大小C)将串s复制到串tD)求字符串s所占字节数(36)当用户要求输入的字符串中含有空格时,应使用的输入函数是A)scanf()B)getchar()C)gets()D)getc()(37)下列选项中错误的说明语句是A)chara[]={'t'o'y'o'u''0'};B)chara[]={"toyou\0");C)chara[]="toyou\0";D)chara[]=ztoyou\01;(38)以下程序的输出结果是intf(){staticinti=0;ints=l;s+=i;i++;returns;}main(){inti,a=0;for(i=0;i<5;i++)a+=f();printf("%d
115';a);}A)20B)24C)25D)15(39)下列程序的输出结果是#include"stdio.h"
116#defineM(x,y)x%ymain(){inta,m=12,n=100;a=M(n,m);printf("%d
117”,a-);}A)2B)3C)4D)5(40)假定当前盘符下有两个如下文本文件:文件名al.txta2.txt内容123#321#则下面程序段执行后的结果为#includenstdio.h"voidfc(FILE*p){charc;while((c=fgetc(p))!='#')putchar(c);}main(){FILE*fp;fp=fopen(,'al.txt,,,,,rH);fc(fp);fclose(fp);fp=fopen(Ma2.txt,,,,,r,');fc(fp);fclose(fp);putcharCXn*);}A)123321B)123C)321D)以上答案都不正确二、填空题请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。(1)软件定义时期主要包括【1】和需求分析两个阶段。(2)软件维护活动包括以下几类:改正性维护、适应性维护、【2】维护和预防性维护。(3)数据的逻辑结构有线性结构和【3】两大类。(4)某二叉树中度为2的结点有n个,则该二叉树中有【4】个叶子结点。(5)在ER图中,矩形表示【5】o(6)阅读下面程序,则执行后的输出结果是[6】o#include"stdio.h"main(){intx,y,z;x=l;y=2;z=3;if(x>y)if(x>z)printf(',%dM,x);elseprintf("%d",y);printf("%d
118”,z);}(7)以下程序的输出结果是[7】omain(){inty=9;for(;y>0;y-)if(y%3==0){printf(n%dn,-y);continue;))(8)有以下程序段,且变量已正确定义和赋值for(s=1.0,k=1;k<=n;k++)s=s+1.0/(k*(k+1));printf(,,s=%f
119
120,',s);请填空,使下面程序段的功能与之完全相同s=1.0;k=l;while([8]){s=s+1.0/(k*(k+l));[9];}
121printf(Ms=%f
122
123\s);(9)设有以下定义和语句,则*(*(p+2)+l)的值为【10】。inta[3][2]={10,20,30,40,50,60},(*p)[2];p=a;(10)以下程序的输出结果是[11]。#includemain(){inti;for(i='a';iv'f1;i++,i++)printf(,,%cH,i-/az+'A');printf("
124n);}(11)以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同)中找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请填空。#includevoidf(intx[],intn){intpO.pl,i=j=x[O];pO=pl=O;fbr(m=0;mi){i=x[m];p0=m;}elseif(x[m]125M);}(12)mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。intmystrlen(char*str){intI;for(I=0;[14]!=An,;I++);return(I);)(13)阅读下列程序,则程序的输出结果为【15】«#include"stdio.h"structty{intdata;charc;};main(){structtya={30,Jx'};fun(a);printf("%d%c",a.data,a.c);}fun(structtyb){b.data=20;b.c='y';}一、选择题1)D【解析】软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。本题中,详细设计、软件编码和软件测试都属于软件开发阶段;维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价最大的一个阶段,软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。(2)D【解析】测试的目的是发现软件中的错误。经验表明,程序中存在错误的概率与该程序中已发现的错误成正比。这一现象说明,为了提高测试效率,测试人员应该集中对待那些错误群集的程序。(3)D【解析】面向对象思想中的三个主要特征是:封装性、继承性和多态性。(4)A【解析】当今主导的程序设计风格是"清晰第一,效率第二"的观点。结构化程序设计思想提出之前,在程序设计中曾强调程序的效率,而在实际应用中,人们更注重程序的可理解性。(5)B【解析】软件设计包括软件结构设计、数据设计、接口设计和过程设计。其中,结构设计是定义软件系统各主要部件之间的关系;数据设计是将分析时创建的模型转化为数据结构的定义;接口设计是描述软件内部、软件和操作系统之间及软件与人之间如何通信;过程设计则是把系统结构部件转换成软件的过程性描述。(6)C【解析】数据处理的最小单位是数据项;由若干数据项组成数据元素;数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。(7)D【解析】假设线性表的长度为n,则在最坏情况下眉泡排序要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-l)/2。(8)C【解析】满二叉树是指除最后一层外,每一层上的所有结点都有两个叶子结点。在满二叉树中,层上的结点数都达到最大值,即在满二叉树的第k层上有2k-l个结点,且深度为m的满二叉树有2m-l个结点。⑼B[解析]数据库管理系统(DatabaseManagementSystem,简称DBMS)是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服
126务等,数据库管理系统是数据库系统的核心。(10)C【解析】在关系模型数据库中,基本结构是二维表,这种二维表称为关系。关系的列称为属性,一个具有N个属性的关系称为N元关系。(11)B【解析】合法的标识符是由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,用户定义的标识符不能与关键字相同。选项A),数字不能为第一个字母,auto为关键字;选项C)中,也是数字不能为第一个字母,else为关键字;选项D)中负号不合法。(12)A【解析】在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。C语言的标识符可以分为关键字、预定义标识符和用户标识符。选项B)和C)中的横线以及点都不合法,选项D)中的case为C语言关键字。(13)A【解析】C语言中的函数可以进行递归调用,但是不能在函数中定义函数,函数不用有返回值,若有返回值,则返回值类型必确定。(14)D【解析】在内存中,实参单元与形参单元是不同的单元。在C语言中,仅在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。(15)B【解析】双目运算中两边运算量类型转换规律:运算数1运算数2转换结果类型短整型长整型短整型->长整型整型长整型整型->长整型字符型整型字符型,整型有符号整型无符号整型有符号整型。无符号整型整型浮点型整型。浮点型在a/b的时候,a、b的类型不一致,根据类型转换规则,把整型转换成double类型,之后的加、减类似。转化规则为char,short->int->unsigned->long->double■―float。(16)D【解析】在ANSI标准中Jong、int和short分别占用4、2和2个字节。但实际上对于某些C编译系统,int和short都占用4个字节,所以说各种类型数据占用内存大小是由选择何种C编译系统决定的。(17)B【解析】本题考查通过scanf函数输入数据时的格式控制问题。变量j的格式控制为“%2d”,即只接收输入数据的前两位,从第三位开始直到空格之间的输入都会被保存到变量y中,因为y为浮点型数据,所以输出结果为选项B)。(18)B【解析】对于do…while循环,程序先执行一次循环体,再判断循环是否继续。本题先输出一次i的值"0,",再接着判断表达式i++的值,其值为0,所以循环结束。此时变量i的值经过自加已经变为1,程序再次输出i的值"1"。(19)D【解析】if…else语句的执行过程如下,首先计算if后面-对圆括号内表达式的值,若表达式的值为非0,执行if子句,然后跳过else子句,去执行if语句后的下一一条语句;若表达式的值为0,跳过if子句,去执行else子句,接着去执行if语句后的下一条语句。C语言的语法规定,else子句总是与前面最近的不带else的if匹配,与书写格式无关,本题目的后一个if-else相当于嵌套在第一个if子句里,相当于x=0时,z=z+1。(20)A【解析】本题上要考查switch语句的使用方法。switch语句的执行过程为:进入switch结构后,对条件表达式进行运算,然后从上至下去找与条件表达式值相匹配的case,以此作为入口,执行switch结构中后面的各语句,直到遇到break语句,则跳出switch语句,如果各case都不匹配时,则执行default后面的语句。(21)A【解析】本题考查用于多分支选择的switch语句,其一般形式为:switch(表达式)I
127case常量表达式1:语句1;case常量表达式2:语句2;case常量表达式n:语句n;default:语句n+1;)其语义是:计算表达式的值,并逐个与其后的常量表达式值进行比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句;如表达式的值与所有case后的常量表达式均不相等时,则执行default后的语句。(22)D【解析】在C语言中,定义一维数组的语句一般形式如下:类型名数组名[常量表达式];一维数组的引用形式为:数组名[下标表达式]。count表示能被2整除或被5整除的个数,i则计算有多少个数组元素。(23)D【解析】在C语言中,数组元素下标是从0开始的;指针变量p指向数组的苜地址。for循环语句中,指针变量p始终指向数组的首地址,因而执行循环赋值语句后数组各元素的值均变为2。(24)B【解析】本题考查循环语句的嵌套以及条件的判断问题。在程序中,内层循环判断条件为”j<=i",而j的初值为3,故当i的值为1和2时,内层循环体都不会被执行。只有当i和j都等于3时才会执行一次。m的值为55对3取模,计算结果为1。(25)C【解析】在C语言中,字符型数据在内存中的存储形式是ASCII码值。当需要以整型格式输出字符时,输出的也是ASCII码值。字符A和的ASCII码值分别为65和68。(26)D【解析】本题中直接使用指针变量k,但在使用时要注意对k的指针运算。此外,一开始应知道*k的值为数组中的某一下标值,即*k=0,本函数的功能是找出数组中的最大元素的位置及最大元素的值。(27)B【解析】argc中存入的是命令行中字符串的个数。argv是一个指向字符型的指针数组的指针。(28)C【解析】p=&a[3]将指针指向数组a的第4个元素,p[5]指向数组a的第9个元素,而a[8]=9,所以b=9。29)C【解析】函数形参和实参分别占用不同的内存单元,改变形参的值不会影响对应实参的值,选项A)正确。指针类型的函数可以返回地址值,选项B)正确。在文件stdio.h中,NULL被定义为void型的指针,选项D)也正确。指针变量的值只能是存储单元地址,而不能是一个整数,选项C)错误。(30)C【解析】此题考查了指针引用一维数组元素的方法。*p+9因为运算符"*”的优先级高于所以输出结果为p指向的元素1,然后加9,值为10。⑶)B【解析】字符串连接函数strcat的调用形式如下:strcat(sl,s2)。此函数将s2所指字符串的内容连接到si所指的字符串后面,并自动覆盖si串末尾的尾标涵数返回si的地址值。(32)A【解析】本题综合考查字符数组的赋值和strcpy函数的用法。C语言不允许用赋值表达式对字符数组赋值,如下面的语句就是非法的:strl="China",如果想把"China"这5个字符放到数组strl中,除了逐个输入外,还能使用strcpy函数,该函数的功能是将一个字符串复制到一字符数组中。例如:strcpy(strl,"China")或strcpy(strl,st⑵;注意,不能企图用以下语句来实行赋值(将str2的值传给strl):strl=str2;不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。strcpy函数的结构是:strcpy(字符数组1,字符串2)其中,需要注意的是,字符数组1的长度不应小于字符串2的长度,"字符数组1”必须写成数组名形式,如(strl),"字符串2"可以是字符数组名,也可以是字符串常量,不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。
128(33)C【解析】在fbn函数中,while循环的功能是:逐个取字符数组s的字符判断其是否是数字。若是则将其作为个位数字保存到变量n中,n的原数据的各个数位将相应左移一个10进制位。当指针s指向数组的第3位时,循环条件不成立,循环结束,返回n的值,输出n的值为61。(34)A【解析】在本题中,p和q同为指向字符类型数据的指针。*q和p[0]同为字符型数据。选项B)、C)和D)都符合题目的要求;选项A)计算得出的是指针类型数据所占的内存字节数。(35)A【解析】循环开始前,指针t和s都指向字符串的起始位置,然后通过while循环判断t指向的位置是否为空,同时让t向右移动一位。while循环结束时,t自减1,此时t指向的位置是字符串的结束标志VT处,故t-s的值是字符串的长度,并不包括结束标志。(36)C【解析】本题综合考查了输入函数的使用。scanf函数会将空格视为分隔符,getchar函数只能输入单个字符,getc函数是文件操作函数,显然都不符合题意。通过gets函数输入字符串时,输入的空格被认为是字符串的一个字符。(37)D【解析】通过赋初值的方式给一维数组赋字符串,可以用给一般数组赋初值的相同方式给一维字符数组赋字符串,也可以在赋值时直接赋字符串常量。选项B)和C)后面的VT是多余的,在C语言中,系统会自动在字符串的结尾处加上一个字符'(T作为串的结束标记。(38)D【解析】函数的静态局部变量在编译时就赋初值,即只赋初值一次,在程序运行时它已有初值,以后每次调用函数时不再重新赋值,而只是保留上次函数调用结束时的值。(39)C【解析】带参数的宏定义命令行形式如下:#define宏名(形参表)替换文本在编译的时候编译预处理程序用"替换文本"来替换宏,即M(n,m)被替换为n%m,之后计算,将计算的结果赋给a。注意,宏替换是在编译时由预处理程序完成的,宏替换不占用运行的时间,而函数调用是在程序运行时进行的,在函数的调用过程中需要占用•系列的处理时间。(40)A【解析】本题的功能是顺序的读两个文本文件,依次输出。当打开文件时出现错误,fopen函数将返回NULL。二、填空题(1)(11可行性研究【解析】软件生命周期一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等,还可以将软件生命周期分为三个阶段:①软件定义阶段:可行性研究和需求分析;②软件开发阶段:设计、实现和测试;③软件运行维护阶段:交付使用和维护。(2)[2]完善性【解析】软件维护活动包括以下几类:改正性维护、适应性维护、完善性维护和预防性维护。改正性维护是指在软件交付使用后,为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程;适应性维护是指为了使软件适应变化,而去修改软件的过程;完善性维护是指为了满足用户时软件提出的新功能与性能要求,需要修改或再次开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性;预防性维护是为了提高软件的可维护性、可靠性等,为以后的进一步改进软件打下良好基础。(3)【3】非线性结构【解析】数据的逻辑结构有线性结构和非线性结构两大类。(4)[4]n+1【解析】在任意一棵二叉树中,度为0多结点(即叶子结点)总是比度为2多结点多一个。(5)[51实体【解析】在E-R图中用矩形表示实体;椭圆形表示属性;菱形表示联系。(6)[6]3【解析】C语言的语法规定:else子句总是与前面最近的不带else的if相结合。因为x不大于y,所以执行printf("%d
129",z);语句。(7)[7]852【解析】循环前,变量y的值为9,其中,循环语句在y大于0情况下循环,每次循环后y的值都减1。循环体是当y能被3整除时输出表达式--y,输出的是减1后的y值。这样,第一次循环因y为9,能被3整除,输出8,y也变成8。又经两次循环,y的值变为6,又让y减1变成5,并输出5;又经两次循环,y的值变成3,让y减1变成2,输出2;再经两次循环后,y的值变成0,结束循环,所以程序输出852。(8)[8]k<=n[9]k++【解析】本题要求将一个for循环改成while循环。首先要保证循环条件相同,在for循环中,每次执行循环之后,循环控制变量k都会加1,而while循环则没有,
130故需在循环体中增加改变k数值的语句"k++;"o(4)[10]60【解析】本题中,代码定义3行2列的二维数组a,定义指向两个元素的一维数组指针P,并让p指向两维数组a的首行,则代码*(*(p+2)+l)中的p+2指向两维数组a的第三行a⑵,*(p+2)指向a[2][0],*(p+2)+1指向a⑵口],*(*(1H>2)+1)是引用a⑵[1],其值是60(5)[11]ACE【解析】在本题中,for循环体每执行完一次,变量i的值自加两次。i的初值为宜,执行一次循环后变为匕之后再变成当其变为这时,循环条件若不满足,循环终止,故本题共输出3个字符。表达式"i-'a,+'A,"即表示输出i对应的大写字母,结果为ACE。(6)[12]x[0][13]x[0]【解析】函数f()通过for循环逐个比较数组x中的元素,循环结束后,pO和pl分别表示最大值和最小值在数组中的下标位置,然后按照题意将最大值x[pO]和数组的最后一个元素x[n-l]交换位置,再将最小值x[pl]和第一个元素(x[0])进行交换,所以空白处应该填入x[0]。(7)[14]*(str+I)或str[I]【解析】str是指针变量,它指向字符型数据,在循环过程中,可以用*(str+I)来访问字符串中的第I个元素,判断是否为结束标志,如果不是,1=1+1,继续取下一个元素进行判断,直到*(str+I)的值为\0为止,也可以用下标的方式引用字符,如*(str+I)相当于str[I]»(8)[15]30x【解析】本题的参数传递属于值传递,所以被调用函数内不能改变调用函数中的数据。一、选择题在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)算法的空间复杂度是指A)算法程序的长度B)算法程序中的指令条数C)算法程序所占的存储空间D)执行算法需要的内存空间(2)在结构化程序设计中,模块划分的原则是A)各模块应包括尽量多的功能B)各模块的规模应尽量大C)各模块之间的联系应尽量紧密D)模块内具有高内聚度、模块间具有低耦合度(3)下列叙述中,不属于测试的特征的是A)测试的挑剔性B)完全测试的不可能性C)测试的可靠性D)测试的经济性(4)下面关于对象概念的描述中,错误的是A)对象就是C语言中的结构体变量B)对象代表着正在创建的系统中的一个实体C)对象是一个状态和操作(或方法)的封装体D)对象之间的信息传递是通过消息进行的(5)下列关于队列的叙述中正确的是A)在队列中只能插入数据B)在队列中只能删除数据C)队列是先进先出的线性表D)队列是先进后出的线性表(6)已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是A)acbedB)decabC)deabcD)cedba(7)某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为D)n/2A)n+1B)n-1C)2n(8)设有如下三个关系表RST
131ABCABCm13m13nn13下列操作中正确的是C)T=RXSD)T=R/SA)T=RCSB)T=RUS(9)下列叙述中,正确的是A)用E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联系B)用E-R图只能表示实体集之间一对一的联系C)用E-R图只能表示实体集之间一对多的联系D)用E-R图表示的概念数据模型只能转换为关系数据模型(10)下列有关数据库的描述,正确的是A)数据处理是将信息转化为数据的过程B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变C)关系中的每一列称为元组,一个元组就是一个字段D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字(11)C语言规定,在一个源程序中,main函数的位置A)必须在最开始B)必须在系统调用的库函数的后面C)可以任意D)必须在最后(12)以下叙述中错误的是A)计算机不能直接执行用C语言编写的源程序B)C程序经C编译程序编译后,生成后缀为.。切的文件是一个二进制文件C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件D)后缀为.obj和.exe的二进制文件都可以直接运行(13)下列选项可以正确表示字符型常量的是A)''r'B)"a"C)"\897"D)296(14)以下叙述中正确的是A)构成C程序的基本单位是函数B)可以在一个函数中定义另一个函数C)main()函数必须放在其他函数之前D)C函数定义的格式是K&R格式(15)设变量均已正确定义,若要通过scanf("%d%c%d%c",&al,&cl,&a2,&c2);语句为变量al和a2赋数值10和20,为变量cl和c2赋字符X和丫。以下所示的输入形式中正确的是(注:口代表空格字符)A)10口*口20口丫〈回车〉B)10口*20口丫<回车>C)lODXv回车〉20C丫〈回车〉D)10X<回车〉20丫<回车〉(16)若有说明:int*p,m=5,n;,以下正确的程序段是A)p=&n;scanf(M%dM,&p);B)p=&n;scanf(',%dM,*p)C)scanf(''%dM,&n);*p=n;D)p=&n;*p=m;(17)在执行下述程序时,若从键盘输入6和8,则结果为main(){inta,b,s;scanf(M%d%d';&a,&b);s=aif(a<b)s=b;s*=s;printf("%d”,s);)A)36B)64C)48D)以上都不对
132(18)若执行下面的程序时,从键盘输入5和2,则输出结果是main(){inta,b,k;scanf(n%d,%dn,&a,&b);k=a;if(a
133”,k);}A)5B)3C)2D)0(19)在C语言中,函数返回值的类型最终取决于A)函数定义时在函数首部所说明的函数类型B)return语句中表达式值的类型C)调用函数时主调函数所传递的实参类型D)函数定义时形参的类型(20)已知大写字母A的ASCII码是65,小写字母a的ASCH码是97。以下不能将变量c中的大写字母转换为对应小写字母的语句是A)c=(c-'N)%26+'a'B)c=c+32C)c=c-ZA'+'a'D)c=('A'+c)%26・'a'(21)以下选项中,当x为大于1的奇数时,值为0的表达式是A)x%2==lB)x/2C)x%2!=0D)x%2==0(22)有以下程序main(){intk=5,n=0;do{switch(k){case1:case3:n+=l;k—;break;default:n=O;k—;case2:case4:n+=2;k—;break;)printf("%d"m);}while(k>0&&n<5);}程序运行后的输出结果是A)235B)0235C)02356D)2356(23)有如下程序main(){intn=9;while(n>6){n—;printf(,,%d,',n);}}该程序的输出结果是A)987B)876C)8765D)9876(24)有以下程序#includemain(){intc;while((c=getchar())!=1
134){switch©'2'){case0:casel:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);
135case4:putchar(c+3);break;}}printf("
136H))从第一列开始输入以下数据vCR>代表一个回车符。2743程序的输出结果是A)66877B)66896606677877D)6688766(25)有以下程序main(){intx=0,y=0,i;for(i=l;;++i){if(i%2=0){x++;continue;}if(i%5==0){y++;break;}}printf(M%d,%dM,x,y);}程序的输出结果是A)2,lB)2,2C)2,5D)5,2(26)有以下程序main(){inta[4][4]={{lA3,2),{8,6,5,7},{3,7,2,5},{4,8,6,l}}4jXt;for(i=0;i<4;i-H-)for(j=0;j<3;j++)for(k=j+l;k<4;k++)if(a[j][i]>a[k][iD{t=a皿i];a皿按列排序*/foiti=0;i<4;i++)printf(H%d,M,a[i][i]);)程序运行后的输出结果是A)l,6,5,7,B)8,7,3,l,C)4,7,5,2,D)l,6,2,l,(27)有以下程序intf(intn){if(n==l)retum1;elsereturnf(n-l)+l;}main(){inti,j=0;for(i=l;i<3;i++)j+=f(i);printf(H%d
137",j);}程序运行后的输出结果是A)4B)3C)2D)1(28)当运行以下程序时,从键盘输入AhaMA(空格)AhavCR>,则下面程序的运行结果是#includemain(){chars[80],c=,a';inti=0;scanf(u%sn,s);while(s[i]!=r{if(s[i]=c)s[i]-32;
138elseif(s[i]=c-32)s[i]=s[i]+32;i++;}puts(s);}A)ahaMaB)AbAMaC)AhAMa[空格]ahAD)ahAMa[空格]ahA(29)下面程序输出的结果是main(){inti;inta[3][3]={1,23,4,5,6,7,8,9);for(i=0;i<3;i++)printf(M%dn,a[2-i][i]);}A)159B)753C)357D)591(30)现有如下程序段#include"stdio.h"main(){inta[5](6]={23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1);inti=0,j=5;printf(,'%d
139,,,*(&a[0][0]+2*i+j-2));}则程序的输出结果为A)21B)78C)23D)28(31)请选出正确的程序段A)int*p;scanf(M%d",p);B)int*s,k;*s=100;C)int*s,k;char*p,c;s=&k;p=&c;*p=,a,;D)int*s,k;char*p,e;s=&k;p=&c;s=p;*s=l;(32)下面程序段的运行结果是chara[]="lanuage",*p;P=a;while(*p!=,uz){printf(M%c,,,*p-32);p++;)A)LANGUAGEB)languageC)LAND)langUAGE
140(33)以下程序的输出结果是#includeinta[3][3]=[l,2,3,4,5,6,7,8,9,},*p;main(){p=(int*)malloc(sizeof(int));f(P,a);printf("%d
141",*p);free(p);)f(int*s,intp[][3]){*s=p[l][l];}A)1B)4C)7D)5(34)有以下程序voidf(int*q){inti=0;fbr(;i<5;i++)(*q)++;)main(){inta[5|={l,2,3,4,5},i;f(a);for(i=0;i<5;i++)printf("%d,",a[i]);)程序运行后的输出结果是A)2,2,3,4,5,B)6,2,3,4,5,C)1,2,3,4,5,D)2,3,4,5,6,(35)以下合法的字符型常量是A)'\xl3'B)'\081'C)'65'D)"
142"(36)有以下语句,则对a数组元素的引用不正确的是inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;A)a[p-a]B)*(&a[i])C)p[i]D)*(*(a+i))(37)有以下程序#includemain(){charp[20]={za','b','c','d'),q[]=Mabc\rO=MabcdeM;strcat(p,r);strcpy(p+strlen(q),q);printf("%d
143u,strlen(p));}程序运行后的输出结果是A)9B)6C)llD)7(38)在C语言中,变量的隐含存储类别是A)autoB)staticC)externD)无存储类别(39)以下程序的输出结果是main(){intc=35;printf(u%d
144,c&c);}A)0B)70C)35D)1(40)有以下程序
145#includemain(){FILE*fp;inti=20,j=30,k,n;fp=fdpen(Mdl.dat,,,,,wM);fprintf(fp,M%d
146M,i);fprintf(fp,M%d
147u,j);fclose(fp);fp=fopen(,'dl.dat,,;,rM);fscanf(fp,',%d%d';&k,&n);printf("%d%d
148\k,n);fclose(fp);}程序运行后的输出结果是A)2030B)2050C)3050D)3020二、填空题请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。(1)设一棵完全二叉树共有700个结点,则在该二叉树中有【1】个叶子结点。(2)常用的黑箱测试有等价类划分法、【2】和错误推测法3种。(3)数据库管理系统常见的数据模型有层次模型、网状模型和【3】3种。(4)通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为【4】(5)数据库保护分为:安全性控制、【5】、并发性控制和数据的恢复。(6)执行以下程序后的输出结果是【6】.main(){inta=10;a=(3*5,a+4);printf(na=%d
149M,a);}(7)以下程序的输出结果是171«#includemain(){printf(,'%d
150,,,strlen(,IBM
151O12\l\
152));}(8)已定义charch='$';inti=l,j;,执行j!=ch&&i++以后,i的值为【8】。(9)以下程序的运行结果是【9】o#includelongfib(intg){switch(g){case0:retum0;case1:case2:returnI;}return(fib(g-1)+fib(g-2));}main(){longk;k=fib⑸;printf(',k=%51d
153,,,k);}(10)下面程序的功能是输出数组S中最大元素的下标,请填空。main(){intk,p,s[]={h-9,7,2,-10,3);for(p=0,k=p;p<6;p++)if(s[p]>s[k])[10]
154printf("%d
155H,k);}(ID以下程序的功能是:求出数组x中各相邻两个元素的和依次存放到a数组中,然后输出。请填空。main(){intx[10],a[9]J;for(I=0;I<10;I++)scanf(M%d';&x[I]);for([11];I<10;I++)a[I-l]=x[I]+[12]for(I=0;I<9;I++)printfC'%dM,a[I]);printf(',M);)(12)设有以下程序,为使之正确运行,请在横线中填入应包含的命令行。(注:try_me()函数在a:\myfile.txt中有定义。)[13]main(){printfCAn");try_me();printf("
156M);}(13)以下程序的功能是建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为・1时,表示输入结束(链表头结点的data域不放数据,表空的条件是ph->next==NULL),请填空。#includestructlist{intdata;structlist*next;};structlist*creatlist(){structlist*p,*q,*ph;inta;ph=(structlist*)malloc(sizeof(structlist));p=q=ph;printf("Inputanintegernumber;entre-1toend:
157u);scanf(H%d",&a);while(a!=-l){p=(structlist*)malloc(sizeof(structlist));[14]=a;q->next=p;[15]=p;scanf("%dM,&a);}p->next='\0;return(ph);}main(){structlist*head;head=creatlist();}(1)D【解析】算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度是指执行这个算法所需要的内存空间。(2)D【解析】在结构化程序设计中,一般较优秀的软件设计尽量做到高内聚、低耦合,这样有利于提高软件模块的独立性,也是模块划分的原则。(3)C【解析】软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。它有3个方面的重要特征,即测试的挑剔性、完全测试的不可能性及测试的经济性。其中,没有测试的可靠性这一说法。(4)A【解析】对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应关系,
158对象之间通过传递消息互相联系,从模拟现实世界中不同事物彼此之间的联系,B)、C)、D)是正确的,时象的思想广泛应用于C++、Java等语言中,因此A)错误。(5)C【解析】队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作,另一端进行删除操作。其中,允许插入的一端称为队尾gar),允许删除的一端称为队苜(front)。队列具有先进先出的特点,它是按“先进先出”的原则组织数据的。(6)D【解析】依据后序遍历序列可确定根结点为c;再依据中序遍历序列可知其左子树由deba构成,右子树为空;又由左子树的后序遍历序列可知其根结点为e,由中序遍历序列可知其左子树为d,右子树由ba构成,如下图所示,求得该二叉树的前序遍历序列为选项D)。(7)A【解析】对于任何一棵二叉树T,如果其终端结点(叶子)数为nl,度为2的结点数为n2,则nl=n2+l,所以该二叉树的叶子结点数等于n+1。(8)C【解析】对于两个关系的合并操作可以用笛卡尔积表示。设有n元关系R和m元关系S,它们分别有p和q个元组,则R与S的笛卡儿积记为RXS它是一个m+n元关系,元组个数是pXq由题意可得,关系T是由关系R与关系S进行笛卡尔积运算得到的。(9)A【解析】两个实体之间的联系实际上是实体集间的函数关系,这种函数关系可以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概念模型便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因此,容易向关系模型、网状模型和层次模型等各种模型转换。(10)D【解析】数据处理是指将数据转换成信息的过程,故选项A)叙述错误;数据的物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结构,故选项B)叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性,对应存储文件中的字段,故选项C)叙述错误。(ll)C【解析】不论main函数在整个过程中的位置如何,一个C程序总是从main函数开始执行的。(12)D【解析】一个C语言的源程序(后缀名为.c)在经过编译器编译后,先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程序(后缀名为.obj),目标程序不可以直接运行,它要和库函数或其他目标程序连接成可执行文件(后缀名为.exe)后方可运行。(13)A【解析】C语言中,一个字符常量代表ASCH字符集中的一个字符,在程序中用单引号括起来作为字符常量,字符常量的的范围是0~127。由于字符常量用单引号括起来,所以选项B),C)错误,选项D)超过了字符常量的表示范围。(14)A【解析】本题考查C语言的综合基础知识。构成C程序的基本单位是函数,不论main函数在整个程序中的位置如何,•个C程序总是从main函数开始执行,C语言的函数定义都是互相平行、独立的,在定义函数时,一个函数内不能定义另一个函数。C函数定义的一般格式有两种:传统格式和现代格式。传统格式也称K&R格式,是早期编译系统使用的格式;现代格式又称ANSI格式,是现代编译系统使用的格式。(15)D【解析】本题中,scanf函数的格式控制没有空格,所以,对于选项A)、B),C),输入的第一个空格会作为字符赋值给变量cl,而不会被解释成分隔符。(16)D【解析】"&"是求址运算符是指变量说明符。选项A)、B)应改为scanf("%d",p);选项C)中指针变量p未指向--确定的内存单元,不能为其赋值,并且这样做很危险,建议不使用。(17)B【解析】本题中a的值为6,b的值为8,最后s的值为8,s*=s等价于s=s*s。(18)C【解析】本题考查简单的if…else语句。先执行条件if(a
159决定返回值的类型。(20)D【解析】C语言中,字符数据参加运算时,实际上是其ASCH码参与运算。大写字母的ASCH码比其对应的小写字母的ASCII码小32。因此大写字母转化为小写字母只需将其加上32即可。所以选项B)、C)都符合条件,因为变量c中存储的是大写字母,所以“c-A”的值一定小于26,故选项A)与选项C)的含义相同。⑵)D【解析】因为x的值为大于1的奇数,所以x除以2的余数等于I,因此,选项A)、C)中表达式的结果为真,不为0;对于选项B)来说,x除以2的商不会等于0;选项D)中表达式的结果为假,即等于0。(22)A【解析】因为变量的初始值分别为“k=5,n=0",所以程序第一次进入循环时,执行default语句,这时k=4,执行"case4:"这个分支,结果是"n=2,k=3",打印出2;程序然后进行第二次循环,这时"n=2,k=3",执行"case3:"这个分支,结果是“n=3,k=2",打印出3;程序进行第三次循环,这时"n=3,k=2",执行"case2:case4:"这两个分支,结果是"n=5,k=l",打印出5,这时因为n=5不满足n<5的循环条件,因此退出循环,程序运行结束,故输出结果为235。(23)B【解析】该题目应该根据循环体第一次和最后一次执行时的输出结果来决定哪一项是正确的。第一次进入循环时,n的值是9,循环体内,先经过n-运算,n的值变为8,所以第一次的输出值是8,由此可以排除选项A)和D)。由循环条件n>6可以知道,最后一次循环开始时,n的值应该为7,所以最后一次执行循环时,输出为6,由此可以排除选项C)。(24)A【解析】本题主要考查了字符输入输出函数getchar和putchar的使用。getchar函数用来从标准输入设备上读入一个字符,putchar(c)函数是将字符变量c中的字符输出到标准输出设备上,并且字符可以看作整数参与运算。(25)A【解析】本题考查了continue和break语句在循环语句中的作用。break语句的作用是结束本层循环,而continue语句的作用是结束本次循环直接进入到下次循环。(26)A【解析】本题利用多重for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。(27)B【解析】在main函数中,对f(l)和f(2)的值进行了累加。f(2)=f(l)+l=2最后,j的值为1+2=3(28)A【解析】本题主要考查的知识点是大写字母比它对应的小写字母ASCII码值小32,并且字符可以看作整数进行算术运算等操作。(29)B【解析】本题用循环的方法考查对数组概念的掌握。苜先,当i=0时,数组中的位置是a[2H0]=7,当然,如果用排除法,就不用考虑后面的循环,因为在4个选项中,第1个数为7的选项只有B)。本题执行第2次循环时,i的值为1,则printf函数中的数组指向为a[l][l]=5,依次循环,可求出答案。(30)A【解析】通过地址来引用二维数组,若有以下定义:inta[3][4],i,j;且当0
160大写字母。注意:如果一个字符数组用来作为字符串使用,那么在定义该字符数组时,数组的大小就应该比它将要实际存放的最长字符多一个元素,以存放V)'。(33)D【解析】本题考查了二维数组元素引用的方法。题中用动态存储分配函数malloc分配了一个int型数据长度大小的内存,然后指针p指向了这段内存,函数f()中对p所指向的数据进行了赋值,PUHI]为二维数组第二行第二列的元素,对应于实参a的元素5,所以输出结果为5。(34)B【解析】调用函数f()时,将数组a的地址传递给了指针q,此时q指向的就是数组a的第一个元素a[0]。在5次循环过程中,q始终指向a⑼,因此a⑼的值增加了5。最后的输出结果为”6,2,3,4,5”。(35)A【解析】C语言的字符常量是用单引号(即撇号)括起来的一个字符。除此之外,在C语言中还允许用一个"V开头的字符序列来表示字符常量。其中,形式“\ddd”表示1到3位8进制数所代表的字符;形式"\xhh”表示1到2位16进制数所代表的字符。在本题中,”13,表示回车符,是一个字符常量;、08「用8进制数所代表的字符,但形式不正确,因为8进制数所代表的字符中不会出现数字"8";’65不是一个字符,而是一个十进制数字;是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。(36)D【解析】本题考查数组指针的应用。选项D)第一层括号中为数组a中第i项元素的值,外面再加指针运算符没有意义。(37)B【解析】strcpy()函数的功能是将字符串q复制到从p[3]位置开始的存储单元,同时复制字符串结束标志10'至办[6]中。函数strlen()返回的是字符串中不包括VT在内的实际长度,故本题答案为B)(38)A【解析】auto变量:无static声明的局部变量。用auto作存储类别的声明时,可以不写auto,存储类别隐含确定为auto(自动存储类别),是动态存储方式。大多数变量是自动变量。用static声明的局部变量是静态局部变量。函数调用结束后静态局部变量占据的内存存储单元空间不释放,局部变量保留原值,下次调用时可以继续使用该值。用extern声明外部变量,外部变量即全局变量,可以用extern声明来改变全局变量的作用域,实际上,关键字“aut。"可以省略,auto不写则隐含确定为"自动存储类别”,属于动态存储方式。(39)C【解析】本题考查按位与因为1&1=1,0&0=0,所以任何数与自身按位与,结果仍为此数,不发生变化。(40)A【解析】本题中,最主要的是掌握几个有关文件函数的应用。函数名:fopen功能:打开一个文件调用方式FILE*旭;fp=fopen(文件名,使用文件方式);函数名:fprintf功能:传送格式化输出到一个文件中调用方式:fprintf(文件指针,格式字符串,输出表列);函数名:fclose功能:关闭一个文件调用方式:fclose(文件指针);函数名:fscanf功能:从磁盘文件执行格式化输入调用方式:fscanf(文件指针,格式字符串,输入列表)。二、填空题(1)[I]350【解析】完全二叉树中,设高度为n,则除h层外其它层结点数都到达最大,可以算出h=10,l至9层结点个数为2.9-1=511最后一层结点个数为703511=189个,189/2=95,除最后一层外共有
161结点2"(9-1)-95=161个,所以所有的结点个数为:189+161=350个。(1)[2]边界值分析法【解析】黑箱测试法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价类划分法、边界值分析法和错误推测法3种。(2)[3]关系模型【解析】数据库管理系统是位于用户与操作系统之间的一层系统管理软件,属于系统软件是用户与数据库之间的一个标准接口,其总是基于某种数据模型,可以分为层次模型、网状模型和关系模型。(3)[4]软件生命周期【解析】软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等活动。(4)[5]完整性控制【解析】安全性控制:防止未经授权的用户有意或无意存取数据库中的数据,以免数据被泄露、更改或破坏;完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作;并发控制:正确处理好多用户、多任务环境下的并发操作,防止错误发生;恢复:当数据库被破坏或数据不正确时,使数据库将其恢复到正确的状态。(5)[6]a=14【解析】本题考查的是表达式的优先级问题。先计算表达式3*5=15,再计算a+4=14,将数据14赋值给a,根据printf()函数内的输出格式控制串,最后的输出结果应为"a=14"o⑺【7】9【解析】本题的字符串中共有9个字符,它们分别是T、MlAn\'0\'1\2、\\\N,其中,
162"表示换行,N”表示反斜杠字符"V,所以本题的最后输出结果为9。(8)[8]1【解析】在执行逻辑表达式"j=!ch&&i++"时,首先判断j=!ch的值,因为"ch=$"不为0,所以"j=!ch=O”,编译系统便不再计算表达式“++"的值,i的值不变,仍为1。(9)[9]k=5【解析】本题主要考查了函数的递归调用方法。g=0或g=l或g=2是递归的终止条件,然后用回代的方法从一个已知值推出下一个值,直到计算出最终结果。(10)[10]k=p;【解析】为寻找数组中最大元素的下标,需先预设1个临时最大元素的下标,并顺序逐一考查数组的元素,当发现当前元素比临时最大元素更大时,就用当前元素的下标更新临时最大元素下标。宜至考查了数组的全部元素后,这临时最大元素下标就是数组的最大元素下标。通常预设的最大元素下标是数组的首元素下标,考查通常从首元素开始顺序向后继元素考查。程序中,存储临时最大元素下标的变量是k,变量p控制顺序考查的循环控制变量。当发现当前元素s[p]比临时最大元素s[k]更大时,应该用p更新k,所以在空框处应填入代码"k=p;"。(11)[11]1=1[12]x[I-l]【解析】对于10个数,相临的两个数相加取和,总共要进行9次加法运算,所以空14处应填入1=10相临的两个数相加取和,放在数组a中,x[0]与x[l]的和存放在a[0]中,所以空15处应填入(12)[13]#include【解析】本题考查了函数的存储分类的概念。如果没行特别说明,函数的存储范围是从定义函数的位置到文件的结尾,如果其他文件想使用这个函数,需要用#include文件包含命令将定义函数的文件包含进来。(13)[14]p->data[15]q【解析】本题考查的是链表这一数据结构对结构体变量中数据的引用。链表的特点是结构体变量中有两个域,一个是数据,另一个是指向该结构体变量类型的指针,用以指明链表的下一个结点。一、选择题在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分•(1)程序流程图中带有箭头的线段表示的是A)图元关系B)数据流C)控制流D)调用关系(2)结构化程序设计的基本原则不包括A)多态性B)自顶向下C)模块化D)逐步求精(3)软件设计中模块划分应遵循的准则是
163A)低内聚低耦合B)高内聚低耦合C)低内聚高耦合D)高内聚高耦合(4)在软件开发中,需求分析阶段产生的主要文档是A)可行性分析报告B)软件需求规格说明书C)概要设计说明书D)集成测试计划(5)算法的有穷性是指A)算法程序的运行时间是有限的B)算法程序所处理的数据量是有限的C)算法程序的长度是有限的D)算法只能被有限的用户使用(6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-l)/2的排序方法是A)快速排序B)冒泡排序C)直接插入排序D)堆排序(7)下列关于栈的叙述正确的是A)栈按“先进先出”组织数据B)栈按“先进后出”组织数据C)只能在栈底插入数据D)不能删除数据(8)在数据库设计中,将E-R图转换成关系数据模型的过程属于A)需求分析阶段B)概念设计阶段C)逻辑设计阶段D)物理设计阶段(9)有三个关系R、S和T如下:RBCDa0klb1nlSBCDf3h2a0kln2xlTBCD0kl由关系R和S通过运算得到关系T,则所使用的运算为A)并B)自然连接C)笛卡尔积D)交(10)设有表示学生选课的三张表,学生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)'UB)"C"C)'\xCC'D)'\072f(14)设变量已正确定义并赋值,以下正确的表达式是A)x=y*5=x+zB)int(15.8%5)C)x=y+z+5,++yD)x=25%5.0(15)以下定义语句中正确的是A)inta=b=0;B)charA=65+l,b='b';C)floata=l,*b=&a,*c=&b;
164D)doublea=0.0;b=l.l;(16)有以下程序段charch;intk;ch='a';k=12;printf("%c,%d,",ch,ch,k);printf("k=%d
165",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<='Z'B)!(kk>='A'llkk<=,Z')C)(kk+32)>='a'&&(kk+32)<='Z'D)isalpha(kk)&&(kk<91)(18)当变量c的值不为2、4、6时,值也为"真"的表达式是A)(c=2)ll(c==4)ll(c==6)B)(c>=2&&c<=6)ll(c!=3)ll(c!=5)C)(c>=2&&c<=6)&&!(c%2)D)(c>=2&&c<=6)&&(c%2!=l)(19)若变量已正确定义,有以下程序段inta=3,b=5,c=7;if(a>b)a=b;c=a;if(c!=a)c=b;printf("%d,%d,%d
166",a,b,c);其输出结果是A)程序段有语法错B)3,5,3C)3,5,5D)3,5,7(20)有以下程序#includemain(){intx=l,y=O,a=O,b=O;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;)case2:a++;b++;break;case3:a++;b++;}printf(na=%d,b=%d
167H,a,b);}程序的运行结果是A)a=l,b=OB)a=2,b=2C)a=1,b=1D)a=2,b=1(21)有以下程序#includemain(){intx=8;for(;x>0;x—){if(x%3){printf(H%d;',x-);continue;}printf("%d,",・・x);}
168}程序的运行结果是A)7,4,2,B)8,7,5,2,C)9,7,6,4,D)8,5,4,2,(22)以下不构成无限循环的语句或语句组是A)n=0;do{++n;}while(n<=0);B)n=0;while(l){n++;}C)n=10;while(n);{n-;}D)for(n=0,i=l;;i++)n+=i;(23)有以下程序#includemain(){inta[]={l,2,3,4},y,*p=&a[3];—P;y=*p;printf("y=%d
169H,y);}程序的运行结果是A)y=0B)y=lC)y=2D)y=3(24)以下错误的定义语句是A)intx[][3]={{0},{1},{1,2,3}};B)intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};C)intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};D)intx[][3]={1,2,3,4};(25)设有如下程序段chars[20]="Beijing",*p;p=s;则执行P=S;语句后,以下叙述正确的是A)可以用*p表示s[0]B)s数组中元素的个数和p所指字符串长度相等C)s和p都是指针变量D)数组s中的内容和指针变量p中的内容相同(26)若有定义:inta⑵[北,以下选项中对a数组元素正确引用的是A)a[2][!l]B)a[2][3]C)a[0][3]D)a[l>2][!l](27)有定义语句:char若要从终端给s输入5个字符,错误的输入语句是A)gets(&s[O]);B)scanf("%s",s+1);C)gets(s);D)scanf("%s",s[l]);(28)以下叙述中错误的是A)在程序中凡是以书”开始的语句行都是预处理命令行B)预处理命令行的最后不能以分号表示结束C)#defineMAX是合法的宏定义命令行D)C程序对预处理命令行的处理是在程序执行的过程中进行的(29)以下结构体类型说明和变量定义中正确的是A)tupedefstrct{intn;charc;}REC;RECtl,t2;B)tupedefstrct{intn;charc;};RECtl,t2;C)tupedefstrctREC;{intn=0;charc='A';}tl,t2;D)strct{intn;charc;}REC;RECtl,t2;
170(30)以下叙述中错误的是A)gets函数用于从终端读入字符串B)getchar函数用于从磁盘文件读入字符C)fputs函数用于把字符串输出到文件D)fwrite函数用于以二进制形式输出数据到文件(31)有以下程序#includemain(){ints[12]={l,2,3,4A3,2,l,l,l,2,3},c[5]={0},i;for(i=0;i<12;i++)c[s[i]]++;for(i=l;i<5;i++)printf(n%du,c[i]);printf("
171M);)程序的运行结果是A)1234B)2344C)4332D)1123(32)有以下程序#includevoidfun(int*s,intnl,intn2){intij,t;i=nl;j=n2;while(i172main(){inta[10]={l,2,3,4,5,6,7,8,9,0},k;fun(a,0,3);fun(a,4,9);fiin(a,0,9);for(k=0;k<10;k4-+)printf(',%d,\a[k]);printf(”
173");}程序的运行结果是A)0987654321B)432109876505678901234D)0987651234(33)有以下程序#include#includevoidfun(char*s[],intn){char*t;inti,j;fbr(i=O;istrlen(s[j])){t=s[i];s[i]:s[j];s[j]=t;})main(){char*ss[]={,'bcc",,'bbcc,,,,'xy",',aaaacc,',"aabccM};fun(ss,5);printf(M%s,%s
174M,ss[0],ss[4]);)程序的运行结果是A)xy,aaaaccB)aaaacc,xy(34)有以下程序#includeintf(intx){inty;if(x=Ollx==l)retum(3);y=x*x-f(x-2);returny;)main(){intz;z=f(3);printf(H%d
175",z);)程序的运行结果是A)0B)9C)6(35)有以下程序#includevoidfun(char*a,char*b){while(*a==/*')a++;while(*b=*a){b++;a++;}D)8C)bcc,aabccD)aabcc,bcc}main(){char*s="*****a*b****”,t[80];fun(s,t);puts(t);程序的运行结果是A)*****a*bB)a*bC)a*b****D)ab(36)有以下程序#include#includetypedefstruct{charname[9];charsex;floatscore[2];}STU;voidf(STUa){STUb={"Zhao"/m',85.0,90.0};inti;strcpy(a.name,b.name);a.sex=b.sex;
176fbr(i=0;i<2;i-H-)a.score|i|=b.score[i];)main(){STUc={,'Qianu/f',95.0,92.0};f(c);printf(,,%s,%c,%2.0f,%2.0f
177,',c.name,c.sex,c.score[0],c.score[1]);}程序的运行结果是A)Qian,f,95,92B)Qian,m,85,90C)Zhao,f,95,92D)Zhao,m,85,90(37)有以下程序#includemain(){FILE*fp;inta[10]={l,2,3},i,n;fp=fopen("dl.datM,nwM);fdr(i=0;i<3;i++)fprintf(fp,"%d",a[i]);fprintf(fp/,
178M);fclose(fp);fjp=fopen(Mdl.dat';nrH);fscanf(fp,"%dn);fclose(fp);printf(,'%d
179,,,n);)程序的运行结果是A)12300B)123C)1D)321(38)变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。若要求将a的高4位取反,低4位不变,所要执行的运算是A)aAbB)albC)a&bD)a«4(39)在C语言中,只有在使用时才占用内存单元的变量,其存储类型是A)auto和regisierB)extern和registerC)auto和stalicD)static和register(40)设有定义语句int(则以下叙述正确的是A)f是基类型为int的指针变量B)f是指向函数的指针变量,该函数具有一个int类型的形C)f是指向int类型一维数组的指针变量D)f是函数名,该函数的返回值是基类型为int类型的地址二、填空题请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。(1)测试用例包括输入值集和【I】值集。(2)深度为5的满二叉树有【2】个叶子结点。(3)设某循环队列的容量为50,头指针front=5(指向队头元素的前一位置),尾指针rear=29(指向队尾元素),则该循环队列中共有(31个元素。(4)在关系数据库中,用来表示实体之间联系的是[4]。(5)在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制语言中,【5】负责数据的模式定义与数据的物理存取构建。(6)已有定义:charc='';inta=l,b;(此处c的初值为空格字符),执行b=!c&&a;后b的值为[6]o(7)设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为【7】.
180(8)若有定义:intk;,以下程序段的输出结果是【8】.for(k=2;k<6;k++,k++)printf(M##%dM,k);(9)以下程序的定义语句中,x[l]的初值是[9】,程序运行后输出的内容是[10]o#includemain(){intx[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i;for(i=0;i<4;i++){p[i]=&x[2*i+l];printf(H%d\p[i][0]);}printf(H
181n);)(10)以下程序的输出结果是[11]o#includevoidswap(int*a,int*b){int*t;t=a;a=b;b=t;)main(){inti=3,j=5,*p=&i,*q=&j;swap(p,q);printf(M%d%d
182M,*p,*q);}(11)以下程序的输出结果是[12]o#includemain(){int2氏={2,4,6,8,10),*p;p=a;p++;printf(n%dn,*p);)(12)以下程序的输出结果是[13]»#includevoidfun(intx){if(x/2>0)fun(x/2);printf("%d”,x);}main(){fun(3);printf(AnM);)(13)以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并作为函数值返回。请填空。#include#defineN3typedefstruct{intnum;charnam[10];charsex;)SS;intfun(SSpersonf]){intI,n=0;for(I=0;I183,',n);}(14)以下程序的功能是从名为fileadat的文本文件中逐个读入字符并显示在屏幕上。请填空。#includemain(){FILE*fp;charch;fp=fopen([15]);ch=fgetc(fp);while(!feof(fp)){putchar(ch);ch=fgetc(fp);}putchar('
184');fclose(fp);)一、选择题(DC【解析】程序流程图是人们对解决问题的方法、思路或算法的一种描述。其中,图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。带箭头的线段在数据流程图中表示数据流。带箭头的线段在程序流程图中表示控制流。题中给出的选项中,在图元之间用带有箭头的线段表示图元关系。在模块之间用带有箭头的线段表示调用关系。构成程序流程图的基本图符及含义:一或表示控制流;口表示加工步骤;表示逻辑条件。(2)A【解析】结构化程序设计的原则包括:"自顶而下,逐步求精”的设计思想,”独立功能,
185单出、入口"的模块化设计等。多态性是面向对象程序语言的特征。(3)B【解析】模块划分应遵循的准则包括模块之间的耦合和内聚。一般来说,要求模块之间的耦合尽可能地低,即模块尽可能独立,要求模块的内聚程度尽可能地高,即高内聚、低耦合的原则。(4)B【解析】需求分析阶段的工作主要包括需求获取、需求分析、编写需求规格说明书和需求评审等四方面。产生的主要文档为软件需求规格说明书,可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进程的依据。(5)A【解析】算法具有6个特性:①有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的;②确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。③可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。④输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。⑤输出:一个算法有个或多个输出。(6)D【解析】在最坏情况下,快速排序、冒泡排序和直接插入排序需要的比较次数都n(n-l)/2,堆排序需要比较的次数为nlog2n。(7)B【解析】在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。即栈是按照"先进后出"或"后进先出”的原则组织数据的。(8)C【解析】数据库的逻辑设计分为:①将概念模型转换成一般的数据模型;②将一般的数据模型转换为特定的数据库管理系统所支持的数据模型。把概念模型转换成关系数据模型就是把E-R图转换成一组关系模式。(9)D【解析】在关系运算中,交的定义如下:设R1和R2为参加运算的两个关系,它们具有相同的度n,且相对应的属性值取自同一个域,则为交运算,结果仍为度等于n的关系,其中,交运算的结果既属于R1乂属于R2。(10)C【解析】"选课SC"表是"学生S"表和"课程C"表的映射表,主键是两个表主键的组合。(11)C【解析】在C语言中,注释可以加在程序中的任何位置,选项A)错误;C程序可以分模块写在不同的文件中,编译时在将其组合在一起,选项D)错误。C程序的书写风格很自由,不但一行可以写多个语句,还可以将一个语句写在多行中。所以正确答案选C)。(12)C【解析】C语言合法标识符的命名规则是:标识符只能由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。因为选项C)中的标识符的第一个字符为所以C)为本题的正确答案。(13)B【解析】在C语言程序中,用单引号把一个字符或反斜线后跟一个特定的字符括起来表示一个字符常量。选项A)、C)和D)为正确的字符常量。而选项B)是用双引号括起来的字符,表示一个字符串常量。所以正确答案为B)。(14)C【解析】求余运算符"%”两边的运算对象必须是整型,而选项B)和D)中"%"两边的运算对象有浮点整数据,所以选项B)和D)是错误的表达式。在选项A)中赋值表达式的两边出现相同的变量x,也是错误的。选项C)是一个逗号表达式,所以正确答案为C)。(15)B【解析】本题考查变量的定义方法。如果要一次进行多个变量的定义,则在它们之间要用逗号隔开。因此选项A)和C)错误。在选项C)中,变量c是一个浮点型指针,它只能指向一个浮点型数据,不能指向指针变量b。所以正确答案为B)。(16)D【解析】输出格式控制符%c表示将变量以字符的形式输出;输出格式控制符%d表示将变量以带符号的十进制整型数输出,所以第一个输出语句输出的结果为a,97;第二个输出语句输出的结果为k=12。所以选项D)为正确答案。(17)B【解析】C语言的字符以其ASCH码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在A和Z之间就可以了,选项A)和C)符合要求。函数isalpha用来确定一个字符是否字母,大写字母的ASCH码值的范围为65到90,所以如果一个字母的ASCII码小于91,那么就能确定它是大写字母。本题答案选B)。
186(18)B【解析】满足表达式(0=2&&<;<=6)的整型变量<;的值是2,3,4,5,6。当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和C!=5中至少有一个为真,即不论C为何值,表达式B)都为“真"。正确答案为B)。(19)B【解析】两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没能变化,程序输出的结果为3,5,3。所以正确答案为B)。(2O)D【解析】本题考查了switch结构的内容。C语言中,程序执行完一个case标号的内容后,如果没有break语句,控制结构会转移到下一个case继续执行,因为case常量表达式只是起语句标号作用,并不是在该处进行条件判断。本题程序在执行完内部switch结构后,继续执行了外部switch结构的case2:分支。最后a和b的值分别为2和1。(21)D【解析】本题中,程序每执行一次循环x的值减2,循环共执行4次。当x的值为8,4,2时,printf语句先输出x的值,再将x的值减1。而当x为6时,if语句条件成立,程序先将x的值减1,再将其输出。所以输出结果为选项D)。(22)A【解析】选项A)中变量n的值,先自加1,再进行循环条件判断,此时循环条件n<=0不成立,跳出循环。所以正确答案为A。(23)D【解析】在程序中指针变量p初始指向a[3],执行p减1后,p指向a[2],语句y=*p的作用是把a[2]的值赋给变量y,所以输出为y=3。正确答案为D)。(24)C【解析】本题考查的是二维数组的定义和初始化方法。C语言中,在定义并初始化二维数组时,可以省略数组的第一维的长度,但是不能省略第二维的长度。故选项C)错误。(25)A【解析】语句p=s的作用是把字符数组s的首地址作为初值赋给了指针变量p,并且使p指向了字符数组s的第一个字符s[0]。(26)D【解析】C语言中数组下标是从0开始的,所以二维数组2n3]的第一维下标取值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,选项D)表示是数组元素a[0][0]o所以正确答案为D)。(27)D【解析】在格式输入中,要求给出的是变易的地址,而D)答案中给出的s[l]是一个值的表达式。(28)D【解析】C语言中的预处理命令以符号#开头,这些命令是在程序编译之前进行处理的,选项D)的描述错误。故答案选D)。(29)A【解析】本题考查的是typedef的用法和结构体变量的定义方法。typedef可用于声明结构体类型,其格式为:typedefstruct{结构元素定义}结构类型;本题正确答案为A)。(30)B【解析】getchar函数的作用是从终端读入一个字符。⑶)C【解析】在for(i=0;i<12;i++)c[s[i]]++中,数组元素s[i]的值作为数组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2.所以输出结果为选项C)。(32)C【解析】函数fun(int*s,intnl,intn2)的功能是对数组s中的元素进行首尾互相调换。所以在主函数中,当fiin(aA3)执行完后,数组2[12]={4,3,2,1,5,6,7,8,9,0};再执行不(1出4,9),数组2[12]={4,3,2』,0,9,8,7,6,5};再执行£皿(40,9)后,数组412]={5,6,7,8,9,0,1,2,3,4}。所以正确答案为C)。(33)A【解析】函数fun(char*s[],intn)的功能是对字符串数组的元素按照字符串的长度从小到大排序。在主函数中执行fun(ss,5)语句后,*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"},ss[0],ss[4]的输出结果为xy,aaaacc。所以选项A)为1E确答案。(34)C【解析】函数intf(intx)是一个递归函数调用,当x的值等于0或1时,函数值等于3,其它情况下y=x2-f(x-2)。所以在主函数中执行语句z=f(3)时,y=3*3-f(3-2)=9-f(l)=9-3=6。所以正确答案为C)。(35)C[解析】在函数fun(char*&char*b)中,while(*a==*')a++的功能是:如果*a的内容为则a指针向后移动,直到遇到非3字符为止,退出循环进入下一个while循环,在
187while(*b=*a){b++;a++;}中,把字符数组a逐个字符的赋给字符数组b。所以在主函数中,执行fun(s,t)语句后,字符数组t中的内容为"a*b****”,所以选项C)为正确答案。(36)A【解析】本题考查的是函数调用时的参数传递问题。程序在调用函数f时,传给函数f的参数只是结构变量c在栈中的一个拷贝,函数f所做所有操作只是针对这个数据拷贝进行的修改,这些都不会影响变量c的值。(37)B【解析】在函数中首先把整型数组a[10]中的每个元素写入文件dl.dat中,然后再次打开这个文件,把文件dl.dat中的内容读入到整型变量n中,最后输出变量n的值。所以正确答案为B)。(38)A【解析】本题考查的是位运算的知识,对于任何二进制数,和1进行异或运算会让其取反,而和0进行异或运算不会产生任何变化,故本题答案选A)。(39)A【解析】在C语言中只有自动变量和寄存器变量在使用时才占用内存单元。所以正确答案为A)。(40)B【解析】本题考查的是指向函数的指针。语句int(*D(int);是对一个函数的声明,其中f是指向该函数的指针,该函数有一个整型的参数,函数返回值类型为整型。故答案选B)o二、填空题(1)[1]预期输出【解析】输入数据是指被测试函数所读取的外部数据及这些数据的初始值。预期输出是指:返回值及被测试函数所写入的外部数据的结果值。(2)[2]16【解析】在满二叉树中,叶子结点数目的计算公式为2n-l,其中n为树的深度。(3)(3124【解析】实现循环队列时,头指针指向第一个元素的前个空间,尾指针指向最后一个元素。因此,此时队列中6,7,8,.…29这二十四个空间存有元素,即队列中有29-5=24个元素。(4)[4]关系【解析】在关系数据库中,用关系(二维表结构)表示实体及其之间联系的模型称为关系数据模型。(5)[5]数据定义语言【解析】数据定义语言:负责数据的模式定义与数据的物理存取构建;数据操纵语言:负责数据的操纵,如查询与增、删、改等;数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢更等。(6)[6]1【解析】字符空格的ASCH码不为0,所以本题中表达式!c的值为0,b=0&&1的结果显然为0。(7)[7]3【解析】本题考查的是C语言逗号表达式的相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔的各表达式的值,整个逗号表达式的值等于其中的最后一个表达式的值。本题中,首先i被赋值为2,再自加1,最后i++的值计算为3。(8)[8]##2##4【解析】在for循环语句中,自变量k的自增表达式为k++,k++,这是一个逗号表达式,所以输出结果为##2##4。⑼【9[2(10]2468【解析】在主函数中根据整型数组x□的定义可知,x[l]的初值等于2。在for循环语句中,当i=0时,p[0]=&x[l],p⑼⑼=2;当i=l时,p[l]=&x[3],p[l][0]=4^i=2时,p[2]=&x[5],p[2][0]=6;当i=3时,p[3]=&x[7],p[3][0]=8。所以程序输出的结果为2468«(10)[11]35【解析】函数swap(int*ajnt*b)的功能是实现*丽*b中两个数据的交换,在主函数中调用sw叩(p,q)后,参形指针变量a和b分别指向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35。(11)[12]4【解析】在主函数中,语句p=a;p++使用指针,p指向数组a⑴,所以输出结果为4。(12)[13]13【解析】在主函数中调用fun(3)时,实参3传递给形参X。在fun(x)内,执行第一条语句,输出1,然后执行第二条语句,输出3,所以结果为13o(13)[14]person[I].sex【解析】在函数fun(SSperson。)对person口的性别进行判断,所以其正确的调用格式为person[I].sex。(14)[15]"filea.dat","r"【解析】fopen函数的调用方式通常为fopen(文件名,使用文件方式)。本题中要求程序可以打开filea.dat文件,并且是要读取文件中的内容。所以空白处应当填入"filea.dat","r".
1882012年3月全国计算机等级考试二级C语言上机题库第一套程序填空程序通过定义学生结构体数组,存储了若干个学生的学号、姓名和三门课的成绩。函数fiin的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大排序)。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。第一处structstudentt;第二处for(i=0;i0)程序修改给定程序MODI1.C中函数fun的功能是:在p所指字符串中找出ASCH码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向上顺序移动。/**found**/q=p+i;/♦♦found**/while(q>p)3程序设计学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写了函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。intfun(STREC*a,STREC*b,intl,inth)(inti,j=O;for(i=0;i=l&&a[i].s<=h)b[j-H-]=a[i];returnj;}第二套程序填空给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序连接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。第•处free(q);第二处q=p->next;第.三处q=q->next;2.程序修改给定程序MODI1.C中函数fun的功能是:用选择法对数组中的n各元素按从小到大的顺序进行排序。/**found**/P=j;Z**found**/p=i;3.程序设计
189请编写一个fun函数,它的功能是:求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。voidfun(intm,int*a,int*n)(inti;*n=0;for(i=7;i<=m;i++)if((i%7==0)ll(i%ll==0))a[(*n)++]=i;}第三套1.程序填空函数ftm的功能是:逆置数组元素是的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数组中数据的个数。第一处for(i=0;i;/**found**/n=n*8+*p-,0';3.程序设计学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写了函数fun,它的功能是:函数返回指定学号的学生数据,指定的学生号在主函数中输入,若没有找到指定学号,在结构体变量中给学号置空串,给成绩置作为函数值返回。(用于字符串比较的函数是strcmp)。STRECfun(STREC*a,char*b)(STRECc;Inti;c.num[0]=>\0';c.s=-l;for(i=0;i190给定程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号:若不存在值为ch的结点,函数值返回0.第--处while(p!=0)第二处if(p->data==ch)returnn;第三处k=fun(head,ch);3.程序修改给定程序MODI1.C中函数fun的功能是:删除p所指字符串的所有空白字符(包括制表符、回车符及换行符)。输入字符串时用'#,结束输入。/**found**/for(i=0,t=0;p[i];i++)/**found**/c[t]='\0';4.程序设计请编写一个函数fun,将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。voidfun(char*ss)(inti;fbr(i=1;i=,a,&&ss[i]<=,z,)ss[i]-=32;第五套1.程序填空给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。例如:当形参n的值为10的时,函数返回:9.6125588.第一处s=0;第二处for(i=l;i<=n;i++)第三处s=s+(2.0*i-l)*(2.0*i+l)/(t*t);2.程序修改给定程序MODU.C中函数fun的功能是:统计substr所指字符串在str所指字符串中出现伯次数。/**found**/fdr(i=O;str[i];i++)/**found**/if(substr|k+l]=>\0')3.程序设计请编写一个函数fun,它的功能是:根据以下公式求JI的值(要求满足精度0.0005,即某项小于0.0005时停止送代):程序运行后,如果输入精度为0.0005,则程序输出为3.14…。doublefun(doubleeps){doubles=l,t=lV3;intn=1;while(t>=eps)
191{s+=t;n++;t=t*n/(2.0*n+1);)return(s*2.0);}第六套1.程序填空给定程序中,函数fun的功能是:将形参s所指定字符串中所有的字母字符顺序前移,其他字母顺序后移,处理后字符串的首地址作为函数值返回。第一处t[j]=s[i]j4-F;第二处for(i=0;iscore[i]+=l;第三处returna;4.程序修改给定程序MOD11.C中函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放在一个字符串数组中。
192/**found**/char*fiin(char(*sq)[M])/**found**/returnsp;1.程序设计函数fun的功能是:将a、b中的两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的十位和千位上。#includevoidftin(inta,intb,long*c){*c=(b%10)*1000+(3/10)*100+(b/10)*10+a%10;}第八套1.程序填空函数fun的功能是:将形参观者工所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇书,则中间元素不动。第一处p=(n%2=0)?n/2:n/2+1;第二处a[i]=a[p+i];第三处a[p+i]=t;2.程序修改给定程序MODII.C中函数fun的功能是:把主函数中输入的三个数,最大的放在a中,最小的放在c中,中间的放在b中。/**found**/floatk;/**found**/if(*a<*c)3.程序设计学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写了函数fun,它的功能是:把分数最高的学生数据放在b所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。intfun(STREC*a,STREC*b)(inti,max=a[0].s,n=0;for(i=l;i193数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。第一处for(i=0;i194a[i]=a[i+l];3.程序设计学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写了函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止•个,函数返回分数最低的学生的人数。intfun(STREC*a,STREC*b)(inti,j=0,min=a[0].s;for(i=0;ia[i].s){j=0;b[j++]=a[i];min=a[i].s;}elseif(min=a[i].s)b|j++]=a[i];)returnj;)第十一套1.程序填空给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值,(规定所有数均为正数),将所指数组中大于平均值的数据移至数据的前部,小于等于平均数的移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。第一处av=s/N;第二处y[j++]=x[i];x[i]=-l;}第三处if(x[i]!=-l)y|j++]=x[i];2.程序修改给定程序MODI1.C中函数fun的功能是:读入一行英文文本行,将其中每个单词的第一个字母改成大写,然后输出次文本行(这里的“单词”是指由空格隔开的字符串)。/**found**/#include/**found**/upfst(char*p)3.程序设计程序定义了NxN的二级数组,并在主函数中赋值,请编写函数fun,函数的功能是:求出数组周边元素的平均值并作出函数值饭给主函数中的s。doublefun(intw[][N]){inti,j,n=O;doublesum=0;for(i=0;i195{sum+=w[i][O]+w[i][N-l];n+=2;)returnsum/n;}第十二套1.程序填空给定程序中,函数fun的功能是:将自然数1-10以及它们的平方根写到名为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。第一处fjprintf(fp,M%d%f
196w,i,sqrt((double)i));第二处fclose(fp);第三处if((fp=fopen(fname,"r"))==NULL)2.程序修改给定程序MODIl.C中函数fun的功能是:将n个无序整数从小到大排序。/♦♦found**/for(i=j+l;ivoidfun(inta,intb,long*c)(*c=(b%10)*1000+(a%10)*100+(b/10)*l0+(a/10);}第十三套1.程序填空给定程序中,函数fun的功能是:找出N*N矩阵中每列元素中的最大值,井按顺序•次存放于形参b所指的一维数组中。第一处b[i]=a[0][i];第二处if(b[i]197回所求出的素数的个数。函数fun中给出的语句仅供参考。#include#defineMAX100intfun(intlim,intaa[MAX]){inti,j,k=O;fbr(i=2;i<=lim;i++)(for(j=2;j<=(i/2);j++)if(i%j==O)break;if(j>(i/2))aa[k++]=i;}returnk;}第十四套1.程序填空函数fun的功能是进行字母转换。若形参ch中小写英文字母,则转换成相应的大写英文字母;若形参ch中是大写英文字母,则转换成相应的小写英文字母;并将转换的结果作为函数位返回。第一处if((ch>='a')&&(chv='z'))第二处returnch+'a'-'A'第三处returnch;2.程序修改给定程序MODI1.C中函数fun的功能是:给•维数组a输入任意四个整数并按下列的规律输出。例如输出1、2、3、4,程序输出一下方阵。123341223411234/**found**/voidfiin(int*a)/**found**/a[j]=a|j-l];3.程序设计请编写函数fun,函数的功能是:计算并输出给定整数n的所有因子(不包过1和n本身)之和。规定n的值不大于1000.intfun(intn)(ints=0,i;for(i=2;i198给定程序中,函数的功能是:把形参S所指字符串下标为奇数的字符右移到下一个奇书位置,最右边呗移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedg。第一处if(n%2==0)k=n-l;第二处c=s[k];第三处s[l]=c;1.程序修改给定程序MODI1.C中函数fun的功能是:求s=aa...aa—…一aaa—aa—a(此处aa…aa表示n个a,a和n的值在1至9沏)./**found**/longs=O,t=O;/**found**/t=t/10;2.程序设计请编写一个函数voidfun(char*tt,intpp[]),统计在tt所指字符串中‘a'至'z'26个小写字母各自出现在的次数,并依次放在pp数组中。voidfun(char*tt,intpp[])char*p=tt;inti;for(i=0;iv26;i++)PP(i]=O;while(*p){if(*p>='a,&&*p<=,z,)pp[*p-]+=l;p++;))第十六套1.程序填空人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中编号为空串。第1处STUfun(STU*std,char*num)第2处if(strcmp(std[i].num,num)==0)第3处return(std[ij);2.程序修改给定程序MODI1.C中函数fun的功能是:从s所指字符串中,找出与t所指字符串相同的子串的个数作为函数值返回。/**found**/r++;p++;Z**found**/
199if(*u=0)1.程序设计函数fun的功能是:将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指数组中。#include#includevoidfun(char*s,chart(])(inti,j=0;for(i=0;i=,0,&&s[i]<=,9,)n++;第3处*t=n;2.程序修改给定程序MODI1.C中函数fun的功能是:通过某种方式实现两个变量的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3,程序运行后a中值为3,b中的值为8./**found**/t=*x;*x=y;/**found**/return(t);3.程序设计请编写函数fun,函数的功能是:求出1到1000之间能被7或11整除,但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。#includeviodfun(int*a,int*n){inti;*n=0;for(i=7;i<1000;i++)if(((i%7)==0||(i%ll)==0&&(i%77)!=0)a[(*n)++]=i;}第十八套1.程序填空给定程序中,函数fun的功能是:有NxN矩阵,根据给定的m(m<=n)值,将每行元素中的值均右移m个位置,左边值为0.第1处for(i=0;i200给定程序MODI1.C中函数fun的功能是:计算并输出high以内最大的10个素数之和。high的值由主函数传给fun函数。/**found**/while((2<=high)&&(n<10))/**found**/yes=0;break;1.程序设计请编写函数fun,函数的功能是:利用一下所示的简单迭代方法求方程求方程:cos(x)-x=0的一个实根。Xg产cos(xn)迭代步骤如下:(1)取xl的初值为0.0;(2)x0=xl,把xl的值赋给x0;(3)xl=cos(x0),求出一个新的xl:(4)若x0-xl的绝对值小于0.000001执行步骤(5)否则执行步骤(2);(5)所求xl就是方程cos(x)-x=0的一个实根作为函数值返回。程序将输出结果为:Root=0.739058.floatfun()floatxO,x1=0.0;do{x0=x1;xl=cos(x0);}while(fabs(xO-xl)>0.000001);returnxl;)第十九套1.程序填空给定程序中,函数fun的功能是:将a所指的3x5矩阵中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。第1处fbr(p=l;p<=k;p++)第2处for(j=0;j201第二十套1.程序填空给定程序中,函数ftm的功能是:对形参s所指字符串中下标为奇数的字符ASCII码大小递增排序,并将排序后的下标为奇数的字符取出,形成一个新串。第1处1=七第2处for(j=i+2;j=num)/**found**/t=s/n3.程序设计请编写一个函数voidfun(chara[],charb[],intn),其功能是:删除一个字符串指定下标的字符。其中,a指向原字符串,删除指定字符后的字符串放在b所指的n中存入指定的下林。viodfun(chara[],charb[],intn)(strncpy(b,a,n);b|n]=0;strcat(b,a+n+l);)第二H^一套1.程序填空给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串右边的字符删去,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串小于M。第一处voidfun(char(*ss)[M],intk)第二处while(i202voidfun(char*a,intn)(inti=0,k=0;while(a[k]=='*')k++;if(k>n)(i=n;j=k;for(;a[j]!=0;j++)a[i++]=a|j];a[i]=0;})第二十二套1.程序填空给定程序中,函数fun的功能是:a所指4x3矩阵中第k行的元素与第。行元素交换。例如:有下列矩阵23456789101112若k为2,程序执行结果为789456123101112第一处voidfun(int(*a)[N],intk)第二处for(i=0;it[j+l])3.程序设计请编写函数fun,函数的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。voidfun(char*ss)(char*p=ss;inri=0;while(*p){if((i%2)&&(*p>=,a,&&*"="))*p-=32;
203P++;i++;})第二十三套1.程序填空给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数的返回值是1,失败是返回值是0.在复制的过程中,把复制的内容输出到终端屏幕。主函数源文件名放在变量sfname中,目标文件放在变量tfname中。第一处if((fs=fopen(source,''r"))==NULL)第二处while(!feof(fs))第三处fputc(ch,ft);2.程序修改给定程序MODIl.C中函数fun的功能是:将长整型中每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。/**found**/if(d%2==0)/**found**/s/=10;3.程序设计函数fun的功能是:将两位正整数a、b合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位依次放在变量c的十位和千位上,b中的十位和个位数依次放在变量c的百位和个位上。voidfun(inta,intb,long*c)(*c=(a%10)*1000+(b/10)*100+(a/l0)*10+(b%10);第二十四套程序填空程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。函数fun的功能是将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中的学号和姓名,最后输出修改后的数据。第一处b=a;第二处strcpy(b.name,"LiSi'j第三处for(i=0;i<3;i++)printf("%6.2f”,b.score[i]);2.程序修改给定程序MODI1.C中函数fun的功能是:从s所指字符串中删除所有小写字母c。请改正程序中的错误,使它能计算出正确的结果。/**found**/s[j++]=s[i];/**found**/s[j]='\0';3.程序设计假定输入的字符串中只包含字母和*号。请编写函数fbn,它的功能是:将字符串的前导*号全部移到字符串的尾部。函数fun中给出的函数仅供参考。voidfun(char*a){char*p,*q;intn=0;p=a;while(*p==,*'){n++;p++;}q=a;while(*p){*q=*p;p++;q++;
204fbr(;n>O;n—)*q++=,*,;*q='\0';}第二十五套1.程序填空用筛选法可得到2—n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下•个非0数,并从数表中删去该数的所有倍数,依此类推,直到所找的下一个数等于n为止。这样会得到一个序列:2、3、5、7、H、13、17、19、23……函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。第一处for(j=a[i]*2;j<=n;j+=a[i])第二处while(a[i]==0)第三处if(a[i]!=0)2.程序修改给定程序MODI1.C中函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。/**found**/y=l;/**foune**/d=a-i;3.程序设计请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。doublefun(intn)(inti;doublesum=0.0;for(i=l;i205<=9)进制数,并按高位到低位顺序输出。/**found**/aa[i]=m%k;/**found**/printf(u%dn,aa[i-l]);1.程序设计编写一个函数,从num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址。(注意:主函数中用****作为结束输入的标志,函数fun中给出的语句仅供参考)。fun(char(*a)[81],intnum,char**max)(inti,k=O,maxlen;maxlen=strlen(a[k]);for(i=l;imaxlen){maxlen=strlen(a[i]);k=i;))*max=a[k];}第二十七套1.程序填空函数fun的功能是计算f(x)=l+x-2/2!+3/3!-4/4!+的前n项和。若x=2.5,n=15时,函数值为1.917914。第一处f=l;第二处t*=(-l)*x/i;第三处f+=t;2.程序修改给定程序MODI1.C中函数fun的功能是:从三个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在没组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15.程序中i的值代表红球数,j代表白球数,k代表黑球数。/**found**/for(i=l;i<=3;i++)/**found**/if(k>=0&&k<=6)3.程序设计请编写函数fun,它的功能是:计算并输出下列多项式的值:sn=l+l/l!+1/2!+1/3!+1/4!+l/n!«例如:在主函数中从键盘给n输入15,则输出为:8=2.71828211注意:要求n的值大于1但不大于100。doublefun(intn)doubles=l'longt=l;inti;for(i=l;i<=n;i-H-){t=t*i;s+=l.0/t;}returns;}第二十八套1.程序填空给定程序中,函数fun的功能是:计算N*N矩阵的主对角线元素和方向对角线元素之和,并作为函数值返回。注意:要求先累加主对角线元素中的值,然后累加反响对角线元素的值。第一处sum=0;第二处sum+=t[i][i];第三处sum+=t[i][n-i-1];2.程序修改
206给定程序MODI1.C中函数fun和funx的功能是:用二分法求方程2x3-4x2+3x-6=0的一个根,并要求绝对误差不超过0.001。/**found**/doubler;/**found**/whi1e(fabs(n-m)>0.001)1.程序设计假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串中的第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用c语言提供的字符串函数。voidfun(char*a,char*h,char*p)(intj=0;char*q=a;while(*q&&q〈h)a[j++]=*q++;while(*h&&*p&&h
=0;j—)第三处t[j][N-l]=r[j];2.程序修改给定程序MODH.C中函数fun的功能是:计算s=f(-n)+f(-n+1)++f(0)+f(1)+f(2)+……f(n)的值。例如,当n为5时,函数值应该是:10.407143。/**found**/doublef(doublex)/**found**/returns;3.程序设计编写一个函数fun,它的功能是计算:s=根号下(In(1)+ln(2)+ln(3)+In(m))S作为函数返回,在C语言中可以调用log(n)求ln(n).log函数引用说明是:Doublelog(doublex)
207例如,若m的值为:20,fun函数值为:60506583。doublefun(intm){doubles=0.0;inti;for(i=0;i<=m;i++)s+=log(l.0*i);s=sqrt(s);returns;}第三十套1.程序填空函数ftin的功能是:反形参a所指数组中的奇数按原顺序依次存放到a[0]、a[l],a[2]……中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4,2、3、6、5、8、7,删除偶数后a所指数组中的数据为:9、1、3、5、7,返回值为5。第一处if(a[i]%2=l)第二处j++;第三处returnj:2.程序修改给定程序MODI1.C中函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。/**found**/t=a;a=b;b=t;/**found**/return(b);3.程序设计假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。voidfun(char*a)intj=0;char*p=a;while(*p){if(*p!='*')a[j++]=*p;p++;}a[j]=O;}第三十一套1.程序填空给定程序中,函数fun的功能是:在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串的个数。Ss所指字符串数组中共有N个字符串,且串长小于Mo
208第一处for(i=0;idata=x;第二处q二p;第三处q->next=s;2.程序修改给定程序MODI1.C中函数fun的功能是:计算正整数num的各位上的数字之积。/**found**/longk=l;/**found**/num/=103.程序设计请编写函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数返回。floatfun(float*a,intn){
209inti;floatave=0.0;for(i=0;i210第一处for(i=0;i211Don,tfound!
212w;1.程序修改给定程序MODI1.C中函数fun的功能是:从整数1到55之间,选出能被3整除、口有一位上的数是5的那些事,并且把这些数放在b所指的数组中,这些数作为函数值返回。规定,函数中al放个位数,a2放十位数。/**found**/a2=k/10;/**found**/returni;2.程序设计假定输入的字符串中只包含字母和*号。请编写函数ftm,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。voidfun(char*a){char*p=a;while(*p)p++;p-;while(*p==,*,)p-;p++;*p=0;)第三十五套1.程序填空给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。第一处*n=0;第二处p-p->next;第三处fun(head,&num);2.程序修改给定程序MODI1.C中函数fun的功能是:求出s所指字符串最后一次出现的t所指字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值NULL,/**found**/a=NULL;/**found**/if(*r==*p)3.程序设计函数fun的功能是:将s所指字符串中除了下标为偶数,同时ASCII指也为偶数的字符外,其余的全部都删除:串中剩余字符所形成的一个新串放在t所指的数组中。voidfun(char*s,chart[])(inti,j=0;for(i=0;i213转换成'2,转换成T,……’9,转换成,0,;若是其他字符则保持不变,并将转换后的结果做函数值返回。第一处charfun(charch)第二处if(ch>='O'&&ch〈='9')第三处return'9'-(ch-'O');1.程序修改给定程序MODIl.C中函数fun的功能是:将p所指字符串中所有字符复制到b中,耍求复制第三个字符之后插入一个空格。/**found**/b[k]=*p;/**found**/b[k++]='♦;2.程序设计N名学生的成绩已在主函数中放入一个带头结点的链表结构中,h指向链表的头结点。请编写函数fun,它的功能是:求出平均分,有函数值返回。doublefun(STREC*h)STREC*p=h->next;doubleav-0.0;intn=o;while(p!=NULL){av=av+p->s;p=p->next;n++;}av/=n;returnav;}第三十七套1.程序填空函数fijn的功能是:把形参a所指数组中的偶数按原顺序依次存放a[0]、a[l],a[2]……中,把奇数从数组中删除,偶数个数通过函数值返回。第一处if(a[i]%2=0){第二处a[j]=a[i]:j++;第三处returnj;2.程序修改给定程序MODI1.C中函数firn的功能是:按以下递推公式求函数值。例如,当给n输出5时,函数值为18;当给n输入3时,函数值为14./**found**/fun(intn)/**found**/if(n==l)3.程序设计假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。voidfun(char*a,intn)(char*p=a;intj=0;whi1e(*p)p++;p-;
214while(*p==,*')p一;p++;while(j215给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。第一处*av=s/N;第二处d=*av-x[i];j=i;}第三处returnx[j];1.程序修改给定程序MODILC中函数fun的功能是:根据整型形参n计算如下公式的值。例如:若n=10,则应输出:0.617977./**found**/floatfun(intn)/**found**/for(i=2;i<=n;i++)2.程序设计程序定义了NxN的二维数组,并在主函数中自动赋值,请编写函数fun,它的功能是:使数组右上三角元素中的值乘以m。intfun(inta[][N],intm)(inti,j;for(i=0;i216整除的自然数之和。K的值由主函数传入,若K的值为500.则主函数为4622。/**found**/if((k%13==0||(k%17==0))/**found**/}1.程序设计请编写函数fun,它的功能是:求小于形参n同时能被3和7整除的所有自然数之和的平方根,并作函数的返回值。doublefun(intn)(doublesum=0.0;inti;for(i=21;i<=n;i++)if((i%3==0)&&(i%7==0))sum+=i;returnsqrt(sum);}第四十二套1程序填空给定程序中,函数fun的功能是:将不带头结点的单向链表结点数据域中的数据从小到大排序。即若原链表节点数据域从头到位的数据为10、4、2、8、6,排序后链表结点数据域从头至尾的数据为2、4、6、8、10.第1^tbq=p->next;第2处while(q)第3处p=p->next;2程序修改给定程序MODI1.C中函数fun的功能是:将s所指字符串中的字母转换为按字母顺序的后续字母(但Z转化成A,z转换为a),其它字符不变。/**found**/while(*s)/**found**/s++;3程序设计voidfun(int*w,intp,intn)(inti,j=O,b|N];for(i=p+1;i217给定程序中,函数fun的功能是:判定形参卿指的N乘以N(规定N为奇数)的矩阵是否是“幻方”,若是,函数返回值是1;不是,函数返回值为0.“幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。第1处row=colum=0;第2处if((row!=colum)||(row!=ml))retum0;第3处return1;2程序修改给定程序MODILC中函数fun的功能是:根据整型形参m计算如下公式的值。/**found**/t=t-1.0/i;/♦♦found**/returnt;3程序设计请编写一个函数,函数的功能是:删除字符串中所有的空格。intfun(char*str)(char*p=str;inti=0;while(*p){if(*p!=,9)str[i++]=*p;P++;)str[i]=O;)第四十四套1程序填空给定程序中,函数fun的功能是:将N乘以N矩阵中元素的值按列右移一个位置,右边被移出矩阵的元素绕回左边。第1处for(i=0;i218{f=fO+fl;fO=fl;fl=f;}while(fnext;第2处if(p==0)return;第3处p=q;q=r;2程序修改给定MODIl.Cftin函数的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。/**found**/E;/**found**/if(*u=0)3程序设计请编写函数ftm,函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串,函数fun中给出的语句提供参考。voidfun(chara|M||N]),char*b){inti;*b=0;for(i=0;i=xa)3程序设计编写函数ftm,其功能是:根据以下公式求p的值,结果由函数值带回。m与n为两个正整数且要求
219m>n。p=m!/(n!*(m-n)!)floatfun(intm,intn)(floatp;p=1.0*jc(m)/jc(n)/jc(m-n);returnp;)第四十七套1程序填空函数fun的功能是:计算取)=1+乂中/2!+//3!-“4!直到Ix7n!|<10-6若x=2.5,函数值为:1.917915c第1处t=x第2处第3处while(fabs(t)>=1e-6)2程序修改给定程序MODI1.C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。/**found**/for(i=l;i<=y;i4-+)/**found**/t=t%1000;3程序设计请编写函数ftm,其功能是:计算并输出当x<0.97时下列多项式的值,直到Sn-Sn-1<0.000001为止。doublefun(doublex)(intn=1;doublesn=l;doublexn=l,xnl=0;while(fabs(xn-xnl)>=0.000001)(xn=xn*x*(0.5-n+l)/n;n+=l;sn+=xn;)return(sn);)第四十八套1程序填空给定程序中,函数fun的功能是:计算出带有头节点的单向链表中各节点数据域中值之和作为函数值带回。第1处s+=>>data;®2^tp=p->next;
220第3处printf("
221sum=%d
222”,fun(head));2程序修改给定程序MODILC中函数fun的功能是:将s所指字符串中出现的与tl所指字符串相同的子串全部替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求tl和t2所指字符串的长度相同。/**found**/while(*r)/**found**/*a=*r;a++;r++;3程序设计函数fun的功能是:将s所指字符串中下标为偶数的字符删除,申中剩余字符形成的新串放在t所指数组中。voidfiin(char*s,chart[])(inti,j=0:for(i=1;i=len)strcpy(t,s);第2处t[j++]=s[i];第3处t[j]=O;2程序修改给定程序MODI1.C中函数fun的功能是:找出一个大于形参m且紧随m的素数,并作为函数值带回。/**found**/if(i%k==0)/**found**/if(k>=i)3程序设计编写函数fun,它的功能是:求出能整除形参x切不是偶数的各整数,并按从小到大的顺序放在PP所指的数组中,这些除数的个数通过形参n返回。voidfun(intx,intpp[],int*n)(inti;*n=0;for(i=l;i<=x;i++)
223if((x%i==0)&&(i%2))pp[(*n)++]=i;第五十套1程序填空给定程序中,函数fun的功能是:将形参s所知字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。第1处p|j]=s[i];j++;}第2处for(i=0;i\0';
2243程序设计函数fun的功能是:将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。viodfun(char*s,chatt[])(inti,j=0;fbr(i=1;iscore[i])below[j++]=score|i];returnj;)第五十三套1程序填空给定程序中,函数fun的功能是将形参指针所指结构体数组中的三个元素按num成员进行升
225序排列。第1处voidfun(PERSON*std)第2处PERSONtemp;第3处fun(std);2程序修改给定程序MODILC中函数fun的功能是:将m(1WmW10)个字符串连接起来,组成一个新用,放入pt所指存储区中。/**found**/intk,q,i;/**found**/pt[i]=str[k][i];3程序设计程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]),函数的功能是:使数组左下三角元素中的值全部置成0。intfun(inta[][N])(inti,j;for(i=0;ia[i].s){j=>;min=a[i].s;}
226*s=a[j];第五十五套1程序填空给定程序中,函数fun的功能是:判断形参s所指字符串是否是“回去"(Palindrome)若是,函数返回值为1;不是,函数返回值为0,“回文”是正读和反读都是一样的字母串(不区分大小写字母)。第1处1p=s;第2处lp++;rp--;}第3处if(lp