武汉大学计算机学院
2006-2007学年度第2学期2006级 《高级语言程序设计》期末考试试卷A卷
姓名: 学号: 专业:
说明:开卷考试,答案请全部写在答题纸上,写在试卷上无效。 未经主考教师同意,考试试卷、答题纸、草稿纸均不得带离,否则视为违规。 题号 总分 一 16 二 24 三 15 四 30 五 15 总分 100 一. 单项选择题:(选择最合适的答案填空,每小题2分,共16分)
( )1、在执行以下程序时,从键盘上输入9,则该程序输出结果是__________。
#include
scanf(\ if(n++<10)
printf(\ else
printf(\ return 0; }
A、8 B、9 C、10 D、11
( )2、表达式0156637&~0777的结果是____________。
A、0156000 B、156000 C、0637 D、637
( )3、假设有如下定义:int m=1,n=1; 则执行表达式(m=’5’<’3’)&&(n=’7’>’9’)后,
m和n的值分别是_____________________。 A、1和1 B、1和0 C、0和1 D、0和0
( )4、表达式-11%3+7/2的结果是____________。 A、5.5 B、5 C、1.5 D、1 ( )5、设有如下宏定义:
#define BOOK(x) 8-x
则执行赋值语句 v=BOOK(2)*BOOK(4); /*v为int型变量*/
后,变量v的值为 。 A、-12 B、0 C、24 D、44 ( )6、设有如下定义:
int a[6][4]; int (*p)[4]; p=a;
则与表达式*p+3等价的选项是_________。
A、a[0][3] B、&a[0][3] C、a[3][0] D、&a[3][0] ( )7、假设有以下定义:
static char *a=”h\\te\\nY\\0W\\0o\\b”;
114199249.doc 2007年7月11日
第 1 页 共 6 页
则表达式strlen(a)的结果为________。 A、15 B、10 C、7 D、5 ( )8、假设有如下定义:
int a=1,b=2,c=3,u,v;
执行下面语句组后,整型变量u和v的值分别为_____________。 u = a ? b : c;
v = (a = 2) ? b + a:c + a; A、3和3 B、3和4 C、2和3 D、2和4 二. 程序阅读与分析(每小题8分,共24分)
9、分析下面程序执行流程,指出程序执行结果。 #include
case 2: printf(“&”);
}
return 0;
}
10、下面程序完成的功能如下:输入一个由10个整数组成的数组a,将该数组下
标值为偶数的元素由小到大排序,将下标值为奇数的元素由大到小排序。 例如,输入数组a为{8,1,6,3,4,5,2,7,0,9},执行下面程序后,数组a为{0,9,2,7,4,5,6,3,8,1}。
请在空白处填写合适内容以正确完成整个程序。 #include
{ (1) a[10],n; int i,j,t; for(i=0;i<10;i++) scanf(\ (2) ); for(i=0;i<7;i+=2) for(j= (3) ;j<10; (4) ) { if( (5) ) { t=a[i]; a[i]=a[j]; a[j]=t; } if( (6) ) { t=a[i+1]; a[i+1]=a[j+1]; a[j+1]=t;} } for(i=0; (7) ;i++) printf(\ (8) ); return 0;
114199249.doc 2007年7月11日
第 2 页 共 6 页
}
11、分析以下程序执行流程,请指明错误之处,并简要说明错误原因,并给出修
改意见。(共4个错误)
/*输入多个整数,以0作为结束标记,将这些整数存入到Exam.dat文件中*/ /*然后将这些数据从Exam.dat文件中读出来,显示到显示器上*/
#include
File *fp;
if((fp = fopen(\ { printf(\ exit(1); } do
{ scanf(\
fprintf(fp,”%d ”,p); }while(p!=0); fclose(fp);
if((fp = fopen (\ { printf(\ exit(1); } do
{ fscanf(fp,\ printf(\ }while(p!=0); fclose(fp); return (0); } 三. 程序测试与分析(每小题5分,共15分)
12、以下程序计算-32768-3,执行以下程序,得到如下所示的运行结果,请分析结
果为什么不是-32771?并指出该如何修改。 #include
运行结果:
114199249.doc 2007年7月11日
第 3 页 共 6 页
a=-32768,b=32765
13、上机调试下面的程序,在编译过程提示有如下语法错误“too many arguments
to function in max(int,int)”。分析下面程序,说明出现上述语法错误的原因。并指出用下划线标注的语句的作用是什么?
#include
#else int max(int x, int y, int z) { int k;
k=x>y?x:y;
return (z>k)?z:k; }
#endif int main() { int a,b,c;
scanf(“%d%d%d”,&a,&b,&c); printf(“max=%d\\n”,max(a,b,c)); return 0; }
14、下面的函数的功能是从一个整数组成的单链表中删除指定整数n的节点。
#include
int deletelink (struct node *phead,int n) { struct node *p,*q; p=phead; while(p->data!=n&&p->next!=NULL) { q=p; p=p->next; } if(p->data==n) /*找到*/ { if(p==phead) /*被删除的结点是链头*/ phead=p->next; else /*被删除的结点不是链头*/ q->next=p->next; free(p); return (1); } else
114199249.doc 2007年7月11日
第 4 页 共 6 页
return (0); }
假设有下图所示的单链表:
head 3 4 5 / 现在要求从上图所示的单链表中删除数据值等于3的节点,通过执行函数调
用deletelink(head,3)来完成该删除操作。但是函数调用结束后,该链表仍然和上图一样,整数3并没有从链表中删除,请分析出错的原因,并给出修改意见。
(提示:被删除的节点是单链表中的第一个节点。)
四. 程序实现题(每小题15分,共30分)
15、下面程序完成的功能如下:输入一个整数,要求按原来的规律将它插入一个已
经排好序的数组中。分析该程序的执行流程,写出该程序的流程图。 #include
{ int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j; printf(\ for(i=0;i<10;i++) printf(\ printf(\
printf(\ scanf(\ end=a[9];
if(number>end) a[10]=number; else
{ for(i=0;i<10;i++) { if(a[i]>number) { temp1=a[i]; a[i]=number; for(j=i+1;j<11;j++) { temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } }
for(i=0;i<11;i++)
printf(\
114199249.doc 2007年7月11日
第 5 页 共 6 页
return 0;
} 16、设计一个函数count(s, t); 其中s为字符串,t单个字符。如果t为大小写字母,
则函数count统计字符串s中t对应的字母(大小写字母均统计在内)出现的次数。例如,count(“aAdgfASa”,’a’)函数调用的返回值为4。如果t为其他字符,则直接统计该字符出现的次数。
五. 算法设计(选做一题15分)
说明:
? 仅需任意选做一题。
? 分析思路,说明算法中的重要数据类型的定义;
? 说明算法中的模块划分;各模块的功能、形式参数、函数返回值说明;并用伪代码、
流程图或其它方法描述子程序的执行过程; ?
不必完整写出函数程序的代码,完整代码将不作为判分依据
17、某家研究机构记录北极点一年中每天正午的室外气温(单位oF),正午的室
o
外气温超过32F则认为该天为高温天气。要求每月将该月每天的正午的室外气温输入到计算机中处理。根据月份不同,则输入数据个数可能是28、29、30、31个。编写程序统计每月高温天气的天数,以及每月的平均气温。 具体要求如下 A、说明采用C语言中哪种数据结构保存该月中每天的气温数据;
B、说明程序中划分多少模块?并给出每个模块的原型; C、描述每个模块的算法。
18、一个有理数就是一个分数,它包含分子和分母两个组成部分,如果采用浮点
数表示有理数将难以得到满意的高精度的结果。编写程序完成两个有理数的加法运算。例如3/2+3/4=(3*4+3*2)/(2*4)=9/4。 具体要求如下 A、说明采用C语言如何表示一个有理数;
B、说明程序中划分多少模块?并给出每个模块的原型; C、描述每个模块的算法。
114199249.doc 2007年7月11日 第 6 页 共 6 页