2019 年湖北武汉科技大学 C 语言程序设计考研真题及答案
一、选择题(共 15 小题,每小题 2 分,共 30 分)
)。
total
C)char
D)stu-code
B)unsigned long int
C)_var long
)。
1. 以下均是合法变量名的是(
B)node value_max
A)#name
2. 以下选项中不属于 C 语言类型的是(
A)short int
3. 若有声明语句:int x; char y[20]; double z; 则正确的输入语句是(
A)scanf(“%d%c%le\n”,&x,&y,&z);
C)scanf(“%d%s%lf”,&x,y,&z);
4. 若 a、b 和 t 都为 int 变量,则下面不能交换变量 a 和 b 值的是(
A)t=a; a=b; b=t;
C)t=b; b=a; a=t;
5. 若有定义:int a=1,b=2; float x=3,w; 则合法的 switch 语句是(
A)switch(a)
B)scanf(“%2d%s%lf”,&x,&y,&z);
D)scanf(“%x%s%3.2f”,&x,y,&z);
)。
B)a=t; t=b; b=a;
D)a=a+b; b=a-b; a=a-b;
B)switch(b)
D)bool
)。
a+b
)。
{
case 1:
w=a/b;
case 2: w=a%b;
break;
break;
}
C)switch (x)
{ case 1:
case 2:
D)switch(a+b);
z=a%b;
z=a/b; break; }
{ case 2:
case 1:
w=a%b;break;
w=a/b; break; }
{ case 3:
case 2:
w=a%b;
break; }
6. 对下述程序段的描述正确的是(
)。
scanf("%d,%d",&a,&b);
if(a>b)
printf("a=%d,b=%d",a,b);
a=b; b=a;
else a++; b++;
)。
B)若输入 5,4 则输出 a=4,b=5
D)有语法错误,不能通过编译
A)若输入 4,5 则输出 a=5,b=6
C)若输入 5,4 则输出 a=5,b=5
7. 以下正确的描述是(
A)从多层循环嵌套中退出时,只能使用 break 语句。
B)在循环体内使用 continue 和 break 语句,作用相同。
C)只能在循环体内和 switch 体内使用 break 语句。
D)continue 语句的作用是结束整个循环的执行。
8. 如果有定义:int x=0,s=0; 则下面程序段的执行结果是(
)。
while(!x != 0)
printf(“%d”,s);
s+=x++;
B)0
C)无限循环
D)控制表达式非法,无法编译
A)1
9. 下面各语句中,能正确进行字符串操作的语句是(
A)char a[10]={'A','B','C','D','\0'};
C)char *p;
10. 以下能对数组 value 进行正确初始化的语句是(
A)int value[2][ ]={{1,1},{2,2}};
C)int value[2][3]={1,2,3,4,5,6};
11. 函数 fun 和实参数组的声明形式为:void fun(char ch,float x[]); float a[5];
B)int value[ ][3]={{1,,3},{4,5,6}};
D)int value[ ][3]={{1},{4,6,}};
B)char a[10];
D)char *s; scanf(“%s”, s);
*p="ABCDE";
a="ABCDE";
)。
)。
)。
C)fun('65',2.8);
以下对函数的调用语句中,正确的是(
A)fun("a",a[]);
B)t=fun('D',a);
12. 设有定义 int a[3][3];和函数调用语句 sort(a,3); 则正确的函数声明是(
A)void sort(int a,n);
C)void sort(int a[][3],int n);
13. 有函数定义:int func(int *p),x 和 y 是 int 型变量,则(
A)y=func(x);
14. 已知书籍结构定义如下,则对结构变量 bk 的正确赋值是(
B)void sort(int a[][],int n);
D)void sort(int a[][3],n);
D)y=func(&x);
C)func()=x;
B)func(x);
)。
D)fun(32,a[5]);
)是正确的调用。
)。
int year,month,day; }publish; } bk;
struct {
struct BOOK{
A)bk.year=1998;
B)publish.year=1998;
C)year=1998;
D)bk.publish.year=1998;
15. 对于以下定义,能打印出字母 h 的语句是(
month=11;
day=11;
bk.month=11;
publish.month=11; publish.day=11;
bk.day=11;
)。
bk.publish.month=11;
bk.publish.day=11;
struct person{ char title[20];
struct person book[5]={"Physics",17,"Math",18,"English",20,"History",18};
int code; };
A)printf("%c",book[0].title[1]);
C)printf("%c",book[2].title[7]);
B)printf("%c",book[1].title[4]);
D)printf("%c",book[3].title[6]);
二、判断题(共 10 小题,每小题 2 分,共 20 分)
1. C 语言规定,在一个源程序中,main 函数的位置必须在最开始。
2. 表达式 s1= =s2 可以用来判断字符串 s1 与字符串 s2 是否相等。
3. C 语言中一个变量只能定义一次。
4. C 语言本身没有输入输出语句。
5. 函数调用时,函数名必须与所调用的函数名字完全一致。
6. 对结构变量 s 中成员 age 的引用可以采用表达式 s.age。
7. 在 C 语言中,形参是虚拟的,不占存储单元。
8. 全局变量和静态变量的初值是在编译时指定的。
9. 语句 fp=fopen("a:\aa.dat","ab");中变量 fp 的正确定义为:FILE *fp;
10. 若有定义:int a[4][5]; 则表达式 a+3 表示 a 数组第 3 行的首地址。
三、读程序写出程序运行结果(共 4 小题,每小题 5 分,共 20 分)
1.
void main( )
{
//输入:abcAxyz 回车
char ch=0;
while((ch=getchar())!='\n')
{
if(ch>='a'&&ch<='z'){
printf("%c\n",ch);
ch-=30;
if(ch>'Z') ch-=26;
}
}
}
2.
void main( )
{
char *name[4] ={"Tom","Mike","John","Wang"}, *p=name[0];
int i;
for(i=0;i<4;p=name[++i]) printf("%c",*p);
}
3.
int fun(int arr[],int m,int n)
{
int i,j,s=0;
for(i=0;iarr;p--)
*arr=array_end; m--;
*p=*(p-1);
move(arr,n,m);
}
void main()
{
int i,number[10]={1,3,5,7,9,2,4,6,8,10};
move(number,10,8);
for(i=0;i<10;i++)
printf("%d",number[i]);
}
四、程序填空题(共 15 个空,每空 2 分,共 30 分)
1.以下程序为输出所有的水仙花数(3 位数中各位上数字的立方和等于三位数自身)。
;
void main(void)
int i,s,n,t
{
for ( i=100 ; i<1000 ; i++ )
n = i
){ t=n%10; s=s- ③ ;
②
①
;
;
➄
)
printf(″%d″, i );
{
s =
while (
if (
➃ ;
}
}
}
2. 下面排序算法的思想是:第一趟比较将最小的元素放在 r[0]中,最大的元素放在 r[n-1]
中,第二趟比较将次小的放在 r[1]中,将次大的放在 r[n-2]中,…,依次下去,直到待
排序列为递增序。
void sort(int r[],int n)
{
int i=0,j,t,min,max;
while(
{
min=max=i;
①
)
②
;++j)
) min=j; else if(r[j]>r[max])
max=j; }
) { t=r[min]; r[min]=r[i]; r[i]=t; }
if(
for (j=i+1;
{
③
if(
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]; r[n-i-1]=t; }
}
i++;
}
}//sort
3. 下面函数用来删除结点类型为 intnode 的链表中结点数据域值为 x 的一个结点。
{
struct intnode
int deletenode(
{
intnode
struct intnode *next; };
int data;
①
*p=*headp, *last;
, int
x)
struct
while( ②
if(
{
➃
)
{
last=p;
③
;
}
)
if(p==*headp)
free(p)
;
*headp=p->next;
else
➄
;
return(1);
}
else return(0);
}
五、程序设计题(共 4 小题,前 2 小题各 10 分,后 2 小题各 15 分,共 50 分)
1. 设计程序:从键盘输入一个三位整数,然后将该三位整数的各位数字重新排列,输出重
新排列后的最大的三位整数。
2. 在数组 a 中含有 n 个整数,函数 fun 的功能是找出数组 a 中没有出现的最小正整数。例
如,数组 a 为{-8,5,1,3},则未出现的最小正整数是 2;又如数组 a 为{1,3,2},则未
出现的最小正整数是 4。
请采用尽量高效的算法完成函数 fun,其返回值就是未出现的最小正整数。
int fun(int a[], int n)
3.设计程序完成:在主函数中首先输入平面上 N(由键盘输入)个点的坐标(x,y),接着
调用 Distance 函数计算各点与原点的距离,然后调用 Sort 函数对所有点按与原点的距离从
大到小排序,最后调用函数 Output 输出排序后各点的坐标及距原点的距离。平面上的点用
结构体 Point 实现。各函数的声明如下:
void
void
void
Distance(struct Point p[], int n); // 计算 n 个点与原点的距离
Sort(struct Point p[], int n);
//排序
Output(struct Point p[], int n); //输出
4. 二叉排序树采用二叉链表存储,结点包含左孩子指针 left,右孩子指针 right 和整数 data
其定义为:struct Node{
请设计如下非递归算法 SortTree 按照从大到小输出非空二叉排序树所有结点的数据。
int data; struct node *left, *right; };
void SortTree(struct Node
*root)
答案
一、选择题(共 15 小题,每小题 2 分,共 30 分)
BDCBA
DCBAC
BCDDA
二、判断题(共 10 小题,每小题 2 分,共 20 分)
ⅩⅩⅩ√√
√Ⅹ√√√
三、读程序写出程序运行结果(共 4 小题,每小题 5 分,共 20 分)
1.CDEAZAB
2.TMJW
3.t=32
4.57924681013
四、程序填空题(共 15 个空,每空 2 分,共 30 分)
②n
②j
data!=x;
③p=p->next
③t*t*t
③r[j]next=p->next
➃n=n/10
➃min!=i
➄i==0
➄max==i
五、程序设计题(共 4 小题,前 2 小题各 10 分,后 2 小题各 15 分,共 50 分)
1.
#include
int main()
{
c=n%10;
b=n/10%10;
int n,a,b,c,t,m;
scanf("%d",&n);
a=n/100;
if(a0&&a[i]<=n) b[a[i]-1]=1;
}
}
3.
#include
#include
struct Point{
void Distance(struct Point p[],int n)
{ int i;
double x,y,dis;
};
for(i=0;i}
void Sort(struct Point p[],int n)
{ int i,j;
struct Point t;
for(i=0;i0)
{
stack[top++]=p;
p=stack[--top];
printf("%d",p->data);
p=p->leftt;
while(p){
stack[top++]=p;
}
}
p=p->right; }
p=p->right; }