当前位置:问答库>考研试题

武汉科技大学C语言程序设计_855_试卷2012考研试题研究生入学考试试题考研真题

  摘要

二 O 一二年招收硕士研究生入学考试试题 考试科目及代码: C 语言程序设计(855) 适用专业: 软件工程,计算机技术 答题内容写在答题纸上,写在试卷或草稿纸上一律无效考完后试题随答题纸交回。 考试时间 3 小时,总分值 150 分。 一、选择题(每题 2 分,共 20 分) 准考证号码: 密 封 线 内 不 要 写 题 1、C 语言用( )表示逻辑“真” 。 A)true B)整数值 C)非零整数值 D)T 2、 ( )是合法的用户自定义标识符。 A)π B)2ab C)_var D)int 3、下列语句应将小写字母转换为大写字母,其中正确的是() 。 A)if(ch>=’a’&ch<=’z’) ch=ch-32; B)if(ch>=’a’&&ch<=’z’)ch=ch-32; C)ch=(ch>=’a’&&ch<=’z’)?ch-32:’ ’; D)ch=(ch>’a’&&ch<’z’)?ch-32:ch; 4、以下能对二维数组 a 进行正确初始化的语句是( ) 。 A)int a[2][ ]={{0,1,2},{3,4,5}}; B)int a[ ][3]={{0,1,2},{3,4,5}}; C)int a[2][4]={{0,1,2},{3,4},{5}}; D)int a[ ][3]={{0, ,2},{},{3,4,5}}; 5、能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是( ) 。 A)return 这二个数 B)形参用数组 C)形参用二个指针 D)用二个全局变量 6、数组 a 的定义语句为“float a[3][4];” ,下列( )是对数组元素不正确的引用方法。 A)a[i][j] B)*(a[i]+j) C)*(*(a+i)+j) D)*(a+i*4+j) 7、下列函数的功能是( ) 。 void abc(int *p1, int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } A)交换*p1 和*p2 的值。 B)交换*p1 和*p2 的地址。 C)正确,但无法改变*p1 和*p2 的值。 D)可能造成系统故障。 8、递归函数中的形参是( ) 。 A)自动变量 B)外部变量 C)静态变量 D)可根据需要自定义存储类型 9、有以下定义:int a[10]; char b[80];函数声明为:void sss(char [], int []);则正确 的函数调用形式是( ) 。 A)sss(a,b); B)sss(char b[],int a[]); C)sss(b[],a[]); D)sss(b,a); 10、若有定义:char a; int b; float c; double d; 则表达式“a+b*c-d”的类型为( ) 。 A)int B)char C)float D)double 报考学科、专业: 姓名: 二、读程序写结果(每题 5 分,共 20 分) 1. #include void main() { int x=46278; do{ printf("%d*", x%10); x /=10; }while(x); } 第 1 页 共 4 页

2.#include void fun2( ) { static int a=1; a++; printf(“%d”, a); } 3. #include void main(void) { int i,j=0; for(i=1;i<=4;i++) switch(i%3){ void main(void) { int i; for(i=0;i<4;i++) } fun2( ); case 0:j++; case 1:j++; case 2:j++; } printf("j=%d",j); } 4.#include int modify(int a[]); void main( ) { int i,a[]={1,2,3,4,5}; a[2]=modify(a); for(i=0;i<=4;i++) printf("%5d",a[i]); } int modify(int a[]) { int i; for(i=0;i<5;i++) a[i]=2*a[i]; return 0; } 三、程序填空题(每空 3 分,共 60 分) [程序填空题 1] 函数 int find_Max_Min(int a[ ],int n)的功能是:找出 n 个元素的数组 a 中的最大元素和最小元素并输出,返回查找过程中元素的比较次数。 查找方法如下:先将较大的数移到数组的后半区,较小的数移到数组的前半区,然后在 前半区找出最小元素,在后半区找出最大元素。 int find_Max_Min(int a[ ],int n) { int i,Count = 0,temp,Maxnum,Minnum; for(i = 0; i < n/2; i++) { Count = Count + 1; /*元素比较次数计数*/ if ( ___(1)__ _ ){ temp=a[i]; a[i]=a[n-1-i]; a[n-1-i]=t; } } Maxnum=a[n-1]; Minnum=a[0]; for(i = 1; i < n/2+ n%2; i++) { Count = ____(2)____ ; Minnum = _____(3)_____ ? a[i]:Minnum; Maxnum = _____(4)_____ ? _______(5)_____:Maxnum; } printf(“Max=%d\n Min=%d\n”,Maxnum,Minnum); return Count; } [程序填空题 2] 某单位准备对指定的 n 名(n<80)候选人进行一次投票。 选举前事先印制了 选票,投票者只需将选中者名下的圆圈涂黑即可。规定每张选票上被涂黑的圆圈数不得超过 3 个,也不得少于 1 个,否则视为无效选票。投票结束后,所有选票经计算机扫描处理,形 成了描述选票状态的文本文件。例如,n=8 时所形成的文件格式如右所示。 其中,每行表示一张选票的数据,每列代表一位候选者的得票情况。第 i 行第 j 列为 1, 第 2 页 共 4 页

