2008级《高级语言程序设计》试题A卷-2009-06-22

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

15791756007302009年7月1日第1页共5页武汉大学计算机学院2008-2009学年度第2学期2008级《高级语言程序设计》期末考试试卷A卷答案姓名:学号:专业:说明:开卷考试,答案请全部写在答题纸上,写在试卷上无效。未经主考教师同意,考试试卷、答题纸、草稿纸均不得带离,否则视为违规。题号一二三四五总分总分1030203010100一.单项选择题:(共10分,每个小题1分)1.以下说法错误的是。A.三种基本结构的共同点是“单入口单出口”。B.goto语句可以在程序中自由跳转。C.结构化程序设计设计三种基本结构的目的是增加程序的可读性和可维护性。D.结构化程序设计中划分模块的原则是模块“相对独立,功能单一”。2.在C语言中,形参的缺省存储类是。A.staticB.registerC.externD.auto3.设有如下宏定义:#definetest(t)t-4%t则表达式test(2)*test(5)的值为。A.-12B.-2C.2D.04.执行语句b=(a=2*10,a=a=4,(a=3*5,a*4),a+5);后,a和b的值分别是。A.24,29B.20,25C.15,25D.15,205.设有变量定义:intp=4;chark='a';则执行表达式((k+=2)='c')||((p*=3)10)后,变量k和p的值分别为______。A.a和4B.a和12C.c和4D.c和126.表达式076432&~01777的结果是____________。A.432B.0432C.76000D.0760007.执行以下程序段后,变量m的值为。inta[8]={4,3,2,1,7,6,5,4};intm,*p;p=&a[0];m=(*p+1)+(p[2])*(p[7]);A.13B.11C.16D.198.设有变量定义:chara[30];longint*p=(longint*)(a+3);则以下与表达式p+4等价的是。A.&a[7]B.a+16C.a+19D.a+289.对于以下字符串,strlen(s)的值为:(1)chars1[]=\t\\\\\\0abc\n;15791756007302009年7月1日第2页共5页(2)chars2[]=\x69\33\n;(3)chars3[]=\t\082\n;A.4、3和1B.4、3和3C.16、3和3D.16、3和1010.表达式2.5+7%2-5/2*2的结果为______。A.3.5B.1.5C.-0.5D.-1.5二.程序阅读与分析(共30分,每个小题10分)11.阅读以下程序,请写出程序运行结果(10分)/*源程序:A-11.C*/#includestdio.h#includestdlib.hintmain(void){intf0=2,f1=3,f2;intm=3;printf(%d\t%d\t,f0,f1);do{f2=f0+f1;printf(%d\t,f2);f0=f1;f1=f2;m++;}while(m=10);return0;}/*endmain*/12.请指出以下语句或语句段的错误,并改正错误(10分,每个小题2分)a)doublex[10];inta;for(a=0;a=10;a++)scanf(%lf,&x[a]);b)longs=1;intn=1;while(n=10)s*=n;n++;c)char*s;gets(s);d)switch(c){case'a':printf(Thenumberisa\n);case'A':printf(ThenumberisA\n);default:printf(ThenumberisnotaorA\n);break;}e)charstr[10];gets(str);执行程序时从键盘输入:C□language↙(说明:□表示空格键,↙表示回车键)13.现有递归函数product如下所示:longintproduct(inta[],intn){intk;if(n==1)k=0;elsek=product(&a[1],n-1);returna[0]+k;}/*endproduct*/假设有定义:intprime[]={2,3,5,7,11,13,17,19,23,29,31,37,41};15791756007302009年7月1日第3页共5页请问:调用函数product(prime,5)后,函数的返回结果是什么?请分析并说明函数product的功能。三.子程序实现题(每小题各10分,共20分)14.设计一个函数belongSet(s,c),该函数用来判断元素c是否出现在集合s中;如果c是集合s的元素,返回true(1);否则,返回false(0)。说明:其中,s为字符数组,表示一个集合,其全集为大小写字母(52个字母)构成的集合。c为字符型变量,取值为大小写字母(52个字母)之一。例如:s表示集合{‘a’,‘x’,‘D’,‘Z’},c表示元素’x’。则函数调用belongSet(s,c);返回值为整数1。请首先确定并简要说明字符数组s表示由52个字母元素构成集合的方法。15.设计一个函数displayBase_7(number),该函数用来将无符号十进制整数number转换为无符号七进制整数形式并输出在显示器上;说明:number为需要转换的十进制整数;转换后的七进制数据仅在显示器上显示,无需返回;例如:执行displayBase_7(23);语句之后,显示结果为32。四.程序测试与分析(每小题各10分,共30分)16.以下语句段的功能是:打开文件d:\student.datif((fp=fopen(student.dat,rb))==NULL){printf(文件%s打开错误!\n,filename);exit(1);}程序实际运行时,出现“文件student.dat打开错误”的执行结果。请分析并说明上述语句段出现打开文件错误的可能原因;并说明如何改正错误。17.假设main函数中已经创建了如图1所示的单链表:其中,链表定义如下所示:structnode{intdata;structnode*next;}*head;structnode为链表结点的数据类型,head为链表头指针。函数print_insert()的功能是:遍历链表head,将每个节点数据值增加12,然后在链表head头部插入一个取值为n的新结点;该函数返回值为插入结点后链表的结点个数。代码如下所示:intprint_insert(structnode*head,intn){intk=0;structnode*p=head,*new;2030NULLhead图1函数调用前链表示意图15791756007302009年7月1日第4页共5页while(p!=NULL){p-data+=12;p=p-next;k++;}new=(structnode*)malloc(sizeof(structnode));if(new!=NULL){new-data=n;new-next=head;head=new;k++;}returnk;}/*endprint_insert*/执行以下函数调用语句print_insert(head,11);请问:(1)请用图示的方法说明执行上面的函数调用语句之后链表的结果。(2)执行上面的语句,分析是否真的可以在链表head中插入取值等于11的结点?如果不能插入取值为11新结点,请说明出错的原因,并改正错误。18.根据以下公式计算π的值:......114947454344程序A-18.C的功能是:显示用几项相加可以等于3.1415为止:/*源程序:A-18.C*/#includestdio.h#includestdlib.h#includemath.hintmain(void){doublen=1,pi=4,sign=-1;intm=1;do{n=sign*(fabs(n)+2);pi+=4/n;m++;sign*=-1;}while(pi!=3.1415);printf(m=%d,pi=%f\n,m,pi);return0;}/*endmain*/执行程序A-18.C时,程序出现无限循环,现象如下所示:黑屏、无任何显示、不能输入任何数据,键入CTRL_break可以强制终止程序执行状态。请问:程序A-18.C出现哪种错误?请分析出错的原因,并改正错误。五.算法设计(任选一题完成,共10分)说明:A.19~20题中仅需任意选做一题。完成多个题目,则以答卷纸上写在前面的一个题目为准评分。15791756007302009年7月1日第5页共5页B.本题目以描述算法思路为主;不必完整写出函数程序的代码,完整代码将不作为判分依据。C.分析算法思路,说明算法中的重要数据类型的定义;D.说明算法中的模块划分;各模块的功能、形式参数、函数返回值说明;并用伪代码、流程图或其它方法描述子程序的执行过程。19.编程完成队列操作:队列是以先进先出顺序访问的线性列表。队列的两个基本操作:入队,表示插入一个新数据到队列中,新数据放在队列尾部。出队,从队列首部取走一个数据。要求用数组模拟队列,编程实现入队和出队的操作,入队和出队数据都为整数。输入0表示执行出队操作,输入-1表示程序执行结束,其余整数表示执行入队操作。例如队列内容为“1、3、5”,则将数据7入队后,队列内容变为“1、3、5、7”。而执行一次出队操作之后,出队数据为1,队列内容为“3、5、7”。请注意:队列为空时,执行出队操作错误。队列为满时,执行入队操作错误。具体要求如下:A.请用图示的方式说明如何用数组表示一个队列;B.给出用数组表示队列的C语言定义形式;C.给出入队函数qstore()和出队函数qretrieve()的函数原型,说明传入和传出信息的方式;并简要描述这两个函数的算法。20.编写程序完成文件合并操作:假设有两个数据文件price1.dat和price2.dat,其中分别存入了各90个长整型的数据。编程实现对文件price1.dat和price2.dat和合并,要求按照数据从小到大的顺序合并,结果存放到文件result.dat中。限制条件:编程中允许使用的内存空间限制在100个长整型数据范围之内。具体要求如下:A.请说明利用100个长整型数据组成的数据完成两个数据文件price1.dat和price2.dat的排序和合并的基本思路。B.说明程序中划分多少模块?并给出每个模块的原型;C.简要描述每个模块的算法。

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功