1、 第 1 页(共 10 页) 哈尔滨工业大学(威海) 2009 学年 春 季学期高级语言程序设计 A 试卷考试形式(开、闭卷): 闭 答 题时间: 105 (分钟) 本卷面成 绩占课程成绩 70 % 题号一 二 三 四 五 六 卷 面总 分平 时成 绩课 程总 成 绩分数一、单项选择题(本题共 20 分,每小题 2 分)注意:请把答案填入下面框中,答在其它处无效。1. 下面程序段的运行结果是 。char s20,*sp=“morning”;strcpy(s,sp);s0=M; s8=!;puts(s);A) morning B) Morning C) Morning! D) 非法内存操作 2.
2、 在 while(x!=0)语句中的 x 与下面条件表达式等价的是 。A) x B) x=1 C) x!=1 D) !x3. 若有定义 int a58, i,j;(且 0imain() int i=3;while(!0) printf(“*”);i-;if(i#include void main() char a = a;printf(“%d“,strlen(a);A) 1 B) 2C) 0 D) 不一定10. 程序中若有如下说明和定义语句:第 3 页(共 10 页) char function(char *); main() char *s=“one“, a5=0,(*f1)()=funct
3、ion, ch; 以下选项中对函数 fun 的正确调用语句是_。A)(*f1)(a); B)*f1(*s); C)function( D)ch=*f1(s);二、填空题(本题共 28 分,每小题 2 分)注意:请把答案填入下面框中,答在其它处无效。题号 答 案 题号 答 案1 82 93 104 115 126 137 141. 函数 delete 的作用是删除有序数组 array(从小到大)中的指定元素 x。已有调用语句 n=del(array,n,x);其中实参 n 为删除前数组元素的个数,赋值号左边的 n 为删除后数组元素的个数,请填空 。delete(int * array, int
4、n, int x)int i,nPosition=0;while (x=array nPosition for(i=0,p=a; i# include #define LEN void main( ) int k ;struct line *p , *head ;head=NULL;for(k=1; knum=k;p-next=head; while( ( p=p-next) != NULL ) printf(“%d, “, p-num) ; 三、请写出下列程序运行的输出结果。”表示空格(本题 18 分,每小 题 2 分)得分题号 1 2 3 4 5 6 7 8 9答案第 6 页(共 10 页
5、) 注意:请把答案填入下面框中,答在其它处无效。1. #includemain()int a,b,c,d;a=c=1;b=-1;d=0;if(a) d=d-10; else if(!b) d=0;if(!c) d=25; else d=15;printf(“d=%dn“,d);2. #includemain() int i, sum=0;for(i=0; imain() int n=c; switch(n+) case c:case C:printf(“pass“); case d:case D:printf(“warn“);case a:case A:case b:case B:printf
6、(“good“);break; default: printf(“error“);break; 4. #includemain() int arr =30,25,20,15,10,18, *p=arr; p+; printf(“%dn“,*(p+4); 5. #include int x, y, z;void p(int *x, int y) 第 7 页(共 10 页) -*x;y+;z = *x+y;printf(“%d,%d,“, *x,y);void main()int x=5; y=2; z=0;p(printf(“%d,%d,%d-“, x, y, z);p(printf(“%d,%
7、d,%dn“, x, y, z);6. #include union struct int x, y, z; u;int k; a;void main()a.u.x=1; a.u.y=2; a.u.z=3;a.k=0;printf(“%d %d %d“,a.u.x,a.u.y,a.u.z);7. #include “stdio.h“main() int a=5,b=7; printf(“a=%d,b=%dn“,a,b);a=ab;b=ba;a=ab; printf(“a=%d,b=%dn“,a,b);8. # include int f(int m) static int k=5; k+;re
8、turn k+m;void main( ) int s;s=f(3);第 8 页(共 10 页) printf(“%d, %dn“, s, f(s);9. #include void swap( int *r,int *s ) int *t; t=*r; *r=*s; *s=t;main()int a=10,b=20,*p,*q;p= q= swap( printf(“%d,%dn“,*p,*q);四、以下函数fun的功能是将字符指针s 所指字符串所有下标值为奇数的字符删除,注意:原来的字符串中可能有空格,请指出下列程序的错误,并予以更正(本题10分)注意:不得增行或删行,不得更改程序结构。f
9、un (char *s, char *t)main()char ch100,t100;scanf”%s”,ch);fun(ch,t); printf(“ change by fun2()n“); puts(t);void fun(char *s, char *t)int i, j = 0;do *(t+i) = *(s+j);i+;j += 2;while(*(s+j) != 0 );*(t+j) = 0 ;五、请用标准程序流程图描述下列问题的算法(本题8分)从键盘录入一个字符串和一个字符,判断字符串中是否存在所录入的字符,如果存在,输出该字符在字符串第一次出现的位置,否则得分得分第 9 页(共 10 页) 输出“未发现该字符”六、编程题(本题16分,每小题8分) 1、从请设计一个 fun 函数,其功能是:将 s 所指的字符串进行正序和反序的连接,然后形成一个新的串写入由 t 所指的字符数组中。注意:不要改动 main()函数,只完成 fun 函数main() char s100,t100;scanf(“%s“,s)fun(s,t);puts(t);得分第 10 页(共 10 页) 2. 请编写 main 函数,分析 8 个学生的成绩60,75,63,92,87,64,79,21,每 10 分一个档次,计算出每个档次学生的人数,并打印出学生人数集中的分数档中,有多少个学生。