表示第 i 张选票上投了第 j 名候选人 1 票。 01011000 函数 statistic( )的功能是从文件中读入选票数据,并统计每位候选 10010100 者的得票数并存入 candidate[],函数返回有效选票数。 10011000 int statistic(FILE *fp,int candidate[],int n) 11111111 { char str[80]; int i,tag = 0 , q = 0; 00000000 for(i = 0; i < n; i++) candidate[i] = 0; 00111000 while (____(1)____) … { fgets(str,80,fp); /* 读入一张选票数据 */ for(tag = 0,i = 0; ____(2)____; i++) if (str[i] == '1') tag++; if (____(3)____) /* 若是有效选票,则进行统计 */ { ____(4)____; for (i = 0; i < n; i++) if (str[i] == '1')____(5)____; } } return q; } [程序填空题 3] 函数 DelA_insB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:将线性表 La 中关键码为 key1 的结点开始的 len 个结点,按原顺序移至线性 表 Lb 中关键码为 key2 的结点之前,若移动成功,则返回 0;否则返回-1。线性表的存储结 构为带头结点的单链表。 typedif struct node { int key; struct node *next; }*LinkedList; int DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len) { LinkedList p,q,s,prep,pres; int k; if(!La->next||!Lb->next||len<=0) return –1; p=La->next; prep=La; /*查找表 A 中键值为 key1 的结点*/ while(p&&p->key!=key1) { prep=p; p=p->next; } if(!p) return –1; /*表 A 中不存在键值为 key1 的结点*/ q=p; k=1; while(q&& __(1)_ _ ) { (2)_ ; k++; } /*在表 A 中找出待删除的 len 个结点*/ if(!q) return –1; /*表 A 中不存在要被删除的 len 个结点*/ s=Lb->next; __ (3)_ __ ; /*查找表 B 中键值为 key2 的结点*/ while(s&&s->key!=key2) { pres=s; s=s->next; } if(!s) return –1; /*表 B 中不存在键值为 key2 的结点*/ _ _(4)_ _ =q->next; q->next= _ (5) __ ; pres->next=p; return 0; } [程序填空题 4] 一棵非空二叉树中“最左下”结点定义为:若树根的左子树为空,则树根 为“最左下”结点;否则,从树根的左子树根出发,沿结点的左孩子 A 分支向下查找,直到某个结点不存在左孩子时为止,该结点即为此二 B C 叉树的“最左下”结点。例如,下图所示的以 A 为根的二叉树的“最 左下”结点为 D,以 C 为根的子二叉树中的“最左下”结点为 C。 D F 函数 BSTree Find_Del (BSTree T)的功能是:若 T 指向一棵二叉树 G 的根结点,则找出该结点的右子树上的“最左下”结点*p,并从树下 第 3 页 共 4 页

删除以*p 为根的子树,函树返回被删除子树的根结点指针;若该树根的右子树上不存在“最 左下”结点,则返回空指针。 Typedef struct BSTNode{ int data; struct BSTNode *left,*right; }*BSTree; //left,right 为结点的左、右孩子指针 BSTree Find_Del(BSTree T) { BSTree p,pre; if (!T) return NULL; /*T 指向的二叉树为空树*/ _ _(1)_ _; if (!p) return NULL; __ (2) __ __; while(p) { pre=p; p=__ (3)_ __; } if (_ _(4)_ _ = =T) pre->right=NULL; /*T 的右子树根为“最左下”结点*/ else _ _(5) __ = NULL; /*删除以“最左下”结点为根的子树*/ return p; } 四、程序设计题(共 50 分) [程序设计题 1 (8 分) ] 请设计递归函数 void reverse(char *s,int len),其功能为 逆置长度为 len 的字符串。例如,若串 s 的内容为“abcd” ,则逆置后其内容变为“dcba” 。 [程序设计题 2 (12 分) ] 编写程序:从键盘输入年份 year(≥1900),计算该年中有几个 “黑色星期五” (既是 13 日又是星期五的日期) 。 (提示:1900 年 1 月 1 日星期一) [程序设计题 3 (15 分) ] 设计程序实现功能: (1)从键盘输入若干整数(可以相同,以 0 表示结束) ,将它们建成一个带头结点的非递减有序的单链表。 (2)删除上述链表中的重复 元素,使得链表中的元素互不相同。 [程序设计题 4 (15 分) ] 假设以二维数组 G[m][n](m,n 均小于 20)表示一幅图像各像素 的颜色,则 G[i][j]表示区域中点(i,j)处的颜色,颜色值为 0 到 k 的整数。 设计函数 void ChangeColor(int G[][20],int m,int n,int i0,int j0,int NewColor), 该函数的功能是:将指定点(i0,j0)所在的同色邻接区域(所有与点(i0,j0)同色的上、下、 左、右可连通的点组成同色邻接区域)的颜色置换为给定的颜色值 NewColor。 例如,一幅 8×9 像素的图像如左图所示。设用户指定点(2,4),颜色值为 0,其同色邻 接区域如左图的阴影部分所示。将上述同色区域的颜色替换为颜色值 7 所得的新图像如右图 所示。 第 4 页 共 4 页