东华理工大学 2017 年硕士生入学考试初试试题科目代码 : 814 ; 科目名称 : C 语言程序设计 ;( A 卷 ) 适用专业 ( 领域 ): 电路与系统 (077402,080902) 一 选择题 :( 共 25 小题, 每小题 2 分, 共 50 分 ) 1 以下有关宏替换和函数的调用叙述不正确的是 A) 宏替换和函数的调用均占用运行时间 B) 宏名无类型, 函数有类型 C) 宏替换只是字符替换, 不分配内存, 但函数调用要分配内存 D) 再调用宏时程序的长度要加长, 而函数调用不变 2 以下程序的输出结果是 long fun( int n) { long s; if(n= =1 n= =2) s=2; else s=n-fun(n-1); return s; { printf("%ld\n", fun(5)); A) 1 B) 2 C) 3 D) 4 3 设有如下定义: int (*ptr)( ); 则以下叙述中正确的是 A) ptr 是指向一维组数的指针变量 B) ptr 是指向 int 型数据的指针变量 C) ptr 是指向函数的指针变量, 该函数返回一个 int 型数据 D) ptr 是一个函数名, 该函数的返回值是指向 int 型数据的指针 4 判断 char 型变量 ch 是否为大写字母的正确表达式是 A) ' A' <=ch<='z' B) (ch> = 'A')&(ch<='Z' ) C) (ch>=' A' )&&(ch<='z') D) (' A' < = ch)and('z'> = ch) 5 下列程序段的输出结果为 int arr[]={6,7,8,9,10; int * ptr; ptr=arr; * (ptr+2)+=2; printf ("%d,%d\n",*ptr,*(ptr+2)); 第 1 页, 共 7 页
A) 8,10 B) 6,8 C) 7,9 D) 6,10 6 阅读下面程序段, 选择那个说法正确 for (t=1; t<=100;t++) { scanf("%d",&x); if(x<0) continue; printf("%3d",t); A) 当 x<0 时整个循环结束 B) x>=0 时什么也不输出 C) printf 函数永远也不执行 D) 最多允许输出 100 个非负整数 7 当 a=1,b=3,c=5,d=4, 执行完下面一段指令后,x 的值是 if(a<b) if(c<d) x=1; else if(a<c) if(b<d) x=2; else x= 3; else x=6; else x=7; A)1 B)2 C)3 D)6 8 设所有变量均为整型, 则表达式 z=(a=2,b=5,b++,a+b) 的值是 A)7 B)8 C)6 D)2 9 已知 int x=10,y=20,z=30; 以下语句执行后 x, y, z 的值是 if (x>y) z=x; x=y; y=z; A) x=10, y=20, z=30 B) x=20, y=30, z=20 C) x=20, y=30, z=10 D) x=20, y=30, z=30 10 若希望当 A 的值为奇数时, 表达式的值为 真, A 的值为偶数时, 表达式的值为 假 则以下不能满足要求的表达式是 A) A%2==1 B)!(A%2==0) C)!(A%2) D) A%2 11 在 C 语言中, 形参的缺省存储类是 A) auto B) register C) static D) extern 12 已知各变量的类型说明如下 int k,a,b; unsigned long w= 5; double x=1.42; 则以下不符合 C 语言语法的表达式是 第 2 页, 共 7 页
A) x%(-3) B) w+=-2 C) k=(a=2,b=3,a+b) D) a+= a-=(b=4)*(a=3) 13 定义如下变量和数组 int k; int a[3][3]={1,2,3,4,5,6,7,8,9; 则下面语句的输出结果是 : for(k=0;k<3;k++) printf ("%d",a[2-k][ k]); A) 3 6 9 B) 7 5 3 C) 9 6 3 D) 3 5 7 14 对两个数组 a 和 b 进行如下初始化 char a[ ]="ABCDEF"; char b[ ]={ A, B, C, D, E, F ; 则以下叙述正确的是 A) a 与 b 数组完全相同 B) a 与 b 长度相同 C) a 和 b 中都存放字符串 D) a 数组比 b 数组长度长 15 下面函数调用语句含有实参的个数为 y = func ( a, b, max(d,e)); A) 5 B) 2 C) 3 D) 4 16 在宏定义 #define PI 3.14159 中, 用宏名 PI 代替一个 A) 常量 B) 单精度数 C) 双精度数 D) 字符串 17 有如下程序 int a[10]={1,2,3,4,5,6,7,8,9,10;*p=a; 则数值为 9 的表达式是 A) *(P+8) B) *P+9 C) *P+=9 D) P+8 18 下面程序段的运行结果是 char str[ ]="ABC", *p=str ; printf ("%d\n",*(p+2)); A) 0 B) 字符 'C' 的地址 C) 字符 'C' D) 字符 'C' 的 ASCII 码 19 下面判断正确的是 A) char str[10]={ china ; 等价于 char str[10]; str[ ]={ china ; B) char *a= china ; 等价于 char *a; *a= china ; C) char *s= china ; 等价于 char *s; s= china ; D) char c[4]= abc, d[4]= abc ; 等价于 char c[4]=d[4]= abc ; 20 有如下定义 struct person{char name[9]; int age;; strict person class[10]={"johu", 17, "Paul", 19, "Mary", 18, 第 3 页, 共 7 页
"Adam, 16,; 根据上述定义, 能输出字母 M 的语句是 A) prinft("%c\n",class[3].mane); B) pfintf("%c\n",class[3].name[1]); C) prinft("%c\n",class[2].name[1]) D) printf("%c\n",class[2].name[0]); 21 以下程序的输出结果是 union myun { struct { int x, y, z; u; int k; a; { a.u.x=4; a.u.y=5; a.u.z=6; a.k=1; printf("%d\n",a.u.y); A) 1 B) 5 C) 6 D)4 22 阅读以下程序, 当输入数据的形式为 25,13,10<CR> 正确的输出结果为 { int x,y,z scanf("%d%d%d",&x,&y,&z ); printf( x+y+z=%d\n,x+y+z); A) x+y+z=48 B) x+y+z=35 C) x+y+z=35 D) 不确定值 23 设有:int a=1, b=2, c=3, d=4, m=2, n=2; 则执行 (m=a>b)&&(n=c>d) 后 n 的值为 A) 1 B) 2 C) 0 D) 4 24 若有说明:int a[3][4]; 则对 a 数组元素的正确引用是 A) a[2][4] B) a[1,3] C) a[1+1][0] D) a(2)(1) 25 对二维数组的正确定义是 A) int a[ ] [ ]={1,2,3,4,5,6; B) int a[2] [ ]={1,2,3,4,5,6; C) int a[ ] [3]={1,2,3,4,5,6; D) int a[2,3]={1,2,3,4,5,6; 二 程序阅读填空题 :( 共 6 小题, 每小题 5 分, 共 30 分 ) 1 阅读下面的程序运行后输出的结果 { int x=0,a=0,b=0; switch(x) { case 0: b++; case 1: a++; 第 4 页, 共 7 页
case 2: a++;b++; printf( a=%d,b=%d\n,a,b); 2. 阅读以下程序, 程序运行后的输出结果是 void fun(char *a, char *b) { a=b; (*a)++; { char c1='a',c2='a',*p1,*p2; p1=&c1; p2=&c2; fun(p1,p2); printf("%c%c\n",c1,c2); 3. 下面是一个求 3*3 矩阵对角线元素之和的程序, 请阅读程序完成填空 1 空 2 和空 3: { float a[3][3],sum=0; int i,j; printf("please input rectangle element:\n"); for(i=0;i<3;i++) for( 1 j++) scanf("%f",&a[j]); for( 2 i++) sum=sum+a; printf("duijiaoxian he is %6.2f", 3 ); 4. 下面是一个求字符串的长度主函数 () 和子函数 length(p), 阅读程序完成空 1 空 2 和空 3 { int len; char *str[20]; printf("please input a string:\n"); scanf("%s",str); len=length( 1 ); printf("the string has %d characters.",len); length(p) // 求字符串长度子函数 char *p; { int n; n=0; while(*p!= 2 ) { n++; p++; 第 5 页, 共 7 页
return 3 ; 5. 下面是一段是求 101~200 之间有多少个素数, 并输出所有素数, 请阅读程序并 完成空 1 空 2 和空 3 #include "math.h" { int m, i, k, hm=0, leap=1; printf("\n"); for( 1 m++) { k=sqrt( m+1 ); for(i=2; i<=k; i++) if( 2 ) {leap=0; break; if(leap) {printf("%-4d", m ); hm++; if( hm % 10==0) printf( "\n" ); leap=1; printf("\nthe total is %d", 3 ); 6. 下面程序是输入三个整数 x y z, 把这三个数由小到大输出 请阅读程序并 完成空 1 空 2 和空 3 { int x,y,z,t; scanf("%d%d%d",&x,&y,&z); if ( 1 ) { t=x;x=y;y=t; if(x>z) { 2 if(y>z) { t=y;y=z;z=t; printf("small to big: 3 \n",x,y,z); 三 算法流程图设计题 :( 共 3 小题, 每小题 10 分, 共 30 分 ) ( 以下 3 题不需要编写程序, 只写出算法思路和画出算法流程图 ) 1. 有一个数据采集系统, 开始时连续采集 8 个数据保存, 计算其平均值, 此后, 每采集一个数, 需要把这 8 个数中最早采集的数据去掉, 新采集一个数据补充在后面, 形成移动平均滤波 要求 :(10 分 ) 第 6 页, 共 7 页
(1) 根据题意用文字叙述写出算法思路 ; (2) 设计出合理规范的程序流程图 2. 设有一个有序的数组 ( 已由大到小排列 ), 现输入一个数, 请用折半查找法找出该数在数组中的位置 ; 如果该数不在数组中, 则输出 无此数 要求:(10 分 ) (1) 根据题意, 用文字叙述写出算法思路 ; (2) 设计出合理规范的流程图 3. 编写一个函数建立一个有 5 个员工数据的单向动态链表, 每个员工包含工号 姓名和年龄 ; 再编写一个函数, 输入一个工号, 将链表中包含这个工号的结点删除 要求 :(10 分 ) (1) 根据题意用文字叙述写出算法思路 ; (2) 设计出合理规范的程序流程图 四 程序设计题 :( 共 4 小题, 共 40 分 ) 1. 有一个已经排好序的数组, 现从键盘输入一个数, 要求按原来的规律将它插入数组中 要求 :(10 分 ) (1) 根据题意写出算法思路 ( 不要画流程图, 只用文字叙述清楚 ); (2) 设计编写出合理的程序 2. 从键盘输入一个年 月 日, 请用 C 语言编程判断这一天是这一年的第几天? 要求 :(10 分 ) (1) 根据题意写出编程的算法思路 ( 可不画流程图, 只用文字叙述清楚 ); (2) 设计编写出合理的程序 ( 关键处加注释 ) 3. 数学游戏平分七筐鱼 : 甲 乙 丙三位鱼夫出海打鱼, 他们随船带了 21 只箩筐 当晚返航时, 他们发现有七筐装满了鱼, 还有七筐装了半筐鱼, 另外七筐则是空的 由于他们没有秤, 只好通过目测认为七个满筐鱼的重量是相等的,7 个半筐鱼的重量是相等的 在不将鱼倒出来的前提下, 如何将鱼和筐平分为三份? 要求 :(10 分 ) (1) 根据题意说明编程的算法思路 ( 用文字方式叙述 ); (2) 设计编写出合理的程序 ( 关键处加注释 ) 4. 在屏幕上用 * 画出一个空心圆, 圆的直径任意从键盘输入 要求 :(10 分 ) (1) 根据题意设计算法思路或实现方法 ( 不用画流程图, 只用文字叙述清楚 ); (2) 设计编写出合理的程序 ( 关键处加注释 ) 第 7 页, 共 7 页