武汉科技大学考研真题C语言程序设计与参考答案.docx
《武汉科技大学考研真题C语言程序设计与参考答案.docx》由会员分享,可在线阅读,更多相关《武汉科技大学考研真题C语言程序设计与参考答案.docx(31页珍藏版)》请在冰豆网上搜索。
武汉科技大学考研真题C语言程序设计与参考答案
姓名:
报考学科、专业:
准考证号码:
密封线内不要写题
二O一二年招收硕士研究生入学考试试题
考试科目及代码:
C语言程序设计(855)
适用专业:
软件工程,计算机技术
答题内容写在答题纸上,写在试卷或草稿纸上一律无效考完后试题随答题纸交回。
考试时间3小时,总分值150分。
一、选择题(每题2分,共20分)
1、C语言用()表示逻辑“真”。
A)trueB)整数值C)非零整数值D)T
2、()是合法的用户自定义标识符。
A)πB)2abC)_varD)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)inta[2][]={{0,1,2},{3,4,5}};B)inta[][3]={{0,1,2},{3,4,5}};
C)inta[2][4]={{0,1,2},{3,4},{5}};D)inta[][3]={{0,,2},{},{3,4,5}};
5、能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是()。
A)return这二个数B)形参用数组C)形参用二个指针D)用二个全局变量
6、数组a的定义语句为“floata[3][4];”,下列()是对数组元素不正确的引用方法。
A)a[i][j]B)*(a[i]+j)C)*(*(a+i)+j)D)*(a+i*4+j)
7、下列函数的功能是()。
voidabc(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}
A)交换*p1和*p2的值。
B)交换*p1和*p2的地址。
C)正确,但无法改变*p1和*p2的值。
D)可能造成系统故障。
8、递归函数中的形参是()。
A)自动变量B)外部变量C)静态变量D)可根据需要自定义存储类型
9、有以下定义:
inta[10];charb[80];函数声明为:
voidsss(char[],int[]);则正确的函数调用形式是()。
A)sss(a,b);B)sss(charb[],inta[]);C)sss(b[],a[]);D)sss(b,a);
10、若有定义:
chara;intb;floatc;doubled;则表达式“a+b*c-d”的类型为()。
A)intB)charC)floatD)double
二、读程序写结果(每题5分,共20分)
1.#include
voidmain()
{intx=46278;
do{printf("%d*",x%10);x/=10;}while(x);}
2.#include
voidfun2()voidmain(void)
{staticinta=1;{inti;
a++;for(i=0;i<4;i++)fun2();
printf(“%d”,a);}}
3.#include
voidmain(void)
{inti,j=0;
for(i=1;i<=4;i++)switch(i%3){case0:
j++;
case1:
j++;
case2:
j++;}
printf("j=%d",j);
}
4.#include
intmodify(inta[]);
voidmain()intmodify(inta[])
{inti,a[]={1,2,3,4,5};{inti;
a[2]=modify(a);for(i=0;i<5;i++)a[i]=2*a[i];
for(i=0;i<=4;i++)printf("%5d",a[i]);return0;
}}
三、程序填空题(每空3分,共60分)
[程序填空题1]函数intfind_Max_Min(inta[],intn)的功能是:
找出n个元素的数组a中的最大元素和最小元素并输出,返回查找过程中元素的比较次数。
查找方法如下:
先将较大的数移到数组的后半区,较小的数移到数组的前半区,然后在前半区找出最小元素,在后半区找出最大元素。
intfind_Max_Min(inta[],intn)
{inti,Count=0,temp,Maxnum,Minnum;
for(i=0;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{Count=____
(2)____;Minnum=_____(3)_____?
a[i]:
Minnum;
Maxnum=_____(4)_____?
_______(5)_____:
Maxnum;}
printf(“Max=%d\nMin=%d\n”,Maxnum,Minnum);
returnCount;
}
[程序填空题2]某单位准备对指定的n名(n<80)候选人进行一次投票。
选举前事先印制了选票,投票者只需将选中者名下的圆圈涂黑即可。
规定每张选票上被涂黑的圆圈数不得超过3个,也不得少于1个,否则视为无效选票。
投票结束后,所有选票经计算机扫描处理,形成了描述选票状态的文本文件。
例如,n=8时所形成的文件格式如右所示。
其中,每行表示一张选票的数据,每列代表一位候选者的得票情况。
第i行第j列为1,表示第i张选票上投了第j名候选人1票。
函数statistic()的功能是从文件中读入选票数据,并统计每位候选者的得票数并存入candidate[],函数返回有效选票数。
intstatistic(FILE*fp,intcandidate[],intn)
{ charstr[80]; inti,tag=0,q=0;
for(i=0;iwhile(____
(1)____)
01011000
10010100
10011000
11111111
00000000
00111000
…
{ fgets(str,80,fp);/*读入一张选票数据*/
for(tag=0,i=0;____
(2)____;i++) if(str[i]=='1')tag++;
if(____(3)____)/*若是有效选票,则进行统计*/
{ ____(4)____;
for(i=0;i}
returnq;
}
[程序填空题3]函数DelA_insB(LinkedListLa,LinkedListLb,intkey1,intkey2,intlen)的功能是:
将线性表La中关键码为key1的结点开始的len个结点,按原顺序移至线性表Lb中关键码为key2的结点之前,若移动成功,则返回0;否则返回-1。
线性表的存储结构为带头结点的单链表。
typedifstructnode{intkey;structnode*next;}*LinkedList;
intDelA_InsB(LinkedListLa,LinkedListLb,intkey1,intkey2,intlen)
{LinkedListp,q,s,prep,pres;intk;
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;
return0;
}
[程序填空题4]一棵非空二叉树中“最左下”结点定义为:
若树根的左子树为空,则树根为“最左下”结点;否则,从树根的左子树根出发,沿结点的左孩子分支向下查找,直到某个结点不存在左孩子时为止,该结点即为此二叉树的“最左下”结点。
例如,下图所示的以A为根的二叉树的“最左下”结点为D,以C为根的子二叉树中的“最左下”结点为C。
函数BSTreeFind_Del(BSTreeT)的功能是:
若T指向一棵二叉树的根结点,则找出该结点的右子树上的“最左下”结点*p,并从树下删除以*p为根的子树,函树返回被删除子树的根结点指针;若该树根的右子树上不存在“最左下”结点,则返回空指针。
TypedefstructBSTNode{
intdata;
structBSTNode*left,*right;}*BSTree;//left,right为结点的左、右孩子指针
BSTreeFind_Del(BSTreeT)
{BSTreep,pre;
if(!
T)returnNULL;/*T指向的二叉树为空树*/
__
(1)__;if(!
p)returnNULL;
__
(2)____;
while(p){pre=p;p=__(3)___;}
if(__(4)__==T)pre->right=NULL;/*T的右子树根为“最左下”结点*/
else__(5)__=NULL;/*删除以“最左下”结点为根的子树*/
returnp;
}
四、程序设计题(共50分)
[程序设计题1(8分)]请设计递归函数voidreverse(char*s,intlen),其功能为逆置长度为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的整数。
设计函数voidChangeColor(intG[][20],intm,intn,inti0,intj0,intNewColor),该函数的功能是:
将指定点(i0,j0)所在的同色邻接区域(所有与点(i0,j0)同色的上、下、左、右可连通的点组成同色邻接区域)的颜色置换为给定的颜色值NewColor。
例如,一幅8×9像素的图像如左图所示。
设用户指定点(2,4),颜色值为0,其同色邻接区域如左图的阴影部分所示。
将上述同色区域的颜色替换为颜色值7所得的新图像如右图所示。
参考答案
一、选择题(每题2分,共20分)
1.C2.C3.B4.B5.A6.D7.A8.A9.D10.D
二、读程序写结果(每题5分,共20分)
1.8*7*2*6*4*2.23453.j=84.240810
三、程序填空题(每空3分,共60分)
[程序填空题1]
(1)a[i]>a[n-1-i]
(2)Count+2(3)a[i](4)a[n-1-i]>Maxnum(5)a[n-1-i]
[程序填空题2]
(1)!
feof(fp)
(2)i=1&&tag<=3
(4)q++(5)candidate[i]++
[程序填空题3]
(1)k(2)q=q->next(3)pres=Lb
(4)prep->next(5)s
[程序填空题4]
(1)p=T->right
(2)pre=T(3)p->left
(4)pre(5)pre->left
四、程序设计题(共50分)
[程序设计题1(8分)]
voidreverse(char*s,intlen)
{charch;
if(len<=1)return;
ch=*s;*s=*(s+len-1);*(s+len-1)=ch;
reverse(s+1,len-2);
}
[程序设计题2(12分)]
#include
intleap(inty)
{if(y%4==0&&y%100!
=0||y%400==0)return1;elsereturn0;
}
intf1(inty)
{ints=0,i;
for(i=1900;ireturns;
}
intday(inty,intm)
{if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)return31;
elseif(m==4||m==6||m==9||m==11)return30;
elseif(leap(y))return29;
elsereturn28;
}
voidmain()
{intyear,i,d,c=0;
scanf("%d",&year);
d=f1(year);//计算year年1-13与1900年1-1相差的天数
d=d+12;
for(i=1;i<=12;i++)
{if((d+1)%7==5)c++;
d=d+day(year,i);
}
printf("%d\n",c);
}
[程序设计题3(15分)]
#include
#include
structnode{intdata;structnode*next;};
voidInsertList(structnode*head,intx)
{structnode*p,*q,*pre;
p=(structnode*)malloc(sizeof(structnode));
p->data=x;
pre=head;q=head->next;
while(q&&q->datanext;}
p->next=pre->next;pre->next=p;
}
voidCreatList(structnode*head)
{intn;
scanf("%d",&n);
while(n){InsertList(head,n);scanf("%d",&n);}
}
voidDelList(structnode*head)
{structnode*p,*q;
p=head->next;
while(p&&p->next)
{if(p->data==p->next->data){q=p->next;p->next=q->next;free(q);}
elsep=p->next;
}
}
voidPrintList(structnode*head)
{structnode*p=head->next;
while(p){printf("%5d",p->data);p=p->next;}
printf("\n");
}
voidmain()
{structnode*head;
head=(structnode*)malloc(sizeof(structnode));
head->next=NULL;
CreatList(head);PrintList(head);
DelList(head);PrintList(head);
}
[程序设计题4(15分)]
voidChangeColor(intG[][20],intm,intn,inti0,intj0,intNewColor)
{
inttop=0,tx,ty,oldcolor=G[i0][j0];
structpoint{intx,y;}stack[400],temp;
if(G[i0][j0]==NewColor)return;
temp.x=i0;
temp.y=j0;
stack[0]=temp;
top++;
while(top)
{
top--;
tx=stack[top].x;ty=stack[top].y;
G[tx][ty]=NewColor;
if(tx-1>=0&&G[tx-1][ty]==oldcolor)
{temp.x=tx-1;temp.y=ty;stack[top]=temp;top++;}
if(tx+1{temp.x=tx+1;temp.y=ty;stack[top]=temp;top++;}
if(ty-1>=0&&G[tx][ty-1]==oldcolor)
{temp.x=tx;temp.y=ty-1;stack[top]=temp;top++;}
if(ty+1{temp.x=tx-1;temp.y=ty;stack[top]=temp;top++;}
}
}
姓名:
报考专业:
准考证号码:
密封线内不要写题
二O一三年招收硕士研究生入学考试试题
考试科目代码及科目名称:
855C语言程序设计
答题内容写在答题纸上,写在试卷或草稿纸上一律无效考完后试题随答题纸交回。
考试时间3小时,总分值150分。
一、选择题(每题2分,共20分)
1.C语言结构类型变量在程序执行期间()。
A)所有成员一起驻留在内存中。
B)只有一个成员驻留在内存中。
C)部分成员驻留在内存中。
D)没有成员驻留在内存中。
2.数组定义为“inta[4][5];”,下列哪一个引用是错误的()。
A)*aB)*(*(a+2)+3)C)&a[2][3]D)++a
3.结构变量stu,类型为STU,含有域major,下面哪条语句正确引用了major?
()
A)stu.majorB)stu->majorC)STU->majorD)STU.major
4.设函数fun和实参数组的说明形式为:
voidfun(charch,floatx[]);floata[10];
以下对函数的调用语句中,正确的是()。
A)fun("abc",a[]);B)t=fun('D',a);
C)fun('65',2.8);D)fun(32,a[10]);
5.下列语句中与语句while
(1){if(i>=100)break;s+=i;i++;}功能相同的是()。
A)for(;i<100;i++)s=s+i;B)for(;i<100;i++;s=s+i);
C)for(;i<=100;i++)s+=i;D)for(;i>=100;i++;s=s+i);
6.C语言中函数返回值的类型是由()决定的。
A)return语句中的表达式类型B)调用该函数的主调函数类型
C)定义函数时所指定的函数类型D)调用函数时临时
7.以下对枚举类型名的定义中正确的是()。
A)enuma={one,two,three};B)enuma{a1,a2,a3};
C)enuma={‘1’,’2’,’3’};D)enuma{“one”,”two”,”three”};
8.对于以下递归函数f,调用f(4),其返回值为()
intf(intn){if(n)returnf(n-1)+n;elsereturnn;}
A)10B)4C)0D)以上均不是
9.设整型变量i,j值均为3,执行了j=i++,j++,++i后,i,j的值是()。
A)3,3B)5,4C)4,5D)6,6
10.while(!
x)中的表达式(!
x)等价于()。
A)x!
=1B)x!
=0C)x==1D)x==0
二、阅读程序写出程序运行结果(每题5分,共20分)
1.
voidmain()
{intk=0;charc='A';
do{
switch(c++){
case'A':
k++;break;
case'B':
k--;
case'C':
k+=2;break;
case'D':
k=k%2;break;
case'E':
k=k*10;break;
default:
k=k/3;
}
k++;
}while(c<'G');
printf("k=