东华理工大学 2018年硕士生入学考试初试试题C 语言程序设计.pdf
注意:答案请做在答题纸上,做在试卷上无效 第 1 页,共 6 页 东华理工大学 2018 年硕士生入学考试初试试题 科目代码: 814 ; 科目名称: C 语言程序设计 ;( 正 卷) 适用专业(领域)名称: 电路与系统、控制工程 一 、 选择 题:(共 30 小题, 1-20 每小题 1 分, 21-30 每小题 2 分, 共 40 分) 1.C语言提供的合法关键字是 ( ) A.switch B.cher C. default D. case 2.在 C语言中,合法的 字符常量 是 ( ) A. 084 B. ab C. x43 D. 0 3.若已定义 x和 y为 double类型,则表达式 : x=1,y=x+3/2的值是 ( ) A. 2.0 B.2 C.1 D.2.5 4.合法的数组定义是 ( ) A.int a= string ; B. char a=0,1,2,3,4,5; C.char a= string ; D. int a5=0,1,2,3,4,5; 5.设 a为整型变量,不能正确表达数学关系 10 a 15的 C语言表达式是 ( ) A. a 10&a 15 B.a=11|a=12|a=13|a=14 C. 10 a 15 D.!(a =10)&!(a =15) 6.若 t为 double类型,表达式 t=1,t+5,t+的值是 ( ) A. 2.0 B.6.0 C.1 D.1.0 7.若有定义和语句 : char s10;s= abcd ;printf( %sn ,s);则结果是 (以下 代表空格 )( ) A. 编译不通过 B.输出 a C.输出 abcd D. 输出 abcd 8.若有定义和语句 :int *pp, *p, a=10, b=20; pp=&p;p=&a;p=&b;printf( %d,%dn ,*p,*pp);则输出 结果是 ( ) A.10,10 B. 20,20 C.20,10 D. 10,20 9.若有以下定义和语句 : int u=010, v=0 x10, w=10; printf( %d,%d,%dn ,u,v,w);则输出结果是 ( ) A. 8,8,10 B.10,10,10 C. 8,16,10 D.8,10,10 10.若有以下定义和语句 : char c1=b , c2=e; printf( %d,%cn ,c2-c1,c2-a+ A); 则输出结果是 ( ) A.2,M B.2,E C. 3,E D.输出项与对应的格式控制不一致,输出结果不确定 11.若有定义 :int a34;, ( )不能表示数组元素 a11。 A.*(a1+1) B. *(a+5) C.(*(a+1)1 D. *(&a11) 12.若 i、 j已定义为 int型,则以下程序段中内循环体的总的执行次数是 ( ) for(i=5;i 0;i-) for(j=0;j 4;j+) 注意:答案请做在答题纸上,做在试卷上无效 第 2 页,共 6 页 A.30 B.24 C.25 D.20 13.若有以下定义和语句 : char *s1= 12345 ,*s2= 1234 ; printf( %dn ,strlen(strcpy(s1,s2);则输出结果是 ( ) A.9 B.5 C.4 D.10 14.若有以下定义和语句 : int a10=1,2,3,4,5,6,7,8,9,10,*p=a; 则不能表示 a数组元素的表达式是 ( ) A.*p B. ap-a C.*a D. a10 15.下面程序的输出结果是 ( ) A. k=2 a=3 b=2 B.k=3 a=3 b=2 C. k=3 a=2 b=3 D.k=2 a=2 b=3 16.下面程序的输出结果是 ( ) main( ) unsigned a=32768; printf( a=%dn ,a); A.a=32768 B.a=-32767 C.a=32768 D.a=-1 17.执行下面语句后的输出结果为 ( ) int i=-1; if(i =0) printf( *n ); else printf( %n ) A. 有语法错误,不能正确执行 B.% C.%c D. * 18.对于条件表达式 (M)?(a+):(a-),其中的表达式 M等价于 ( ) A. M!=0 B.M=1 C. M=0 D.M!=1 19.下述程序段的输出结果是 ( ) int x=10; int 7nbspy=x+;printf( %d,%d ,(x+,y),y+); A.10, 10 B.11, 11 C.11, 10 D.10, 11 20.若有以下的定义 : int a=1,2,3,4,5,6,7,8,9,10,*p=a; 则值为 3的表达式是 ( ) A. p+=2,*+p B. p+=2,*(p+) C.p+=3,*p+ D.p+=2,+*p 21.假定所有变量均已正确说明,下列是程序段运行后 x的值是 ( ) a=b=c=0;x=35; if(!a) x-; else if(b); if(c) x=3; else x=4; A.34 B.3 C.35 D.4 22.在以下一组运算中,优先级最高的运算符是 ( ) 注意:答案请做在答题纸上,做在试卷上无效 第 3 页,共 6 页 A. = B.= C. & D. % 23.若有以下定义和语句 : int w23,(*pw)3;pw=w; 则对 w数组元素的非法引用是 ( ) A. pw00 B.*(pw+1)2 C. *(w0+2) D.*(pw1+2) 24.若有以下程序片段 : char str = abn012 ; printf( %d ,strlen(str);上面程序片段的输出结果是 ( ) A.12 B.6 C.4 D.3 25.函数调用 :strcat(strcpy(str1,str2),str3)的功能是 ( ) A.将串 str2复制到串 str1中后再将串 str3 连接到串 str1之后 B.将串 str2连接到串 str1之后再将串 str1 复制到串 str3中 C.将串 str1复制到串 str2中后再连接到串 str3之后 D.将串 str1连接到串 str2之后再复制到串 str3之后 26.以下对 C 语言函数 的有关描述中,正确的是 ( ) A.C函数既可以嵌套定义又可以 递归调用 B.函数必须有返回值,否则不能使用函数 C.C程序中有调用关系的所有函数必须放在同一个源程序文件中 D.在 C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 27.以下叙述中不正确的是 ( ) A.在 C中,外部变量的隐含类别是自动存储类别 B.在 C中,函数形参可以说明为 register变量 C.在 C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值 D.在 C中,在调用函数时,实参和对应形参在类型上只需赋值兼容 28.设有以下定义或语句,则输出的结果是 (用 small 模式编译,指针变量占 2 个字节 )( ) struct date long *cat; struct date *next; double dog; too; printf( %d ,sizeof(too); A.12 B.14 C.16 D.20 29.设有定义 :struct skint a;float b;data,*p; 若有 p=&data;,则对 data中的 a域的正确引用是 ( ) A.(*p).data.a B.p- data.a C.(*p).a D.p.data.a 30.以下对 枚举类型 名的定义中正确的是 ( ) A.enum a= one , two , three ; B.enum a one , two , three ; C.enum a=one,two,three; 注意:答案请做在答题纸上,做在试卷上无效 第 4 页,共 6 页 D.enum aone=9,two=-1,three; 二、 程序 填空 题:(每 空 2 分,共 50 分) 11 下列算法为奇偶交换排序 , 思路如下 : 第一趟对所有偶数的 i, 将 ai和 ai+1进行比较 , 第二趟对所有奇数的 i,将 ai和 ai+1进行比较 , 每次比较时若aiai+1, 将二者交换 ; 以后重复上述二趟过程 , 直至整个数组有序。 void oesort (int a,int n) int flag,i,t; do flag=0; for(i=0;iai+1) flag= (2) ; t=ai+1;ai+1=ai;ai=t; for( (3) ) if (aiai+1)flag= (4) ; t=ai+1;ai+1=ai;ai=t; while (5) ; 2. 下面是对有序表(递增)进行二分查找的递归算法 (如果找到,返回起下标,否则返回 -1)。 int BSearch( ElemType A ,int low, int high, KeyType K ) if (low Amid.key) return (3) else return (4) else return (5) 3. 下面程序在数组 a 中查找与 x值相同的元素所在位置。 void main( ) int a11, i, x ; printf( “ 输入 10个整数: ”); for(i=0; i1 另外有一个数列 xn,该数列中各元素的值为: x(i)=a(i)/a(i+1) i=0,1, ,n 要求对 xn中的元素按升序进行排序,然后以分数形式输出排序后的 xn。 例如 n=5时,排序前的 xn=1/1,1/2,2/3,3/5,5/8, 排序后的 xn=1/2,3/5,5/8,2/3,1/1。 make函数首先生成排序前的 xn,然后调用函数 sort()进行排序,最后输出所 求结果。 struct fact long m,n; ; void sort(int n,struct fact *p) int a; long s,t,u,v; struct fact *q,*end; for(end=p+(n-1),a=1; (1) ;end-) for(a=0,q=p; (2) ;q+) s=q-m; t=q-n; u=(q+1)-m; v=(q+1)-n; if( (3) ) q-m=u; (4) ; (5) ; (q+1)-n=t; a=1; void make(int n) int i; long a,b,c; struct fact *x,*y; x=(struct fact *)malloc(sizeof(struct fact)*n); x-m=1; x-n=1; for(a=1,b=1,i=2;im=a; (x+(i-1)-n=b; (7) ; printf(x%d=%d/%d,n,x-m,x-n); for(y=x+1; (8) ;y+) printf(,%d/%d,y-m,y-n); printf(n); (9) ; void main() int n; (10) ; make(n); 注意:答案请做在答题纸上,做在试卷上无效 第 6 页,共 6 页 三、 程序设计题:(共 4 小题 , 每小 题各 15 分,共 60 分) 1、 打印 “ 魔方阵 ” ,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2 要求打印出由 1 n2的自然数构成的魔方阵。 ( 15分) 2、 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整 数由键盘输入。 ( 15 分) 3、 有 n人围成一圈,顺序排号。从第 1个人开始报数 (从 1到 3报数 ),凡报到 3的人退出圈子,问最后留下的是原来的第几号的那位。 (要求用指针变量) ( 15分) 4、 定义一个结构体变量 (包括年、月、日 )。计算该日在本年中是第几天,注意闰年问题。 ( 15分)