武汉科技大学855C语言程序设计考研真题B卷Word文件下载.docx
《武汉科技大学855C语言程序设计考研真题B卷Word文件下载.docx》由会员分享,可在线阅读,更多相关《武汉科技大学855C语言程序设计考研真题B卷Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
b=a-b;
a=a-b;
5.若有定义:
inta=1,b=2;
floatx=3,w;
则合法的switch语句是(
A.
switch(a)
{
case1:
w=a/b;
break;
case2:
w=a%b;
}
B.
switch(b)
z=a%b;
case2:
z=a/b;
}
C.
switch(x)
break;
case1:
D.
switch(a+b);
case3:
6.对下述程序段的描述正确的是(
scanf("
%d,%d"
&
a,&
b);
if(a>
b)a=b;
elsea++;
b++;
printf("
a=%d,b=%d"
a,b);
A.若输入4,5则输出a=5,b=6
B.若输入5,4则输出a=4,b=5
C.若输入5,4则输出a=5,b=5
D.有语法错误,不能通过编译
7.以下正确的描述是(
A.从多层循环嵌套中退出时,只能使用break语句
B.在循环体内使用continue和break语句,作用相同
C.只能在循环体内和switch体内使用break语句
D.continue语句的作用是结束整个循环的执行
8.如果有定义:
intx=0,s=0;
则下面程序段的执行结果是(
while(!
x!
=0)s+=x++;
printf(“%d”,s);
A.1
B.0
C.无限循环
D.控制表达式非法,无法编译
9.下面各语句中,能正确进行字符串操作的语句是(
A.chara[10]={'
A'
'
B'
C'
D'
\0'
};
B.chara[10];
a="
ABCDE"
;
C.char*p;
*p="
D.char*s;
scanf(“%s”,s);
10.以下能对数组value进行正确初始化的语句是(
A.intvalue[2][]={{1,1},{2,2}};
B.intvalue[][3]={{1,,3},{4,5,6}};
C.intvalue[2][3]={1,2,3,4,5,6};
D.intvalue[][3]={{1},{4,6,}};
11.函数fun和实参数组的声明形式为:
voidfun(charch,floatx[]);
floata[5];
以下对函数的调用语句中,正确的是(
A.fun("
a"
a[]);
B.t=fun('
a);
C.fun('
65'
2.8);
D.fun(32,a[5]);
12.设有定义inta[3][3];
和函数调用语句sort(a,3);
则正确的函数声明是(
A.voidsort(inta,n);
B.voidsort(inta[][],intn);
C.voidsort(inta[][3],intn);
D.voidsort(inta[][3],n);
13.有函数定义:
intfunc(int*p),x和y是int型变量,则(
)是正确的调用。
A.y=func(x);
B.func(x);
C.func()=x;
D.y=func(&
x);
14.已知书籍结构定义如下,则对结构变量bk的正确赋值是(
structBOOK{struct{
intyear,month,day;
}publish;
}bk;
A.bk.year=1998;
bk.month=11;
bk.day=11;
B.publish.year=1998;
publish.month=11;
publish.day=11;
C.year=1998;
month=11;
day=11;
D.bk.publish.year=1998;
bk.publish.month=11;
bk.publish.day=11;
15.对于以下定义,能打印出字母h的语句是(
structperson{
chartitle[20];
intcode;
};
structpersonbook[5]={"
Physics"
17,"
Math"
18,"
English"
20,"
History"
18};
A.printf("
%c"
book[0].title[1]);
B.printf("
book[1].title[4]);
C.printf("
book[2].title[7]);
D.printf("
book[3].title[6]);
二、判断题(总题数:
10,分数:
20.00)
16.C语言规定,在一个源程序中,main函数的位置必须在最开始。
A.正确
B.错误
17.表达式s1==s2可以用来判断字符串s1与字符串s2是否相等。
18.C语言中一个变量只能定义一次。
19.C语言本身没有输入输出语句。
A.正确
B.错误
20.函数调用时,函数名必须与所调用的函数名字完全一致。
21.对结构变量s中成员age的引用可以采用表达式s.age。
22.在C语言中,形参是虚拟的,不占存储单元。
23.全局变量和静态变量的初值是在编译时指定的。
24.语句fp=fopen("
a:
\aa.dat"
"
ab"
);
中变量fp的正确定义为:
FILE*fp。
25.若有定义:
inta[4][5];
则表达式a+3表示a数组第3行的首地址。
三、编程题(总题数:
4,分数:
26.voidmain()//输入:
abcAxyz回车
{charch=0;
while((ch=getchar())!
='
\n'
)
{if(ch>
a'
&
ch'
Z'
)ch-=26;
%c\n"
ch);
}(分数:
5.00)
__________________________________________________________________________________________
正确答案:
(
CDEAZAB
27.voidmain()
{char*name[4]={"
Tom"
Mike"
John"
Wang"
},*p=name[0];
inti;
for(i=0;
i<
4;
p=name[++i])printf("
*p);
TMJW
28.intfun(intarr[],intm,intn)
{inti,j,s=0;
i<m;
i=i+m-1)
for(j=0;
j<n;
j++)s+=arr[i*n+j];
i<n;
j=j+n-1)
for(i=1;
i<m-1;
i++)s+=arr[i*n+j];
returns;
voidmain(void)
{intt,a[3][4]={5,3,6,8,-2,-4,-7,9,1,0,7,2};
t=fun(a[0],3,4);
t=%d\n"
t);
t=32
29.voidmove(int*arr,intn,intm)
{int*p,array_end=*(arr+n-1);
if(m<
=0)return;
for(p=arr+n-1;
p>
arr;
p--)*p=*(p-1);
*arr=array_end;
m--;
move(arr,n,m);
voidmain()
{inti,number[10]={1,3,5,7,9,2,4,6,8,10};
move(number,10,8);
10;
i++)printf("
%d"
number[i]);
57924681013
四、程序填空题(总题数:
3,分数:
30.以下程序为输出所有的水仙花数(3位数中各位上数字的立方和等于三位数自身)。
voidmain(void)
{inti,s,n,t;
for(i=100;
i<
1000;
i++)
{s=____①____;
n=i;
while(____②____){t=n%10;
s=s-____③____;
____④____;
if(____⑤____)printf(″%d″,i);
10.00)
填空项1:
__________________
(正确答案:
①I
②n
③t*t*t
④n=n/10
⑤i==0
31.下面排序算法的思想是:
第一趟比较将最小的元素放在r[0]中,最大的元素放在r[n-1]中,第二趟比较将次小的放在r[1]中,将次大的放在r[n-2]中,…,依次下去,直到待排序列为递增序。
voidsort(intr[],intn)
{inti=0,j,t,min,max;
while(____①____)
{min=max=i;
for(j=i+1;
____②____;
++j)
{if(____③____)min=j;
elseif(r[j]>
r[max])max=j;
if(____④____
){t=r[min];
r[min]=r[i];
r[i]=t;
if(max!
=n-i-1)
{if(____⑤____){t=r[min];
r[min]=r[n-i-1];
r[n-i-1]=t;
else{t=r[max];
r[max]=r[n-i-1];
i++;
}//sort(分数:
①i<n-i-1
②j<n-i
③r[j]<r[min]
④min!
=i
⑤max==i
32.下面函数用来删除结点类型为intnode的链表中结点数据域值为x的一个结点。
structintnode{intdata;
structintnode*next;
intdeletenode(____①____,intx)
{structintnode*p=*headp,*last;
while(____②____){last=p;
____③____;
if(____④____)
{if(p==*headp)*headp=p->
next;
else____⑤____;
free(p);
return
(1);
elsereturn(0);
①structintnode**headp
②p&
p->
data!
=x;
③p=p->
next
④p
⑤last->
next=p->
五、程序设计题(总题数:
50.00)
33.设计程序:
从键盘输入一个三位整数,然后将该三位整数的各位数字重新排列,输出重新排列后的最大的三位整数。
#include<
stdio.h>
intmain()
{intn,a,b,c,t,m;
n);
a=n/100;
b=n/10%10;
c=n%10;
if(a<
b){t=a;
c){t=a;
a=c;
c=t;
if(b<
c){t=b;
b=c;
m=a*100+b*10+c;
%d\n"
m);
return0;
34.在数组a中含有n个整数,函数fun的功能是找出数组a中没有出现的最小正整数。
例如,数组a为{-8,5,1,3},则未出现的最小正整数是2;
又如数组a为{1,3,2},则未出现的最小正整数是4。
请采用尽量高效的算法完成函数fun,其返回值就是未出现的最小正整数。
intfun(inta[],intn)(分数:
intfun(inta[],intn)
{inti,*b;
b=(int*)malloc(n*sizeof(int));
n;
i++)b[i]=0;
i++){if(a[i]>
0&
a[i]<
=n)b[a[i]-1]=1;
i++)if(b[i]==0)break;
free(b);
returni+1;
35.设计程序完成:
在主函数中首先输入平面上N(由键盘输入)个点的坐标(x,y),接着调用Distance函数计算各点与原点的距离,然后调用Sort函数对所有点按与原点的距离从大到小排序,最后调用函数Output输出排序后各点的坐标及距原点的距离。
平面上的点用结构体Point实现。
各函数的声明如下:
voidDistance(structPointp[],intn);
//计算n个点与原点的距离
voidSort(structPointp[],intn);
//排序
voidOutput(structPointp[],intn);
//输出(分数:
15.00)
#include<
math.h>
structPoint{doublex,y,dis;
voidDistance(structPointp[],intn)
{inti;
i++)p[i].dis=sqrt(p[i].x*p[i].x+p[i].y*p[i].y);
voidSort(structPointp[],intn)
{inti,j;
structPointt;
n-1;
i++)
j<
n-i-1;
j++)
if(p[i].dis<
p[i].dis){t=p[j];
p[j]=p[j+1];
p[j+1]=t;
voidOutput(structPointp[],intn)
(%lf,%lf)dis=%lf\n"
p[i].x,p[i].y,p[i].dis);
{structPointp[1000];
intn,i;
i++)scanf("
%lf%lf"
p[i].x,&
p[i].y);
Distance(p,n);
Sort(p,n);
Output(p,n);
36.二叉排序树采用二叉链表存储,结点包含左孩子指针left,右孩子指针right和整数data,其定义为:
structNode{intdata;
structnode*left,*right;
};
请设计如下非递归算法SortTree按照从大到小输出非空二叉排序树所有结点的数据。
voidSortTree(structNode*root)(分数:
voidSortTree(structNode*root)
{structNode*stack[1000],*p=root;
inttop=0;
while(p){stack[top++]=p;
p=p->
right;
while(top>
0)
{p=stack[--top];
p->
data);
p=p->
leftt;
while(p){stack[top++]=p;