2019武汉科技大学C语言程序设计自命题试题及答案分析
C语言程序设计 真题 答案
C语言程序设计 真题 答案
2019年全国硕士研究生招生考试初试自命题试题
科目名称:C语言程序设计(□A卷√B卷)科目代码:855
考试时间:3小时 满分150分
可使用的常用工具:√无 □计算器 □直尺 □圆规(请在使用工具前打√)
注意:所有答题内容必须写在答题纸上,写在试题或草稿纸上的一律无效;考完后试题随答题纸交回。
一、选择题(共15小题,每小题2分,共30分)
1. 以下均是合法变量名的是( )。
A)#name total B)node value_max C)_var long D)stu-code a+b
2. 以下选项中不属于C语言类型的是( )。
A)short int B)unsigned long int C)char D)bool
3. 若有声明语句:int x; char y[20]; double z; 则正确的输入语句是( )。
A)scanf(“%d%c%le\n”,&x,&y,&z); B)scanf(“%2d%s%lf”,&x,&y,&z);
C)scanf(“%d%s%lf”,&x,y,&z); D)scanf(“%x%s%3.2f”,&x,y,&z);
4. 若a、b和t都为int变量,则下面不能交换变量a和b值的是( )。
A)t=a; a=b; b=t; B)a=t; t=b; b=a;
C)t=b; b=a; a=t; D)a=a+b; b=a-b; a=a-b;
5. 若有定义:int a=1,b=2; float x=3,w; 则合法的switch语句是( )。
A)switch(a) B)switch(b)
{ case 1: w=a/b; break; { case 1: z=a%b;
case 2: w=a%b; break; } case 2: z=a/b; break; }
C)switch (x) D)switch(a+b);
{ case 2: w=a%b;break; { case 3:
case 1: w=a/b; break; } case 2: w=a%b; break; }
6. 对下述程序段的描述正确的是( )。
scanf("%d,%d",&a,&b);
if(a>b) a=b; b=a; else a++; 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. 如果有定义:int x=0,s=0; 则下面程序段的执行结果是( )。
while(!x != 0) s+=x++;
printf(“%d”,s);
A)1 B)0 C)无限循环 D)控制表达式非法,无法编译
9. 下面各语句中,能正确进行字符串操作的语句是( )。
A)char a[10]={'A','B','C','D','\0'}; B)char a[10]; a="ABCDE";
C)char *p; *p="ABCDE"; D)char *s; scanf(“%s”, s);
10. 以下能对数组value进行正确初始化的语句是( )。
A)int value[2][ ]={{1,1},{2,2}}; B)int value[ ][3]={{1,,3},{4,5,6}};
C)int value[2][3]={1,2,3,4,5,6}; D)int value[ ][3]={{1},{4,6,}};
11. 函数fun和实参数组的声明形式为:void fun(char ch,float x[]); float a[5];
以下对函数的调用语句中,正确的是( )。
A)fun("a",a[]); B)t=fun('D',a); C)fun('65',2.8); D)fun(32,a[5]);
12. 设有定义int a[3][3];和函数调用语句sort(a,3); 则正确的函数声明是( )。
A)void sort(int a,n); B)void sort(int a[][],int n);
C)void sort(int a[][3],int n); D)void sort(int a[][3],n);
13. 有函数定义:int func(int *p),x和y是int型变量,则( )是正确的调用。
A)y=func(x); B)func(x); C)func()=x; D)y=func(&x);
14. 已知书籍结构定义如下,则对结构变量bk的正确赋值是( )。
struct BOOK{ struct { int year,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的语句是( )。
struct person{ char title[20]; int code; };
struct person book[5]={"Physics",17,"Math",18,"English",20,"History",18};
A)printf("%c",book[0].title[1]); B)printf("%c",book[1].title[4]);
C)printf("%c",book[2].title[7]); 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'){ ch-=30; if(ch>'Z') ch-=26; }
printf("%c\n",ch);
}
}
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;i
for(j=0;j
for(j=0;i
for(i=1;i
return s;
}
void main(void )
{ int t,a[3][4]={5,3,6,8,-2,-4,-7,9,1,0,7,2};
t=fun(a[0],3,4);
printf("t=%d\n",t);
}
4.
void move(int *arr,int n,int m)
{ 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);
}
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++ )
{ s = ① ; n = i ;
while ( ② ){ t=n%10; s=s- ③ ; ➃ ; }
if ( ➄ ) printf(″%d″, i );
}
}
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;
for (j=i+1; ② ;++j)
{ if( ③ ) min=j; else if(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]; r[n-i-1]=t; }
}
i++;
}
}//sort
3. 下面函数用来删除结点类型为intnode的链表中结点数据域值为x的一个结点。
struct intnode { int data; struct intnode *next; };
int deletenode( ① , int x)
{ struct intnode *p=*headp, *last;
while( ② ) { last=p; ③ ; }
if( ➃ )
{ if(p==*headp) *headp=p->next; else ➄ ;
free(p) ; 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 Distance(struct Point p[], int n); // 计算n个点与原点的距离
void Sort(struct Point p[], int n); //排序
void Output(struct Point p[], int n); //输出
4. 二叉排序树采用二叉链表存储,结点包含左孩子指针left,右孩子指针right和整数data,其定义为:struct Node{ int data; struct node *left, *right; };
请设计如下非递归算法SortTree按照从大到小输出非空二叉排序树所有结点的数据。
void SortTree(struct Node *root)
2019年全国硕士研究生招生考试初试自命题试题答案
科目名称:C语言程序设计(□A卷√B卷)科目代码:855
考试时间:3小时 满分150分
可使用的常用工具:√无 □计算器 □直尺 □圆规(请在使用工具前打√)
注意:所有答题内容必须写在答题纸上,写在试题或草稿纸上的一律无效;考完后试题随答题纸交回。
一、选择题(共15小题,每小题2分,共30分)
BDCBA DCBAC BCDDA
二、判断题(共10小题,每小题2分,共20分)
ⅩⅩⅩ√√ √Ⅹ√√√
三、读程序写出程序运行结果(共4小题,每小题5分,共20分)
1.CDEAZAB 2.TMJW 3.t=32 4.57924681013
四、程序填空题(共15个空,每空2分,共30分)
1.①I ②n ③t*t*t ➃n=n/10 ➄i==0
2.①i
3.①struct intnode **headp ②p&&p->data!=x;
③p=p->next ➃p ➄last->next=p->next
五、程序设计题(共4小题,前2小题各10分,后2小题各15分,共50分)
1.
#include
int main()
{ int n,a,b,c,t,m;
scanf("%d",&n);
a=n/100; b=n/10%10; c=n%10;
if(a
if(a
if(b
m=a*100+b*10+c;
printf("%d\n",m);
return 0;
}
2.
int fun(int a[],int n)
{ int i,*b;
b=(int *)malloc(n*sizeof(int));
for(i=0;i
for(i=0;i
for(i=0;i
free(b);
return i+1;
}
3.
#include
#include
struct Point{ double x,y,dis; };
void Distance(struct Point p[],int n)
{ int i;
for(i=0;i
}
void Sort(struct Point p[],int n)
{ int i,j;
struct Point t;
for(i=0;i
for(j=0;j
if(p[i].dis
}
void Output(struct Point p[],int n)
{ int i;
for(i=0;i
}
int main()
{ struct Point p[1000];
int n,i;
scanf("%d",&n);
for(i=0;i
Distance(p,n);
Sort(p,n);
Output(p,n);
return 0;
}
4.
void SortTree(struct Node *root)
{ struct Node *stack[1000],*p=root;
int top=0;
while(p) { stack[top++]=p; p=p->right; }
while(top>0)
{ p=stack[--top];
printf("%d",p->data);
p=p->leftt;
while(p){ stack[top++]=p; p=p->right; }
}
}
【25考研辅导课程推荐】:25考研集训课程,VIP领学计划,25考研VIP全科定制套餐(公共课VIP+专业课1对1) , 这些课程中都会配有内部讲义以及辅导书和资料,同时会有教研教辅双师模式对大家进行教学以及督学,并配有24小时答疑和模拟测试等,可直接咨询在线客服老师领取大额优惠券。
查看全文每日10 份 抢先预约