1、Page 1 of 6河 海 大 学 2009 年 工 程 硕 士 入 学 考 试 专 业 课 试 题考试科目名称: 高级语言程序设计 一、选择题(1 分25=25 分)1. 以下说法中正确的是 (1) 。AC 语言程序总是从第一个的函数开始执行B在 C 语言程序中,要调用的函数必须在 main( )函数中定义CC 语言程序总是从 main( )函数开始执行DC 语言程序中的 main( )函数必须放在程序的开始部分2. 在以下各组标识符中,均可以用作变量名的一组是 (2) 。Aa01, _nt Btable_1, a*.1 C0_a, W12 Dfor, point3. 若有说明:int a
2、10;则对数组元素的正确引用是 (3) 。Aa10 B. a3.5 C. a(5) D. a10-104. 有 以 下 程 序 ,执 行 后 输 出 结 果 是 (4) 。main ( ) int n=9; while (n6)n- -; printf (”%d”, n); A. 987 B. 876 C. 8765 D. 98765. 若有以下定义,则对 a 数组元素地址的正确引用是 (5) 。int a5,*p=a;A fun(n, A. void fun (int m, int x) B. void fun (int s, int h50) C. void fun (int p, int
3、 *s) D. void fun (int n, int a) 7. 设有数组定义:char array=”China”; 则数组所占的空间是 (7) 。A4 个字节 B5 个字节 C6 个字节 D7 个字节8. 在下列 C 语言源程序的错误中,通常不能在编译时发现的是 (8) 。 A. 括号不匹配 B. 非法标识符 C. 数组元素下标值越界 D. 程序结构不完整9. 若有声明“long a, b;“且变量 a 和 b 都需要通过键盘输入获得初值,则下列语句中正确的是 (9) 。A. scanf(“%ld%ld, B. scanf(“%d%d“, a, b);C. scanf(“%d%d“,
4、D. scanf(“%ld%ld“, 10. 若有定义语句:int a23, *p3; 则以下语句中正确的是 (10) 。Ap = a; B. p0 = a; C. p0 = D. p1 = Page 2 of 611. 已知:int x; int y10; int *p;下列 (11) 是合法的。Ap= Bp= C p= D p=12以下叙述中错误的是 (12) 。A. 局部变量的定义可以在函数体和复合语句的内部B. 全局变量的定义可以在函数以外的任何部位C. 同一程序内局部变量和全局变量不允许同名D. 函数的形参属于局部变量13. 设有说明 double(*p1)N; 其中标识符 p1 是
5、 (13) 。AN 个指向 double 型变量的指针。B指向 N 个 double 型变量的函数指针。C一个指向由 N 个 double 型元素组成的一维数组的指针。D具有 N 个指针元素的一维指针数组,每个元素都只能指向 double 型量。14. 下列关于C语言数据文件的叙述中正确的是 (14) 。 A文件由ASCII码字符序列组成,C语言只能读写文本文件 B文件由二进制数据序列组成,C 语言只能读写二进制文件 C文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件 D文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件15若有下面的程序段,则下列叙述正确的是 (1
6、5) 。char s =“china“; char *p; p=s; A. s 和 p 完全相同 B.数组 s 中的内容和指针变量 p 中的内容相等 C. s 数组长度和 p 所指向的字符串长度相等 D.*p 与 s0相等16. 若有结构类型定义“typedef struct test int x, y2; TEST; ”,则以下声明中正确的是 (16) 。Astruct test x; Bstruct x; Ctest x; Dstruct TEST x;17若有声明“float f=123.45678;”,则执行语句“printf(“%.3f“,f );”后,输出结果是(17) 。A. 1
7、.23e+02 B. 123.457 C. 123.456780 D. 1.234e+0218下列关于指针定义的描述, (18) 是错误的。A指针是一种变量,该变量用来存放某个变量的地址值的。B指针变量的类型与它所指向的变量类型一致。C指针变量的命名规则与标识符相同。D在定义指针时,标识符前的 “*”号表示后面的指针变量所指向的内容。19已知 A 盘根目录下有文本文件 “data.txt”且程序中已有声明“FILE *fp;”,若程序需要先从“data.txt”文件中读出数据,修改后再写入“data.txt” 文件中,则调用 fopen 函数的正确形式是 (19) 。A. fp=fopen(“
8、a:data.txt“,“rw“); B. fp=fopen(“a:data.txt“,“w+“);C. fp=fopen(“a:data.txt“,“r+“); D. fp=fopen(“a:data.txt“,“r“); 20已知有结构定义和变量声明如下:以下选项中错误的是 (20) 。struct student char name20;int score;struct student *h; stu,*p; int *q;Page 3 of 6A. p= B. q= C. scanf(“%s%d“, D. stu.h = p; 21. 若已定义的函数有返回值,则以下关于该函数调用的叙述
9、中错误的是 (21) 。 A. 函数调用可以作为独立的语句存在 B. 函数调用可以作为一个函数的实参 C. 函数调用可以出现在表达式中 D. 函数调用可以作为一个函数的形参 22. 已知 int x=1, y=2, z=3; 则 z+=xy?+x:+y;的值是 (22) 。A. 2 B. 4 C. 3 D. 623. 若有以下说明和定义语句:union uti int n; double g; char ch9; struct srtfloat xy; union uti uv; aa;设在 32 位机器上,则变量 aa 所占内存的字节数是 (23) 。A. 9 B. 8 C. 13 D. 1
10、724. “文件包含 ”预处理语句的使用形式中,当#include 后面的文件名用“” 括起时,寻找被包含的文件的方式为 (24) 。A直接按系统设定的标准方式搜索目录B先在源程序所在目录搜索,再按系统设定的标准方式搜索C仅仅搜索源程序所在的目录 D仅仅搜索当前目录25. 若程序中有宏定义行:#define N 100 则以下叙述中正确的是 (25) 。A. 宏定义行中定义了标识符 N 的值为整数 100B. 在编译程序对 C 源程序进行预处理时用 100 替换标识符 NC. 对 C 源程序进行编译时用 100 替换标识符 ND. 在运行时用 100 替换标识符 N二、读程序写运行结果(5 分
11、5=25 分)1、#includeint main() int a, b, c, d; a=20; b=+a; c=a-; d=10*c+; printf (“b, c, d: %d, %d, %d“, b, c, d); return 0; 2、#includevoid main() int a, b;for (a=1,b=1;a=20)break;if(b%3 = 1) b+=3;printf(“%d, ”, b);continue;Page 4 of 63、#includeint f1( ) static int i=0,f=1; return f *= +i; int f2( ) in
12、t i=0,f=1;return f *= +i; void main( ) printf(“%dn“,f1( )+f1( ); printf(“%dn“,f2( )+f2( ); 4、#include #include char *fun (char *t) char *p=t; return (p+strlen(t)/2); void main( ) char *str=“abcdefgh“; str = fun (str); puts(str); 5、#includestruct s int x,*y;*p;int d5=10, 20, 30, 40, 50;struct s a5=10
13、0, void main( ) p=a;printf (“%5d“, p-x+);printf(“%5dn“, p-x);printf(“%5d“, *p-y);printf(“%5dn“, *+p-y);三、填空题(1 分11+2 分725 分,其中(1)-(11)每题 1 分,(12)- (18)每题 2 分)1 C 语言源程序文件的扩展名是 (1) ,经过编译后,生成文件的扩展名是 (2) ,Page 5 of 6经过连接后,生成文件的扩展名是 (3) 。2 C 语言提供的三种逻辑运算符是 (4) 、 (5) 、 (6) ;其中优先级最高的是 (7) 。3 若自定义函数要求返回一个值,则
14、应在该函数体中有一条 (8) 语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符 (9) 。4 C 语言函数中的形参和调用时的实参若都是数组名时,传递方式为 (10) ,若都是变量时,传递方式为 (11) 。5 本程序的工程是判断制定的正整数是否为素数,若是,则输出该素数。#includeint f (int a) int tag, i;i=2; tag=1;while (ivoid main( )int x, n, k;int k1=0, k2=0, k3=0;printf(“ input n=:”);(14) ;for(k=0; k viod f (int x, int
15、 n) int p0, p1, i, j, t, m;i=j=x0; p0 = p1 = 0; for (m=0; mi)i=xm; p0=m; else if( (16) ) j=xm; p1=m; t=xp0; (17) ; xn-1= t; t=xp1;xp1= (18) ;x0 = t; void main() int a10, u; for (u=0; u10; u+) scanf(“%d“, f (a, 10); for (u=0; u10; u+) printf(“%d“,au); printf(“n“); 7四、编程题(10+15=25 分,第 1 题 10 分,第 2 题 15 分)1. 编写程序完成矩阵转置功能,即将矩阵的行和列对换:如将矩阵9 7 5 1 倒置为 9 3 43 1 2 8 7 1 64 6 8 10 5 2 81 8 102. 编写程序完成对给定的一组整数由小到大的顺序排序,并将排序后的结果输出。具体实现为: 用函数 create()根据已知整数数组构造一个线性链表;函数 sort( )采用选择排序方法对已知链表进行排序。